views:

515

answers:

3

Hello Folks. I've trouble setting jax-ws timeout. My code is:

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

And the usage:

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

How do i Hook in timeouts ? I've found "solution" here: https://jax-ws.dev.java.net/guide/HTTP_Timeouts.html but I don't know where I shall hook it in. How to obtain proxy ? When I call getPort client tries to connect and then hangs forever if server is not responding.

UPDATE: This code is invoked from within applets init() method if that makes any difference.

A: 

You can cast your VoipDB object to BindingProvider. So in the example in the link you've given just replace proxy by db and you're good to go.

musiKk
This actually doesn't work because client hangs on the line where getPort is called.
Lukasz
Well, that's all you can do with the method provided in the link. jax-ws downloads the WSDL of the service to create the proxy. Most likely this is what causes trouble for you. The only thing I could think of right now is to download a local copy of the WSDL and use that but of course this is not really elegant...
musiKk
+1  A: 

If you are using a Sun JRE, you can set the following system properties for default network connect and read timeouts (in milliseconds). I haven't tried these with the JAX-WS client, but they ought work there as well:

sun.net.client.defaultConnectTimeout

sun.net.client.defaultReadTimeout


Addition: I missed your last part of the question where you said that you are doing this in an applet. If the applet is running with default permissions, you are probably not allowed to set the system properties.

jarnbjo
Applet is signed. This is hard to reproduce. Because client hangs when server hangs (not when is down).
Lukasz
You can simulate a hanging TCP server with this server code:ServerSocket serverSocket = new ServerSocket(PORT);while (true) { serverSocket.accept();}Just accept, but never read or write anything on the "dummy server" side.
auramo
A: 

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

Best regards!

Wanderson Santos
@Wanderson Santos: Actually that is what said in 1st answer (and in the question itself)Also maybe it makes sense to `import com.sun.xml.ws.developer.JAXWSProperties` and use `JAXWSProperties.CONNECT_TIMEOUT` and `JAXWSProperties.REQUEST_TIMEOUT` if someone is not afraid to couple with Sun internals.
dma_k