现在Axis、Axis2都是同时支持SOAP1.1和SOAP1.2的。即在服务器端发布一个WebService服务之后,客户端既可以通过SOAP1.1版本来访问服务器的服务,也可以通过SOAP1.2版本来访问服务器的服务。
如果客户端不指定SOAP版本,则无论是用Axis还是Axis2编写的客户端,默认使用的都是SOAP1.1版本,如果某个服务端仅支持SOAP1.2的,则在服务的交互过程中会报错。因此较好的办法是事先知道服务器端所支持的SOAP版本,或者通过判断服务器端的SOAP版本,来确定使用哪个版本的SOAP发送请求。
以下将客户端指定的SOAP协议版本代码整理一下,以备以后查阅。
Axis:
org.apache.axis.client.Service service = new org.apache.axis.client.Service();
org.apache.axis.client.Call call = service.createCall();
//默认版本为SOAP1.1
//以下设置为SOAP1.2
call.setSOAPVersion(org.apache.axis.soap.SOAPConstants.SOAP12_CONSTANTS);
//以下设置为SOAP1.1
call.setSOAPVersion(org.apache.axis.soap.SOAPConstants.SOAP11_CONSTANTS);
//其他设置和调用代码
//call.setXXX(...)
//call.invoke(...)
Axis2:
org.apache.axis2.rpc.client.RPCServiceClient serviceClient = new org.apache.axis2.rpc.client.RPCServiceClient();
org.apache.axis2.client.Options options = serviceClient.getOptions();
//默认版本为SOAP1.1
//以下设置为SOAP1.2
options.setSoapVersionURI(org.apache.axiom.soap.SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI);
//以下设置为SOAP1.1
options.setSoapVersionURI(org.apache.axiom.soap.SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI);
//其他设置和调用代码
//options.setXXX(...)
//serviceClient.invokeBlocking(...)
通过wsdl2java 命令 生成的stub客户端 设置soap协议
//以下设置为SOAP1.2
options.setSoapVersionURI(org.apache.axiom.soap.SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI);
xxxStub._getServiceClient().getOptions().setSoapVersionURI(org.apache.axiom.soap.SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI);
//以下设置为SOAP1.1
xxxStub._getServiceClient().getOptions().setSoapVersionURI(org.apache.axiom.soap.SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI);