Hi Willem I do think we should add to the 1.4.0 release notes that the errorHandlerRef on the camel context doesn't work.
Med venlig hilsen Claus Ibsen ...................................... Silverbullet Skovsgårdsvænget 21 8362 Hørning Tlf. +45 2962 7576 Web: www.silverbullet.dk -----Original Message----- From: Willem Jiang [mailto:[EMAIL PROTECTED] Sent: 24. juli 2008 09:56 To: [email protected] Subject: Re: DeadLetterChannel Configuration Camel 1.4 Hi , I just dug the code, you can't set the errorHandler from CamelContext in Camel1.4.0, I just fill a JIRA[1] for this issue. You can walk around it by using the DSL. [1]https://issues.apache.org/activemq/browse/CAMEL-751 Willem mcobery wrote: > Hi, > > I am attempting to upgrade from Camel 1.3 to Camel 1.4 so we can use its > exception handling features and configuration. I have been trying to > configure the DeadLetterChannel all day via errorHandlerRef attribute on the > Camel Context and on the route element within the Camel context to no avail. > > My setup is as follows: > -Defined Spring configuration file that defines my Camel CXF endpoints and > Camel Context with its routes. > -Run the application through the Maven Jetty Plugin. > -Make a web service request via SOAPUI to the create method on the Archetype > Web Service with an error in XML payload of the request. This error in the > payload causes the JAXB unmarshall to pass null to the archetypeBSO bean > defined in Camel route. > -The DAO within the BSO throws an exception when it attempts to save a null > object. > -The stacktrace shows that the Camel Route is being followed but the > DeadLetterChannel configuration is not. > > Any suggestions? What am I doing wrong? Any help will be greatly > appreciated. > > Regards, > Marc > > Here is my configuration. > > <?xml version="1.0" encoding="UTF-8"?> > <beans > xmlns="http://www.springframework.org/schema/beans" > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > xmlns:jaxws="http://cxf.apache.org/jaxws" > xmlns:soap="http://cxf.apache.org/bindings/soap" > xmlns:cxf="http://activemq.apache.org/camel/schema/cxfEndpoint" > xmlns:lang="http://www.springframework.org/schema/lang" > xmlns:camel="http://activemq.apache.org/camel/schema/spring" > xsi:schemaLocation=" > http://www.springframework.org/schema/beans > http://www.springframework.org/schema/beans/spring-beans.xsd > http://activemq.apache.org/camel/schema/cxfEndpoint > http://activemq.apache.org/camel/schema/cxfEndpoint/camel-cxf.xsd > http://activemq.apache.org/camel/schema/spring > http://activemq.apache.org/camel/schema/spring/camel-spring.xsd > http://cxf.apache.org/bindings/soap > http://cxf.apache.org/schemas/configuration/soap.xsd > http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd > http://activemq.apache.org/camel/schema/spring > http://activemq.apache.org/camel/schema/spring/camel-spring.xsd > http://www.springframework.org/schema/lang > http://www.springframework.org/schema/lang/spring-lang-2.5.xsd"> > > <import resource="classpath:META-INF/cxf/cxf.xml" /> > <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" /> > <import resource="classpath:META-INF/cxf/cxf-servlet.xml" /> > > <!-- ****************************************************************** > --> > <!-- ********* CXF ENDPOINTS ******** > --> > <!-- ****************************************************************** > --> > <cxf:cxfEndpoint > id="archetypeService" > serviceClass="com.rulestream.ws.knowledge.ArchetypeWebService" > address="/ArchetypeService" > endpointName="t:ArchetypeService" > serviceName="t:archetypeService" > xmlns:t="http://core.rulestream.com"> > </cxf:cxfEndpoint> > > > <!-- ****************************************************************** > --> > <!-- ********* CXF ENDPOINTS ******** > --> > <!-- ****************************************************************** > --> > > <!-- ****************************************************************** > --> > <!-- ********* CAMEL ROUTING ******** > --> > <!-- ****************************************************************** > --> > <camel:camelContext id="main.context" > errorHandlerRef="cxfDeadLetterErrorHandler"> > <camel:jmxAgent id="agent" disabled="true"/> > <camel:route> > <camel:from uri="cxf://bean:archetypeService" /> > <camel:process ref="cxfIn" /> > <camel:choice> > <camel:when> > <camel:groovy>exchange.in.headers.operationName == > 'create'</camel:groovy> > <camel:to uri="bean:archetypeBSO?methodName=create" /> > <camel:process ref="archetypeProcessor" /> > </camel:when> > <camel:when> > <camel:groovy>exchange.in.headers.operationName == > 'delete'</camel:groovy> > <camel:to uri="bean:archetypeBSO?methodName=delete" /> > <camel:process ref="booleanProcessor" /> > </camel:when> > <camel:when> > <camel:groovy>exchange.in.headers.operationName == > 'find'</camel:groovy> > <camel:to uri="bean:archetypeBSO?methodName=find" /> > <camel:process ref="archetypeListProcessor" /> > </camel:when> > <camel:when> > <camel:groovy>exchange.in.headers.operationName == > 'save'</camel:groovy> > <camel:to uri="bean:archetypeBSO?methodName=save" /> > <camel:process ref="archetypeProcessor" /> > </camel:when> > <camel:otherwise> > <camel:recipientList> > <camel:groovy> > > 'bean:archetypeBSO?methodName='+exchange.in.headers.operationName > </camel:groovy> > </camel:recipientList> > <camel:process ref="archetypeProcessor" /> > </camel:otherwise> > </camel:choice> > <camel:to > uri="bean:facetSpecConverter?methodName=clearPreviouslyConvertedDTOs" /> > <camel:to > uri="bean:facetSpecConverter?methodName=clearPreviouslyConvertedDomainObjects" > /> > <camel:to > uri="bean:facetSpecGraphBuilder?methodName=clearPreviouslyBuiltObjects" /> > </camel:route> > </camel:camelContext> > > <bean id="exceptionProcessor" > > class="com.rulestream.ws.shared.processors.CxfOutExceptionProcessor"/> > > <bean id="cxfDeadLetterErrorHandler" > class="org.apache.camel.builder.DeadLetterChannelBuilder"> > <property name="defaultDeadLetterEndpointUri" > value="bean:exceptionProcessor" /> > <property name="redeliveryPolicy" ref="rsRedeliveryPolicyConfig" /> > </bean> > > <bean id="rsRedeliveryPolicyConfig" > class="org.apache.camel.processor.RedeliveryPolicy"> > <property name="maximumRedeliveries" value="1" /> > <property name="initialRedeliveryDelay" value="30000"/> > <property name="useExponentialBackOff" value="true"/> > </bean> > <!-- ****************************************************************** > --> > <!-- ********* CAMEL ROUTING ******** > --> > <!-- ****************************************************************** > --> > </beans> > > Here is the stacktrace: > > [RULESTREAM] ERROR [btpool0-1] BaseEntityBSO.create(124) | 60002 : Error > saving the version!!!! > [RULESTREAM] ERROR [btpool0-1] DeadLetterChannel.log(189) | Failed delivery > for exchangeId: ID-mcobery/3170-1216852528171/0-0. On delivery attempt: 5 > caught: com.rulestream.core.shared.exceptions.RSRuntimeException: 60002 : > Error saving the version!!!! > com.rulestream.core.shared.exceptions.RSRuntimeException: 60002 : Error > saving the version!!!! > at > com.rulestream.core.shared.bso.BaseEntityBSO.create(BaseEntityBSO.java:126) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) > at java.lang.reflect.Method.invoke(Method.java:585) > at > org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:310) > at > org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182) > at > org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149) > at > org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106) > at > org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) > at > org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204) > at $Proxy76.create(Unknown Source) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) > at java.lang.reflect.Method.invoke(Method.java:585) > at > org.apache.camel.component.bean.MethodInfo.invoke(MethodInfo.java:124) > at > org.apache.camel.component.bean.MethodInfo$1.proceed(MethodInfo.java:68) > at > org.apache.camel.component.bean.BeanProcessor.process(BeanProcessor.java:110) > at > org.apache.camel.impl.ProcessorEndpoint.onExchange(ProcessorEndpoint.java:92) > at > org.apache.camel.impl.ProcessorEndpoint$1.process(ProcessorEndpoint.java:66) > at > org.apache.camel.impl.converter.AsyncProcessorTypeConverter$ProcessorToAsyncProcessorBridge.process(AsyncProcessorTypeConverter.java:43) > at > org.apache.camel.processor.SendProcessor.process(SendProcessor.java:75) > at > org.apache.camel.processor.DeadLetterChannel.process(DeadLetterChannel.java:155) > at > org.apache.camel.processor.DeadLetterChannel.process(DeadLetterChannel.java:91) > at org.apache.camel.processor.Pipeline.process(Pipeline.java:101) > at org.apache.camel.processor.Pipeline.process(Pipeline.java:85) > at > org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:41) > at org.apache.camel.processor.Pipeline.process(Pipeline.java:57) > at > org.apache.camel.processor.DelegateProcessor.processNext(DelegateProcessor.java:50) > at > org.apache.camel.processor.ChoiceProcessor.process(ChoiceProcessor.java:50) > at > org.apache.camel.impl.converter.AsyncProcessorTypeConverter$ProcessorToAsyncProcessorBridge.process(AsyncProcessorTypeConverter.java:43) > at > org.apache.camel.processor.DeadLetterChannel.process(DeadLetterChannel.java:155) > at > org.apache.camel.processor.DeadLetterChannel.process(DeadLetterChannel.java:91) > at org.apache.camel.processor.Pipeline.process(Pipeline.java:101) > at org.apache.camel.processor.Pipeline.process(Pipeline.java:85) > at > org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:39) > at > org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:41) > at > org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:66) > at > org.apache.camel.component.cxf.CamelInvoker.invoke(CamelInvoker.java:167) > at > org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:56) > at > org.apache.cxf.workqueue.SynchronousExecutor.execute(SynchronousExecutor.java:37) > at > org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:92) > at > org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:221) > at > org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:78) > at > org.apache.cxf.transport.servlet.ServletDestination.invoke(ServletDestination.java:92) > at > org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:279) > at > org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:161) > at > org.apache.cxf.transport.servlet.AbstractCXFServlet.invoke(AbstractCXFServlet.java:174) > at > org.apache.cxf.transport.servlet.AbstractCXFServlet.doPost(AbstractCXFServlet.java:152) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:727) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) > at > org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487) > at > org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1093) > at > com.opensymphony.module.sitemesh.filter.PageFilter.parsePage(PageFilter.java:118) > at > com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:52) > at > org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084) > at > org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:164) > at > org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:141) > at > org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:90) > at > org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:406) > at > org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084) > at > org.appfuse.webapp.filter.LocaleFilter.doFilterInternal(LocaleFilter.java:74) > at > org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) > at > org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084) > at > com.opensymphony.clickstream.ClickstreamFilter.doFilter(ClickstreamFilter.java:42) > at > org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084) > at > org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:359) > at > org.springframework.security.intercept.web.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109) > at > org.springframework.security.intercept.web.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83) > at > org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371) > at > org.springframework.security.ui.SessionFixationProtectionFilter.doFilterHttp(SessionFixationProtectionFilter.java:52) > at > org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53) > at > org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371) > at > org.springframework.security.ui.ExceptionTranslationFilter.doFilterHttp(ExceptionTranslationFilter.java:101) > at > org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53) > at > org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371) > at > org.springframework.security.providers.anonymous.AnonymousProcessingFilter.doFilterHttp(AnonymousProcessingFilter.java:105) > at > org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53) > at > org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371) > at > org.springframework.security.ui.rememberme.RememberMeProcessingFilter.doFilterHttp(RememberMeProcessingFilter.java:109) > at > org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53) > at > org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371) > at > org.springframework.security.wrapper.SecurityContextHolderAwareRequestFilter.doFilterHttp(SecurityContextHolderAwareRequestFilter.java:91) > at > org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53) > at > org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371) > at > org.springframework.security.ui.basicauth.BasicProcessingFilter.doFilterHttp(BasicProcessingFilter.java:173) > at > org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53) > at > org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371) > at > org.springframework.security.ui.AbstractProcessingFilter.doFilterHttp(AbstractProcessingFilter.java:271) > at > org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53) > at > org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371) > at > org.springframework.security.ui.logout.LogoutFilter.doFilterHttp(LogoutFilter.java:89) > at > org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53) > at > org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371) > at > org.springframework.security.context.HttpSessionContextIntegrationFilter.doFilterHttp(HttpSessionContextIntegrationFilter.java:235) > at > org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53) > at > org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371) > at > org.springframework.security.util.FilterChainProxy.doFilter(FilterChainProxy.java:174) > at > org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:236) > at > org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167) > at > org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084) > at > org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96) > at > org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) > at > org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084) > at > org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360) > at > org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) > at > org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181) > at > org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:726) > at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405) > at > org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:206) > at > org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114) > at > org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) > at org.mortbay.jetty.Server.handle(Server.java:324) > at > org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505) > at > org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:842) > at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:648) > at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211) > at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380) > at > org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395) > at > org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:450) > Caused by: java.lang.NullPointerException > at > com.rulestream.core.shared.dao.GenericDAOImpl.save(GenericDAOImpl.java:68) > at > com.rulestream.core.shared.dao.GenericDAOImpl.save(GenericDAOImpl.java:1) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) > at java.lang.reflect.Method.invoke(Method.java:585) > at > com.rulestream.core.util.InvocationHandlerDelegate.invoke(InvocationHandlerDelegate.java:42) > at > com.rulestream.core.shared.dao.GenericDAOFactoryBean$GenericDAOInvocationHandler.invoke(GenericDAOFactoryBean.java:227) > at $Proxy56.save(Unknown Source) > at > com.rulestream.core.shared.bso.BaseEntityBSO.create(BaseEntityBSO.java:119) > ... 120 more > [RULESTREAM] ERROR [btpool0-1] DeadLetterChannel.process(78) | > Exchange[BodyType:org.apache.xerces.dom.DocumentImpl, Body:<soapenv:Envelope > xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" > xmlns:core="http://core.rulestream.com"> > <soapenv:Header/> > <soapenv:Body/></soapenv:Envelope>] > Regards, > Marc >
