日期:2014-05-17  浏览次数:20708 次

客户端使用何种方式调用webservice服务?
知道了wsdl地址,因为参数都是基本类型,所以使用javax.xml.soap 包下的api自己发送SOAP消息,解析响应数据 。
但速度是相当的慢!!
如果使用xfire或axis2等webservice框架效率会不会有所提升?
有没有不是基于XML实现的、效率比较高的webservice调用方式?
各位前辈提提意见,小子先行谢过

------解决方案--------------------
速度是没有办法控制
------解决方案--------------------
探讨
知道了wsdl地址,因为参数都是基本类型,所以使用javax.xml.soap 包下的api自己发送SOAP消息,解析响应数据 。
但速度是相当的慢!!
如果使用xfire或axis2等webservice框架效率会不会有所提升?
有没有不是基于XML实现的、效率比较高的webservice调用方式?
各位前辈提提意见,小子先行谢过

------解决方案--------------------
Java调用以WSDL形式发布的web service有三种方式(你知道的,这供初学者学习)
1,直接AXIS调用远程的web service
我觉得这种方法比较适合那些高手,他们能直接看懂XML格式的WSDL文件,我自己是看不懂的,尤其我不是专门搞这行的,即使一段时间看懂,后来也就忘记了。直接调用模式如下:
Java code
import java.util.Date;
import java.text.DateFormat;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import javax.xml.namespace.QName;
import java.lang.Integer;
import javax.xml.rpc.ParameterMode;

public class caClient {

public static void main(String[] args) {

try {
String endpoint = "http://localhost:8080/ca3/services/caSynrochnized?wsdl";
//直接引用远程的wsdl文件
//以下都是套路 
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(endpoint);
call.setOperationName("addUser");//WSDL里面描述的接口名称
call.addParameter("userName", org.apache.axis.encoding.XMLType.XSD_DATE,
javax.xml.rpc.ParameterMode.IN);//接口的参数
call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);//设置返回类型

String temp = "测试人员"; 
String result = (String)call.invoke(new Object[]{temp});
//给方法传递参数,并且调用方法
System.out.println("result is "+result);
}
catch (Exception e) {
System.err.println(e.toString());
}
}
}