Camel CXF: тайм-аут клиента мыла

Я использую конечную точку Camel CXF для соединения с моим мыльным сервером. Я хотел добавить таймаут для моего запроса от клиента. Для этого я использую опцию continueationTimeout. Но это не работает. Запрос является тайм-аут без ожидания времени, которое я настроил.

Ниже моя конфигурация конечной точки.

<camel-cxf:cxfEndpoint id="tmAPIWSEndpoint" address="http://IN2NPDCEDB01:8088/webservices/services/TransportationManager"
            wsdlURL="/wsdl/TransportationManager.wsdl"
            endpointName="cis:TransportationManagerPort"
            serviceName="cis:TransportationManagerService"
            xmlns:cis="http://www.i2.com/cis"
            continuationTimeout="60000">
        <camel-cxf:properties>
            <entry key="dataFormat" value="MESSAGE"/>
            <entry key="username" value="XXX"/>
            <entry key="password" value="XXX"/>
        </camel-cxf:properties>
    </camel-cxf:cxfEndpoint>

2 ответа

Решение

Ваш вопрос не очень понятен, так как теперь существует верблюжий маршрут, поэтому я не вижу, создаете ли вы SOAP-сервис внутри Camel или вы вызываете SOAP-сервис из Camel в качестве клиента. Судя по небольшой отправленной вами информации, создается впечатление, что вы создаете клиента.

Согласно документации CXF на верблюдах

  • continueationTimeout: эта опция используется для установки времени ожидания продолжения CXF, которое может быть использовано в CxfConsumer по умолчанию, когда сервер CXF использует транспорт Jetty или Servlet. (До Camel 2.14.0 CxfConsumer просто устанавливал таймаут продолжения равным 0, что означает, что операция приостановки продолжения никогда не прекращается.)

Обратите внимание, что это связано с настройками сервера CXF, а не с настройками клиента. Вы используете это свойство, но я не думаю, что это то, что вы ищете.

Если вы обратитесь к странице документации по настройке клиента Apache CXF, вы найдете там следующие примечания:

  • ConnectionTimeout: указывает время в миллисекундах, в течение которого клиент будет пытаться установить соединение до истечения времени ожидания. По умолчанию 30000 (30 секунд). 0 указывает, что клиент будет продолжать пытаться открыть соединение в течение неопределенного времени.
  • ReceiveTimeout: указывает количество времени в миллисекундах, в течение которого клиент будет ожидать ответа, прежде чем истечет время ожидания. По умолчанию 60000. 0 указывает, что клиент будет ждать бесконечно.

Если вы посетите страницу документации CXF, там много примеров.

Вот как это сделать программно:

HelloWorld hello = (HelloWorld) context.getBean("helloService");
org.apache.cxf.endpoint.Client client = ClientProxy.getClient(hello);
HTTPConduit httpConduit = (HTTPConduit) client.getConduit();
HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();
httpClientPolicy.setConnectionTimeout(5000);
httpClientPolicy.setAllowChunking(false);
httpClientPolicy.setReceiveTimeout(5000);
httpConduit.setClient(httpClientPolicy);
System.out.println(hello.getHelloWorldAsString("Everyone"));

(Я использую spirng)

<bean id="helloService"
    class="soap.timeout.demo.client.jaxws.HelloWorld"
    factory-bean="helloServiceFactory" factory-method="create"/>
<bean id="helloServiceFactory"
    class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">
    <property name="serviceClass" value="soap.timeout.demo.client.jaxws.HelloWorld"/>
    <property name="address" value="http://localhost:9999/ws/hello"/>
</bean>
Другие вопросы по тегам