设置jax-ws客户端超时

我在设置jax-ws超时时遇到了麻烦。 我的代码是:

@WebServiceClient(name = "VoipDBJDBCService", targetNamespace = "http://db.server.voipmeter.jextreme.eu/", wsdlLocation = "http://trace0.nyc.blinkmind.com:8080/voipdb?wsdl") public class VoipDBJDBCService extends Service { public VoipDBJDBCService(URL wsdlLocation) { super(wsdlLocation, new QName("http://db.server.voipmeter.jextreme.eu/", "VoipDBJDBCService")); } @WebEndpoint(name = "VoipDBJDBCPort") public VoipDB getVoipDBJDBCPort() { return super.getPort(new QName("http://db.server.voipmeter.jextreme.eu/", "VoipDBJDBCPort"), VoipDB.class); } } 

用法:

 VoipDB db = new VoipDBJDBCService(new URL(url)).getVoipDBJDBCPort(); 

我如何挂断超时? 我在这里找到了“解决方案”: https : //jax-ws.dev.java.net/guide/HTTP_Timeouts.html但我不知道我将把它挂钩。如何获取代理? 当我调用getPort客户端尝试连接,然后如果服务器没有响应则永远挂起。

更新:此代码是从applet init()方法中调用的,如果这有任何区别。

使用Metro / Glassfish ……

 //1 minute for connection ((BindingProvider) wsPort).getRequestContext().put("com.sun.xml.ws.connect.timeout", 1 * 60 * 1000); //3 minutos for request ((BindingProvider) wsPort).getRequestContext().put("com.sun.xml.ws.request.timeout", 3 * 60 * 1000); 
 ProxyWs proxy = (ProxyWs) factory.create(); Client client = ClientProxy.getClient(proxy); HTTPConduit http = (HTTPConduit) client.getConduit(); HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy(); httpClientPolicy.setConnectionTimeout(0); httpClientPolicy.setReceiveTimeout(0); http.setClient(httpClientPolicy); 

这对我有用。

如果您使用的是Sun JRE,则可以为默认网络连接和读取超时设置以下系统属性(以毫秒为单位)。 我没有尝试使用JAX-WS客户端,但它们也应该在那里工作:

 sun.net.client.defaultConnectTimeout sun.net.client.defaultReadTimeout 

另外:我错过了问题的最后一部分,你说你在小程序中这样做了。 如果applet以默认权限运行,则可能不允许您设置系统属性。

您可以将VoipDB对象转换为BindingProvider 。 因此,在链接的示例中,您只需用db替换proxy ,就可以了。

这是一个例子

 public void testConfigureTimeout() throws Exception { //Set timeout until a connection is established ((BindingProvider)port).getRequestContext() .put("javax.xml.ws.client.connectionTimeout", "6000"); //Set timeout until the response is received ((BindingProvider) port).getRequestContext() .put("javax.xml.ws.client.receiveTimeout", "1000"); port.echo("testTimeout"); }