如何使对SOAP Web服务的客户端调用超时

时间:2018-11-10 01:35:54

标签: java web-services soap soap-client

我有一个REST API,Java脚本前端(angular)正在使用它。

当我的REST API端点被调用时,API进而需要调用SOAP Web服务。

soap服务的客户端jar位于类路径中。

REST服务正在Jetty和Open JDK 1.8中运行。

SOAP Web服务是单独托管的,除了端点和wsdl等之外,我不具备这些细节。

一切正常。

其中一项要求是REST API在5秒内超时。

有时SOAP端点需要大约10秒钟来响应。
因此,理想情况下,REST端点应该在5秒后超时,但永远不会超时。

它一直在等待SOAP服务响应,因此无论SOAP服务的响应时间长短,都将决定REST API响应。

请不要建议异步调用-目的是使SOAP客户端调用SOAP Web服务超时。

尝试了许多设置超时的选项。请参阅以下通过Internet找到的选项。 不幸的是,它们都不起作用:

Get QName
Create Service from QName
GetPort
Map<String,Object> context = ((BindingProvider)port).getRequestContext();
context.put("javax.xml.ws.service.endpoint.address",https wsdl location");

/** try and timeout after 5 seconds - NOT working **/
/** option 1 **/
context.put("com.sun.xml.internal.ws.request.timeout", "5000");
context.put("com.sun.xml.internal.ws.connect.timeout","5000");

/** option 2 **/
context.put("javax.xml.ws.client.receiveTimeout", "5000");
context.put("javax.xml.ws.client.connectionTimeout","5000");

/** option 3 **/
context.put("com.sun.xml.ws.request.timeout", "5000");
context.put("com.sun.xml.ws.connect.timeout","5000");

这些都不起作用。 在互联网上的某个地方,有人提出了以下建议,但这些建议也行不通:

context.put("timeout","10");

注意:上面的选项一次只能尝试一次。 Havent一口气把所有的东西放在一起!

有人有指针吗?

如果有帮助,我正在使用肥皂客户端罐-wsclient_extended.jar 总结一下:在带有Open JDK 1.8的Jetty中运行的soap客户端。 谢谢

0 个答案:

没有答案