用Axis2创建调用webservice的客户端,创建java工程,引入以下axis2相关的jar包
axiom-api-1.2.11.jar
axiom-impl-1.2.11.jar
axis2-adb-1.5.5.jar
axis2-kernel-1.5.5.jar
axis2-transport-http-1.5.5.jar
axis2-transport-local-1.5.5.jar
commons-codec-1.3.jar
commons-httpclient-3.1.jar
commons-io.jar
commons-logging-1.1.1.jar
httpcore-4.0.jar
mail-1.4.jar
neethi-2.0.5.jar
wsdl4j-1.6.2.jar
XmlSchema-1.4.3.jar
创建调用服务类,应用axis2提供的类实现调用服务,代码如下:
package com.test;
importjava.util.Iterator;
importjavax.xml.namespace.QName;
importorg.apache.axiom.om.OMAttribute;
importorg.apache.axiom.om.OMElement;
importorg.apache.axis2.AxisFault;
importorg.apache.axis2.addressing.EndpointReference;
importorg.apache.axis2.client.Options;
importorg.apache.axis2.rpc.client.RPCServiceClient;
public classCallWebservice {
public StringgetData(String id,String name) {
String result=null;
//webService的调用地址
String srvcUrl ="http://localhost:8082/axis2/services/MyService";
//操作的命名空间+“:”+操作名
QName qname = new QName("http://test.jax.com", "getData");
//传递的参数对象集
Object param[] = new Object[] { id,name};
try {
//实例化远程服务调用客户端对象
RPCServiceClient client = new RPCServiceClient();
//实例化Options对象
Options options = new Options();
//设置Options对象的连接终端地址
options.setTo(newEndpointReference(srvcUrl));
//设置Options对象的操作事件对象
options.setAction("urn:getData");
//为远程服务调用客户端对象设置Options子对象
client.setOptions(options);
//传递参数,调用服务
OMElement element =client.invokeBlocking(qname, param);
result=element.getFirstElement().getText();
}
catch (AxisFault e) {
e.printStackTrace();
}
return result;
}
//测试
public static voidmain(String[] args) {
CallWebservice client=new CallWebservice();
String rs =client.getData("1","张三");
System.out.println(rs);
}
}
代码说明请看注释。
还有一种调用方式是通过axis2工具生成stub类,然后调用webservice,
打开cmd命令窗口,进入axis2的bin目录,输入命令:wsdl2java -uri http://localhost:8082/axis2/services/MyService?wsdl-p client -s -o stub
如图
其中-url参数指定了wsdl文件的路径,可以是本地路径,也可以是网络路径。-p参数指定了生成的Java类的包名,-o参数指定了生成的一系列文件保存的根目录。在执行完上面的命令后,读者就会发现在当前目录下多了个stub目录,在."stub"src"client目录可以找到一个MyServiceStub.java文件,该文件复杂调用WebService,然后可以在程序中直接使用这个类,通过stub调用webservice代码如下:
package client;
import java.rmi.RemoteException;
importorg.apache.axis2.AxisFault;
importclient.MyServiceStub.GetDataResponse;
public class CallService {
publicstatic void main(String[] args){
//MyServiceStub中生成了一个getData(GetData getData)的方法
//该方法的内部实现了调用发布的webservice服务中的getData()方法
//首先创建参数对象
MyServiceStub.GetData getData = new MyServiceStub.GetData();
//给参数赋值
getData.setId("1");
getData.setName("张三");
try{
//实例化stub类
MyServiceStubstub = new MyServiceStub();
try{
//调用服务方法
GetDataResponser s = stub.getData(getData);
//返回值为String
Stringstr = rs.get_return();
System.out.println(str);
}catch (RemoteException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
}catch (AxisFault e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
}
}