Apache camel Camel Azure BlobServiceProducer IllegalArgumentException:不支持的blob类型:org.apache.Camel.component.file.GenericFile
我已经编写了一个camel路由,它轮询一个文件夹并将其发送到Azure Blob容器 我遵循Azure文档页面中提到的示例 我正在倒车。我使用的不是消费者,而是Azure Blob生产者。 这是我的路线。我使用了JavaDSLApache camel Camel Azure BlobServiceProducer IllegalArgumentException:不支持的blob类型:org.apache.Camel.component.file.GenericFile,apache-camel,Apache Camel,我已经编写了一个camel路由,它轮询一个文件夹并将其发送到Azure Blob容器 我遵循Azure文档页面中提到的示例 我正在倒车。我使用的不是消费者,而是Azure Blob生产者。 这是我的路线。我使用了JavaDSL from("file://C:/camel/source1").to("azure-blob://datastorage/container1/BLOB1?credentials=#credentials&operation=updateBlockBlob")
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");
我的问题是,我真的需要编写处理器吗?camel组件不应该接收流或文件对象吗?是的,这是一个小错误。我已经登记了一张票: 您可以做您所做的工作,或者您可以添加一个.convertBodyTo并转换为一个FileInputStream、String等
from("file://C:/camel/source1")
.convertBodyTo(String.class)
...
有没有办法通过拦截器来实现这一点?我试过了,但我有多条路线,我列出了blob,也更新了blob。仅当它是azure blob且操作=更新时才要执行此操作。猜测可能需要使用一些正则表达式来完成,因此您可以使用interceptSendToEndpointazure*然后将covertBodyTo添加到。有关更多详细信息,请参阅:这会导致性能问题吗?因为我需要将其发送到azure,所以我认为使用拆分器不会有任何帮助。很抱歉,我要离开Topict。interceptSendToEndpoint不会导致性能问题,它将在创建路由时进行拦截并将其添加。convertBodyTo作为内联,就像您自己键入的一样。但是对于任何与性能相关的事情,请让计算机进行测试和比较。