1

以下のような try catch ブロックを使用して、キャメルに直接ルートが存在するかどうかを確認しようとしています。キャメルにルートが存在するかどうかを確認する述語を探しています。答えを直接与えるものは何も見つからなかったので、以下のアプローチを取りました。

<doTry>
    <recipientList>
        <description>Check if a country specific handler is available</description> 
        <simple>direct:${header.operationName}${body.country}</simple> 
    </recipientList>
    <doCatch>
        <exception>org.apache.camel.component.direct.DirectConsumerNotAvailableException</exception> 
        <recipientList>
            <description>if a country specific handler is not available to to the base</description> 
            <simple>direct:${header.operationName}</simple> 
        </recipientList>
    </doCatch>
</doTry>

これは、キャメルで例外ハンドラーを使用して DirectConsumerNotAvailableException をキャッチし、ルートが存在するかどうかを判断する必要があることを意味します。以下に存在するような単純な式を使用できる別のアプローチを検討しています。

<choice>
    <when>
        <description>Check if a country specific handler is available</description>
        <simple>direct:${header.operationName}${body.country} exists</simple>
        <recipientList>
            <description>country specific handler is available</description>
            <simple>direct:${header.operationName}${body.country}</simple>
        </recipientList>
    </when>
    <otherwise>
        <recipientList>
            <description>country specific handler is not available then route to generic processing</description>
            <simple>direct:${header.operationName}</simple>
        </recipientList>
    </otherwise>
</choice>

このようなことが他の手段を使用して達成できるかどうか教えてください。

4

2 に答える 2