我正在使用 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]
答案 0 :(得分:0)
你可以做这样的事情
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");