有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java中的xml Soap请求

我需要用Java生成一个Soap请求。这是我需要生成并传递的xml文件:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"     
   xmlns:ns="website"         
   xmlns:com="website/Common" 
   xmlns:xm="http://www.w3.org/2005/05/xmlmime">
   <soapenv:Header/>
   <soapenv:Body>
      <ns:RequestName>
         <ns:model>
            <ns:keys query="myquery;" ></ns:keys>
            <ns:instance></ns:instance>
         </ns:model>
      </ns:RequestName>
   </soapenv:Body>
</soapenv:Envelope>

我知道还有其他方法可以做到这一点,比如wsimport,但我想知道如何以这种方式做到这一点。我的意思是,在为Soap请求创建xml文件时,正确的Java语法是什么。下面是一些非常基本的语法:

 SOAPMessage message = messageFactory.createMessage();
 SOAPHeader header = message.getSOAPHeader();
 SOAPBody body = message.getSOAPBody();

 // Here is the XML it produces:
 <SOAP-ENV:Envelope
 xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
 <SOAP-ENV:Header/>
    <SOAP-ENV:Body>
    ...
    </SOAP-ENV:Body>
 </SOAP-ENV:Envelope>

共 (1) 个答案

  1. # 1 楼答案

    您可以尝试以下代码:

    MessageFactory messageFactory = MessageFactory.newInstance();
    SOAPMessage soapMessage = messageFactory.createMessage();
    SOAPPart soapPart = soapMessage.getSOAPPart();
    
    SOAPEnvelope envelope = soapPart.getEnvelope();
    envelope.addNamespaceDeclaration("ns", "website");
    envelope.addNamespaceDeclaration("com", "website/Common");
    envelope.addNamespaceDeclaration("xm", "http://www.w3.org/2005/05/xmlmime");
    SOAPBody soapBody = envelope.getBody();
    SOAPElement element = soapBody.addChildElement("RequestName", "ns");
    SOAPElement modelElement = element.addChildElement("model", "ns");
    SOAPElement soapElement = modelElement.addChildElement("keys", "ns");
    soapElement.addAttribute(envelope.createName("query"), "myquery;");
    modelElement.addChildElement("instance", "ns");
    
    soapMessage.saveChanges();
    soapMessage.writeTo(System.out);
    

    这将产生以下输出:

    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" 
        xmlns:com="website/Common" 
        xmlns:ns="website" 
        xmlns:xm="http://www.w3.org/2005/05/xmlmime">
        <SOAP-ENV:Header/>
        <SOAP-ENV:Body>
            <ns:RequestName>
                <ns:model>
                    <ns:keys query="myquery;"/>
                    <ns:instance/>
                </ns:model>
            </ns:RequestName>
        </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>