当前位置: 首页 > 知识库问答 >
问题:

在spring集成中,如何捕捉不同的异常?

贡俊
2023-03-14
    null
public class TcpErrorHandler {
    public void onException(){
        System.out.println("Exception!!! ");
    } 
}
    null

有什么捕捉机制吗?

下面是我的bean配置中的一个片段:

<!-- Client side -->

<int:gateway id="gw"
    service-interface="hu.gmxdev.climaxreplica.service.SimpleGateway"
    default-request-channel="outputchannel" />

<int-ip:tcp-connection-factory id="client"
    type="client" host="localhost" port="10001" single-use="true"
    so-timeout="2000" deserializer="climaxDeserializer"
    interceptor-factory-chain="customInterceptorFactoryChain"/>

<int:channel id="outputchannel" />

<int-ip:tcp-outbound-gateway id="outGateway"
    request-channel="outputchannel" reply-channel="replychannel"
    connection-factory="client" request-timeout="2000" reply-timeout="2000" />

<int:service-activator input-channel="replychannel"
    method="reply" ref="echoService" id="serviceactivator">
</int:service-activator>

<int:channel id="replychannel"></int:channel>

<bean id="customInterceptorFactoryChain"
        class="org.springframework.integration.ip.tcp.connection.TcpConnectionInterceptorFactoryChain">
        <property name="interceptors">
            <array>
                <bean class="hu.gmxdev.climaxreplica.service.CustomInterceptorFactory"/>
            </array>
        </property>
</bean>

<!-- Error channel -->

<int-ip:tcp-connection-event-inbound-channel-adapter id="event"
    error-channel="errorChannel"
    event-types="org.springframework.integration.ip.tcp.connection.TcpConnectionExceptionEvent" />

<int:channel id="errorChannel"></int:channel>

<int:service-activator ref="tcpErrorHandler" method="onException"
    input-channel="errorChannel">
</int:service-activator>

下面是我的错误处理程序:

public class TcpErrorHandler {
    @Autowired
    private ApplicationContext appContext;

    public void onException(TcpConnectionExceptionEvent event){
        MainService mainService = appContext.getBean(MainService.class);
        mainService.setSuccess(3);
        System.out.println("Exception!!! ");
        System.out.println(event.getCause().getMessage());
    }
}
public class CustomInterceptor extends TcpConnectionInterceptorSupport{

    public CustomInterceptor () {
        System.out.println("catched_constructor1");
    }

    public CustomInterceptor (ApplicationEventPublisher applicationEventPublisher) {
        super(applicationEventPublisher);
        System.out.println("catched_constructor");
    }

    @Override
    public boolean onMessage(Message<?> message) {
        System.out.println("catched_message");
        return super.onMessage(message);
    }


    @Override
    public void send(Message<?> message){
        System.out.println("catched_send");
        MessageHeaders mh = message.getHeaders();
        try {
            super.send(message);
        }
        catch (Exception e) {
            System.out.println("catched_send_exception");
        }
    }

    @Override
    public void close() {
        String id = getConnectionId();
        System.out.println("catched_closed" + id);
        super.close();
    }

}
success = gateway.send("fooooooo");

共有1个答案

叶冥夜
2023-03-14

您可以定义提供给入站适配器的错误通道。下面是一个例子:

    <int:channel id="error-channel"></int:channel>
    <int-ws:inbound-gateway id="gateway" error-channel="error-channel"
    request-channel="in"  marshaller="marshaller" unmarshaller="marshaller"
    reply-channel="out" />

现在,向下游抛出的所有异常都将被这个错误通道捕获。然后,您可以将此错误通道作为输入定义一个服务激活器:

 <int:service-activator  input-channel="error-channel"
        ref="exceptionHandler" method="handleError" output-channel="outError"></int:service-activator>

并且这个激活器引用定义错误处理逻辑的bean。

 类似资料:
  • 问题内容: 在春季集成中,我有一个简单的tcp客户管道:一个网关,一个tcp出站网关,一个服务激活器以及一个错误通道。在tcp-connection- factory中有一个简单的拦截器。错误通道非常简单,我使用此过滤器实现了tcp-connection-event-inbound-channel- adapter: org.springframework.integration.ip.tcp.c

  • 然后我把它用作: 但是最后一行代码没有捕获任何异常,我的代码给出运行时异常并停止。你能解释为什么会发生这种情况,如果可能的话,如何修复它吗?

  • 问题内容: 据我所知,netty通过重写方法exceptionCaught()处理异常。但是我想要的是一个可以处理所有异常的处理程序。因此,管道应类似于: InboundExceptionHandler- inboundHandler1-inboundHandler2-outboundHandler1-outboundHandler2-OutboundExceptionHandler 这意味着我应

  • 我在用滑翔4。当URL返回404时,获取FileNotFoundException。我尝试使用RequestListener捕捉异常。但它并没有缓存这个异常。 记录如下: 2019-03-20 17:48:07.134 32233-32233/com。zyta。zflikz带滑翔:装载失败https://lh4.googleusercontent.com/-UxjwFuQRjXA/AAAAAAAA

  • 问题内容: 我正在尝试编写一个使用PyQt5在系统托盘中运行的应用程序。该代码有时会引发异常,我需要能够捕获它们。 我希望当应用程序中发生异常时,会退出主事件循环,因此像这样捕获它应该起作用: 在下面的示例中,当我按下“提高”按钮时,我仅看到回溯,但从未看到打印过的内容。 有2个类似的问题,但是那里的答案并没有满足我的需要: 抓住PyQt中的任何异常:OP希望 监视 异常,不退出偶数循环。 防止P

  • 我是在Spring中加入的,并且尝试使用AOP方面来处理我的程序中所有可能的异常。它工作得很好,除了请求para解析器异常,因为我的方面不能捕捉到它。案例如下:这是我的方面代码 然后是控制器部分,它的包路径精确地包含在方面切入点中。 //---------------------------------------------------------------------------------