如何从私有流中传播异常?

时间:2012-02-08 22:53:25

标签: mule

我在某地读过,Mule(3.2)中的异常不会传播出私有流。如果是这样,是否有另一个骡子构造:

  • 是一系列消息处理器
  • 可以从另一个构造中引用
  • 将异常传播给调用构造

或者,有没有办法规避异常不会从私有流传播出来的限制?

您可以使用下面的mule-config.xml和java代码重现我上面描述的行为,其中异常不会传播出私有流:

骡-config.xml中

<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns="http://www.mulesoft.org/schema/mule/core"
  xmlns:stdio="http://www.mulesoft.org/schema/mule/stdio"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  xsi:schemaLocation="
    http://www.mulesoft.org/schema/mule/stdio http://www.mulesoft.org/schema/mule/stdio/3.2/mule-stdio.xsd
    http://www.mulesoft.org/schema/mule/core  http://www.mulesoft.org/schema/mule/core/3.2/mule.xsd">

<stdio:connector name="unused" promptMessage="Yes? " messageDelayTime="1000" />

<flow name="throwsException">
    <component class="apackage.ThrowsException" />
</flow>

<flow name="echo">
    <stdio:inbound-endpoint system="IN"/>

    <flow-ref name="throwsException" />
    <component class="apackage.DuplicateString" />

    <stdio:outbound-endpoint system="OUT"/>
</flow>

</mule>

ThrowsException.java

package apackage;

public class ThrowsException {

    public String throwsException(String string) {
        throw new RuntimeException();
    }

}

DuplicateString.java

package apackage;

public class DuplicateString {

    public String duplicateString(String string) {
        return string.concat(string);
    }

}

2 个答案:

答案 0 :(得分:2)

看起来你想要使用子流而不是另一个流。

  • 流程,拥有自己的生命周期,异常处理和处理策略等。
  • 子流的作用与可以重复使用的宏完全相同,与将相同的处理器复制并粘贴到引用和使用子流的流相同。

HTH。

答案 1 :(得分:0)

丹是对的。

异常传播是不可能的,但是从Mule 3.3开始,您将能够传播私有流中抛出的异常,因此调用者流异常策略可以对其进行管理。