【问题标题】:Mule ESB problems with interceptor-stack拦截器堆栈的 Mule ESB 问题
【发布时间】:2013-09-05 19:02:36
【问题描述】:

我是 Mule 新手,在使用拦截器堆栈元素时遇到了麻烦。

以下内容似乎是从他们的文档中直接摘录的:http://www.mulesoft.org/documentation/display/33X/Using+Interceptors

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

<flow name="MyFlowFlow1" doc:name="MyFlowFlow1">

    <interceptor-stack ref="default"/>  <!--this is line 15 -->
    <logger level="INFO" message="Got here"/>

</flow>    

但我收到一个异常说它无效。

谁能告诉我我做错了什么?

org.xml.sax.SAXParseException; lineNumber: 15; columnNumber: 43; cvc-complex-type.2.4.a: Invalid content was found starting with element 'interceptor-stack'. One of '{"http://www.mulesoft.org/schema/mule/core":annotations, "http://www.mulesoft.org/schema/mule/core":description, "http://www.mulesoft.org/schema/mule/core":abstract-message-source, "http://www.mulesoft.org/schema/mule/core":abstract-inbound-endpoint, "http://www.mulesoft.org/schema/mule/core":abstract-message-processor, "http://www.mulesoft.org/schema/mule/core":abstract-outbound-endpoint, "http://www.mulesoft.org/schema/mule/core":abstract-mixed-content-message-processor, "http://www.mulesoft.org/schema/mule/core":response}' is expected.
at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
...etc...

编辑 - 这是为了解决以下回复。

当通过 flow-ref 从另一个流调用时,第一个私有流完美运行。我看到了“到达这里”的消息和时间。

<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>

【问题讨论】:

    标签: mule interceptor


    【解决方案1】:

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

    看一下流的解剖结构。

    http://www.mulesoft.org/documentation/display/current/Using+Flows+for+Service+Orchestration#UsingFlowsforServiceOrchestration-TheAnatomyofaFlow

    【讨论】:

    • 有一个记录器,它是一个处理器。此外,这只是真实事物的缩减版,它做了很多工作。如果我将两个拦截器直接放在流中,它可以正常工作。如果我尝试使用拦截器堆栈,它会因 SAX 解析错误而失败。
    • 在这种情况下,我只能认为你不能在流程中使用拦截器堆栈,试试Seba的接近
    【解决方案2】:

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

    【讨论】:

    • 这不是真的。你是说这对于拦截器堆栈实例是真的吗?我将编辑帖子(因为我不能轻易将代码放在这里)并说明我的意思。
    【解决方案3】:

    拦截器应在组件中使用。
    此配置应该可以工作:

    <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>   
    

    【讨论】:

    • 我正在努力思考这个问题。我想放入堆栈的拦截器基于 AbstractEnvelopeInterceptor 来捕获进入和退出流的时间。当它是流中的第一个元素而不将其放入组件中时,我已经得到了其中一个。所以,你是说,如果我想要多个,我必须构建一个虚拟组件,只包含一堆拦截器?我上面列出的 URL 中的 Mule 文档给出了一个其他示例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-07
    • 2014-10-21
    • 1970-01-01
    • 2020-09-18
    相关资源
    最近更新 更多