XPathを使用してキャメルにコンテンツベースのルーターを実装しています。しかし、何らかの理由で XPath 式はコンテンツを評価せず、常にそれ以外のパスが選択されます。これは、キャメル コンテキストで定義したルートです。
<route>
<from uri="cxf:bean:hioServiceEndPoint"/>
<process ref="hioProcessor"/>
<inOnly uri="file:{{path.ws.data}}/incoming/hio?fileName=hio_${date:now:yyyyMMdd_HHmmssSS}.xml"/>
<choice>
<when>
<xpath>//ORDER_TYPE = 'CROSSDOCKING'</xpath>
<log message="NIELS Incoming CROSS HIO !!!"/>
<to uri="jms:incomingHioCross"/>
</when>
<otherwise>
<to uri="jms:incomingHio"/>
<log message="NIELS Incoming HIO"/>
</otherwise>
</choice>
<transform>
<constant>OK</constant>
</transform>
</route>
タグを検索する必要がある XML は次のORDER_TYPE
とおりです。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<INBOUND_ORDER xmlns="urn:ifsworld-com:schemas:handle_inbound_order">
<DELIVERY_LEADTIME>0.0</DELIVERY_LEADTIME>
<DELNOTE_DATE>2010-12-15T00:00:00</DELNOTE_DATE>
<DELNOTE_NO>1454</DELNOTE_NO>
<DESPATCH_DATE>2010-12-15T16:39:43</DESPATCH_DATE>
<ORDER_DATE>2010-12-15T16:39:43</ORDER_DATE>
<ORDER_NO>1454</ORDER_NO>
<ORDER_TYPE>CROSSDOCKING</ORDER_TYPE>
<REMARKS xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
<SITE>DC2</SITE>
<VENDOR_NO>ALM</VENDOR_NO>
<INBOUND_ORDER_LINES>
<INBOUND_ORDER_LINE>
<CURRENCY_CODE>EUR</CURRENCY_CODE>
<PART_NO>1276.1</PART_NO>
<QUANTITY>2.0</QUANTITY>
<QUANTITY_UNIT_MEAS>PCS</QUANTITY_UNIT_MEAS>
<REMARKS xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
<SEQUENCE_NO>1.0</SEQUENCE_NO>
<UNIT_PRICE>0.0</UNIT_PRICE>
</INBOUND_ORDER_LINE>
</INBOUND_ORDER_LINES>
</INBOUND_ORDER>
私も試してみましたが、それでもうまく/INBOUND_ORDER/ORDER_TYPE = 'CROSSDOCKING'
いくようです。XPath 式が正しく、正常に動作して true を返すかどうかを確認するテスト ケースを作成しました。
私はキャメル2.5.0を使用しています。
誰かがヒントを持っていれば、私はそれを感謝します。