简体   繁体   中英

Spring Integration: error-channel - Problems with exception handling

Hello this is my configuration:

  1. JVM 1.6.0_30
  2. Spring version 3.0.5
  3. Spring Integration core 2.0.5
  4. SO Windows 7

This is my context configuration:

<beans:bean
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
    lazy-init="false">
    <beans:property name="ignoreUnresolvablePlaceholders"
        value="true" />
    <beans:property name="location" value="classpath:etc/pds/pds.properties" />
</beans:bean>



<channel id="pdsrequest" />
<channel id="pdsresponse" />
<channel id="channelMBD"/>

<channel id="pdsRisposta">
    <queue capacity="1" />
    <interceptors>
        <wire-tap channel="simple" />
    </interceptors>
</channel>

<service-activator input-channel="pdsrequest"
    output-channel="pdsresponse" ref="pdsCalculateService" />

<logging-channel-adapter id="simple" level="DEBUG" />

<!-- GATEWAY -->
<gateway id="gatewayService"
    service-interface="com.cervedgroup.rating.pds.orchestratore.spring.GatewayService"
    error-channel="errorChannel" default-reply-timeout="${PDS.GATEWAY_TIMEOUT}"
    default-request-channel="pdsrequest" default-reply-channel="pdsresponse" />


<exception-type-router input-channel="errorChannel">
    <mapping
        exception-type="com.cervedgroup.rating.pds.exceptions.NotDefinedPDSException"
        channel="eccezioneProgrammata" />
    <mapping exception-type="com.cervedgroup.rating.pds.exceptions.ComputingPDSException"
        channel="eccezioneRuntime" />
    <mapping
        exception-type="com.cervedgroup.rating.pds.exceptions.DataSourcePDSException"
        channel="eccezioneRuntime" />
    <mapping exception-type="com.cervedgroup.rating.pds.exceptions.PDSException"
        channel="eccezioneRuntime" />
    <mapping
        exception-type="com.cervedgroup.rating.pds.exceptions.ConfigurationException"
        channel="eccezioneRuntime" />
    <mapping exception-type="java.lang.RuntimeException" channel="eccezioneRuntime" />
</exception-type-router>

<service-activator input-channel="eccezioneProgrammata"
    ref="invokerHandlerEccezioneProgrammata" />

<beans:bean id="invokerHandlerEccezioneProgrammata"
    class="com.cervedgroup.rating.pds.orchestratore.error.GestoreEccezioneProgrammata" />

<service-activator input-channel="eccezioneRuntime"
    ref="invokerHandlerEccezioneRuntime" />

<beans:bean id="invokerHandlerEccezioneRuntime"
    class="com.cervedgroup.rating.pds.orchestratore.error.GestoreEccezioneRuntime" />


/>

</beans:beans> 

This is my log4j.properties:

log4j.rootLogger=INFO, ROOT
log4j.appender.ROOT=org.apache.log4j.ConsoleAppender
log4j.appender.ROOT.layout=it.pitagora.util.log.CervedLayout
log4j.appender.ME=it.pitagora.util.log.CurrentLoggerAppender
log4j.logger.org.springframework.batch.core.launch.support.CommandLineJobRunner=DEBUG, ME
log4j.logger.org.springframework.integration=OFF, ME
log4j.logger.httpclient.wire.header=INFO,ME
log4j.logger.httpclient.wire.content=INFO,ME
log4j.logger.org.apache.commons.httpclient=INFO,ME
log4j.appender.C=it.pitagora.util.log.CurrentLoggerAppender
log4j.appender.R=it.pitagora.util.log.CurrentLoggerAppender
log4j.appender.D=it.pitagora.util.log.CurrentLoggerAppender
log4j.appender.P=it.pitagora.util.log.CurrentLoggerAppender
log4j.appender.AP=it.pitagora.util.log.CurrentLoggerAppender
log4j.appender.N=it.pitagora.util.log.CurrentLoggerAppender
log4j.logger.org.apache.ibatis=INFO, ME
log4j.logger.org.mybatis.spring=INFO, ME
log4j.logger.org.springframework=INFO, ME

I have a problem in the management of the error channel of the gateway. The channel works, but on nohup is printed the stack trace of the exception:

   ERROR 06-02 10:24:07,141 - org.springframework.integration.MessageHandlingException: com.cervedgroup.rating.pds.exceptions.NotDefinedPDSException: Dati non recuperabili
        at org.springframework.integration.handler.MethodInvokingMessageProcessor.processMessage(MethodInvokingMessageProcessor.java:76)
        at org.springframework.integration.handler.ServiceActivatingHandler.handleRequestMessage(ServiceActivatingHandler.java:64)
        at org.springframework.integration.handler.AbstractReplyProducingMessageHandler.handleMessageInternal(AbstractReplyProducingMessageHandler.java:98)
        at org.springframework.integration.handler.AbstractMessageHandler.handleMessage(AbstractMessageHandler.java:78)
        at org.springframework.integration.dispatcher.UnicastingDispatcher.doDispatch(UnicastingDispatcher.java:110)
        at org.springframework.integration.dispatcher.UnicastingDispatcher.access$000(UnicastingDispatcher.java:51)
        at org.springframework.integration.dispatcher.UnicastingDispatcher$1.run(UnicastingDispatcher.java:92)
        at org.springframework.integration.util.ErrorHandlingTaskExecutor$1.run(ErrorHandlingTaskExecutor.java:52)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
        at java.lang.Thread.run(Thread.java:662)
Caused by: com.cervedgroup.rating.pds.exceptions.NotDefinedPDSException: Dati  non recuperabili
        at com.cervedgroup.rating.pds.dao.cgr.RecuperaDatiCGR.recuperaClasseCGRValida(RecuperaDatiCGR.java:218)
        at com.cervedgroup.rating.pds.evaluation.PDSDataRetriever.recuperaClasseCGR(PDSDataRetriever.java:93)
        at com.cervedgroup.rating.pds.evaluation.PDSDataRetriever.recuperaDatiPreliminariGriglie(PDSDataRetriever.java:52)
        at com.cervedgroup.rating.pds.evaluation.PDSDataRetriever.evaluate(PDSDataRetriever.java:38)
        at com.cervedgroup.rating.pds.orchestratore.invoker.PDSDataRetrieverInvoker.avviaDataRetrieving(PDSDataRetrieverInvoker.java:58)
        at com.cervedgroup.rating.pds.orchestratore.invoker.PDSDataRetrieverInvoker.invoke(PDSDataRetrieverInvoker.java:32)
        at sun.reflect.GeneratedMethodAccessor67.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.springframework.expression.spel.support.ReflectiveMethodExecutor.execute(ReflectiveMethodExecutor.java:69)
        at org.springframework.expression.spel.ast.MethodReference.getValueInternal(MethodReference.java:83)
        at org.springframework.expression.spel.ast.CompoundExpression.getValueInternal(CompoundExpression.java:57)
        at org.springframework.expression.spel.ast.SpelNodeImpl.getTypedValue(SpelNodeImpl.java:102)
        at org.springframework.expression.spel.standard.SpelExpression.getValue(SpelExpression.java:102)
        at org.springframework.integration.util.AbstractExpressionEvaluator.evaluateExpression(AbstractExpressionEvaluator.java:126)
        at org.springframework.integration.util.MessagingMethodInvokerHelper.processInternal(MessagingMethodInvokerHelper.java:225)
        at org.springframework.integration.util.MessagingMethodInvokerHelper.process(MessagingMethodInvokerHelper.java:125)
        at org.springframework.integration.handler.MethodInvokingMessageProcessor.processMessage(MethodInvokingMessageProcessor.java:73)
        ... 10 more

Is there a way to avoid this print on nohup?

Thank you very much

As you know errorChannel is created by Framework on background, but there is no restrictions to define it yourself.

By default its is PublishSubscribeChannel and the Framework subscribes to it one handler - LoggingHandler with ERROR logging level.

So, if you don't interested in that default debaviour you can declare errorChannel as it is appropriate for you environment.

From other side, as you are using it from <gateway> , how about to use your own channel and not the default errorChannel ?

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM