Apache Camel - Projeto
Usaremos o Maven para construir um projeto Camel. Embora seja preferível usar o IDE IntelliJ para desenvolvimento. Você pode usar qualquer IDE de sua escolha para este projeto.
Criando Novo Projeto
Crie um novo Maven projeto e especifique o seguinte -
GroupId: Basket
ArtifactId: Basket
Selecione o local padrão para o seu projeto ou, se preferir, especifique o diretório de sua escolha.
Adicionando Dependências
Você precisa adicionar algumas dependências para usar o Camel. As dependências são adicionadas empom.xml. Portanto, abra pom.xml e adicione as seguintes duas dependências -
<dependencies>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-core</artifactId>
<version>2.20.0</version>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-stream</artifactId>
<version>2.20.0</version>
</dependency>
</dependencies>
Note- Precisamos das dependências mínimas para nosso aplicativo. À medida que você usa mais componentes Camel de suas bibliotecas, você precisará adicionar as dependências correspondentes neste arquivo pom.xml.
Criação de Java DSL
A seguir, você escreverá seu código de filtragem e roteamento em uma DSL Java. Crie uma nova classe Java chamadaDistributeOrderDSL. Adicione o seguinte código a ele -
public class DistributeOrderDSL {
public static void main(String[] args) throws Exception {
CamelContext context = new DefaultCamelContext();
try {
context.addRoutes(new RouteBuilder() {
@Override
public void configure() throws Exception {
from("direct:DistributeOrderDSL")
.split(xpath("//order[@product='soaps']/items")).to("stream:out");
// .to("file:src/main/resources/order/");
}
});
context.start();
ProducerTemplate orderProducerTemplate = context.createProducerTemplate();
InputStream orderInputStream = new FileInputStream(ClassLoader.getSystemClassLoader()
.getResource("order.xml").getFile());
orderProducerTemplate.sendBody("direct:DistributeOrderDSL", orderInputStream);
} finally {
context.stop();
}
}
}
No main método, primeiro criamos CamelContext instanciando uma implementação padrão fornecida em DefaultCamelContext classe.
CamelContext context = new DefaultCamelContext();
Em seguida, adicionamos uma rota criando um anônimo RouteBuilder instância -
context.addRoutes(new RouteBuilder() {
Nós substituímos o configure método para adicionar uma rota de um URI direto DistributeOrderDSLpara o console do sistema. Fornecemos alguma filtragem usando a consulta xpath.
public void configure() throws Exception {
from("direct:DistributeOrderDSL")
.split(xpath("//order[@product = 'soaps']/items")).to("stream:out");
// .to("file:src/main/resources/order/");
}
Depois de adicionar a rota, iniciamos o contexto -
context.start();
Em seguida, adicionamos o código para criar nosso URI direto - DistributeOrderDSL.
ProducerTemplate orderProducerTemplate = context.createProducerTemplate();
InputStream orderInputStream = new FileInputStream(ClassLoader.getSystemClassLoader()
.getResource("order.xml").getFile());
Finalmente, começamos o processamento -
orderProducerTemplate.sendBody("direct:DistributeOrderDSL", orderInputStream);
Agora, quando seu código Java DSL é concluído, a única coisa que resta antes de testar o aplicativo é adicionar o order.xmlarquivo para o seu projeto. Você pode usar o XML de amostra mostrado no capítulo Introdução para esse propósito.
Resultado dos testes
Ao executar o aplicativo, você verá a seguinte saída -
<items>
<item>
<Brand>Cinthol</Brand>
<Type>Original</Type>
<Quantity>4</Quantity>
<Price>25</Price>
</item>
<item>
<Brand>Cinthol</Brand>
<Type>Lime</Type>
<Quantity>6</Quantity>
<Price>30</Price>
</item>
</items>
Observe que apenas pedidos de sabonetes estão listados aqui. Se você deseja armazenar isso em um arquivo local, basta comentar ostream.out linha e descomente a seguinte linha em seu configure método -
// .to("file:src/main/resources/order/");
Em nossa seção subsequente, aprenderemos como usar Camel com Spring.