Задача:
Явно задать таймаут запроса к SOAP-веб-сервису, клиент которого создан с помощью wsimport.
Решение:
Явно задать таймаут запроса к SOAP-веб-сервису, клиент которого создан с помощью wsimport.
Решение:
Как ни странно, найти решение оказалось непросто. Во-первых, решение зависит от сервера приложений, т.е. конкретной реализации JAX-WS, т.к., насколько я понял, спецификация JAX-WS такого функционала не предусматривает.
В любом случае проблема решается установкой неких свойств в контексте запроса следующим образом:<ServiceName> serv = new <ServiceName>();
<PortTypeName> port = confServ.get<PortName>();
((BindingProvider) port).getRequestContext().put(<ParameterName>, iTimeoutValue);
, где ServiceName - имя SOAP-сервиса, PortName - имя порта, PortTypeName - имя типа порта (эти классы были сгенерированы wsimport`ом), iTimeoutValue - величина таймаута, которую хотим установить, ParameterName - имя параметра, зависящее от реализации JAX-WS.
Для Tomcat 6 достаточно установки свойства JAXWSProperties.REQUEST_TIMEOUT, однако видел также рекомендации по установке свойств JAXWSProperties.CONNECT_TIMEOUT и BindingProviderProperties.REQUEST_TIMEOUT, так что можно на всякий случай устанавливать все 3. Для JBoss используется свойство org.jboss.ws.core.StubExt.StubExt.PROPERTY_CLIENT_TIMEOUT (http://stackoverflow.com/questions/2592303/how-do-i-set-the-jax-ws-client-request-timeout-programatically-on-jboss).
Если при сборке проекта возникают ошибки типа "package com.sun.xml.internal.ws.client does not exist", решение описано здесь: http://barbitoff.blogspot.com/2012/03/comsunxmlinternalws.html.
Если при сборке проекта возникают ошибки типа "package com.sun.xml.internal.ws.client does not exist", решение описано здесь: http://barbitoff.blogspot.com/2012/03/comsunxmlinternalws.html.
Комментариев нет:
Отправить комментарий