驼色漂亮印花
Camel Pretty Print
你能帮我弄清楚如何在我的自定义处理器中保留原始文件名吗?我实现了一个 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);
}
这应该有效。
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 的回答在技术上是正确的,但我认为最简单的解决方案是仅重用交换的 In
部分,而不是创建新的 Out
部分。
当你这样做时:
exchange.getOut().setBody(prettyContents, String.class);
您正在创建一个新的 Message
,没有原始邮件中的任何 header。因此,改为这样做:
exchange.getIn().setBody(prettyContents, String.class);
您只需用新文件替换旧文件内容,同时保持 CamelFileName
header 完整(以及任何其他 header)。现在,当您将文件写入输出目录时,文件名将保持不变。
Here 您可以详细了解如何以及何时分别使用 getIn
和 getOut
。
你能帮我弄清楚如何在我的自定义处理器中保留原始文件名吗?我实现了一个 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);
}
这应该有效。
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 的回答在技术上是正确的,但我认为最简单的解决方案是仅重用交换的 In
部分,而不是创建新的 Out
部分。
当你这样做时:
exchange.getOut().setBody(prettyContents, String.class);
您正在创建一个新的 Message
,没有原始邮件中的任何 header。因此,改为这样做:
exchange.getIn().setBody(prettyContents, String.class);
您只需用新文件替换旧文件内容,同时保持 CamelFileName
header 完整(以及任何其他 header)。现在,当您将文件写入输出目录时,文件名将保持不变。
Here 您可以详细了解如何以及何时分别使用 getIn
和 getOut
。