我正在使用 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。
因此,如果有人有小费,我将不胜感激。