У меня истекает время ожидания соединения, когда я пытаюсь вызвать из клиента WS метод из развернутой мной веб-службы CXF. Оба используют настраиваемые перехватчики, а служба перегружена из-за многочисленных вызовов.
Caused by: java.net.ConnectException: ConnectException invoking http://xxx.xx.xx.xx:12005/myservice/repository?wsdl: Connection timed out
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.mapException(HTTPConduit.java:1338)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1322)
at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56)
at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:622)
at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62)
... 36 more
Я пробовал несколько решений, чтобы отключить тайм-аут или увеличить его, но все потерпело неудачу.
Сначала я попытался создать файл конфигурации CXF, подобный следующему:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:http-conf="http://cxf.apache.org/transports/http/configuration"
xsi:schemaLocation="http://cxf.apache.org/transports/http/configuration
http://cxf.apache.org/schemas/configuration/http-conf.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<http-conf:conduit name="*.http-conduit">
<http-conf:client CacheControl="no-cache"
ConnectionTimeout="0" ReceiveTimeout="0" AllowChunking="false" />
</http-conf:conduit>
</beans>
Затем я заставил свое приложение загрузить его, используя системное свойство Java -Dcxf.config.file=/home/test/resources/cxf.xml
.
В журналах я вижу, что конфигурация прочитана и, следовательно, вероятно, применена
ИНФОРМАЦИЯ: загружен файл конфигурации /home/test/resources/cxf.xml.
К сожалению, время ожидания соединения все еще происходит.
Второе решение, которое я попробовал, состоит в программной установке политики на всех клиентах с помощью следующего фрагмента кода:
public static void setHTTPPolicy(Client client) {
HTTPConduit http = (HTTPConduit) client.getConduit();
HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();
httpClientPolicy.setConnectionTimeout(0);
httpClientPolicy.setReceiveTimeout(0);
httpClientPolicy.setAsyncExecuteTimeout(0);
http.setClient(httpClientPolicy);
}
но опять происходит тайм-аут соединения.
Я что-то пропустил? Есть ли какие-то другие тайм-ауты для настройки? любая помощь приветствуется.