设置jax-ws客户端超时

时间:2010-06-28 08:16:11

标签: java web-services 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()方法中调用此代码。

5 个答案:

答案 0 :(得分:6)

使用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); 

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:1)

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);

这对我有用。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

这是一个例子

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");
}