我有一个接收SOAP消息的MULE流程。我试图在此肥皂消息中提取节点的名称。
我的肥皂信息如下:
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ns="http://abc/dto/2013/08"
xmlns:ns1="http://abc/message/dto/2013/08"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Header/>
<soapenv:Body>
<ns:RetrieveOrgNumber>
<ns:request>
<ns1:sessionId>SessionId</ns1:sessionId>
<ns1:timeStamp>2001-12-31T12:00:00</ns1:timeStamp>
<ns1:userIdentifier>UserIdentifier</ns1:userIdentifier>
<ns1:language>EN</ns1:language>
<ns1:source>SoapUI</ns1:source>
<!-- 1 or more repetitions: -->
<ns:orgNumber>AE7WJ046</ns:orgNumber>
</ns:request>
</ns:RetrieveOrgNumber>
</soapenv:Body>
</soapenv:Envelope>
我希望能够在操作中检索节点RetrieveOrgNumber的名称。我想将其设置为变量。
我尝试了#[xpath(fn:local-name('soapenv:Envelope/soapenv:Body/*[1]'))]
但是我收到了这个错误:
执行表达式xpath(fn:local-name('soapenv:Envelope / soapenv:Body / * [1]'))失败。 (org.mule.api.expression.ExpressionRuntimeException)。消息有效内容的类型为:String
我忘了添加我在消息流xml中添加名称空间:
<mulexml:namespace-manager>
<mulexml:namespace prefix="soapenv" uri="http://schemas.xmlsoap.org/soap/envelope/" />
<mulexml:namespace prefix="ns" uri="http://sanlam.co.za/group/party/service/clientmanagement/dto/2013/08" />
<mulexml:namespace prefix="ns1" uri="http://sanlam.co.za/group/common/message/dto/2013/08" />
<mulexml:namespace prefix="xsi" uri="http://www.w3.org/2001/XMLSchema-instance" />
</mulexml:namespace-manager>
感谢你回复Mark。
我尝试过编辑,但它无效。我不能在这里发布我的流程图的图片。我需要至少10的声誉。
但是考虑到你的建议我尝试了Object to XML(StringTobyteArray
不起作用)现在我的xpath表达式有:
#[xpath(local-name('soapenv:Envelope/soapenv:Body/*[1]'))]
我得到的错误是:
Caused by: [Error: unresolvable property or identifier: local]
[Near : {... xpath(local-name('soapenv:Envelope/s ....}]
^
[Line: 1, Column: 7]
at org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.getBeanProperty(ReflectiveAccessorOptimizer.java:687)
at org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.getBeanPropertyAO(ReflectiveAccessorOptimizer.java:472)
at org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.compileGetChain(ReflectiveAccessorOptimizer.java:374)
当我尝试fn:local-name
时,fn
发生了名称空间错误。
答案 0 :(得分:0)
您有2个选项,或者您需要在Mule中声明命名空间,以便在XPath查询中使用这些命名空间。见http://www.mulesoft.org/documentation/display/current/XML+Namespaces
#[xpath(/soapenv:Envelope/soapenv:Body/*[1]/local-name())]
另一种选择是你尝试使用local-name()
,而不是匹配本地名称而不是名称空间前缀:
#[xpath(/*[local-name()='Envelope']/*[local-name()='Body']/*[1]/local-name())]
修改强>
错误文件中的错误消息Message payload is of type: String
也会跟随Byte[] expected
之类的文字。所以你应该在XPath表达式前面添加一个变换器。例如:http://www.mulesoft.org/documentation/display/current/Using+Transformers
也许以下其中一项可以提供帮助: