Java 驼色印花

Java 驼色印花,java,apache-camel,pretty-print,Java,Apache Camel,Pretty Print,你能帮我弄清楚如何在我的定制处理器中保留原始文件名吗?我实现了一个预打印处理器来处理通用xml文件。除了文件名更改为驼峰生成的文件名外,它可以正常工作。我还没有弄清楚如何维护原始文件名。 这是我的路线: from("file:{{xslt_out_Event}}?delete=true") .log("Getting file ${file:name}") .process(prettyPrintprocessor) .to("file:{{etl_ready_Event

你能帮我弄清楚如何在我的定制处理器中保留原始文件名吗?我实现了一个预打印处理器来处理通用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);
}
这应该行得通

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

尽管pvpkiran的回答在技术上是正确的,但我认为最简单的解决方案是重用exchange的
In
部分,而不是创建一个新的
Out
部分

执行此操作时:

exchange.getOut().setBody(prettyContents, String.class);
您正在创建一条新的
消息
,其中没有原始消息的任何标题。因此,通过这样做:

exchange.getIn().setBody(prettyContents, String.class);
您只需将旧文件内容替换为新内容,同时保持
CamelFileName
头(以及任何其他头)的完整性。现在,当您将文件写入输出目录时,文件名将保持不变

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