如何在 JAVA 中使用 UsernameToken 创建 SOAP API 请求?



我的程序在服务器中运行,需要使用Java对SOAP API进行客户端调用。

我使用 SOUPUI 为 API 服务 WSDL 生成了一个客户端存根代码 由 JAX-WS 工件。API 服务器端需要用户名令牌。我使用 jaxws-ri 文档示例"如何在 JAX-WS 中进行基本身份验证?"作为如下所示的内容来调用 API。

HelloService service = new HelloService();
Hello proxy = (service.getHelloPort());
((BindingProvider)proxy).getRequestContext().put(BindingProvider.USERNAME_PROPERTY, "userfoo");
((BindingProvider)proxy).getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, "passbar"); 
Output output = proxy.doAction();
return output.getResult();

但是我在proxy.doAction()的步骤中得到了以下异常.

异常:com.sun.xml.ws.fault.ServerSOAPFaultException:客户端从服务器收到 SOAP 错误:security.wssecurity.WSSContextImpl.s02:com.ibm.websphere.security.WSSecurityException:Exception org.apache.axis2.AxisFault: CWWSS6500E:没有可用于登录的调用方身份候选。 o在运行操作时发生:com.ibm.ws.wssecurity.handler.WSSecurityConsumerHandler$1@30ed30ed 请参阅服务器日志以查找有关失败。

at com.sun.xml.ws.fault.SOAP11Fault.getProtocolException(SOAP11Fault.java:193(at com.sun.xml.ws.fault.SOAPFaultBuilder.createException(SOAPFaultBuilder.java:125(at com.sun.xml.ws.client.sei.StubHandler.readResponse(StubHandler.java:253(at com.sun.xml.ws.db.DatabindingImpl.deserializeResponse(DatabindingImpl.java:


181(
at com.sun.xml.ws.db.DatabindingImpl.deserializeResponse(DatabindingImpl.java:258(
Truncated。 请参阅日志文件以完成堆栈跟踪

您能否给我一些有关如何使用用户名令牌调用 API 的建议?还是需要任何服务器端配置?

感谢 JAX-WS 密码类型 PasswordText 一文的回答。我解决了我的问题。另外,参考帖子 JAX-WS : SOAP 处理程序在客户端。

最新更新