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