我是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数据? 什么给肥皂行动。?
对不起这个家伙买我是全新的,所以不知道。 我试过通过互联网寻找这个,但没有帮助。
请帮我解决这里
谢谢...
答案 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;。
希望这有帮助。