用于筛选传入XML文档的XPath表达式
我正试图使用一种选择,根据XML文档的部分内容来引导它们。但由于我是mule的新手,我正在努力理解如何获取xpath表达式来解析传入消息 作为一名员工,我设置了以下流程: 每个选项的时间设置为用于筛选传入XML文档的XPath表达式,xpath,mule,Xpath,Mule,我正试图使用一种选择,根据XML文档的部分内容来引导它们。但由于我是mule的新手,我正在努力理解如何获取xpath表达式来解析传入消息 作为一名员工,我设置了以下流程: 每个选项的时间设置为 #[xpath('//foo/bar').text] == baz 及 分别 无论我似乎在尝试什么;它总是向客户提供以下响应: Execution of the expression "xpath('//foo/bar').text] == baz" failed. (org.mule.api.expr
#[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
我需要先把输入转换成什么吗?如果是,那又怎样?或者我还应该做些什么来让这一切顺利进行?
编辑
检查日志后,错误似乎与相同。JAXB上下文的多个实例。我找到了两种方法来解决这个问题
一个是重构我们所有的代码,使之只有一个JAXB实例,这并不容易,也不可取,但它确实解决了这个问题
另一个是停止在EML中使用XPATH。相反,我创建了一个Java transformer,它手动使用Java文档生成器和XPATH对象来提取信息并将其放在注册表中。这也起了作用
注意,如果不命中多个JAXB上下文,我们就无法使用getPayloadAsString。不要问我为什么mule需要JAXB上下文来将输入流转换为字符串。因此,我们在流中放置了一个Bytearray to String transformer:
当包含多个JAXB上下文时,如果任何人都有在eml中使用xpath的好方法,那么请随意留下答案,MULE将展示如下示例:
<when expression="#[payload.getPurchaseType() == 'book']">
... 除此之外,还有许多其他排列。mule的输出似乎有误导性,日志显示了一些不同的东西。
<when expression="#[payload.getPurchaseType() == 'book']">
<when expression="#[xpath('//foo/bar').text == 'baz']">