设置jax-ws客户端超时

Luk*_*asz 12 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

用法:

VoipDB db = new VoipDBJDBCService(new URL(url)).getVoipDBJDBCPort();
Run Code Online (Sandbox Code Playgroud)

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

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

Wan*_*tos 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); 
Run Code Online (Sandbox Code Playgroud)

  • 实际上,这就是第一个答案中所说的(以及问题本身)如果有人的话,“导入 com.sun.xml.ws.developer.JAXWSProperties”并使用“JAXWSProperties.CONNECT_TIMEOUT”和“JAXWSProperties.REQUEST_TIMEOUT”也许是有意义的不害怕与 Sun 内部人员结合。 (2认同)

mus*_*iKk 0

您可以将VoipDB对象投射到BindingProvider. 因此,在您给出的链接的示例中,只需替换proxydb即可。