最近在学习WebService的相关知识,Axis作为WebService的一个优秀框架,现在对两个Axis版本对于WebService调用做一个笔记,从代码中总结两者之间的差异。
1.编写Axis客户端调用WebService
public static void main(String[] args) {
// TODO Auto-generated method stub
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>/*
<span style="white-space:pre"> </span>在本文章中,这个wsdl的地址是我自己写的一个简单的"HelloWorld",可替换为您可用的WebService的URL做测试之用
<span style="white-space:pre"> </span>*/
String endpoint="http://localhost:8080/WebServiceProject/services/Greet?wsdl";
try{
<pre name="code" class="java"><span style="white-space:pre"> </span>//定义Service对象
<span style="white-space:pre"> </span>Service service=new Service();
<span style="white-space:pre"> </span> <pre name="code" class="java"><span style="white-space:pre"> </span>//从service中获得call对象<span style="font-family: Arial, Helvetica, sans-serif;"> </span>
Call call=(Call) service.createCall();
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>//设置WebService的URL
call.setTargetEndpointAddress(endpoint);
//设置调用的operation(即对应的方法)名称
call.setOperationName("sayHello");
//设置operation对应的参数名,参数的数据类型,参数的模式
call.addParameter("in0",org.apache.axis.encoding.XMLType.XSD_STRING , javax.xml.rpc.ParameterMode.IN);
//设置的返回值类型
call.setReturnType(XMLType.XSD_STRING);
//
call.setUseSOAPAction(true);
//调用call的invoke()方法调用接口以获得返回参数
String result=(String) call.invoke(new String[]{"123"});
<span style="white-space:pre"> </span>//输出结果
System.out.println(result);
}catch(Exception e){
e.printStackTrace();
}
}
}
2.编写Axis2客户端调用WebService
public static void main(String[] args) {
// TODO Auto-generated method stub
String url="http://localhost:8080/WebServiceProject/services/Greet?wsdl";
try {
RPCServiceClient serviceClient=new RPCServiceClient();
EndpointReference targetEPR=new EndpointReference(url);
Options options=serviceClient.getOptions();
options.setTo(targetEPR);
options.setAction("sayHello");
QName qname=new QName("http://beans","sayHello");
Object[] params=new Object[]{"name"};
Class[] returnType=new Class[]{String.class};
Object[] response=serviceClient.invokeBlocking(qname,params,returnType);
String rspStr=(String)response[0];
System.out.println(rspStr);
} catch (AxisFault e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}