来自Camel-exchange body的File Object在Camel FTP中为null

时间:2014-07-03 03:29:16

标签: file-io null unmarshalling jaxb2 camel-ftp

基于FTP2组件的路由定义很简单。

        Endpoint[sftp://server.com:22//path/to/file/?consumer.delay=900000&password=xxxxxx&username=user]

我正在尝试从FTP文件夹中读取文件。

   JAXBContext jaxBContext = JAXBContext.newInstance(ObjectFactory.class);
   Unmarshaller unmarshaller = jaxBContext.createUnmarshaller();
   File authBatchFile = exchange.getIn().getBody(File.class);
   AuthorizationFeed batchAuthFeed = (AuthorizationFeed) JAXBIntrospector
            .getValue(unmarshaller.unmarshal(authBatchFile)); 

交易所拥有应有的一切

    Body                [Body is file based: RemoteFile[fileName.txt]]

标题还会显示文件 CamelFileLength = 81612 的大小。但是,我在交换跟踪之后得到了以下异常。

  java.lang.IllegalArgumentException: The value for the "java.io.File" parameter cannot be null.
at com.ibm.xml.xlxp2.jaxb.unmarshal.AbstractUnmarshallerImpl.reportNullParameter(AbstractUnmarshallerImpl.java:180)
at com.ibm.xml.xlxp2.jaxb.unmarshal.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:72)
at com.wellpoint.clihub.hie.um.camel.processor.BatchCFFProcessor.process(BatchCFFProcessor.java:47)

1 个答案:

答案 0 :(得分:2)

我通过添加到路线定义

找到了解决方案
&localWorkDirectory=/tmp. 

这样它就不会将它视为远程文件,并认为它是 java.io.File 。我认为Camel应该在处理远程文件时将其作为默认功能。根据他们的文件,

  

上述路由非常有效,因为它避免将整个文件内容读入内存。它会将远程文件直接下载到本地文件流。然后将java.io.File句柄用作Exchange主体。