2013-07-24 26 views
0

我想在Mule中运行XPath表达式。它给了我一个又一个的错误。 有人可以帮助我纠正这些骡子XPath表达式:复杂Mule XPath表达式抛出异常

<xm:namespace-manager includeConfigNamespaces="true"> 
     <xm:namespace prefix="acord" uri="ACORD.org/Standards/Life/2" /> 
     <xm:namespace prefix="soap" uri="schemas.xmlsoap.org/soap/envelope/" /> 
    </xm:namespace-manager> 

    <set-variable variableName="pwaHolding" 
     value="#[xpath('//acord:TXLife/acord:TXLifeRequest/acord:OLifE/acord:Relation[acord:RelationRoleCode/@tc = '37']/@OriginatingObjectID').value" /> 
    <set-variable variableName="pwaPolNumber" 
     value="#[xpath('//acord:TXLife/acord:TXLifeRequest/acord:OLifE/acord:Holding[@id=$pwaHolding]/acord:Policy/acord:PolNumber').text]" /> 

试图执行上述XPATH表达式时,我得到异常下面:

Message :Execution of the expression "xpath('//acord:TXLife/acord:TXLifeRequest/acord:OLifE/acord:Relation[acord:RelationRoleCode/@tc == '37']/@OriginatingObjectID').value" failed. (org.mule.api.expression.ExpressionRuntimeException). Message payload is of type: String 
    Code     : MULE_ERROR--2 
    -------------------------------------------------------------------------------- 
    Exception stack is: 
    1. [Error: unexpected token: 37] 
    [Near : {... @tc == '37']/@OriginatingObjec ....}] 
           ^
    [Line: 1, Column: 96] (org. 

mvel2.CompileException) 
org.mvel2.compiler.ExpressionCompiler:247 (null) 
2. Execution of the expression "xpath('//acord:TXLife/acord:TXLifeRequest/acord:OLifE/acord:Relation[acord:RelationRoleCode/@tc == '37']/@OriginatingObjectID').value" failed. (org.mule.api.expression.ExpressionRuntimeException) 
org.mule.el.mvel.MVELExpressionLanguage:211 (http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/api/expression/ExpressionRuntimeException.html) 
3. Execution of the expression "xpath('//acord:TXLife/acord:TXLifeRequest/acord:OLifE/acord:Relation[acord:RelationRoleCode/@tc == '37']/@OriginatingObjectID').value" failed. (org.mule.api.expression.ExpressionRuntimeException). Message payload is of type: String (org.mule.api.transformer.TransformerMessagingException) 
org.mule.transformer.AbstractTransformer:123 (http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/api/transformer/TransformerMessagingException.html) 
-------------------------------------------------------------------------------- 
Root Exception stack trace: 
[Error: unexpected token: 37] 
[Near : {... @tc == '37']/@OriginatingObjec ....}]       ^
[Line: 1, Column: 96] 
at org.mvel2.compiler.ExpressionCompiler._compile(ExpressionCompiler.java:247) 
at org.mvel2.util.ParseTools.subCompileExpression(ParseTools.java:1944) 
at org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.getMethod(ReflectiveAccessorOptimizer.java:862) 
+ 3 more (set debug level logging or '-Dmule.verbose.exceptions=true' for everything) 

嗨大卫,

我甚至取代'后与&quot;我仍然收到以下错误:

 
Message    : Execution of the expression "xpath('//acord:TXLife/acord:TXLifeRequest/acord:OLifE/acord:Relation[acord:RelationRoleCode/@tc == '37']/@OriginatingObjectID').value" failed. (org.mule.api.expression.ExpressionRuntimeException). Message payload is of type: String 
Code     : MULE_ERROR--2 
-------------------------------------------------------------------------------- 
Exception stack is: 
1. [Error: unexpected token: 37] 
[Near : {... @tc == '37']/@OriginatingObjec ....}] 
        ^
[Line: 1, Column: 96] (org.mvel2.CompileException) 
    org.mvel2.compiler.ExpressionCompiler:247 (null) 
2. Execution of the expression "xpath('//acord:TXLife/acord:TXLifeRequest/acord:OLifE/acord:Relation[acord:RelationRoleCode/@tc == '37']/@OriginatingObjectID').value" failed. (org.mule.api.expression.ExpressionRuntimeException) 
    org.mule.el.mvel.MVELExpressionLanguage:211 (http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/api/expression/ExpressionRuntimeException.html) 
3. Execution of the expression "xpath('//acord:TXLife/acord:TXLifeRequest/acord:OLifE/acord:Relation[acord:RelationRoleCode/@tc == '37']/@OriginatingObjectID').value" failed. (org.mule.api.expression.ExpressionRuntimeException). Message payload is of type: String (org.mule.api.transformer.TransformerMessagingException) 
    org.mule.transformer.AbstractTransformer:123 (http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/api/transformer/TransformerMessagingException.html) 

我有我的第二个XPATH表达式,这也是失败的。请帮我解决这个问题,以及

+1

您是否配置了命名空间管理?什么错误? Mule版本? –

+0

嗨大卫,我使用Mule 3.3.1,并已配置名称空间管理器如下: \t \t \t \t \t user2324686

+0

我编辑了您的问题以添加此信息,请执行相同的操作并添加您在问题中收到的错误。 –

回答

3

这个错误来自您使用'分隔的字符串,它不能正常工作内'的事实。例如,在下面的表达式中的问题是围绕'37'

value="#[xpath('//acord:TXLife/acord:TXLifeRequest/acord:OLifE/acord:Relation[acord:RelationRoleCode/@tc = '37']/@OriginatingObjectID').value" /> 

另一个问题是,闭合]在所述MEL表达的末端缺失。

尝试:

value="#[xpath(&quot;//acord:TXLife/acord:TXLifeRequest/acord:OLifE/acord:Relation[acord:RelationRoleCode/@tc = '37']/@OriginatingObjectID&quot;).value" /> 

看你的第二个XPath,我看到[@id=$pwaHolding]。我假设在这一点上,您正试图使用​​第一个XPath提取的流变量pwaHolding。由于MVEL没有字符串插值,这将不起作用。您需要改用串联和,顺便说一下,不要忘了单引号值@id相比:

[@id‌='&quot; + pwaHolding + &quot;'] 
+0

嗨大卫,我仍然得到例外。 。 – user2324686

+0

我看到,另一个问题是在MEL表达式末尾缺少结尾']'。有了这个固定的,XPath表达式对我来说工作得很好。 –

+0

感谢David第一个XPATH表达式现在对我来说工作正常。请看看第二个XPATH表达式。这也是失败的。 user2324686