dra*_*ake 1 java xml soap web-services
我需要用 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>
Run Code Online (Sandbox Code Playgroud)
我知道还有其他方法可以执行此操作,例如 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>
Run Code Online (Sandbox Code Playgroud)
您可以尝试使用以下代码:
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);
Run Code Online (Sandbox Code Playgroud)
这将产生以下输出:
<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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2180 次 |
| 最近记录: |