как использовать xpath в camel-context.xml, чтобы проверить, существует ли конкретный узел или нет - PullRequest
3 голосов
/ 09 марта 2012

Я пытаюсь разработать приложение для верблюдов на основе контента. Это приложение будет просматривать папку src / data, чтобы увидеть, существует ли файл запроса SOAP с узлом <e2d:getOrderDetaiRequest>, затем этот файл будет скопирован в target / message, в противном случае файл будет скопирован в target / other.

Знаете ли вы, как использовать xpath (или любые другие инструменты) для проверки этого условия (я предпочитаю использовать файл camel-context.xml)?

Вот мой верблюжий контекст

<route>
        <from uri="file://c:/src/data?noop=true"/>
        <choice>
           <when>
            <xpath>**???????????????????????????**</xpath>
                <to uri="file://c:/target/message"/>
           </when>
           <otherwise>
            <to uri="file://c:/target/other"/>
           </otherwise>
        </choice>
    </route>

А вот пример 2 разных SOAP-запросов

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:e2d="http://www.abc.com/Abc11WS">
   <soapenv:Header/>
   <soapenv:Body>
      <e2d:getOrderDetailRequest>
         <actionCode>1234</actionCode>
      </..>
   </...></...>

И

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:lsr="http://www.abc.com/Abc22WS">
   <soapenv:Header/>
   <soapenv:Body>
      <lsr:getProductDetailsRequest>
           <productId>12345</...>
     </...></...></...>

1 Ответ

7 голосов
/ 09 марта 2012

Если вы используете xpath, а у вашего xml есть пространства имен, например, ваше сообщение SOAP, то вы также должны использовать пространства имен в выражении xpath.

В документации Camel есть некоторые подробности по адресу: http://camel.apache.org/xpath

Используя XML DSL в Camel, вы можете объявить пространство имен в теге XML напрямую, например, в camelContext и т. Д.

<camelContext xmlns="http://camel.apache.org/schema/spring" e2d="http://www.abc.com/Abc11WS">
   ...
   <when>
     <xpath>/e2d:getOrderDetailRequest</xpath>
       ...

Но учтите, что XPath может быть немного сложным для работыправильно.И именно поэтому мы добавили logNamespaces в Camel 2.10.Подробности см. Внизу этой страницы: http://camel.apache.org/xpath

...