2
给定一个Camel路由,该路由应该提取XML消息的某些内部部分,然后从中创建一条新消息,然后将其传递。Apache Camel/xpath操作结果检测
from(SUB_EXTRACT_XML)
.setExchangePattern(ExchangePattern.InOut)
.setBody().xpath("//mmsg:MyMessage/mmsg:AnyPayload/*", namespaces)
.setBody().simple("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n${in.body}")
.to(...)
对于(“嵌入” XML消息的内部架构中为xs定义:任何)这样的正确的输入信息,也因为消息的工作是什么,我希望它是:
<mmsg:MyMessage>
<mmsg:RandomTags/>
...
<mmsg:AnyPayload> <!-- xs:any in xsd -->
<some><xml/><here/></some>
</mmsg:AnyPayload>
</mmsg:MyMessage>
鉴于存在一些问题,XML消息,如彩信网关:AnyPayload标签丢失,从而使XPATH不能做自己的工作:
<mmsg:MyMessage>
<mmsg:RandomTags/>
...
<some><xml/><here/></some>
</mmsg:MyMessage>
的XPATH将无法提取数据和整个XML m消息(包括mmsg:MyMessage)被传递,这不是预期的。我宁愿在这个阶段抛出一些例外。
问:
有没有一种方法来检查,如果XPath表达式居然发现元素refered到后来的路线,或者如果它未能提取特定元素(S)?
我知道我可以在之前对消息进行一些模式验证并拒绝垃圾消息,但是有什么方法可以查看XPath表达式是否失败?
你使用什么版本的骆驼? –
2.9.2在具体情况下。如果有帮助,我们可以升级到2.10.1。 –
是啊给2.9.3一个尝试。 –