【发布时间】:2009-09-03 09:48:32
【问题描述】:
我正在尝试使用来自 Netbeans 的 gSoap 生成的 wsdl。 Web 服务要求传入 UserNameToken。当我使用 SoapUI 中的 wsdl(有效)时,它会发送以下内容:
<wsse:Username>myname</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">mypass</wsse:Password>
但是,当我使用像这样的处理程序(由 How do I add a SOAP Header using Java JAX-WS 引用)从 Netbeans 尝试它时:
String prefix = "wsse";
String uri = "http://...wsssecurity...";
SOAPElement securityElem = factory.createElement("Security",prefix,uri);
SOAPElement UserNametokenElem = factory.createElement("UserNameToken",prefix,uri);
SOAPElement UsernameElem = factory.createElement("wsse:Username");
UsernameElem.addTextNode("myname");
SOAPElement PasswordElem = factory.createElement("Password");
PasswordElem.addTextNode("mypass");
UserNametokenElem.addChildElement(UsernameElem);
UserNametokenElem.addChildElement(PasswordElem);
securityElem.addChildElement(UserNametokenElem);
SOAPHeader header = envelope.addHeader();
header.addChildElement(securityElem);
它会像这样生成soap标头:
<wsse:Security xmlns:wsse="http://...wsssecurity...">
<wsse:UserNameToken xmlns:wsse="http://...wsssecurity...">
<Username xmlns="">myname</Username>
<Password xmlns="">mypass</Password>
</wsse:UserNameToken>
</wsse:Security>
这会导致 web 服务回复身份验证错误。
因此我的问题是:
- 如何以正确的方式生成 UserNameToken(如 SoapUi 那样)?
- 是使用处理程序还是使用 Apache WSS4J 等外部 WSSE 库更好(谁能给我一些示例代码)
【问题讨论】:
标签: java xml soap ws-security usernametoken