【问题标题】:Soap Request using java - Request call format issue使用 java 的 Soap 请求 - 请求调用格式问题
【发布时间】:2017-05-16 10:27:19
【问题描述】:

我正在尝试使用此 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>

【问题讨论】:

    标签: java soap wsdl soap-client wsdl2java


    【解决方案1】:

    接收端的错误信息是什么?

    无论如何,UserAuthentication 元素的命名空间是不同的。

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

    【讨论】:

    • 客户端标头问题出现错误
    • 你能说得更具体些吗?
    • 响应:schemas.xmlsoap.org/soap/envelope" xmlns:xsi="w3.org / 2001/XMLSchema-instance" xmlns:xsd="w3.org/2001/XMLSchema"><soap:Bod y>soap:Client服务器无法识别 HTTP 标头 SOAPAction 的值:.
    • SOAPAction HTTP 标头不是在有效负载(XML)中发送,而是作为标头发送。请添加您用于将SOAPEnvelope 发送到问题的代码。
    【解决方案2】:
    envelope.addNamespaceDeclaration("UserAuthentication", serverURI);
    

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

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

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

    制作:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-22
      • 1970-01-01
      • 1970-01-01
      • 2013-08-13
      • 2020-07-18
      • 2018-11-20
      • 1970-01-01
      相关资源
      最近更新 更多