WebService客户端代码生成方式总结

上传人:夏** 文档编号:565033373 上传时间:2024-03-06 格式:DOC 页数:4 大小:26.51KB
返回 下载 相关 举报
WebService客户端代码生成方式总结_第1页
第1页 / 共4页
WebService客户端代码生成方式总结_第2页
第2页 / 共4页
WebService客户端代码生成方式总结_第3页
第3页 / 共4页
WebService客户端代码生成方式总结_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《WebService客户端代码生成方式总结》由会员分享,可在线阅读,更多相关《WebService客户端代码生成方式总结(4页珍藏版)》请在金锄头文库上搜索。

1、一、Webservice可以使用的框架很多。AXIS、CXF 、JAX、XFIRE,这些框架都可以根据wsdl文件生成ws的服务器和客户端代码。二、Ws的调用方式有三种,http post、http get、soap post。本人建议使用http post,他访问远程ws接口的速度比使用soap post要快些。象使用axis框架实现soap post方式来说,简单的接口还好,对于使用了大量代理类及带有soaphead的ws,且还要在本地生成一大堆JAVA类来和服务端对应。特别如下这种情况,axis好像无法实现。Soaphead如下0039434454 67677象这种只能根据.addHea

2、d(ElementSoapHead)来增加报头。但这个报头没有根元素,无法创建一个这种Element。下面就如何书写客户端代码详细讲解下。1.通过发送http post请求来调用ws。SOAPUI是个不错的工具,他可以根据wsdl文件生成测试例子。另外重要的是,它可以生成wsdl对应的请求报文和响应报文。这样我们在调用别人写的ws时,不管多复杂的ws都可以简单的调用。首先按照SOAPUI显示的请求报文格式拼装我们的请求报文,使用对象来发送http post请求。然后使用输出流、输出流获得响应报文,再用Element解析报文得到要取的数据。示例代码如下:JAVA类SoapInvoke:packa

3、ge test;importimportimportimportpublic class SoapInvoke public static void main(String args) try soapSpecialConnection(); catch (Exception e) e.printStackTrace(); public static void soapSpecialConnection() throws Exception /拼装soap请求报文 StringBuilder sb = new StringBuilder(); StringBuilder soapHeader

4、= new StringBuilder(); soapHeader.append(); soapHeader.append(); soapHeader.append(zhouyun); soapHeader.append(123); soapHeader.append(); soapHeader.append(); soapHeader.append(); soapHeader.append(); soapHeader.append(zhouyun); soapHeader.append(); soapHeader.append(); soapHeader.append(); soapHead

5、er.append(); /设置soap请求报文的相关属性 String url=http:/localhost:8080/CXFServer/SayHelloService; URL u = new URL(url); HttpURLConnection conn = (HttpURLConnection) u.openConnection(); conn.setDoInput(true); conn.setDoOutput(true); conn.setUseCaches(false); conn.setDefaultUseCaches(false); conn.setRequestPro

6、perty(Host, localhost:8080); conn.setRequestProperty(Content-Type, text/xml; charset=utf-8); conn.setRequestProperty(Content-Length, String.valueOf(soapHeader.length(); conn.setRequestProperty(SOAPAction, ); conn.setRequestMethod(POST); /定义输出流 OutputStream output = conn.getOutputStream(); if (null !

7、= soapHeader) byte b = soapHeader.toString().getBytes(utf-8); /发送soap请求报文 output.write(b, 0, b.length); output.flush(); output.close(); /定义输入流,获取soap响应报文 InputStream input = conn.getInputStream(); int c = -1; /sb为返回的soap响应报文字符串 while (-1 != (c = input.read() sb.append(char)c); input.close(); 2.通过axi

8、s来调用ws。对于使用了复杂代理类的ws,我们在调用时可以使用AXIS、CXF、xfire架包来自动生成ws客户端JAVA代码。下面以axis为例,来展示。服务器端主要JAVA代码package test;WebServicepublic class SayHelloImpl implements SayHelloService public wsResult sayHelloMr(String name) wsResult retObj = new wsResult();retObj.setResultVal(Hello,mr + name);return retObj;public wsR

9、esult sayHelloMiss(InputClass input) wsResult retObj = new wsResult();retObj.setResultVal(Hello,Miss + input.getName();return retObj;客户端:1)新建wsdltojava.bat文件,放到C盘,文件内容如下:set Axis_Lib=E:axis-bin-1_4axis-1_4libset Axis_Servlet=http:/localhost:8080/CXFServer/SayHelloService?wsdl其中Axis_Lib为本地axis架包的路径;A

10、xis_Servlet为本地ws的URL,这里也可以设置为此ws服务器对应的wsdl文件的路径。2)在DOS里,执行wsdltojava.bat。在C盘根目录下就会生成JAVA客户端的代码了3)新建一个java类Invoke,代码如下:package test;public class invoke public static void main(String args) throws Exception getResult();public static void getResult() try SayHelloImplServiceLocator svc = new SayHelloImp

11、lServiceLocator();SayHelloService stub = svc.getSayHelloImplPort();/调用 /WsResult wsResult = stub.sayHelloMr(zhouyun);InputClass inputClass=new InputClass();inputClass.setName(zhouyun);WsResult wsResult = stub.sayHelloMiss(inputClass);System.out.println(结果是: + wsResult.getResultVal(); catch (Exception e) System.out.println(e);Ps: 1.通过命令生成的java客户端代码里SayHelloImplServiceLocator类是调用ws的入口。2.执行此类,Myelipse控制台会输出Hello,Miss zhouyun,代表调用成功。3.象JAX、xfire架包生成的客户端代码不能实现代理类输入、输出,只可以实现简单数据类型输入、输出,象String、Map、AaaryList等等。只有axis可以实现代理类的输入、输出。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > 总结/计划/报告

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号