Маршрутизация по операции - PullRequest
2 голосов
/ 18 апреля 2011

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

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

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

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

Ответы [ 2 ]

0 голосов
/ 19 апреля 2011

Нашел ответ здесь: 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"));
    }
}
0 голосов
/ 18 апреля 2011

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

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