【问题标题】:Mule ESB -Error when dynamically setting Soap Operation in muleMule ESB - 在 mule 中动态设置 Soap 操作时出错
【发布时间】:2015-10-16 21:03:59
【问题描述】:

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

我通过在设置属性之后保留记录器来进行监控。可以通过出站消息属性中的值查看操作。不知道为什么值没有放在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>

我没有设置肥皂操作,因为我已经设置了属性。我仍然遇到错误。任何人都可以帮助解决这个问题。 但是当我手动输入操作名称时。可以看到回复。

【问题讨论】:

  • 你能展示你的payload吗?

标签: mule mule-studio mule-el


【解决方案1】:

CXF jaxws-client 的属性operationcxf:jaxws-client 元素标记内时被采用。 所以你可以在cxf:jaxws-client标签中声明operation

第二件事是 cxf:jaxws-client 中的 operation 属性无法评估 Mule Expression Language。所以它不能采用 MEL 表达式。它只能接受字符串。这就是当您手动键入而不是动态加载时它可以工作的原因。

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

Mule Jira

【讨论】:

    【解决方案2】:

    创建 QName 时出现“本地部分不能为“null””之类的异常

    您设置的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,使用定义所有操作的唯一命名空间。

    【讨论】:

      【解决方案3】:

      只需在 cxf:jaxws-client 之前使用它

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多