2016-11-29 48 views
1

我想获得arg0的值。 这是我的代码使用Mule上的Xpath从SOAP消息中获得价值

<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

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

我必须在调用xpath3之前声明一个dom-to-xml转换器。 另外,为了在xpath3中的查询中使用prefix,我声明了名称空间前缀=“sup”。

下面是代码:

// 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。