您能帮我弄清楚如何使用自定义处理器保留原始文件名吗?我实现了一个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);
}

最佳答案

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

执行此操作时:

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


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

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


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

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

关于java - Camel 漂亮印花,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48464157/

10-10 18:50