Верблюд: опрос Энрич и доступ к бирже

У меня есть этот маршрут

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 то же самое, что я пытаюсь?

Спасибо!

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);  

Отказ от ответственности: я не использовал опрос потребителей много, и может быть более элегантное / эффективное решение

Вы можете использовать «простое» выражение, также используйте «exchangeProperty» вместо «property» в строке.

      from(URI_WEBSERVICE)
.convertBodyTo(Entrada.class)
.process(new ProcessorTratarWS()) 
.pollEnrich().simple("ftp://10.100.8.2/entradaCamel?username=USER&password=PASSWORD&delete=true&fileName=${exchangeProperty.archivoRespuesta}")
.timeout(timeOut)
.aggregationStrategy(new EstrategiaConfirmacion())
.to(WS_RESPONDER)
Другие вопросы по тегам