我在一个Java程序上工作,在Tomee 7.0.3服务器和JDK1.7.0_40上运行。我的程序必须调用远程Web服务。此Web服务属于合作伙伴,到目前为止,我只在SOAP-UI项目中拥有WSDL和Mock服务。 我使用wsimport来生成代理。由于WSDL使用SOAP1.2,我收到一条错误消息,邀请我添加" -extension"选项,然后它似乎工作:我得到我的代理。 但是当我运行我的程序时,SOAP-UI Mock服务会返回此错误:
A SOAP 1.2 message is not valid when sent to a SOAP 1.1 only endpoint.
然而,SOAP-UI项目和Mock服务是使用与代理相同的WSDL创建的。
这是WSDL的开头,显示了SOAP1.2引用:
<wsdl:definitions xmlns:ns="http://tempuri.org"
xmlns:ns1="http://tempuri.org/xsd"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:wsoap12="http://schemas.xmlsoap.org/wsdl/soap12/"
name="aAPIs" targetNamespace="http://tempuri.org">
<wsdl:types xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:schema xmlns:ns="http://tempuri.org/xsd"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://tempuri.org/xsd">
但是当我查看我发送给Mock服务的SOAP请求时(感谢JaxWS处理程序),我可以看到soap命名空间引用SOAP 1.1而不是1.2:
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
...
</soap:Header>
<soap:Body>
...
</soap:Body>
所以在我看来,我的代理正在使用SOAP1.1,尽管WSDL引用了SOAP 1.2。 有没有办法强制代理使用SOAP 1.2?例如,添加到wsimport的选项?
我感谢你的帮助。