Java中的肥皂版本不匹配

时间:2018-06-28 02:26:31

标签: java soap

肥皂请求生成的Java应用程序[失败]

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
   xmlns:dir="http://xxxxxxxxxx">
  <soapenv:Body>
    <xxxxxxxxxxx>       
  </soapenv:Body>
</soapenv:Envelope>

SoapUI生成的肥皂请求[成功]

 <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" 
   xmlns:dir="http://xxxxxxxxxx">
 <soap:Header/>
   <soap:Body>
     <dir:ping/>
   </soap:Body>
 </soap:Envelope>

如何将名称空间uri“ http://schemas.xmlsoap.org/soap/envelope/”更改为“ http://www.w3.org/2003/05/soap-envelope”。我还没有创建任何客户端,我刚刚创建了Java类并正在运行,由于上述uri链接,我能够发送请求并获得故障码响应。我发现版本不匹配,但我不知道如何更改。

2 个答案:

答案 0 :(得分:0)

我认为您必须使用Statckoverflow问题中提供的默认SOAP实现(即SOAP 1.2)。您的Web服务可能正在使用SOAP 1.1。

如果您可以更改它的SOAPMessageFactory1_1Impl实现,则应该可以解决您的问题。您的名称空间将更改为xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"

callSoapWebService方法的第一行更改为以下内容,它将解决此问题。

SOAPMessage soapMessage = SOAPMessageFactory1_1Impl.newInstance().createMessage();

希望有帮助。

答案 1 :(得分:0)

MessageFactory factory = MessageFactory.newInstance(); --它将给出1.1版本的默认值

更改为以下内容以获取1.2版本的soap名称空间

MessageFactory工厂=     MessageFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL);

您可以在SAAJ教程中找到它