Java SOAP / JAX-WS:如何设置超时?

chr*_*s01 1 java soap web-services jax-ws

我正在用Java调用Web服务。它运行良好,但我也想设置连接超时。

我的代码:

URL urlwsdl = new URL ("file://" + wsdl);
QName qn = new QName("http://myserver/myservice", "MyService");
port = new TimeSeriesService_Service (urlwsdl, qn).getMyServicePort (); 

BindingProvider prov = (BindingProvider) port;
prov.getRequestContext ().put (BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "http://server1/myservice");
prov.getRequestContext ().put (BindingProvider.USERNAME_PROPERTY, "max");
prov.getRequestContext ().put (BindingProvider.PASSWORD_PROPERTY, "secret");

QueryRequest1 req = new QueryRequest1 ();
QueryResponse1 res = port.queryRequest1 (req);  // *** TIMEOUT for ~2 minutes
Run Code Online (Sandbox Code Playgroud)

我在互联网上找到了一些帖子。他们像我对http-auth一样使用绑定提供程序的上下文。

例如

prov.getRequestContext ().put ("com.sun.xml.ws.request.timeout", 1000000);
Run Code Online (Sandbox Code Playgroud)

但是它们使用的是我在命名空间中没有的对象。

例如

sun.net.client.defaultConnectTimeout
com.sun.xml.ws.connect.timeout
com.sun.xml.ws.request.timeout
Run Code Online (Sandbox Code Playgroud)

我有sun.net但没有.client。我有com.sun.xml,但没有.ws。

我有一个简单的Java JDK(1.7,Debian 8.3、64位),可以编译和运行我的Web服务,WebClient以及wsimport。没有安装netbeans,也没有安装jboss。

有什么想法可以设置超时时间吗?感谢帮助!克里斯

小智 5

使用JDK JAX-WS实现,您可能应该设置内部属性

 ((BindingProvider) port).getRequestContext().put("com.sun.xml.internal.ws.connect.timeout", timeout);
 ((BindingProvider) port).getRequestContext().put("com.sun.xml.internal.ws.request.timeout", timeout);
Run Code Online (Sandbox Code Playgroud)

请升级我的JIRA问题,以在即将发布的JAX-WS版本https://java.net/jira/browse/JAX_WS-1166中标准化该问题