原文:http://johntor.iteye.com/blog/253605
正在学习axis2,上面的文章对我们初学者来说是一个很大的帮助,便转了过来,非常感谢那些分享自己经验的人。
1.一个简单的服务类 ,并把它发布为web service服务。注意我的工程名为Test
package test;
public class TestService {
public int add(int a, int b) {
return a + b;
}
public String each(String name) {
return name + "你好";
}
}
2.应用两种方式实现客户端调用
import javax.xml.namespace.QName;
import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.OMNamespace;
import org.apache.axis2.AxisFault;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.client.ServiceClient;
import org.apache.axis2.rpc.client.RPCServiceClient;
/**
* axis2提供rpc和document两种style的实现。
* 在这里我们别对其验证。关于说明,请参看代码中的注释
* @author Administrator
*
*/
public class Client {
public static void main(String[] args) {
Client client = new Client();
//测试rpc方式
client.testRPC();
//测试document方式
client.testDocument();
}
/**
* 应用rpc的方式调用
* 这种方式就等于远程调用,即通过url定位告诉远程服务器,告知方法名称,参数等,
* 调用远程服务,得到结果。
*/
//下面这个annotaion是为了不让代码出现关于没有应用泛型的警告信息
//用elipse做编辑器的很容易理解。
@SuppressWarnings("unchecked")
public void testRPC() {
try {
RPCServiceClient serviceClient = new RPCServiceClient();
Options options = serviceClient.getOptions();
//指定访问的web service地址
EndpointReference targetEPR = new EndpointReference(
"http://localhost:8080/Test/services/TestService");
options.setTo(targetEPR);
//指定方法,注意指定命名空间
QName opPrint = new QName("http://test",
"add");
//确定参数类型和参数值
Class[] returnTypes = new Class[] { int.class };
Object obj[] = new Object[] { 1, 2 };
//得到返回结果,是一个数组
Object[] order = serviceClient.invokeBlocking(opPrint, obj,
returnTypes);
System.out.println(order[0]);
//下面是测试each方法的。和上面类似
opPrint = new QName("http://test","each");
returnTypes = new Class[] { String.class };
obj = new Object[] { "zhangyt" };
order = serviceClient.invokeBlocking(opPrint, obj,
returnTypes);
System.out.println(order[0]);
} catch (AxisFault e) {
e.printStackTrace();
}
}
/**
* 应用document方式调用
* 用ducument方式应用现对繁琐而灵活。现在用的比较多。因为真正摆脱了我们不想要的耦合
*/
public void testDocument() {
try {
ServiceClient sc = new ServiceClient();
Options opts = new Options();
//确定目标服务地址
opts.setTo(new EndpointReference(
"http://localhost:8080/Test/services/TestService"));
//确定调用方法
opts.setAction("urn:add");
sc.setOptions(opts);
//发送请求并并得到返回结果,注意参数生成方法的分析
OMElement res = sc.sendReceive(createPayLoad());
//值得注意的是,返回结果就是一段由OMElement对象封装的xml字符串。
//我们可以对之灵活应用,下面我取第一个元素值,并打印之。因为调用的方法返回一个结果
res.getFirstElement().getText();
System.out.println(res.getFirstElement().getText());
} catch (AxisFault e) {
e.printStackTrace();
}
}
/**
* ServiceClient 中 sendReceive(OMElement args) 方法参数的生成
* @return
*/
public static OMElement createPayLoad(){
OMFactory fac = OMAbstractFactory.getOMFactory();
//指定命名空间
OMNamespace omNs = fac.createOMNamespace("http://test", "nsl");
//指定方法
OMElement method = fac.createOMElement("add",omNs);
//指定方法的参数
OMElement value = fac.createOMElement("value",omNs);
value.setText("1");
method.addChild(value);
OMElement value1 = fac.createOMElement("value",omNs);
value1.setText("2");
method.addChild(value1);
//返回方法(实际上就是OMElement封装的xml字符串)
return method;
}
}
注意上面实现document方式调用的时候,只测试了服务类中的add方法。这个方法都用了,each方法调用的写法就可知比这个还要简单。
分享到:
相关推荐
【标题】中的“基于axis2实现的webservice简单实现(客户端+服务端)”表明了本文将探讨如何使用Apache Axis2框架来创建和消费Web服务。Apache Axis2是Apache软件基金会开发的一个Web服务引擎,它提供了高效且灵活的...
在开发Axis2客户端时,正确地引入所需的jar包是至关重要的,因为这些库提供了与服务交互所需的各种功能。以下是关于Axis2客户端需要的jar包及其功能的详细解释: 1. **axis2-adb.jar**:这个jar包包含了Axis2的数据...
3. **MTOM/XOP优化**:Message Transmission Optimization Mechanism (MTOM) 和XOP (XML-binary Optimized Packaging) 是两种提高Web服务传输效率的技术,Axis2客户端支持这两种机制,能有效地处理二进制数据。...
在Java开发中,CXF和Axis是两种广泛使用的Web服务框架。CXF主要用来创建和消费SOAP和RESTful Web服务,而Axis则是Apache组织早期推出的一款Web服务框架,主要用于SOAP服务。本文将深入探讨如何使用CXF客户端调用Axis...
标题中的“用脚本生成axis2...总的来说,通过脚本生成Axis2客户端是Web服务客户端开发的一种高效方式,尤其适用于快速集成和测试。在实际项目中,开发者可以根据需求选择合适的生成方法,平衡代码简洁性和功能复杂性。
- WSDL2Java和Java2WSDL工具:这两个工具是Axis1.4的核心部分,它们帮助开发者在WSDL和Java代码之间转换。 - JAX-WS(Java API for XML Web Services):这是Java平台标准,用于创建和处理Web服务,它是Axis2的...
压缩包子文件的文件名称列表中,"org.apache.axis2.eclipse.codegen.plugin_1.7.7.jar"和"org.apache.axis2.eclipse.service.plugin_1.7.7.jar"是Axis2插件的两个组件。前者专注于代码生成,即从WSDL生成服务端和...
在axis2+spring的环境下,可以通过两种方式处理session: - **SOAP Header**:可以将session信息封装在SOAP消息的Header部分,每次请求时携带。 - **Cookie**:客户端和服务端可以通过Cookie来维护会话状态,但...
总结起来,AXIS2 RCP/literal样式中的两种MESSAGE定义方式对于开发和调试SOAP Web服务客户端至关重要。硬编码XML字符串适用于简单场景,而JOM更适合处理复杂的业务逻辑和数据结构。TCPMon作为一个实用的辅助工具,...
总结起来,Axis2提供了多样化的Web服务实现方式,适应不同开发需求。选择合适的方式取决于项目的规模、性能要求以及团队对XML处理的熟悉程度。理解并掌握这些技术,对于提升Java Web服务开发的效率和质量具有重要...
在IT行业中,Web服务是应用程序之间进行通信的一种标准方法,而Axis和Axis2是两种流行的Java SOAP(简单对象访问协议)框架,用于构建和消费Web服务。本文将深入探讨这两个API,以及它们在Web服务开发中的作用。 ...
2. **服务部署**:Axis2支持两种部署方式——存档部署和热部署。存档部署通过将服务打包为`.aar`文件进行部署,而热部署允许直接通过类路径加载服务。 3. **模块**:模块是Axis2中的可插拔组件,可以添加额外的功能...
在Java世界中,Web服务的开发是一项常见的任务,而Seasar2 Axis2项目提供了一种高效且灵活的方式来实现这一目标。Seasar2是一个全面的Java应用框架,它包含了诸如数据库访问、事务管理、权限控制等多方面的功能,而...
Apache Axis2是Web服务的实现框架,而Web服务本身则是一种允许不同系统之间交换数据的标准协议。在Java开发中,Axis2常被用来简化Web服务的创建和消费过程,使得不同编程语言和平台之间的通信变得可能。 在压缩包子...
使用Axis客户端,开发者可以轻松地集成远程服务到自己的应用程序中,使得不同系统之间的交互变得无缝。 1. **rt.jar**:这是一个运行时库,包含了Java标准版(JRE)的基础类库。在Java应用程序中,rt.jar是Java运行...
11. **代码第一(Code First)和WSDL First**:Axis2支持两种开发模式,即根据已有代码生成WSDL(Code First)和根据WSDL生成代码(WSDL First)。 12. **SOAP版本支持**:Axis2支持SOAP 1.1和1.2,能够处理不同...
标题“Axis2教程和java调用webservice的各种方法总结”表明了本文档主要聚焦于两个核心内容:一是Axis2框架的使用教程,二是Java语言调用Web服务的不同方法的综合概述。 描述中的“Axis2教程”暗示了会详细讲解Axis...
调用Web服务通常分为两种方式:同步调用和异步调用。 - **同步调用**:客户端发送请求,等待服务端返回响应,完成一次交互。 - **异步调用**:客户端发送请求后不等待响应,而是通过回调机制处理服务端的返回。 ...
开发者可以通过两种方式在Axis2上创建服务:Service Skeleton和服务Archive。Service Skeleton是通过WSDL自动生成的Java接口,而服务Archive则是打包服务的所有依赖项到一个单一的文件中。 7. **扩展机制**: ...