使用java的Soap Request - 请求调用格式问题

时间:2017-01-02 10:07:30

标签: java soap wsdl soap-client wsdl2java

我正在尝试使用此Java代码进行SOAP调用:

SOAPEnvelope envelope = soapPart.getEnvelope();
envelope.addNamespaceDeclaration("UserAuthentication", serverURI);
SOAPBody soapBody = envelope.getBody();
SOAPElement soapBodyElem = soapBody.addChildElement("UserAuthentication", "UserAuthentication");
SOAPElement soapBodyElem1 = soapBodyElem.addChildElement("user_name", "UserAuthentication");
soapBodyElem1.addTextNode("pqr@xyz.com");
SOAPElement soapBodyElem2 = soapBodyElem.addChildElement("password", "UserAuthentication");
soapBodyElem2.addTextNode("123");
soapMessage.saveChanges();

SOAP调用所需的格式(我正在尝试生成)是:

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <UserAuthentication xmlns="http://tempuri.org/">
      <user_name>string</user_name>
      <password>string</password>
    </UserAuthentication>
  </soap:Body>
</soap:Envelope>

但我的代码生成的实际调用与所需的格式不匹配,并在接收端被拒绝,我正在试图弄清楚为什么以及如何解决它:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:UserAuthentication="http://XXX.XXX.XXX.XXX:XXXX/Logininfo.asmx?op=UserAuthentication">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
<UserAuthentication:UserAuthentication>
<UserAuthentication:user_name>pqr@xyz.com</UserAuthentication:user_name>
<UserAuthentication:password>123</UserAuthentication:password>
</UserAuthentication:UserAuthentication>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

2 个答案:

答案 0 :(得分:0)

来自接收端的错误消息是什么?

在任何情况下,UserAuthentication元素的名称空间都不同。

预期:http://tempuri.org/
实际:http://XXX.XXX.XXX.XXX:XXXX/Logininfo.asmx?op=UserAuthentication

答案 1 :(得分:0)

envelope.addNamespaceDeclaration("UserAuthentication", serverURI);

为什么在给出您不需要的请求时添加该命名空间?

尝试删除该行。然后这一个:

SOAPElement soapBodyElem = soapBody.addChildElement("UserAuthentication", "UserAuthentication");

成功:

QName bodyName = new QName("http://tempuri.org/",
    "UserAuthentication", "m");
SOAPElement soapBodyElem = soapBody.addChildElement(bodyName);