具有拦截器堆栈的Mule ESB问题

具有拦截器堆栈的Mule ESB问题,mule,interceptor,Mule,Interceptor,我是Mule的新手,在使用拦截器堆栈元素方面有困难 以下内容似乎是从他们的文档中删除的: 编辑-这是为了解决以下问题。 当通过flow-ref从另一个流调用时,第一个私有流可以完美地工作。我看到了“got here”消息和时间 <flow name="test2Flow1" doc:name="test2Flow1"> <timer-interceptor/> <logger level="INFO" message="got here" doc:n

我是Mule的新手,在使用拦截器堆栈元素方面有困难

以下内容似乎是从他们的文档中删除的:

编辑-这是为了解决以下问题。

当通过flow-ref从另一个流调用时,第一个私有流可以完美地工作。我看到了“got here”消息和时间

<flow name="test2Flow1" doc:name="test2Flow1">
    <timer-interceptor/>
    <logger level="INFO" message="got here" doc:name="Logger"/>
</flow>

然而,当从另一个流调用时,第二个私有流不起作用……事实上,它甚至不会解析。唯一的区别是,计时器拦截器的显式使用更改为对包含计时器拦截器的拦截器堆栈的引用

<interceptor-stack name="default">
    <timer-interceptor/>
</interceptor-stack>

<flow name="test2Flow1" doc:name="test2Flow1">
    <interceptor-stack ref="default"/>
    <logger level="INFO" message="got here" doc:name="Logger"/>
</flow>

我认为您的流无效,因为它没有消息处理器

看一看流的解剖结构


您的消息处理器必须是流中的第一项

拦截器用于组件中。
此配置应能正常工作:

<interceptor-stack name="default">
    <logging-interceptor/>
    <timer-interceptor/>
</interceptor-stack>

<flow name="test2Flow1" doc:name="test2Flow1">
    <pooled-component class="com.MyComponent">
        <interceptor-stack ref="default"/>  <!--this is line 15 -->
    </pooled-component>
    <logger level="INFO" message="Got here"/>
</flow>   


有一个记录器,它是一个处理器。此外,这只是真实事物的简化版本,它做了很多工作。如果我将两个拦截器直接放在流中,它工作得很好。如果我尝试使用拦截器堆栈,它会失败,并出现SAX解析错误。在这种情况下,我只能认为您不能在流中正确使用拦截器堆栈,请尝试Seba的方法。通常情况下,这是不正确的。你是说这是真的,特别是对于拦截器堆栈实例?我将编辑这篇文章(因为我不能很容易地把代码放在这里),并展示我的意思。我正在努力思考这个问题。我想放入堆栈的拦截器是基于AbstractEnvelopeInterceptor的,在流进入和退出时捕获拦截器。当它是流中的第一个元素,而不把它放在一个组件中时,我有一个可以工作的元素。那么,你是说,如果我想要不止一个,我必须构建一个虚拟组件来容纳一堆拦截器?我上面列出的URL上的Mule文档给出了一个相反的例子。
<interceptor-stack name="default">
    <timer-interceptor/>
</interceptor-stack>

<flow name="test2Flow1" doc:name="test2Flow1">
    <interceptor-stack ref="default"/>
    <logger level="INFO" message="got here" doc:name="Logger"/>
</flow>
<interceptor-stack name="default">
    <logging-interceptor/>
    <timer-interceptor/>
</interceptor-stack>

<flow name="test2Flow1" doc:name="test2Flow1">
    <pooled-component class="com.MyComponent">
        <interceptor-stack ref="default"/>  <!--this is line 15 -->
    </pooled-component>
    <logger level="INFO" message="Got here"/>
</flow>