我试图使用" Choice"根据部分内容引导XML文档。但是,由于我是骡子的新手,我要了解如何获取xpath表达式来解析传入的消息。
作为SSCCE,我设置了这个流程:
"当"每个选项都设置为
#[xpath('//foo/bar').text] == baz
和
#[xpath('//foo/bar').text] != baz`
分别
无所谓我似乎尝试过;它总是回应客户:
Execution of the expression "xpath('//foo/bar').text] == baz" failed. (org.mule.api.expression.ExpressionRuntimeException). Message payload is of type: ContentLengthInputStream
我是否需要先将输入转换为某些内容?如果是那么什么?或者还有什么我应该做的才能使这项工作?
<小时/> 的修改
检查了日志后,似乎错误与this相同。 JAXB上下文的多个实例。我找到了两种方法来解决这个问题。
一个是重构我们所有的代码只有一个JAXB 的实例(不容易,不是优选但它确实解决了问题)。
另一种是在EML中停止使用XPATH。相反,我创建了一个Java转换器,它手动使用Java Document Builder和XPATH对象来提取信息并将其放在注册表中。这也有效。
请注意,我们无法使用getPayloadAsString()
而无法点击&#34;多个JAXB上下文&#34;。不要问我为什么mule需要一个JAXB上下文来将输入流转换为字符串。所以我们在流程中放置了一个Bytearray to String
变换器:
当有多个JAXB上下文时,如果有人在eml中使用xpath有任何好方法,请随时留下答案
答案 0 :(得分:0)
MULE documentation显示如下示例:
<when expression="#[payload.getPurchaseType() == 'book']">
其中比较运算符及其第二个操作数都在#[...]
内。你试过吗? E.g。
<when expression="#[xpath('//foo/bar').text == 'baz']">