我已经使用 JAXWS-RI 2.1 为我的 Web 服务创建了一个基于 WSDL 的接口。我可以毫无问题地与 Web 服务交互,但无法指定向 Web 服务发送请求的超时时间。如果由于某种原因它没有响应客户端似乎永远旋转它的轮子。
到处打猎表明我可能应该尝试做这样的事情:
((BindingProvider)myInterface).getRequestContext().put("com.sun.xml.ws.request.timeout", 10000);
((BindingProvider)myInterface).getRequestContext().put("com.sun.xml.ws.connect.timeout", 10000);
我还发现,根据您拥有的 JAXWS-RI 版本,您可能需要设置这些属性:
((BindingProvider)myInterface).getRequestContext().put("com.sun.xml.internal.ws.request.timeout", 10000);
((BindingProvider)myInterface).getRequestContext().put("com.sun.xml.internal.ws.connect.timeout", 10000);
我遇到的问题是,无论上述哪个是正确的,我都不知道 在哪里 可以做到这一点。我所拥有的只是一个 Service
子类,它实现了 Web 服务的自动生成接口,并且在实例化时,如果 WSDL 没有响应,那么设置特性:
MyWebServiceSoap soap;
MyWebService service = new MyWebService("http://www.google.com");
soap = service.getMyWebServiceSoap();
soap.sendRequestToMyWebService();
谁能指出我正确的方向?!
原文由 ninesided 发布,翻译遵循 CC BY-SA 4.0 许可协议
我知道这是旧的并且在其他地方得到了回答,但希望这可以关闭。我不确定您为什么要动态下载 WSDL 但系统属性:
应该适用于使用 JAX-WS 使用的 HttpURLConnection 的所有读取和连接。如果您从远程位置获取 WSDL,这应该可以解决您的问题 - 但本地磁盘上的文件可能更好!
接下来,如果您想为特定服务设置超时,一旦您创建了代理,您需要将其转换为 BindingProvider(您已经知道),获取请求上下文并设置您的属性。在线 JAX-WS 文档是错误的,这些是正确的属性名称(嗯,它们对我有用)。
当然,这是一种可怕的做事方式,我会创建一个很好的工厂来生产这些绑定提供程序,这些提供程序可以注入你想要的超时。