Spring Integration错误通道不会收到所有异常

时间:2017-06-07 09:45:20

标签: java spring error-handling spring-integration

我正在使用spring integration的错误通道来捕获框架中的异常。但是在相同类型的两个通道中,错误处理程序会收到一个抛出的异常,而其他通道则没有。



    
<int:gateway id="myGateway" service-interface="com.si.MyGateway" request-
channel="myRequestChannel" error-channel="errorHandlingChannel">
<!-- Redirects exceptions to error-channel -->            
<int:chain input-channel="myRequestChannel" output-channel="lastChannel">
            <int:header-enricher>
                <int:error-channel ref="errorHandlingChannel">
            <int:header-enricher>
            <int:service-activator ref="testActivator1" 
method="generateException" requires-reply="true" />
            </int:chain>
<!-- Does not redirect exceptions to error-channel -->
                <int:chain input-channel="lastChannel" output-
channel="nullChannel">
            <int:header-enricher>
                <int:error-channel ref="errorHandlingChannel">
            <int:header-enricher>
            <int:service-activator ref="testActivator2" 
method="generateException" requires-reply="true" />
<int:filter ref="myFilter" discard-channel="nullChannel" />
            <int:service-activator ref="testActivator3" 
method="generateException" requires-reply="true" />
<int:filter ref="myFilter" discard-channel="nullChannel" />
            </int:chain>
    <int:service-activator input-channel="errorHandlingChannel" 
ref="errorHandler" method="handle" />

        
&#13;
&#13;
&#13;

errorHandler的handle方法接受MessagingException。当我从myRequestChannel抛出异常时,它会被errorHandler接收,但是当从testActivator2或testActivator3抛出相同的异常时,它根本不会到达errorHandler。

两个频道都被定义为异步频道:

&#13;
&#13;
<int:channel>
<int:queue capacity="10">
</int:channel>
&#13;
&#13;
&#13;

在调试时,我发现所有方法都是&#39;当内部类最终抛出MessagingException时,异常被抛出并通过spring类跟随链,但最后两个激活器的异常没有到达处理程序。

可能是什么原因?

1 个答案:

答案 0 :(得分:0)

你会抛出什么样的例外?

如果是MessagingException,则必须提供failedMessage,否则错误会发送到errorChannel上的默认<poller>