Маршрутизация с помощью операции

#apache-camel #esb #apache-servicemix

#apache-camel #esb #apache-servicemix

Вопрос:

есть ли какой-либо способ маршрутизировать сообщение ServiceMix с помощью операции, указанной в этом сообщении?

Я пытался погуглить это, но не смог найти никакого способа выполнить эту простую задачу, может быть, я вообще делаю это неправильно?

У меня есть адаптер, который отправляет сообщения 2 типов. 2 других адаптера должны перехватывать их и выдавать ответ. Оба сообщения имеют идентичные тела (например, пусть это будет some <product>...</product> ), но операция отличается (например, update и create ). Как мне перенаправить эти сообщения на разные адаптеры?

Заранее спасибо.

Ответ №1:

Используйте предикат Camel XPath (http://camel.apache.org/xpath.html ). Например:

 from("queue:products").  
choice().xpath("/product/[@create='true']")).to("queue:create").
otherwise().to("queue:update");
  

Комментарии:

1. Извините, но я имел в виду операцию JBI, а не какую-то пользовательскую операцию над моим объектом.

Ответ №2:

Нашел ответ здесь:http://fernandoribeiro.eti.br/2009/06/06/multiple-operations-in-apache-camel-routes /

 import org.apache.camel.builder.RouteBuilder;

public final class SampleRouteBuilder extends RouteBuilder {
    public void configure() {
        from("jbi:service:http://www.fernandoribeiro.eti.br/SampleService")
            .choice()
                .when(header("jbi.operation")
                    .isEqualTo("{http://www.fernandoribeiro.eti.br}FirstOperation"))
                .when(header("jbi.operation")
                    .isEqualTo("{http://www.fernandoribeiro.eti.br}SecondOperation"));
    }
}