使用动态地址的Camel SOAP CXF调用

时间:2015-08-05 15:35:33

标签: spring web-services soap apache-camel cxf

我正在尝试编写一个SOAP Web服务:

  1. 接受一种请求类型A
  2. 将请求A映射到另一个出站请求类型B
  3. 将请求B发送到外部SOAP服务
  4. 将响应B映射回响应A对象(并将其返回)
  5. 当端点(B)静态配置时,我有此工作。

    但我希望能够使用不同的请求/响应类型来访问各种服务。这些可能是通过属性文件配置的。

    是否可以通过某种通用/动态方式执行此操作?

    这是我的春骆驼XML:

    <!— SOAP inbound service —>
    <cxf:cxfEndpoint
            id="paymentService_A"
            serviceClass="#paymentServiceBean"
            address="/PaymentService"/>
    
    <!— SOAP outbound service —>
    <cxf:cxfEndpoint
            id=“paymentService_B"
            wsdlURL="http://localhost:9080/externalpayment/ExternalPaymentService?wsdl"
            serviceClass="com.yngwietiger.ExternalPayment"
            address="http://localhost:9080/externalpayment/ExternalPaymentService"/>
    
    <!— MAP from inbound SOAP request object to external SOAP request object —>
    <bean id="mapAToB_RequestProcessor" class="com.yngwietiger.MyProcessor"/>
    
    <!— MAP external SOAP response to a response for the initial/inbound SOAP request —>
    <bean id="mapBToA_ResponseProcessor" class="com.yngwietiger.MyPostProcessor"/>
    
    <camel:camelContext id="camelContext">
    
        <camel:route>
    
            <camel:from uri="cxf:bean:paymentService_A"/>
            <camel:process ref="mapAToB_RequestProcessor"/>
            <camel:to uri="cxf:bean:paymentService_B"/>
            <camel:process ref="mapBToA_ResponseProcessor"/>
    
        </camel:route>
    
    </camel:camelContext>
    

    显然,我正在使用Camel的cxfEndpoint bean。但我没有看到任何方法为每个请求设置地址,wsdlURL等。这可能吗?

    或者我将不得不为每种类型建立一条路线?如果是这样,我如何动态构建其中一个cxfEndpoints?

    使用Spring的WS模板会更灵活吗?

    我应该采取更好的方式吗?

    提前致谢。

2 个答案:

答案 0 :(得分:1)

骆驼收件人列表最符合您的要求。这是链接http://camel.apache.org/recipient-list.html。您必须生成动态端点并在路径中的某个位置设置标题并调用收件人列表。

答案 1 :(得分:0)

我认为您可以将HTTP端点用于出站邮件。 正如在here

示例中所做的那样