2016-12-30 4 views
0
XPath

им застрял с XPATH фильтром в верблюжьего пути, и я не т найти решение ...маршрут Camel фильтр

вот мой XML-сообщение

<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" 
xmlns:ct="http://com/fr/test"> 
<env:Header> 
    <receptionTime xmlns="http://com/fr/test">2016-02-12T14:40:56+0100 
    </receptionTime> 
    <correlationId xmlns="http://com/fr/test">944689bc-9605-4292-929a-3b2e8a5eddd7 
    </correlationId> 
    <equipmentType xmlns="http://com/fr/test">WCA</equipmentType> 
    <messageType xmlns="http://com/fr/test">Reservation</messageType> 
</env:Header> 
<env:Body> 
<content xmlns="http://com/fr/test"></content> 
</env:Body> 

и мой маршрут Локка как это:

from("activemq-ext-in:queue:" + queueName) 
    .id("amq-transfert-downward-route") 
    .filter().xpath("/env:Envelope/env:Header/equipmentType/text()='WCA'") 
    //.when(body().contains("WCA")) 
    .to("activemq-ext-out:topic:" + topicName); 

и мое сообщение не пришло в мою тему из :(если я раскомментировать когда положение и комментарий т он фильтрует, мое сообщение правильно отправляет, но я хочу использовать фильтр

может кто-нибудь помочь мне, как найти хорошее выражение xpath?

возможно я могу использовать .choice(). Когда (xpath ...). To (...)?

я просто нужно правильное решение :)

спасибо большое!

ответ

1

Похоже, что проблема с префиксом пространства имен. Вы квалифицируете Envelope с «env:», который хорош, пока этот префикс отображается в правильное пространство имен. Однако вам не хватает подходящего квалификатора на экране оборудования, который находится в другом пространстве имен.

См. Camel docs о том, как настроить пространства имен.

Namespaces ns = new Namespaces("ct", "http://com/fr/test") 
    .add("env", "http://www.w3.org/2003/05/soap-envelope"); 

from("activemq-ext-in:queue:" + queueName) 
    .id("amq-transfert-downward-route") 
    .filter(
     ns.xpath("/env:Envelope/env:Header/ct:equipmentType/text()='WCA'") 
    ).to("activemq-ext-out:topic:" + topicName); 

Обновлено: изменено, чтобы использовать пример OP вместо одного из документов Camel. Я не тестировал это, но он выглядит правильно.

+0

ok Я вижу, но знаете ли вы, как я могу установить правильное значение xpath с хорошим ns? –

+0

см. Обновленный ответ – massfords

+0

ok; я вижу, но мне нужно проверить значение, а не атрибут, поэтому я могу использовать @ ..., я тестирую с/c: equipmentType/text() = 'WCA', но не работает, идея? –

Смежные вопросы