Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 将Mule XPath用作命名空间前缀时出错_Xml_Xpath_Mule - Fatal编程技术网

Xml 将Mule XPath用作命名空间前缀时出错

Xml 将Mule XPath用作命名空间前缀时出错,xml,xpath,mule,Xml,Xpath,Mule,使用Mule EE v2.5.2: 我有一个Mule流,可以选择在负载上运行XPath表达式: <choice doc:name="Is Fault?"> <when expression="#[xpath('/iXML:Fault') != null]"> <set-payload value="#[xpath('/iXML:Fault')]" doc:name="Retrieve Fault element"/> &

使用Mule EE v2.5.2:

我有一个Mule流,可以选择在负载上运行XPath表达式:

<choice doc:name="Is Fault?">
    <when expression="#[xpath('/iXML:Fault') != null]">
        <set-payload value="#[xpath('/iXML:Fault')]" doc:name="Retrieve Fault element"/>
        <mulexml:dom-to-xml-transformer doc:name="DOM to XML"/>
        <mulexml:jaxb-xml-to-object-transformer jaxbContext-ref="JAXB_Context" doc:name="XML to JAXB Object"/>
        <logger message="Exception Caught: #[payload.faultstring] - FaultCode #[payload.faultcode] - #[payload.detail.error]" level="ERROR" doc:name="Log Aorta Fault"/>
        <message-filter throwOnUnaccepted="true" doc:name="Throw exception for Aorta Fault">
            <not-filter>
                <payload-type-filter expectedType="com.vatit.blaze.esb.dragon.dto.Fault"/>
            </not-filter>
        </message-filter>
    </when>
    <otherwise>
        <logger message="Dragon message verified OK." level="TRACE" doc:name="Logger"/>
    </otherwise>
</choice>


我做错了什么?

以下几点对我来说非常好:

<mulexml:namespace-manager includeConfigNamespaces="true">
    <mulexml:namespace prefix="iXML" uri="urn:schemas-ixml-org:ixml.v1"/>
</mulexml:namespace-manager>

<flow name="test-http">
    <http:inbound-endpoint host="127.0.0.1" port="8081" doc:name="HTTP" />
    <choice doc:name="Is Fault?">
        <when expression="#[xpath('//iXML:Fault') != null]">
            <logger message="ERROR TERRIBLE" level="ERROR" doc:name="Log Aorta Fault" />
        </when>
        <otherwise>
            <logger message="Dragon message verified OK." level="ERROR" doc:name="Logger" />
        </otherwise>
    </choice>
</flow>


注意,我稍微更改了XPath。我想知道你用的是哪种型号的骡子?我刚刚试过3.6。

我的错,我在后续几轮中得到的XML没有包括ns定义。你的解决方案很好,谢谢,维克多。
<mulexml:namespace-manager includeConfigNamespaces="true">
    <mulexml:namespace prefix="iXML" uri="urn:schemas-ixml-org:ixml.v1"/>
</mulexml:namespace-manager>
2015-01-27 11:45:08 ERROR CatchMessagingExceptionStrategy:337 - 
********************************************************************************
Message               : com.ctc.wstx.exc.WstxParsingException: Undeclared namespace prefix "iXML"
 at [row,col {unknown-source}]: [3,27] (javax.xml.transform.TransformerException)
Code                  : MULE_ERROR--2
--------------------------------------------------------------------------------
Exception stack is:
1. Undeclared namespace prefix "iXML"
 at [row,col {unknown-source}]: [3,27] (org.xml.sax.SAXParseException)
  org.mule.module.xml.stax.StaxSource$PseudoReader:208 (null)
2. com.ctc.wstx.exc.WstxParsingException: Undeclared namespace prefix "iXML"
 at [row,col {unknown-source}]: [3,27] (javax.xml.transform.TransformerException)
  org.apache.xalan.transformer.TransformerIdentityImpl:502 (http://java.sun.com/j2ee/sdk_1.3/techdocs/api/javax/xml/transform/TransformerException.html)
3. com.ctc.wstx.exc.WstxParsingException: Undeclared namespace prefix "iXML"
 at [row,col {unknown-source}]: [3,27] (javax.xml.transform.TransformerException) (org.mule.api.transformer.TransformerException)
  org.mule.module.xml.transformer.XmlToDomDocument:83 (http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/api/transformer/TransformerException.html)
--------------------------------------------------------------------------------
Root Exception stack trace:
com.ctc.wstx.exc.WstxParsingException: Undeclared namespace prefix "iXML"
 at [row,col {unknown-source}]: [3,27]
    at org.mule.module.xml.stax.StaxSource$PseudoReader.parse(StaxSource.java:208)
    at org.mule.module.xml.stax.StaxSource$PseudoReader.parse(StaxSource.java:188)
    at org.apache.xalan.transformer.TransformerIdentityImpl.transform(TransformerIdentityImpl.java:485)
    + 3 more (set debug level logging or '-Dmule.verbose.exceptions=true' for everything)
********************************************************************************

2015-01-27 11:45:08 ERROR LoggerMessageProcessor:337 - Exception Caught: Execution of the expression "xpath('//Fault') != null" failed. (org.mule.api.expression.ExpressionRuntimeException). Message payload is of type: ReleasingInputStream
<mulexml:namespace-manager includeConfigNamespaces="true">
    <mulexml:namespace prefix="iXML" uri="urn:schemas-ixml-org:ixml.v1"/>
</mulexml:namespace-manager>

<flow name="test-http">
    <http:inbound-endpoint host="127.0.0.1" port="8081" doc:name="HTTP" />
    <choice doc:name="Is Fault?">
        <when expression="#[xpath('//iXML:Fault') != null]">
            <logger message="ERROR TERRIBLE" level="ERROR" doc:name="Log Aorta Fault" />
        </when>
        <otherwise>
            <logger message="Dragon message verified OK." level="ERROR" doc:name="Logger" />
        </otherwise>
    </choice>
</flow>