2017-09-26 50 views
0

我已經寫了駱駝路線其輪詢的文件夾,並將其發送到天青斑點集裝箱駱駝天青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"); 

我的問題是,我需要真的寫處理器嗎?駱駝組件不應該接收流或文件對象嗎?

回答

1

是的,這是一個小錯誤。我已經登錄了票:https://issues.apache.org/jira/browse/CAMEL-11844

你可以做你做的解決辦法,或者你可以添加一個.convertBodyTo並轉換爲一個FileInputStream,字符串等

from("file://C:/camel/source1") 
    .convertBodyTo(String.class) 
    ... 
+0

有沒有一種方法,我可以做到這一點通過一個攔截器?我嘗試過,但我有多個路線,其中我列出blob並更新blob。只有當它是一個azure blob和操作=更新時纔想做。猜猜可能需要使用一些正則表達式來做 – pointerness

+0

你可以使用interceptSendToEndpoint(「azure *」),然後添加covertBodyTo。詳情請參閱:http://camel.apache.org/intercept –

+0

這是否會導致任何性能問題?因爲我需要將它發送到天藍色,我認爲使用分離器不會幫助正確。對不起,我要關閉主題 – pointerness

相關問題