Mule ESB - 在mule中动态设置Soap Operation时的错误

时间:2013-10-24 11:22:25

标签: mule mule-studio mule-el

请帮我解决这个错误。我有一个soap客户端通过3次操作调用该服务。所以在flow1中我设置会话变量来存储操作。在flow2中,我使用 set属性来访问这些变量,作为 cxf:jaxws-client之前的出站消息属性。如此链接中所述:{{3}但是我在创建QName时会遇到像“本地部分不能为空”的异常“。

我通过在设置属性之后保留记录器进行监控。能够在出站消息属性中查看值的操作。不知道为什么值没有放在soap操作字段中。请找到我的xml配置。

         <flow name="Flow1" doc:name="eFlow" tracking:enable-default-events="false">
          <wmq:inbound-endpoint queue="InputQ"  connector ref="WMQ_Connector" doc:name="connector">
           <wmq:transaction action="NONE"/>
          </wmq:inbound-endpoint>
           <set-session-variable variableName="cxf_operation"
        value="#[xpath('fn:local-name(/root/*[2])')]" doc:name="Set_Operation" />
          <some logic here.../>
        </flow>

        <flow name="Service_call" doc:name="Service">
        <set-property propertyName="operation" value="#[sessionVars.cxf_operation]"
        doc:name="Property" />
        <logger message="***outbound properties: #[message.outboundProperties]***" level="INFO" doc:name="Logger"/>
 <cxf:jaxws-client  enableMuleSoapHeaders="true" doc:name="SOAP" serviceClass="com.valid.ICase"/>
   <http:outbound-endpoint exchange-pattern="request-response"
                method="POST" doc:name="HTTP"         address="http://localhost:8085/callingService" />
  <some logic here.../>
   </flow>

因为我设置了财产,所以我没有设置肥皂操作。我仍然得到错误。任何人都可以帮助这个。 但是当我手动输入操作名称时。能够看到回应。

3 个答案:

答案 0 :(得分:0)

当CXF jaxws-client位于operation元素标记内时,将获取属性cxf:jaxws-client。 因此,您可以在operation代码中声明cxf:jaxws-client

第二件事是cxf中的operation属性:jaxws-client无法评估Mule Expression Language。所以它不能采用MEL表达式。它只需要String。这就是当你手动输入它而不是动态加载时它工作的原因。

如果报告任何此类问题,请检查Mule Jira。

Mule Jira

答案 1 :(得分:0)

  

我在创建QName时遇到“本地部分不能为空”的异常“

您设置的operation属性应为javax.xml.namespace.QName。因此,您需要从sessionVars.cxf_operation中提取名称空间URI和本地部分,并在set-property之前的cxf:jaxws-client中使用this QName constructor

这假定sessionVars.cxf_operation的格式为{namespaceURI}localPart。如果不是这样,并且它实际上只包含localPart那么你将不得不在QName构造函数中对命名空间URI进行硬编码,使用希望唯一的命名空间,所有操作都定义在其中

答案 2 :(得分:0)

在cxf之前使用它:jaxws-client

<set-variable value="#[message.inboundProperties['operation']]" variableName="operation" />