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

Posted

技术标签:

【中文标题】如何在 JAVA 中使用 UsernameToken 创建 SOAP API 请求?【英文标题】:How to create a SOAP API request with UsernameToken in JAVA? 【发布时间】:2018-08-09 09:08:36 【问题描述】:

我的程序在服务器中运行,需要使用 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.SOAP11Fault.getProtocolException(SOAP11Fault.java:193) 在 com.sun.xml.ws.fault.SOAPFaultBuilder.createException(SOAPFaultBuilder.java:125) 在 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 给我一些建议?或者是否需要任何服务器端配置?

【问题讨论】:

'请查看服务器日志以查找有关失败确切原因的更多详细信息。'你检查了吗? 谢谢。使用上面更新的附加堆栈跟踪检查服务器日志。但我仍然没有任何提示。 【参考方案1】:

感谢帖子JAX-WS Password Type PasswordText 的回答。我解决了我的问题。另外,参考帖子JAX-WS : SOAP handler in client side。

【讨论】:

以上是关于如何在 JAVA 中使用 UsernameToken 创建 SOAP API 请求?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用java在mysql中使用\\更新文件路径?

如何在 Java 中使用 SOAP Web 服务

如何使用 AES 在 Java 中加密文件 [重复]

java - 如何在文件路径中使用空格从java调用ghostscript

如何在 Java 中使用 keyTyped?

如何在 Java 中使用 Comparator 进行排序