简体   繁体   English

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

[英]How to create a SOAP API request with UsernameToken in JAVA?

My program is running in a server and needs to make a client side call to a SOAP API using Java. 我的程序在服务器上运行,需要使用Java对SOAP API进行客户端调用。

I used SOUPUI to generate a client stub code for the API service WSDL by JAX-WS Artifacts. 我使用SOUPUI通过JAX-WS Artifacts为API服务WSDL生成了客户端存根代码。 The API server side requires a UsernameToken. API服务器端需要一个UsernameToken。 I used the jaxws-ri document example "How do I do basic authentication in JAX-WS ?" 我使用了jaxws-ri文档示例“如何在JAX-WS中进行基本身份验证?” as something like below to call the API. 如下所示调用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();

But I get below exception in the step of proxy.doAction() . 但是我在proxy.doAction()的步骤中proxy.doAction()异常。

Exception: com.sun.xml.ws.fault.ServerSOAPFaultException: Client received SOAP Fault from server: security.wssecurity.WSSContextImpl.s02: com.ibm.websphere.security.WSSecurityException: Exception org.apache.axis2.AxisFault: CWWSS6500E: There is no caller identity candidate that can be used to login. 异常:com.sun.xml.ws.fault.ServerSOAPFaultException:客户端从服务器接收到SOAP错误:security.wssecurity.WSSContextImpl.s02:com.ibm.websphere.security.WSSecurityException:异常org.apache.axis2.AxisFault:CWWSS6500E:没有可用于登录的呼叫者身份候选者。 ocurred while running action: com.ibm.ws.wssecurity.handler.WSSecurityConsumerHandler$1@30ed30ed Please see the server log to find more detail regarding exact cause of the failure. 运行时发生的操作:com.ibm.ws.wssecurity.handler.WSSecurityConsumerHandler$1@30ed30ed请参阅服务器日志以查找有关失败确切原因的更多详细信息。

at com.sun.xml.ws.fault.SOAP11Fault.getProtocolException(SOAP11Fault.java:193) 在com.sun.xml.ws.fault.SOAP11Fault.getProtocolException(SOAP11Fault.java:193)
at com.sun.xml.ws.fault.SOAPFaultBuilder.createException(SOAPFaultBuilder.java:125) 在com.sun.xml.ws.fault.SOAPFaultBuilder.createException(SOAPFaultBuilder.java:125)
at com.sun.xml.ws.client.sei.StubHandler.readResponse(StubHandler.java:253) 在com.sun.xml.ws.client.sei.StubHandler.readResponse(StubHandler.java:253)
at com.sun.xml.ws.db.DatabindingImpl.deserializeResponse(DatabindingImpl.java:181) 在com.sun.xml.ws.db.DatabindingImpl.deserializeResponse(DatabindingImpl.java:181)
at com.sun.xml.ws.db.DatabindingImpl.deserializeResponse(DatabindingImpl.java:258) 在com.sun.xml.ws.db.DatabindingImpl.deserializeResponse(DatabindingImpl.java:258)
Truncated. 截断。 see log file for complete stacktrace 请参阅日志文件以获取完整的stacktrace

Could you please give me some advice on how to call the API with the UsernameToken? 您能否给我一些有关如何使用UsernameToken调用API的建议? Or is there any server side configuration needed? 还是需要任何服务器端配置?

Thanks to the answer from the post JAX-WS Password Type PasswordText . 感谢帖子JAX-WS密码类型PasswordText的回答。 I solved my problem. 我解决了我的问题。 Also, with reference from the post JAX-WS : SOAP handler in client side . 另外,请参考JAX-WS:客户端中的SOAP处理程序

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM