我是骡子的新手,请帮我解释这个逻辑。实际上在我的流程中我有选择消息处理器,不满足它的表达式将选择默认。之后我有流程参考。 我不希望消息进入默认值(选择)必须填充到流参考。相反,它必须转到我在该流中配置的选择异常策略。 所以我需要在默认情况下抛出一些异常。 实际上我有一个非常大的流程,我让它变得简单易懂。请通过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“未绑定”。
答案 0 :(得分:4)
要使用test:component
,您需要声明test
命名空间,就像您对Mule使用的所有其他命名空间所做的那样。这就是说,不确定是否要在生产代码中使用test
元素。
另一种方法是使用null-component
在收到消息时始终抛出异常,但这并不能控制抛出的异常。
另一种方法是从Groovy组件中抛出任何你想要的异常。
请记住,Mule基础架构包含异常:您必须使用ExceptionUtils挖掘堆栈并找到根本原因。
答案 1 :(得分:1)
如果您不想编写代码,也可以使用Validation组件。只需创建一个新的'Is True'验证器并将表达式设置为#[false]。在自定义页面上设置您的错误和要返回的消息,我使用了org.mule.module.apikit.exception.NotFoundException,但您也可以使用查找。让我永远想清楚这一点。