骆驼CXF:SOAP客户端超时(Camel CXF: Soap client timeout)

2019-09-29 00:36发布

我使用的骆驼CXF端点连接到我的SOAP服务器。 我想添加超时来自客户端我的要求。 我使用该continuationTimeout选项。 但它不工作。 该请求,而无需等待,我已经配置的时间超时。

下面是我的端点配置。

<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>

Answer 1:

因为没有骆驼的路线,所以我不能看到,如果你正在创建内部骆驼SOAP服务或您呼叫从骆驼SOAP服务作为客户端你的问题不是很清楚。 根据您发送它的点点信息,看来你正在创建一个客户端。

据骆驼CXF文档

  • continuationTimeout:该选项用于设置可能在CxfConsumer默认情况下,当CXF服务器使用码头或Servlet的运输中使用的CXF延续超时。 (骆驼2.14.0之前,CxfConsumer刚刚成立的延续超时时间为0,这意味着继续暂停操作从未超时。)

请注意,这是关系到CXF服务器设置没有客户端设置。 您正在使用此属性,但我不认为这是你在找什么。

如果您引用的Apache CXF客户端设置文档页面,你会发现下面的注意事项有:

  • ConnectionTimeout:指定的时间量,以毫秒为单位,客户端将尝试建立之前超时的连接。 缺省值是30000(30秒)。 0指定客户端将继续尝试无限期地打开一个连接。
  • ReceiveTimeout:指定的时间量,以毫秒为单位,客户端将等待超时之前的响应。 默认值是60000 0指定客户端将无限期地等待。

如果您访问CXF文档页面有很多的例子在那里。



Answer 2:

这里是如何做到这一点编程方式:

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>


文章来源: Camel CXF: Soap client timeout