2012-02-08 53 views
2

我在某处读到,异常不会从Mule(3.2)中的私有流传播出去。如果是这样,有另一种骡构建:如何将异常传播出私有流?

  • 是消息处理器的链
  • 可以从另一个构建体中引用
  • 传播例外主叫构造

或者,是否有办法规避异常不会从私有流中传播出去的限制?

你可以使用骡子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); 
    } 

} 
+0

对这个问题感到非常惊讶:你有没有经历第一手的例外被吞入子流? – 2012-02-08 23:02:12

+0

向原始问题添加了代码,以便轻松地复制我描述的行为。 – beluchin 2012-02-08 23:24:14

+0

感谢您分享您的配置,这对再现您注意到的行为确实非常有帮助。 – 2012-02-09 04:22:19

回答

2

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

  • 甲流,有它自己的生命周期,异常处理和处理策略等
  • 一个子流的作用完全一样的可重复使用的宏,它等同于复制和粘贴相同的处理器到流即引用和使用子流程。

HTH。

+0

OMG丹尼尔,你有鹰的眼睛!我确信beluchin使用了一个子流程,并没有注意到他使用了一个流程元素,就好像它是一个子流程!非常棒! – 2012-02-09 04:17:09

+0

你能指点我们描述子流语义的文档吗?谢谢。 – beluchin 2012-02-09 13:49:53

0

丹是正确的。

异常传播是不可能的,但因为Mule 3.3你将能够传播在私有流中抛出的异常,所以调用者流异常策略可以管理它。

+0

但是,您何时使用私人流量而不是子流量?如果您需要手动传播异常,为什么不使用子流?我想我不明白私人流量的用例... – 2012-02-09 18:31:41