Apache Camel - Progetto

Useremo Maven per costruire un progetto Camel. Tuttavia, è preferibile utilizzare IntelliJ IDE per lo sviluppo. Puoi usare qualsiasi IDE di tua scelta per questo progetto.

Creazione di un nuovo progetto

Crea un nuovo file Maven progetto e specificare quanto segue:

GroupId: Basket
ArtifactId: Basket

Seleziona la posizione predefinita per il tuo progetto o, se preferisci, specifica la directory di tua scelta.

Aggiunta di dipendenze

È necessario aggiungere alcune dipendenze per utilizzare Camel. Le dipendenze vengono aggiuntepom.xml. Quindi apri pom.xml e aggiungi le seguenti due dipendenze:

<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- Abbiamo bisogno delle dipendenze minime per la nostra applicazione. Man mano che utilizzi più componenti Camel dalle sue librerie, dovrai aggiungere le dipendenze corrispondenti in questo file pom.xml.

Creazione di Java DSL

Successivamente, scriverai il tuo codice di filtraggio e instradamento in un DSL Java. Crea una nuova classe Java chiamataDistributeOrderDSL. Aggiungi il seguente codice ad esso -

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

Nel main metodo, prima creiamo CamelContext istanziando un'implementazione predefinita fornita in DefaultCamelContext classe.

CamelContext context = new DefaultCamelContext();

Successivamente, aggiungiamo un percorso creando un file anonymous RouteBuilder istanza -

context.addRoutes(new RouteBuilder() {

Ignoriamo il configure metodo per aggiungere una rotta da un URI diretto DistributeOrderDSLalla console di sistema. Forniamo alcuni filtri utilizzando la query xpath.

public void configure() throws Exception {
   from("direct:DistributeOrderDSL")
      .split(xpath("//order[@product = 'soaps']/items")).to("stream:out");
   // .to("file:src/main/resources/order/");
}

Dopo aver aggiunto il percorso, iniziamo il contesto:

context.start();

Successivamente, aggiungiamo il codice per creare il nostro URI diretto - DistributeOrderDSL.

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

Infine, iniziamo l'elaborazione -

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

Ora, quando il codice Java DSL è completato, l'unica cosa che rimane prima di testare l'applicazione è aggiungere il file order.xmlfile al tuo progetto. A tale scopo è possibile utilizzare l'XML di esempio mostrato nel capitolo Introduzione.

Risultati del test

Quando esegui l'applicazione, vedrai il seguente output:

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

Nota che qui sono elencati solo gli ordini per i saponi. Se desideri salvarlo in un file locale, commenta semplicemente il filestream.out riga e rimuovere il commento dalla riga seguente nel file configure metodo -

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

Nella nostra sezione successiva, impareremo come usare Camel with Spring.