0

我正在为端点使用 Apache Camel 和 CXF Spring 配置我如何调用特定方法。即,如果 wsdl 在 10 种方法中定义了我需要向站点公开 10 个 cxfEndpoint,或者它可以通过调用以某种方式进行参数化?如何插入“方法名称”想要在该服务中调用?

 <cxf:cxfEndpoint id="serviceEndpoint" address="http://localhost:9000/SoapContext/SoapPort"
        wsdlURL="testutils/hello_world.wsdl"
        serviceClass="org.apache.hello_world_soap_http.Greeter"
        endpointName="s:SoapPort"
        serviceName="s:SOAPService"
    xmlns:s="http://apache.org/hello_world_soap_http" />
4

1 回答 1

1

因此,当您创建具有 5 个操作的 WSDL 时,这 5 个操作将在您在 CXF 中运行 WSDL2JAVA 工具时公开。

假设我有一个带有 2 个操作的 WSDL,如下所示:

  1. 获取客户端
  2. 列表客户端

在骆驼中,当我将这条路线作为骆驼消费者公开时,我可以通过检查headers.operationName消息上的属性来查看执行了哪个操作。

例如,当用户执行GetClient操作时,headers.operationName将等于字符串"GetClient"

因此,我可以创建如下路线来处理不同的操作:

    <from uri="cxf:bean:AccountsService?dataFormat=POJO"/>
    <doTry>
        <choice>
            <when>
                <simple>${headers.operationName} == 'GetClient'</simple>
                <bean ref="GetClientBean"/>
            </when>
            <when>
                <simple>${headers.operationName} == 'ListClient'</simple>
                <bean ref="ListClientBean"/>
            </when>
            <when>
                <simple>${headers.operationName} == 'SomeOtherOperation'</simple>
                <bean ref="SomeOtherBean"/>
            </when>
        </choice>

如果您想限制公开的操作,您可以简单地抛出异常或在您不想公开的操作上构造错误消息。

玩得开心!

于 2013-09-13T00:57:43.823 回答