2016-04-05 2 views
0

Я звоню в веб-сервис с Java. Он работает хорошо, но я тоже хочу установить таймаут соединения.Java SOAP/JAX-WS: как установить таймауты?

Мой код:

URL urlwsdl = new URL ("file://" + wsdl); 
QName qn = new QName("http://myserver/myservice", "MyService"); 
port = new TimeSeriesService_Service (urlwsdl, qn).getMyServicePort(); 

BindingProvider prov = (BindingProvider) port; 
prov.getRequestContext().put (BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "http://server1/myservice"); 
prov.getRequestContext().put (BindingProvider.USERNAME_PROPERTY, "max"); 
prov.getRequestContext().put (BindingProvider.PASSWORD_PROPERTY, "secret"); 

QueryRequest1 req = new QueryRequest1(); 
QueryResponse1 res = port.queryRequest1 (req); // *** TIMEOUT for ~2 minutes 

Я нашел некоторые сообщения в интернете. Они используют контекст поставщика привязки, как и для http-auth.

например.

prov.getRequestContext().put ("com.sun.xml.ws.request.timeout", 1000000); 

Но они используют объекты, которых у меня нет в моем пространстве имен.

например.

sun.net.client.defaultConnectTimeout 
com.sun.xml.ws.connect.timeout 
com.sun.xml.ws.request.timeout 

У меня есть sun.net, но нет .клиент. У меня есть com.sun.xml, но не .ws.

У меня есть простой java jdk (1.7, Debian 8.3, 64bit) и можно скомпилировать и запустить мой веб-сервис, веб-клиент, а также wsimport. Нет чистых бинов и не установлен jboss.

Любые идеи, как я могу установить тайм-аут? Спасибо за помощь! Chris

ответ

2

Использование реализации JDK JAX-WS вы, вероятно, следует установить внутренние свойства

((BindingProvider) port).getRequestContext().put("com.sun.xml.internal.ws.connect.timeout", timeout); 
((BindingProvider) port).getRequestContext().put("com.sun.xml.internal.ws.request.timeout", timeout); 

Пожалуйста upvote мой JIRA вопрос стандартизировать это в следующей версии JAX-WS https://java.net/jira/browse/JAX_WS-1166

+0

У меня есть com.sun.xml.internal.ws, но затем нет соединения. Нужен ли мне внешний JAR у JDK? – chris01

+0

В JDK нет ничего, что вам нужно. Проверьте класс 'com.sun.xml.internal.ws.developer.JAXWSProperties', чтобы увидеть, что у вас есть те же самые значения. –

+0

Я получаю эту ошибку: Тип JAXWSProperties недоступен из-за ограничения на требуемую библиотеку /usr/lib/jvm/java-7-openjdk-amd64/jre/lib/rt.jar – chris01