如何在不使用java代码的情况下在Mule ESB中手动抛出异常

时间:2013-10-14 17:36:34

标签: mule mule-studio mule-el

我是骡子的新手,请帮我解释这个逻辑。实际上在我的流程中我有选择消息处理器,不满足它的表达式将选择默认。之后我有流程参考。 我不希望消息进入默认值(选择)必须填充到流参考。相反,它必须转到我在该流中配置的选择异常策略。 所以我需要在默认情况下抛出一些异常。 实际上我有一个非常大的流程,我让它变得简单易懂。请通过xml config找到。

        <flow name="Choice" doc:name="Choice">
    <file:inbound-endpoint path="C:\Users\Star\Desktop\Mule\FilePath1" responseTimeout="10000" doc:name="File"/>
    <byte-array-to-string-transformer doc:name="Byte Array to String"/>
    <choice doc:name="Choice">
        <when expression="#[xpath('fn:local-name(/root/*[2])')=='book']">
            <file:outbound-endpoint path="C:\Users\Star\Desktop\Mule\FilePath2" responseTimeout="10000" doc:name="File"/>
        </when>
        <otherwise>
            <file:outbound-endpoint path="C:\Users\Star\Desktop\Mule\FilePath3" responseTimeout="10000" doc:name="File"/>
        </otherwise>
    </choice>
    <flow-ref name="SampleService" doc:name="Flow Reference"/>
    <catch-exception-strategy doc:name="Catch Exception Strategy">
        <logger message="*****#[exception]****" level="INFO" doc:name="Logger"/>
    </catch-exception-strategy>
</flow>
<flow name="SampleService" doc:name="SampleService">
    <file:inbound-endpoint path="C:\Users\Star\Desktop\Mule\FilePath4" responseTimeout="10000" doc:name="File"/>
</flow>

请建议我在Mule中抛出异常的任何标准方法。我也试过保持

            <test:component  throwException="true"/> 

但它抛出了异常,例如 - “前缀”test“for element”test:component“未绑定”。

2 个答案:

答案 0 :(得分:4)

要使用test:component,您需要声明test命名空间,就像您对Mule使用的所有其他命名空间所做的那样。这就是说,不确定是否要在生产代码中使用test元素。

另一种方法是使用null-component在收到消息时始终抛出异常,但这并不能控制抛出的异常。

另一种方法是从Groovy组件中抛出任何你想要的异常。

请记住,Mule基础架构包含异常:您必须使用ExceptionUtils挖掘堆栈并找到根本原因。

答案 1 :(得分:1)

如果您不想编写代码,也可以使用Validation组件。只需创建一个新的'Is True'验证器并将表达式设置为#[false]。在自定义页面上设置您的错误和要返回的消息,我使用了org.mule.module.apikit.exception.NotFoundException,但您也可以使用查找。让我永远想清楚这一点。