首先当然要下载axis2的JAR包,导入工程,这里我们可以从网上下载eclipse插件来自动生成客户端代码,但有些情况下,比如需要调用大量的接口,如果采用这种方式的话管理起来将会很麻烦,这里介绍一下怎么来自己写客户端调用接口。
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.ServiceClient;
public class CallWebservice
{
private void invokeWebService(){
try{
//定义接口地址,这里最好把结尾的?wsdl去掉
String soapBindingAddress = "http://localhost:9139/axis2/services/test";
EndpointReference endpointReference = new EndpointReference(soapBindingAddress);
//创建一个OMFactory,下面的namespace、方法与参数均需由它创建
OMFactory factory = OMAbstractFactory.getOMFactory();
//创建命名空间,如果你调用的的WebService指定了targetNamespace这个属性的话,这儿要写上
OMNamespace namespace = factory.createOMNamespace("http://www.wbw.com", "");
//创建参数,可以为多个,这里的命名要与wsdl文件里的命名一致
OMElement nameElement = factory.createOMElement("ReqMsg", namespace);
//把变量绑定到参数,也可以用nameElement.setText("test");
nameElement.addChild(factory.createOMText(nameElement, "test"));
//创建方法,对应接口方法名,其中"test"为方法名
OMElement method = factory.createOMElement("test", namespace);
//把参数绑定到方法
method.addChild(nameElement);
//创建客户端实例
ServiceClient sender = new ServiceClient();
//绑定EndpointReference
sender.getOptions().setTo(endpointReference);
//这里设定为不检查可以避免EOF错误提示
sender.getOptions().setProperty(org.apache.axis2.transport.http.HTTPConstants.CHUNKED,
Boolean.FALSE);
method.build();
//看看发送的是什么
System.out.println(method.toString());
//发送并得到结果,至此,调用成功,并得到了结果
OMElement result = sender.sendReceive(method);
//把结果转化为字符串查看结果
System.out.println(result.toString());
}
catch (AxisFault ex){
ex.printStackTrace();
}
}
public static void main(String[] args){
CallWebservice cw = new Test2();
cw.invokeWebService();
}
}
如在调用中出现问题,欢迎留言讨论