Apache Camel - Proyecto

Usaremos Maven para construir un proyecto Camel. Aunque, es preferible utilizar IntelliJ IDE para el desarrollo. Puede utilizar cualquier IDE de su elección para este proyecto.

Crear nuevo proyecto

Crear un nuevo Maven proyecto y especifique lo siguiente:

GroupId: Basket
ArtifactId: Basket

Seleccione la ubicación predeterminada para su proyecto o, si lo prefiere, especifique el directorio de su elección.

Agregar dependencias

Necesita agregar algunas dependencias para usar Camel. Las dependencias se agregan enpom.xml. Entonces abra pom.xml y agregue las siguientes dos dependencias:

<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- Necesitamos las dependencias mínimas para nuestra aplicación. A medida que utilice más componentes de Camel de sus bibliotecas, deberá agregar las dependencias correspondientes en este archivo pom.xml.

Creando Java DSL

A continuación, escribirá su código de filtrado y enrutamiento en un DSL de Java. Crea una nueva clase de Java llamadaDistributeOrderDSL. Agregue el siguiente código:

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

En el main método, primero creamos CamelContext instanciando una implementación predeterminada proporcionada en DefaultCamelContext clase.

CamelContext context = new DefaultCamelContext();

A continuación, agregamos una ruta creando un anónimo RouteBuilder instancia -

context.addRoutes(new RouteBuilder() {

Anulamos el configure método para agregar una ruta desde un URI directo DistributeOrderDSLa la consola del sistema. Proporcionamos algunos filtros mediante la 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/");
}

Después de agregar la ruta, comenzamos el contexto -

context.start();

A continuación, agregamos el código para crear nuestro URI directo: DistributeOrderDSL.

ProducerTemplate orderProducerTemplate = context.createProducerTemplate();
InputStream orderInputStream = new FileInputStream(ClassLoader.getSystemClassLoader()
   .getResource("order.xml").getFile());

Finalmente, comenzamos el procesamiento -

orderProducerTemplate.sendBody("direct:DistributeOrderDSL", orderInputStream);

Ahora, cuando se complete su código DSL de Java, lo único que queda antes de probar la aplicación es agregar el order.xmlarchivo a su proyecto. Puede utilizar el XML de muestra que se muestra en el capítulo Introducción para este propósito.

Resultados de la prueba

Cuando ejecute la aplicación, verá el siguiente resultado:

<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>

Tenga en cuenta que aquí solo se enumeran los pedidos de jabones. Si desea almacenar esto en un archivo local, simplemente comente elstream.out línea y descomente la siguiente línea en su configure método -

// .to("file:src/main/resources/order/");

En nuestra siguiente sección, aprenderemos cómo usar Camel con Spring.