使用Mule上的Xpath从SOAP Message获取价值

时间:2016-11-29 01:44:21

标签: xpath soap mule

我想获得arg0的值。 这是我的代码

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sup="http://support.cxf.module.mule.org/">
   <soapenv:Header/>
   <soapenv:Body>
      <sup:invoke name="INVOKE">
         <!--Optional:-->
         <sup:arg0 name="ARG0">pichon</sup:arg0>
      </sup:invoke>
   </soapenv:Body>
</soapenv:Envelope>

这就是我试图获得价值的方式:

<logger message="#[xpath3('/*/soapenv:Envelope/soapenv:Body/sup:invoke/sup:arg0',payload, 'NODESET')]" level="INFO" doc:name="Logger"/>

在此之前,我声明了这些名称空间:

<mulexml:namespace-manager includeConfigNamespaces="true">
  <mulexml:namespace prefix="soapenv" uri="http://schemas.xmlsoap.org/soap/envelope/"/>
 <mulexml:namespace prefix="sup" uri="http://support.cxf.module.mule.org/"/>
</mulexml:namespace-manager>

但我不能,我收到了这个错误:

Caused by: org.mule.api.MessagingException: Execution of the expression "xpath3('/*/soapenv:Envelope/soapenv:Body/sup:invoke/sup:arg0',payload, 'NODESET')" failed. (org.mule.api.expression.ExpressionRuntimeException).

我正在使用mule 3.8和anypoint studio 6.1.2 如果有人能帮助我,我将不胜感激! 谢谢!

1 个答案:

答案 0 :(得分:1)

最后,我找到了一个关于获取arg0值的解决方案。

在调用xpath3之前,我必须声明一个dom-to-xml-transformer。 此外,我使用prefix =“sup”声明了名称空间,以便在xpath3中使用查询。

以下是代码:

// declared before the flow
<mulexml:namespace-manager includeConfigNamespaces="true">     
 <mulexml:namespace prefix="sup" uri="http://support.cxf.module.mule.org/"/>
</mulexml:namespace-manager>

// into the flow
<mulexml:dom-to-xml-transformer doc:name="DOM to XML"/>
<logger  message="#[xpath3('/sup:invoke/sup:arg0',payload, 'STRING')]"  level="INFO" doc:name="Logger"/>

问候,

Juanfra。