我正在使用XPath在camel中实现基于内容的路由器。 但由于某种原因,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>
这是需要搜索标记ORDER_TYPE
的XML:
<?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。
我正在使用camel 2.5.0。
所以如果有人提示,我会很感激。
答案 0 :(得分:1)
我对你的命名空间xmlns="urn:ifsworld-com:schemas:handle_inbound_order"
感到有些困惑。它是一个有效的命名空间吗?
无论如何,我认为这应该有效:
//*[local-name() = 'ORDER_TYPE'][codepoint-equal(text(), 'CROSSDOCKING')]