基于Camel Content的路由器,XPath无法正常工作

时间:2012-09-05 08:30:48

标签: java xpath apache-camel routes spring-dsl

我正在使用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。

所以如果有人提示,我会很感激。

1 个答案:

答案 0 :(得分:1)

我对你的命名空间xmlns="urn:ifsworld-com:schemas:handle_inbound_order"感到有些困惑。它是一个有效的命名空间吗?

无论如何,我认为这应该有效:

//*[local-name() = 'ORDER_TYPE'][codepoint-equal(text(), 'CROSSDOCKING')]