Apache Camel - 要处理的文件名
Apache Camel - Filname to process
我有一条路线,就是从 FTP 下载文件。之后我只想将文件名发送到 jms:queue 而不是其他任何东西。何去何从?
其实我有这条路线
<from uri="ftp://ftp.x.com?username=x&password=x&binary=true&stepwise=false&delay=20000" />
<to uri="file://{{download_folder}}?fileName=${date:file:yyyyMMdd}_${file:name}&keepLastModified=true" />
<to uri="processFileNameToBody" />
<to uri="jms:queue:File.Process" />
在 processFileNameToBody 中使用这个 (org.apache.camel.Processor)
public void process(Exchange exchange) throws Exception {
try {
if (exchange.getIn() instanceof GenericFileMessage) {
log.info("Starting Processing FileName to body");
Map<String, String> map = new HashMap<String, String>();
String file = (String) exchange.getIn().getHeader("CamelFileNameProduced");
map.put("file", file);
XStream xs = new XStream();
String xml = xs.toXML(map);
exchange.getOut().setBody(xml);
log.info("Finished Processing FileName to body:" + file);
}
}
catch (Exception e) {
log.error("", e);
throw e;
}
}
但它不起作用。我在 GenericFileConverter.convert.to
中获得了 NPE
Caused by: org.apache.camel.InvalidPayloadException: No body available of type: java.io.InputStream but has value: RemoteFile[
也许有人对此有解决方案。它不可能那么复杂,但实际上我失败了。我觉得跟写文件的时候有关系。写在最后了,不过我已经改正文了
感谢您的帮助。谢谢
我想你正在寻找这样的东西:
<from uri="ftp://ftp.x.com?username=x&password=x&binary=true&stepwise=false&delay=20000" />
<to uri="file://{{download_folder}}?fileName=${date:file:yyyyMMdd}_${file:name}&keepLastModified=true" />
<setBody><simple>${header.CamelFileNameProduced}</simple></setBody>
<to uri="jms:queue:File.Process" />
我有一条路线,就是从 FTP 下载文件。之后我只想将文件名发送到 jms:queue 而不是其他任何东西。何去何从?
其实我有这条路线
<from uri="ftp://ftp.x.com?username=x&password=x&binary=true&stepwise=false&delay=20000" />
<to uri="file://{{download_folder}}?fileName=${date:file:yyyyMMdd}_${file:name}&keepLastModified=true" />
<to uri="processFileNameToBody" />
<to uri="jms:queue:File.Process" />
在 processFileNameToBody 中使用这个 (org.apache.camel.Processor)
public void process(Exchange exchange) throws Exception {
try {
if (exchange.getIn() instanceof GenericFileMessage) {
log.info("Starting Processing FileName to body");
Map<String, String> map = new HashMap<String, String>();
String file = (String) exchange.getIn().getHeader("CamelFileNameProduced");
map.put("file", file);
XStream xs = new XStream();
String xml = xs.toXML(map);
exchange.getOut().setBody(xml);
log.info("Finished Processing FileName to body:" + file);
}
}
catch (Exception e) {
log.error("", e);
throw e;
}
}
但它不起作用。我在 GenericFileConverter.convert.to
中获得了 NPECaused by: org.apache.camel.InvalidPayloadException: No body available of type: java.io.InputStream but has value: RemoteFile[
也许有人对此有解决方案。它不可能那么复杂,但实际上我失败了。我觉得跟写文件的时候有关系。写在最后了,不过我已经改正文了
感谢您的帮助。谢谢
我想你正在寻找这样的东西:
<from uri="ftp://ftp.x.com?username=x&password=x&binary=true&stepwise=false&delay=20000" />
<to uri="file://{{download_folder}}?fileName=${date:file:yyyyMMdd}_${file:name}&keepLastModified=true" />
<setBody><simple>${header.CamelFileNameProduced}</simple></setBody>
<to uri="jms:queue:File.Process" />