我有一个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客户端。 谢谢