我正在努力在我的骆驼路线中进行类型转换以处理 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 文件,而无需明确告诉骆驼将其写入磁盘,而类型转换器会在幕后为我自动完成工作?或者我想做的事情是没有意义的,因为我的处理程序想要一个 java.io.File 作为它的输入参数,即我必须将数据写入磁盘才能工作?