当异常消息转到camel中的deadLetterChannel时,如何将MultipartEntityBuilder转换为inputStream?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当异常消息转到camel中的deadLetterChannel时,如何将MultipartEntityBuilder转换为inputStream?相关的知识,希望对你有一定的参考价值。

我正在使用MultipartEntityBuilder向服务器发送文件当服务器没有响应或发生任何其他异常时,文件应该转到deadLetterChennal端点并保存为文件。一切正常但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");  

deadLetter文件不在目录中。我可以在路线中设置类型转换器吗?

我得到的错误:

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");

以上是关于当异常消息转到camel中的deadLetterChannel时,如何将MultipartEntityBuilder转换为inputStream?的主要内容,如果未能解决你的问题,请参考以下文章

Camel,使用字段条件拆分带头的大型XML文件

骆驼 - “子路线”中的异常处理

Apache Camel:如何存储变量以供以后使用

JMS 选择器,用于在带有 Camel 和蓝图的一个标头中具有下划线的消息

当目的地不可用时如何停止使用骆驼路线中的消息

Payara中的Apache Camel:'java:/ TransactionManager'查找失败