骆驼漂亮的打印

时间:2018-01-26 15:13:02

标签: java apache-camel pretty-print

您能帮我解决一下如何使用自定义处理器保留原始文件名吗?我实现了一个用于处理通用xml文件的prettyPrint处理器。它的工作原理除了文件名更改为camel生成的文件名。我还没有弄清楚如何维护原始文件名。 这是我的路线:

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);
}

2 个答案:

答案 0 :(得分:1)

这应该有效。

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} );
}

答案 1 :(得分:1)

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

执行此操作时:

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

您创建的新Message没有原始邮件中的任何标头。所以通过这样做:

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

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

Here您可以详细了解如何以及何时使用getIngetOut