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.