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
-- 
View this message in context: 
http://www.nabble.com/DeadLetterChannel-Configuration-Camel-1.4-tp18622356s22882p18622356.html
Sent from the Camel - Users mailing list archive at Nabble.com.

Reply via email to