2

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を使用しています。

誰かがヒントを持っていれば、私はそれを感謝します。

4

1 に答える 1

1

あなたの名前空間に少し混乱していますxmlns="urn:ifsworld-com:schemas:handle_inbound_order"。有効な名前空間ですか?

とにかく、これはうまくいくはずだと思います:

//*[local-name() = 'ORDER_TYPE'][codepoint-equal(text(), 'CROSSDOCKING')]
于 2012-09-05T09:33:43.717 に答える