1
resposta

Duvida desafio 1

Olá,

A minha solução para a primeira parte do desafio foi um pouco diferente da resolução do instrutor. Ela baseia-se em criar uma classe que implementa Processor e na classe implementada, trabalhar com o corpo da Exchange (ver código abaixo).

Minha dúvida é, quando devo usar o método process(Processor) e quando devo somente usar o convertBodyTo como mostrado pelo instrutor.

public class Desafio1 {

    public static void main(String[] args) throws Exception {

        CamelContext context = new DefaultCamelContext();
        context.addRoutes(new RouteBuilder() {

            @Override
            public void configure() throws Exception {
                from("timer://negociacoes?fixedRate=true&delay=1s&period=360s").
                    to("http4://argentumws.caelum.com.br/negociacoes").
                    process(new ProcessReport()).
                to("file:saida")    .
                    log("Done");
            }

        });

        context.start();
        Thread.sleep(20000);
        context.stop();


    }


}

class ProcessReport implements Processor {

    public void process(Exchange exchange) throws Exception {
        String body = exchange.getIn().getBody(String.class);
        // do some business logic here

        // set the output to the file
        exchange.getOut().setBody(body);

        // set the output filename using java code logic, notice that this is done by setting
        // a special header property of the out exchange
        exchange.getOut().setHeader(Exchange.FILE_NAME, "negociacao.xml");
    }

}
1 resposta

Oi Yuri,

ao meu ver a diferença está na expressividade.

Se a sua intenção for converter o corpo da mensagem apenas, o método convertBodyTo é melhor pois é mais enxuto, sem a necessidade de usar uma classe anonima.

Um Processor é mais usado quando precisa fazer algo personalizado na rota que vc nao consegue atingir através dos métodos padrões do Camel.

Tudo bem?

abs Nico