1
resposta

Filtro do apache Camel está trazendo todos os formatos de livros

Boa tarde, o exercicio pede para filtrar somente os livros

filter().xpath("/pedido/itens/item/formato[text()='EBOOK']").

Porém o codigo traz todos os formatos

    from("file:pedidos?delay=5s&noop=true").
                filter().xpath("/pedido/itens/item/formato[text()='EBOOK']").
                log("${id}").
                marshal().xmljson().
                log("${body}").
                setHeader("CamelFileName", simple("${file:name.noext}.json")).
                to("file:saida"); //envia para a pasta saida

Alguém pode me ajudar ???

1 resposta

Oi Marco,

Na verdade esse filtro: filter().xpath("/pedido/itens/item/formato[text()='EBOOK']") Indica ao Camel que deve pegar apenas os arquivos que contenham ao menos um ebook.

Se tiver um XML somente com livros impressos, ele não passa no filtro. Se tiver um XML com 2 impressos e 1 ebook, ele passa no filtro.

Mas o filtro anterior não serve para ignorar os itens com formato impresso. Para fazer isso, você pode deixar o código assim:

from("file:pedidos?delay=5s&noop=true").
split().xpath("/pedido/itens/item").
filter().xpath("/item/formato[text()='EBOOK']").
//resto do codigo

Repare que agora antes de filtrar eu usei o método split, que serve para quebrar o XML para cada tag item que ele encontrar, e então depois eu chamo o filter para filtrar cada uma das tags item e apenas deixar passar as que tiverem formato = EBOOK.

Bons estudos!