以往在FTPC里创建WebService是用jaxrpc,但是这次服务端的返回解析不了,而使用jaxrpc对返回值自己解析也不好操作,测试过axis2之后,觉得还不错。
1、使用wsdl2java自动生成java代码
进入Windows控制台,执行如下命令来生成WebService的客户端代码:
%AXIS2_HOME%\bin\wsdl2java -uri http://127.0.0.1:8080/awyb/services/mySoapService?wsdl -p client -s -o stub
其中-uri参数指定了wsdl文件的路径,可以是本地路径,也可以是网络路径。-p参数指定了生成的Java类的包名,-o参数指定了生成的一系列文件保存的根目录。在执行完上面的命令后,我们就会发现在当前目录下多了个stub目录,在./stub/src/client目录可以找到对应的客户端调用文件,这些文件复杂调用WebService,我们可以在程序中直接使用这些文件
2、引入Axis2的jar包,开发测试的时候可以建library,部署的时候放到SOS的lib下面即可,不用担心jar包冲突
3、需要引入的jar
其中引入dom4j是因为解析服务端返回的报文出错,自己手写的把XML转换成对象的解析语句要用到。
其他的是axis2本身要用到的jar包
4、服务端反应收不到请求对象,要求将HTTP请求头设为:Content-Type: text/xml; charset=UTF-8
修改方法:
_serviceClient.getOptions().setSoapVersionURI(org.apache.axiom.soap.SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI);
如果使用SOAP11Constants(SOAP 1.1),HTTP请求头如下:
- POST /test HTTP/1.1
- Content-Type: text/xml; charset=UTF-8
- SOAPAction: "urn:add"
- User-Agent: Axis2
- Host: 146.11.42.87:9876
- Transfer-Encoding: chunked
如果使用SOAP12Constants(SOAP 1.2) ,HTTP请求头如下:
- POST /test HTTP/1.1
- Content-Type: application/soap+xml; charset=UTF-8; action="urn:add"
- User-Agent: Axis2
- Host: 146.11.42.87:9876
- Transfer-Encoding: chunked
如果不设置这个参数,HTTP请求头如下(和SOAP 1.1是一样的,可以确认默认使用SOAP 1.1):
- POST /test HTTP/1.1
- Content-Type: text/xml; charset=UTF-8
- SOAPAction: "urn:add"
- User-Agent: Axis2
- Host: 146.11.42.87:9876
- Transfer-Encoding: chunked
HTTP响应头中的Content-Type字段也是一样的