我在处理ftp文件的骆驼路线中正在努力进行类型转换。我的路线看起来像这样(在Spring DSL中):
<route id="processIncomingFtpFile" errorHandlerRef="parkingCitErrHandler">
<from uri="{{ftp.parkingcit.input.path}}"/>
<bean ref="ftpZipFileHandler"/>
<unmarshal ref="bindyCsvFormat"/>
<bean ref="parkingTicketsHandler"/>
<split>
<simple>${body}</simple>
<marshal ref="jaxbFormatter"/>
<convertBodyTo type="java.io.File"/>
<to uri="{{ftp.parkingcit.output.path}}"/>
</split>
</route>
我的处理程序签名如下:
public File handleIncomingFile(File incomingfile)...
但是,这会产生以下类型转换问题:
org.apache.camel.InvalidPayloadException: No body available of type: java.io.File but has value: RemoteFile[test.zip] of type: org.apache.camel.component.file.remote.RemoteFile on: test.zip. Caused by: No type converter available to convert from type: org.apache.camel.component.file.remote.RemoteFile to the required type: java.io.File with value RemoteFile[test.zip]. Exchange[test.zip]. Caused by: [org.apache.camel.NoTypeConversionAvailableException - No type converter available to convert from type: org.apache.camel.component.file.remote.RemoteFile to the required type: java.io.File with value RemoteFile[test.zip]]
我的问题是:我是否应该能够在内存中处理我的ftp文件,而没有明确告诉camel将其写入磁盘,类型转换器为我在幕后自动完成工作?或者我正在努力做到毫无意义,因为我的处理程序想要一个java.io.File作为其输入参数,即我必须将数据写入磁盘才能使其工作?
答案 0 :(得分:0)
答案 1 :(得分:0)
java.io.File用于文件系统,而不用于FTP文件。
您需要将bean方法签名中的类型更改为Camel的GenericFile或来自Camel使用的commons-net FTP客户端库的实际类型。