行程camel-context.xml中的自订例外状况

jum4pzuy  于 2022-11-07  发布在  Apache
关注(0)|答案(1)|浏览(142)

我来找你是因为我需要你的帮助。
在我的文件camel-context.xml中,我调用了一个存储过程,该过程获取用户的信息。我需要解决的问题是:
如果存储过程没有返回数据,则会发送UserNotFound异常(我已经有了该类),其中包含http代码404。
我一直在寻找如何做到这一点,但找不到任何可以帮助我。我刚刚开始与这个框架,所以非常感谢您的帮助提前。
这里我的代码:

<route id="getUser" streamCache="false">
        <from uri="direct:getUser"/>
        <to uri="sql-stored:[dbo].[usp_get_user](VARCHAR ${headers.userId})?dataSource=#primarydatasource" />
        <setBody>
            <simple>${body['#result-set-1']}</simple>
        </setBody>
        <marshal> <custom ref="userObject" /> </marshal>
        <unmarshal>
            <custom ref="userObject"/>
        </unmarshal>
    </route>
toiithl6

toiithl61#

您可以添加onException子句来处理PL-SQL错误:

<routes>
    <route id="getUser" streamCache="false">
        <from uri="direct:getUser"/>
        <onException>
            <exception>some.package.UserNotFound</exception>
            <handled>
                <constant>true</constant>
            </handled>
            <bean ref="someExceptionHandlerBean" method="handleUserNotFound"/>
            <!-- remaining endpoints declaration -->
        </onException>
        <to uri="sql-stored:[dbo].[usp_get_user](VARCHAR ${headers.userId})?dataSource=#primarydatasource" />
        <setBody>
            <simple>${body['#result-set-1']}</simple>
        </setBody>
        <marshal> <custom ref="userObject" /> </marshal>
        <unmarshal>
            <custom ref="userObject"/>
        </unmarshal>
    </route>
</routes>

someExceptionHandlerBean将是一个POJO bean,它定义了一个#handleUserNotFound方法,在该方法中,您将返回一个错误特定的 Package 器,在您的示例中,它将是某种具有正确404状态的HTTP响应对象。

相关问题