骆驼:pollEnrich并访问Exchange

时间:2015-06-30 17:52:25

标签: java apache-camel integration-patterns

我有这条路线

from(URI_WEBSERVICE)
.convertBodyTo(Entrada.class)
.process(new ProcessorTratarWS()) 
.pollEnrich("ftp://10.100.8.2/entradaCamel?username=USER&password=PASSWORD&delete=true&fileName=${property.archivoRespuesta}", timeOut, new EstrategiaConfirmacion())
.to(WS_RESPONDER)

ProcessorTratarWS()中,我设置了property.archivoRespuesta的值,并且是pollEnrich应该下载的文件的名称。

但是,文档说“ PollEnrich无法访问Exchange ”。这意味着PollEnrich无法读取$ {property.archivoRespuesta}的价值

在Camel中有一些替代方法可以做同样的事吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

来自http://camel.apache.org/content-enricher.html

  

...   您可以使用“收件人列表”并使用“动态”,而不是使用“充实”   端点并在收件人列表中定义AggregationStrategy   然后它将作为一个丰富的工作。 ...

尝试类似:

from(URI_WEBSERVICE)
.convertBodyTo(Entrada.class)
.process(new ProcessorTratarWS()) 
.recipientList(simple("ftp://10.100.8.2/entradaCamel?username=USER&password=PASSWORD&delete=true&fileName=${property.archivoRespuesta}")).aggregationStrategy(new EstrategiaConfirmacion())
.to(WS_RESPONDER)

编辑:

以上代码是将文件保存在FTP服务器中。 如果要从FTP服务器轮询文件,可以尝试

        from(URI_WEBSERVICE)
            .convertBodyTo(Entrada.class)
            .process(new Processor() {
                @Override
                public void process(Exchange exchange) throws Exception {
                    // logic of ProcessorTratarWS goes here
                    ConsumerTemplate consumer=exchange.getContext().createConsumerTemplate();
                    String filename=exchange.getProperty("archivoRespuesta",String.class);                  
                    Object file=consumer.receiveBody("ftp://10.100.8.2/entradaCamel?username=USER&password=PASSWORD&delete=true&fileName="+filename,timeOut);
                    // logic of EstrategiaConfirmacion goes here
            }

        })
        .to(WS_RESPONDER);  

免责声明:我没有多使用polling consumer,可能会有更优雅/更有效的解决方案