我在设置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()方法中调用此代码。
答案 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");
}