Apache Camel - 要处理的文件名

Apache Camel - Filname to process

我有一条路线,就是从 FTP 下载文件。之后我只想将文件名发送到 jms:queue 而不是其他任何东西。何去何从?

其实我有这条路线

<from uri="ftp://ftp.x.com?username=x&amp;password=x&amp;binary=true&amp;stepwise=false&amp;delay=20000"    />
<to uri="file://{{download_folder}}?fileName=${date:file:yyyyMMdd}_${file:name}&amp;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&amp;password=x&amp;binary=true&amp;stepwise=false&amp;delay=20000"    />
<to uri="file://{{download_folder}}?fileName=${date:file:yyyyMMdd}_${file:name}&amp;keepLastModified=true"  /> 
<setBody><simple>${header.CamelFileNameProduced}</simple></setBody>
<to uri="jms:queue:File.Process" />