SOAP客户端的SOAP请求中的WSS头

时间:2014-10-08 04:23:12

标签: java soap wsdl soap-client

我在Java中使用基于SOAP的Web服务。我在SOAP UI中测试了webservice,尝试发送请求并成功获得响应。仅当我手动添加安全性 wsse:Security 并发送有效的用户名和密码时,该请求才有效。只有这样,我才得到有效的答复。

现在我想通过简单的JAVA代码发送请求,得到响应。

我使用wsimport创建存根文件。

我没有看到为设置用户名和&而生成的任何java文件密码。 我们如何设置用户名&密码并传递给请求??

对非sercured()??

使用secure()服务会有什么不同吗?

赞赏。

1 个答案:

答案 0 :(得分:2)

由于您的存根是wsse:Security架构的bean并且xsd是,因此您在存根中看不到与Web服务安全相关的标记(即WSS等)一个标准,它在特定的xsd中定义了自己的标记(例如,soap,您可以在<soap:envelope>内发送您的请求,但这与此相关标签不在您的存根中。)

要将WSS功能添加到Java客户端,您可以使用apache WSS4J。要在问题中添加用户名和密码,可以使用以下代码执行此操作:

WSSecUsernameToken builder = new WSSecUsernameToken();
builder.setPasswordType(WSConstants.PASSWORD_TEXT);
// set user name an password
builder.setUserInfo("wernerd", "verySecret");
// create a sample soap message
Document doc = SOAPUtil.toSOAPPart(SOAPUtil.SAMPLE_SOAP_MSG);
WSSecHeader secHeader = new WSSecHeader(doc);
secHeader.insertSecurityHeader();
// create the soap message with WSS headers
Document signedDoc = builder.build(doc, secHeader);
// simply print the result
System.out.println(XMLUtils.prettyDocumentToString(signedDoc));

此代码段摘自apache WSS4J项目的 Junit 测试。您可以在apache WSS4J svn repository

上的testUsernameTokenText()课程中查看UserNameTokenTest方法

希望这有帮助,