如何将多部分实体生成器转换为输入流,当异常消息转到骆驼中的死信通道时



我正在使用MultipartEntityBuilder向服务器发送文件,当服务器没有响应或发生任何其他异常时,文件应该转到deadLetterChennal端点并另存为文件。一切正常,但死信陈纳显示转换问题。

from("direct:sendFileExchange")
 .errorHandler(deadLetterChannel("file:/home/r2/Desktop/ofBizFile/errorFinalServer")
            .asyncDelayedRedelivery()
            .maximumRedeliveries(3)
            .redeliveryDelay(1000)
            .retryAttemptedLogLevel(LoggingLevel.WARN))
            .startupOrder(3)
            .process(new ProcessorSetFileRequest())
            .setHeader(Exchange.HTTP_METHOD, constant("POST"))
            .setHeader(Exchange.HTTP_QUERY,constant("USERNAME=__&PASSWORD=_"))
            .to("https4://someAddress/uploadAndImportFileFromCSVFile?throwExceptionOnFailure=false")
            .to("stream:out");  

死信文件未进入目录。我可以在哪里设置路由中的类型转换器?

我得到的错误:

org.apache.camel.component.file.GenericFileOperationFailedException: Cannot store file: /home/r2/Desktop/ofBizFile/errorFinalServer/orders-02-01-2018.csv
Caused by: [org.apache.camel.NoTypeConversionAvailableException - No type converter available to convert from type:
org.apache.http.entity.mime.MultipartFormEntity to the required type: java.io.InputStream with value org.apache.http.entity.mime.MultipartFormEntity@ddf0916]

你可以做这样的事情

 from("direct:sendFileExchange")
            .errorHandler(deadLetterChannel("direct:savefile").useOriginalMessage()
                .asyncDelayedRedelivery()
                .maximumRedeliveries(3)
                .redeliveryDelay(1000)
                .retryAttemptedLogLevel(LoggingLevel.WARN))
            .startupOrder(3)
            .process(new ProcessorSetFileRequest())
            .setHeader(Exchange.HTTP_METHOD, constant("POST"))
            .setHeader(Exchange.HTTP_QUERY,constant("USERNAME=__&PASSWORD=_"))
            .to("https4://someAddress/uploadAndImportFileFromCSVFile?throwExceptionOnFailure=false")
            .to("stream:out");
 from("direct:savefile").process(exchange -> {
          MultipartFormEntity body = (MultipartFormEntity) exchange.getIn().getBody();
          exchange.getOut().setBody(body.getContent());
        }).to("file:/home/r2/Desktop/ofBizFile/errorFinalServer");