【问题标题】:Camel Pretty Print骆驼漂亮的印花
【发布时间】:2018-01-26 15:13:01
【问题描述】:

您能帮我弄清楚如何使用我的自定义处理器保留原始文件名吗?我实现了一个 prettyPrint 处理器来处理通用 xml 文件。它的工作原理是文件名更改为骆驼生成的文件名。我一直无法弄清楚如何维护原始文件名。 这是我的路线:

from("file:{{xslt_out_Event}}?delete=true")
    .log("Getting file ${file:name}")
    .process(prettyPrintprocessor)
    .to("file:{{etl_ready_Event}}");

这是我的处理器:

public void process(Exchange exchange) throws Exception {
    File file = exchange.getIn().getBody(File.class);
    String fileContents=FileUtils.readFileToString(file);
    //String = fileName=exchange.getIn().getHeader("org.apache.camel.file.name").toString();
    String fileName=file.getName();
    logger.debug("fileName="+fileName);
    String prettyContents=XMLUtil.formatXml(fileContents);
    exchange.getOut().setBody(prettyContents, String.class);
    //exchange.getOut().setHeader("org.apache.camel.file.name", fileName);
}

【问题讨论】:

    标签: java apache-camel pretty-print


    【解决方案1】:

    尽管 pvpkiran 的回答在技术上是正确的,但我想说最简单的解决方案是重用交换的 In 部分,而不是创建新的 Out 部分。

    当你这样做时:

    exchange.getOut().setBody(prettyContents, String.class);
    

    您正在创建一个新的Message,没有原始邮件中的任何标题。所以改为这样做:

    exchange.getIn().setBody(prettyContents, String.class);
    

    您只需将旧文件内容替换为新文件内容,同时保持CamelFileName 标头(以及任何其他标头)不变。现在,当您将文件写入输出目录时,文件名将保持不变。

    Here 您可以阅读更多关于如何以及何时使用getIngetOut 的信息。

    【讨论】:

      【解决方案2】:

      这应该可以。

      exchange.getOut().setHeader("CamelFileName", ${header.CamelFileName}
      

      将此添加到您的处理器中。

      public void process(Exchange exchange) throws Exception {
          File file = exchange.getIn().getBody(File.class);
          String fileContents=FileUtils.readFileToString(file);
          //String = fileName=exchange.getIn().getHeader("org.apache.camel.file.name").toString();
          String fileName=file.getName();
          logger.debug("fileName="+fileName);
          String prettyContents=XMLUtil.formatXml(fileContents);
          exchange.getOut().setBody(prettyContents, String.class);
          exchange.getOut().setHeader("CamelFileName", ${header.CamelFileName} );
      }
      

      【讨论】:

        猜你喜欢
        • 2010-12-06
        • 2021-06-22
        • 1970-01-01
        • 2023-04-02
        • 2016-11-30
        • 2016-07-07
        • 2014-05-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多