常见Webservice客户端调用方式

webservice客户端调用方法总结
1、AXIS调用

a、直接调用。{
适合比较那种返回比较简单的数据的service, 比如,天气预报,这些内容肯定可以通过一个很简单的xml来返回。
Service service = new Service() ;
                Call call = (Call)service.createCall() ;  
                call.setTargetEndpointAddress(PntCodeTypeManager.getInstance().getTypeValue("TUXEDO_CONFIG", "URL")) ;  
                call.setOperationName("orderFlowSumReq") ;
                call.addParameter("v-ORDER-FLOW-SUM-XML-REQ",org.apache.axis.encoding.XMLType.XSD_STRING,javax.xml.rpc.ParameterMode.IN) ;  
                call.setReturnType(XMLType.XSD_STRING) ;  
                call.setUseSOAPAction(true) ;  
                String result = (String) call.invoke(new Object[]{xml}) ;

b、通过wsdl2java工具生成调用代码。{
打开控制台,进入axis2-1.4/bin目录
wsdl2java.bat -uri http://www.webxml.com.cn/WebServices/IpAddressSearchWebService.asmx?wsdl -p ws.clinet.axis2
}


2、xfire调用

a、通过WSDL地址来创建动态客户端。
{
Client client = new Client(new URL("http://127.0.0.1:8080/XFire_demo/services/XFireServer?wsdl")); 
        Object[] results11 = client.invoke("sayHello", new Object[]{"Jadyer22"}); 
        System.out.println(results11[0]); 
}
b、通过服务端提供的端口来创建客户端

/**
* 通过Web服务端提供的接口来创建客户端
* @see 客户端必须提供一个与服务端完全一致的接口,包名也要一致
* @see 在本例中,需要在客户端(即该项目)中提供HelloService.java接口,以及Person和User两个POJO类
* @see 并且此时需要在项目中引入XFire 1.2 Core Libraries和XFire 1.2 HTTP Client Libraries
*/ 
XFireProxyFactory factory = new XFireProxyFactory(); 
        //通过proxyFactory,使用服务模型serviceModel和服务端点URL(用来获得WSDL)  
        //得到一个服务的本地代理,这个代理就是实际的客户端  
        HelloService client = (HelloService)factory.create(serviceModel, serviceURL); 
/**
        * Invoke the service
        * @see 调用服务的本地代理(即实际的客户端)中的方法,便得到我们需要的WebServcie
       */ 
         
        /*--处理简单对象--*/ 
        String serviceResponse = client.sayHello("Jadyer11"); 
        System.out.println(serviceResponse); 
         
        /*--处理对象--*/ 
        User u = new User(); 
       u.setName("Jadyer99"); 
        Person pp = client.getPerson(u); 
        System.out.println(pp.getName()); 
         
        /*--处理List--*/ 
        List<Person> personList = client.getPersonList(24, "Jadyer88"); 
        for(Person p : personList){ 
            System.out.println(p.getName()); 
        } 

c、基于XFire框架利用ant构建WebService的客户端程序 ,
   详细配置:可参考博客http://blog.csdn.net/emailed/article/details/4267932

3、HttpClient调用
用到的jar文件:commons-httpclient-3.1.jar
{
然后定义一个PostMethod,这时需要指定web服务的Url;


PostMethod postMethod = new PostMethod(“http://www.webxml.com.cn/WebServices/IpAddressSearchWebService.asmx”);

然后把Soap请求数据添加到PostMethod中


byte[] b = soapRequestData.getBytes("utf-8");
InputStream is = new ByteArrayInputStream(b,0,b.length);
RequestEntity re = new InputStreamRequestEntity(is,b.length,"application/soap+xml; charset=utf-8");
postMethod.setRequestEntity(re);

最后生成一个HttpClient对象,并发出postMethod请求


HttpClient httpClient = new HttpClient();
statusCode = httpClient.executeMethod(postMethod);
String soapRequestData =  postMethod.getResponseBodyAsString();
}

总结
针对某种工具搭建的Web Service服务可能有与其对应的更简单的调用方法,在这里没有做描述,上述的调用web服务的方法是通用的。
上述三种方法中使用httpclient应该是比较灵活,但是开发效率低,难度大,使用Xfire和axis2比较容易,开发速度快,但是axis2通用性不好,有的web服务用axis2不好用。httpclient和Xfire通用性比较好,鉴于以上特点推荐使用Xfire

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页