Учебники

Apache Camel – Проект

Мы будем использовать Maven для создания проекта Camel. Хотя мы предпочитаем использовать IntelliJ IDE для разработки. Вы можете использовать любую IDE по вашему выбору для этого проекта.

Создание нового проекта

Создайте новый проект Maven и укажите следующее:

GroupId: Basket
ArtifactId: Basket

Выберите местоположение по умолчанию для вашего проекта или, если вы предпочитаете, укажите каталог по вашему выбору.

Добавление зависимостей

Вам нужно добавить несколько зависимостей, чтобы использовать Camel. Зависимости добавляются в pom.xml . Итак, откройте pom.xml и добавьте следующие две зависимости:

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

Примечание. Для нашего приложения нужны минимальные зависимости. Поскольку вы используете больше компонентов Camel из его библиотек, вам нужно будет добавить соответствующие зависимости в этот файл pom.xml.

Создание Java DSL

Далее вы напишите свой код фильтрации и маршрутизации в Java DSL. Создайте новый класс Java с именем DistributeOrderDSL . Добавьте следующий код к нему –

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

В методе main сначала мы создаем CamelContext, создавая реализацию по умолчанию, предоставленную в классе DefaultCamelContext .

CamelContext context = new DefaultCamelContext();

Затем мы добавляем маршрут, создавая анонимный экземпляр RouteBuilder

context.addRoutes(new RouteBuilder() {

Мы переопределяем метод configure, чтобы добавить маршрут от прямого URI DistributeOrderDSL к системной консоли. Мы предоставляем некоторую фильтрацию, используя запрос xpath.

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

Далее мы добавляем код для создания нашего прямого URI – DistributeOrderDSL .

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

Наконец, мы начинаем обработку –

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

Теперь, когда ваш Java DSL-код завершен, перед тестированием приложения остается только добавить файл order.xml в ваш проект. Для этой цели вы можете использовать образец XML, показанный в главе «Введение».

Результаты теста

Когда вы запустите приложение, вы увидите следующий вывод:

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

Обратите внимание, что здесь перечислены только заказы на мыло. Если вы хотите сохранить это в локальном файле, просто закомментируйте строку stream.out и раскомментируйте следующую строку в вашем методе configure

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

В нашем следующем разделе мы узнаем, как использовать Camel с Spring.