Установка времени ожидания клиента jax-ws - PullRequest
12 голосов
/ 28 июня 2010

У меня проблемы с установкой времени ожидания 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 пытается подключиться, а затем зависает навсегда, если сервер не отвечает.

UPDATE: Этот код вызывается из метода init () апплетов, если это имеет значение.

Ответы [ 5 ]

6 голосов
/ 29 сентября 2010

с метро / 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 голос
/ 15 июля 2011
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);

Это сработало для меня.

1 голос
/ 28 июня 2010

Если вы используете Sun JRE, вы можете установить следующие системные свойства для сетевых подключений по умолчанию и времени ожидания чтения (в миллисекундах).Я не пробовал их с клиентом JAX-WS, но они также должны работать там:

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

Добавление: я пропустил вашу последнюю часть вопроса, где вы сказали, что делаетеэто в апплете.Если апплет работает с разрешениями по умолчанию, вам, вероятно, не разрешено устанавливать системные свойства.

0 голосов
/ 19 апреля 2016

Вот один пример

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");
}
0 голосов
/ 28 июня 2010

Вы можете привести ваш VoipDB объект к BindingProvider.Так что в приведенном выше примере ссылки просто замените proxy на db, и все готово.

...