我的程序在服务器中运行,需要使用 Java 对 SOAP API 进行客户端调用。
我使用 SOUPUI 通过 JAX-WS Artifacts 为 API 服务 WSDL 生成客户端存根代码。API 服务器端需要一个 UsernameToken。我使用了 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:异常 org.apache.axis2.AxisFault:CWWSS6500E:没有可用于登录的呼叫者身份候选者。运行操作时发生:com.ibm.ws.wssecurity.handler.WSSecurityConsumerHandler$1@30ed30ed 请查看服务器日志以查找有关失败确切原因的更多详细信息。
在 com.sun.xml.ws.fault.SOAPFaultBuilder.createException (SOAPFaultBuilder.java:125)在com.sun.xml.getProtocolException(SOAP11Fault.java:193)
在 com.sun.xml.ws .client.sei.StubHandler.readResponse(StubHandler.java:253)
在 com.sun.xml.ws.db.DatabindingImpl.deserializeResponse(DatabindingImpl.java:181)
在 com.sun.xml.ws.db.DatabindingImpl.deserializeResponse (DatabindingImpl.java:258)
被截断。查看日志文件以获取完整的堆栈跟踪
您能给我一些关于如何使用 UsernameToken 调用 API 的建议吗?或者是否需要任何服务器端配置?