【问题标题】:In Camel how can i split a route using xpath on a header在 Camel 中,我如何在标头上使用 xpath 拆分路由
【发布时间】:2013-08-28 18:11:08
【问题描述】:

正如标题所示,我有一个带有标题的路由,其中​​包含一些类似于以下 sn-p 的 xml 作为字符串;

<files>
  <image_file1>image.png</image_file1>
  <image_file2>image.png</image_file2>
</files>

我正在尝试使用以下内容通过 xpath 进行拆分。如下所示,当 xml 是正文的一部分时,一切运行良好:-

from(myIncomingQueue)
    .convertBodyTo(String.class, "utf-8")
    .split(xpath("//*[local-name()='files']/*"))
        .setHeader("FilePropertyToRetrieve", xpath("local-name(//*)").stringResult())
        .to(myFileDownloadQueue)
.routeId("COMMON-CON-Attachment_Router-Id");

我找到了使用以下方法的解决方案:-

from(myIncomingQueue)
    .setBody(header("myHeaderWithXml"))
    .convertBodyTo(String.class, "utf-8")
    .split(xpath("//*[local-name()='files']/*"))
        .setHeader("FilePropertyToRetrieve", xpath("local-name(//*)").stringResult())
        .setBody(header("CamelOriginalBody"))
        .to(myFileDownloadQueue)
.routeId("COMMON-CON-Attachment_Router-Id");

但出于学习目的仍想知道,是否有一种方法可以在不将标头移入正文然后再反转的情况下做到这一点?

【问题讨论】:

    标签: xpath apache-camel


    【解决方案1】:

    是的,如果您在 http://camel.apache.org/xpath 阅读了有关 xpath 的文档 - 然后请参阅在标头上使用 XPath 部分

    类似的东西

      .split(xpath("//*[local-name()='files']/*", "myHeaderWithXml"))
    

    【讨论】:

    • 感谢@Claus 我确实阅读了该页面并且完全错过了 Java DSL 行的那一行文本,确实阅读了它周围的所有内容,因此没有意义。感谢您指出:)
    • 好吧,我今天添加了 java 行。但人们不应该认为 XML 和 Java DSL 100% 基于相同的模型,所以你可以在一个模型中做的所有事情都可以在另一个模型中完成。
    • 感谢克劳斯,我对此很陌生,所以还不能 100% 确定所有这些约定,不幸的是,我们使用的是 2.09 版,所以现在需要使用我的工作。再次欢呼
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-09
    • 1970-01-01
    • 1970-01-01
    • 2018-02-14
    • 1970-01-01
    • 1970-01-01
    • 2015-10-28
    相关资源
    最近更新 更多