在JAVA中创建SOAP POST

时间:2015-11-04 21:57:57

标签: java soap

我是SOAP新手,我正在努力为服务器创建SOAP POST请求。我有以下示例请求: -

POST /sso/ArtifactResolver/metaAlias/assert-idp
HTTP/1.1
Host:xxx
Content-Type: text/xml
Content-Length: 
SOAPAction:http://....

这是我的SOAP Envevelop

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body>
<samlp:ArtifactResolve
xmlns:samlp="xxxxxxxxxxxxxx"
xmlns="xxxxxxxxxxx"
ID="_6c3a4f8b9c2d"
25 March 2014 Page 30
(APPROVED – Version 1.1)
Version="2.0"
IssueInstant="2012-05-21T00:39:45Z">
<Issuer>https://www.xxxxxxxxxxxxxx</Issuer>
<Artifact>
AAQAABWFTOPhANZhf21nl9DmXsAkiSM0ocx7GdxUfXFttmS954 BP6Vb01I0=
</Artifact>
</samlp:ArtifactResolve>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

以下是我尝试使用的java代码: -

    MessageFactory factory = MessageFactory.newInstance();
    SOAPMessage soapMsg = factory.createMessage();
    SOAPPart part = soapMsg.getSOAPPart();
    SOAPEnvelope envelope = part.getEnvelope();
    SOAPHeader header = envelope.getHeader();
    SOAPBody body = envelope.getBody();


    SOAPBodyElement element = body.addBodyElement(envelope.createName("ArtifactResolve", "sampl", "xxxxxxxxxxxx"));
    element.addChildElement("Issuer").addTextNode("xxxxxxxxxxx");
    element.addChildElement("Artifact").addTextNode("xxxxxxxxxxxx");
    element.setAttribute("xmlns", "xxxxxxxxxxxxx");
    element.setAttribute("ID", "xxxxxxxxx");
    element.setAttribute("Version", "2.0");
    element.setAttribute("IssueInstant", "xxxxxxxxxx"); 

 PostMethod post = new PostMethod("PUT Server Url");
            // Request content will be retrieved directly from the input stream

            post.setRequestEntity(entity);
            // consult documentation for your web service
            post.setRequestHeader("SOAPAction", "**what to put here????**");
            // Get HTTP client
            HttpClient httpclient = new HttpClient();

            try {
                int result = httpclient.executeMethod(post);
                System.out.println(post.getResponseBodyAsString());
            } finally {
                // Release current connection to the connection pool once you are done
                post.releaseConnection();
            }

现在在上面的代码中指定Server url? 第二是如何将完整的soap XML传递给帖子请求? 如何传递给出的顶级POST数据? 什么给肥皂行动。?

对不起这个家伙买我是全新的,所以不知道。 我试过通过互联网寻找这个,但没有帮助。

请帮我解决这里

谢谢...

2 个答案:

答案 0 :(得分:1)

根据您的示例中的建议,URL端点进入new PostMethod("xxx")

请求是使用SOAPBodyElement element = body...构建的。

SOAP动作在WSDL中描述为绑定。

我建议您查看此帖子SOAP request to WebService with java

答案 1 :(得分:0)

请参阅此网址 - http://svn.apache.org/repos/asf/httpcomponents/oac.hc3x/trunk/src/examples/PostSOAP.java

这是一个非常具体的例子,我测试了它的全部工作。

现在在上面的代码中指定Server url? - 您可以将其作为命令行参数传递,或者在客户端代码中传递硬编码。

其次是如何将完整的soap XML传递给帖子请求? - 示例是从作为第三个参数传递的文件中接受XML。或者,您可以在客户端代码中对XML进行硬编码。

为肥皂行动提供什么。请检查WSDL文件以获取SOAPAction。它将针对每种方法列出。请注意,在URL中没有放置任何方法名称,您只需要提供服务URL。那么如果有很多方法,如何区分它们呢?通过这个SOAPAction。如果有任何类似&#34;乘法&#34;的方法,那么SOAPAction将是&#34; urn:multiply&#34;。

希望这有帮助。