我已經寫了駱駝路線其輪詢的文件夾,並將其發送到天青斑點集裝箱駱駝天青BlobServiceProducer拋出:IllegalArgumentException:不支持的BLOB類型:org.apache.camel.component.file.GenericFile
我隨後提到的示例在Azure文檔頁面中 https://github.com/apache/camel/blob/master/components/camel-azure/src/main/docs/azure-blob-component.adoc
我正在倒轉路線。我使用的是Azure Blob Producer,而不是消費者。 這是我的路線。我已經使用Java DSL。
from("file://C:/camel/source1").to("azure-blob://datastorage/container1/BLOB1?credentials=#credentials&operation=updateBlockBlob")
當我放置一個文件時,出現以下錯誤。
**java.lang.IllegalArgumentException: Unsupported blob type:org.apache.camel.component.file.GenericFile
at org.apache.camel.component.azure.blob.BlobServiceProducer.getInputStreamFromExchange(BlobServiceProducer.java:474) ~[camel-azure-2.19.2.jar:2.19.2]
at org.apache.camel.component.azure.blob.BlobServiceProducer.updateBlockBlob(BlobServiceProducer.java:143) ~[camel-azure-2.19.2.jar:2.19.2]
at org.apache.camel.component.azure.blob.BlobServiceProducer.process(BlobServiceProducer.java:79) ~[camel-azure-2.19.2.jar:2.19.2]**
我能解決這個問題。我重寫了我的路線。
from("file://C:/camel/source1")
.process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
Object file = exchange.getIn().getMandatoryBody();
exchange.getOut().setBody(
GenericFileConverter.genericFileToInputStream(
(GenericFile<?>) file, exchange));
}
})
.to("azure-blob://datastorage/container1/BLOB1?credentials=#credentials&operation=updateBlockBlob")
.to("mock:Result");
我的問題是,我需要真的寫處理器嗎?駱駝組件不應該接收流或文件對象嗎?
有沒有一種方法,我可以做到這一點通過一個攔截器?我嘗試過,但我有多個路線,其中我列出blob並更新blob。只有當它是一個azure blob和操作=更新時纔想做。猜猜可能需要使用一些正則表達式來做 – pointerness
你可以使用interceptSendToEndpoint(「azure *」),然後添加covertBodyTo。詳情請參閱:http://camel.apache.org/intercept –
這是否會導致任何性能問題?因爲我需要將它發送到天藍色,我認爲使用分離器不會幫助正確。對不起,我要關閉主題 – pointerness