繁体   English   中英

如何在Java中编写Soap Client?

[英]How to code soap client in java?

我有和XML

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <soap:Body>
<SendRequest xmlns="http://tempuri.org/">
  <auth xmlns="">
    <Login xmlns="http://tempuri.org/">vcm</Login>
    <Password xmlns="http://tempuri.org/">vcm</Password>
  </auth>
  <Request xmlns="">
        <Request_code xmlns="http://     tempuri.org/">1</Request_code>
        <Message_Code xmlns="http://tempuri.org/">1111</Message_Code>
        <Params xmlns="http://  tempuri.org/">
      <RequestParameter>
        <Name />
        <Value />
      </RequestParameter>
    </Params>
  </Request>
   </SendRequest>
 </soap:Body>
</soap:Envelope>

和Java代码

MessageFactory messageFactory = MessageFactory.newInstance();
    SOAPMessage soapMessage = messageFactory.createMessage();
    SOAPPart soapPart = soapMessage.getSOAPPart();

    // SOAP Envelope
    SOAPEnvelope envelope = soapPart.getEnvelope();
    envelope.removeAttribute("xmlns:SOAP-ENV");
    envelope.setPrefix("soap");
    envelope.addNamespaceDeclaration("xsd", "http://www.w3.org/2001/XMLSchema");
    envelope.addNamespaceDeclaration("xsi", "http://www.w3.org/2001/XMLSchema-instance");

    MimeHeaders mimeheaders = soapMessage.getMimeHeaders();
    mimeheaders.addHeader("SOAPAction", "SendRequest");
    SOAPHeader header = soapMessage.getSOAPHeader();
    header.detachNode();

    SOAPBody soapBody = envelope.getBody();
    soapBody.setPrefix("soap");
    SOAPElement sendRequest = soapBody.addChildElement("SendRequest");
    SOAPElement auth = sendRequest.addChildElement("auth");
    auth.addChildElement("Login")
        .addTextNode("vcm");
    auth.addChildElement("Password")
        .addTextNode("vcm");

    SOAPElement request = sendRequest.addChildElement("Request");
    request.addChildElement("Request_code")
            .addTextNode("1");
    request.addChildElement("Message_Code")
            .addTextNode("1111");
    request.addChildElement("Params");
    sendRequest.addAttribute(new QName("xmlns"), "http://tempuri.org/");
    soapMessage.saveChanges();

    /* Print the request message */
    System.out.print("Request SOAP Message:");
    soapMessage.writeTo(System.out);
    System.out.println();

我安慰我看到没有“ http://tempuri.org/ ”的标签。 例如,如果我在写,

sendRequest.addAttribute(new QName("aaa"), "http://tempuri.org/") 

我有

<SendRequest aaa="http://tempuri.org/">

怎么写java代码?

谢谢你的帮助!

您没有将名称空间添加到元素。

尝试

SOAPElement sendRequest = soapBody.addChildElement(
  new QName("http://tempuri.org/", "SendRequest"));

代替

SOAPElement sendRequest = soapBody.addChildElement("SendRequest");

请注意,将对命名空间URI的多个引用分解为常量/变量可能是一个好主意。

谢谢你的帮助 ! 而且这段代码可以正常工作

  MessageFactory messageFactory = MessageFactory.newInstance();
    SOAPMessage soapMessage = messageFactory.createMessage();
    SOAPPart soapPart = soapMessage.getSOAPPart();

    // SOAP Envelope
    SOAPEnvelope envelope = soapPart.getEnvelope();
    envelope.removeAttribute("xmlns:SOAP-ENV");
    envelope.setPrefix("soap");
    envelope.addNamespaceDeclaration("xsd", "http://www.w3.org/2001/XMLSchema");
    envelope.addNamespaceDeclaration("xsi", "http://www.w3.org/2001/XMLSchema-instance");

    MimeHeaders mimeheaders = soapMessage.getMimeHeaders();
    mimeheaders.addHeader("SOAPAction", "SendRequest");
    SOAPHeader header = soapMessage.getSOAPHeader();
    header.detachNode();

    SOAPBody soapBody = envelope.getBody();
    soapBody.setPrefix("soap");
    QName xmlns = new QName("xmlns");
    SOAPElement sendRequest = soapBody.addChildElement(new QName("http://tempuri.org/", "SendRequest"));
    sendRequest.addAttribute(xmlns, "");
    SOAPElement auth = sendRequest.addChildElement(new QName("", "auth"));

    auth.addChildElement(new QName("http://tempuri.org/", "Login"))
        .addAttribute(new QName("xmlns"), "http://tempuri.org/")
        .addTextNode("vcm");
    auth.addChildElement(new QName("http://tempuri.org/", "Password"))
        .addAttribute(new QName("xmlns"), "http://tempuri.org/")
        .addTextNode("vcm");

    SOAPElement request = sendRequest.addChildElement(new QName("", "Request"));
    request.addAttribute(new QName("xmlns"), "");

    request.addChildElement(new QName("http://tempuri.org/", "Request_code"))
            .addAttribute(new QName("xmlns"), "http://tempuri.org/")
            .addTextNode("1");
    request.addChildElement(new QName("http://tempuri.org/", "Message_Code"))
            .addAttribute(new QName("xmlns"), "http://tempuri.org/")
            .addTextNode("1111");

    SOAPElement params = request.addChildElement(new QName("http://tempuri.org/", "Params"));

    SOAPElement requesParameter = params.addChildElement("RequestParameter");
    requesParameter.addChildElement("Name");
    requesParameter.addChildElement("Value");

    soapMessage.saveChanges();

    /* Print the request message */
    System.out.print("Request SOAP Message:");
    soapMessage.writeTo(System.out);
    System.out.println();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM