You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ni...@apache.org on 2010/03/29 03:56:54 UTC

svn commit: r928564 - in /camel/trunk/components: camel-jms/src/test/resources/org/apache/camel/component/jms/tx/ camel-spring/src/main/java/org/apache/camel/spring/ camel-spring/src/main/java/org/apache/camel/spring/handler/ camel-spring/src/test/java...

Author: ningjiang
Date: Mon Mar 29 01:56:53 2010
New Revision: 928564

URL: http://svn.apache.org/viewvc?rev=928564&view=rev
Log:
CAMEL-1799 clean up the ErrorHandler SpringDSL implementation

Added:
    camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/ErrorHandlerDefinition.java   (contents, props changed)
      - copied, changed from r928146, camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/ErrorHandlerDefintion.java
Removed:
    camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/ErrorHandlerDefintion.java
Modified:
    camel/trunk/components/camel-jms/src/test/resources/org/apache/camel/component/jms/tx/TransactionErrorHandlerCustomerSpringParserTest.xml
    camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelContextFactoryBean.java
    camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/handler/ErrorHandlerDefinitionParser.java
    camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/handler/ErrorHandlerDefintionParserTest.java
    camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/handler/ErrorHandlerDefinitionParser.xml
    camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/SpringDeadLetterChannelHandledPolicyNewTest.xml
    camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/SpringDeadLetterChannelUseOriginalBodyNewTest.xml

Modified: camel/trunk/components/camel-jms/src/test/resources/org/apache/camel/component/jms/tx/TransactionErrorHandlerCustomerSpringParserTest.xml
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jms/src/test/resources/org/apache/camel/component/jms/tx/TransactionErrorHandlerCustomerSpringParserTest.xml?rev=928564&r1=928563&r2=928564&view=diff
==============================================================================
--- camel/trunk/components/camel-jms/src/test/resources/org/apache/camel/component/jms/tx/TransactionErrorHandlerCustomerSpringParserTest.xml (original)
+++ camel/trunk/components/camel-jms/src/test/resources/org/apache/camel/component/jms/tx/TransactionErrorHandlerCustomerSpringParserTest.xml Mon Mar 29 01:56:53 2010
@@ -64,12 +64,8 @@
     </bean>
 
     <!-- the transaction error handle we refer to from the route -->
-    <camel:errorHandler id="transactionErrorHandler" type="TransactionErrorHandler">
-        <camel:transactionTemplate>
-         	<ref bean="PROPAGATION_REQUIRED"/>
-        </camel:transactionTemplate>
-    </camel:errorHandler>
-
+    <camel:errorHandler id="transactionErrorHandler" type="TransactionErrorHandler" transactionTemplateRef="PROPAGATION_REQUIRED" />
+ 
     <!-- the no error handler -->
     <camel:errorHandler id="noErrorHandler" type="NoErrorHandler"/>
     <!-- END SNIPPET: e2 -->

Modified: camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelContextFactoryBean.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelContextFactoryBean.java?rev=928564&r1=928563&r2=928564&view=diff
==============================================================================
--- camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelContextFactoryBean.java (original)
+++ camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelContextFactoryBean.java Mon Mar 29 01:56:53 2010
@@ -139,7 +139,7 @@ public class CamelContextFactoryBean ext
         @XmlElement(name = "consumerTemplate", type = CamelConsumerTemplateFactoryBean.class, required = false),
         @XmlElement(name = "proxy", type = CamelProxyFactoryDefinition.class, required = false),
         @XmlElement(name = "export", type = CamelServiceExporterDefinition.class, required = false),
-        @XmlElement(name = "errorHandler", type = ErrorHandlerDefintion.class, required = false)})
+        @XmlElement(name = "errorHandler", type = ErrorHandlerDefinition.class, required = false)})
     private List beans;    
     @XmlElement(name = "routeBuilder", required = false)
     private List<RouteBuilderDefinition> builderRefs = new ArrayList<RouteBuilderDefinition>();

Copied: camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/ErrorHandlerDefinition.java (from r928146, camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/ErrorHandlerDefintion.java)
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/ErrorHandlerDefinition.java?p2=camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/ErrorHandlerDefinition.java&p1=camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/ErrorHandlerDefintion.java&r1=928146&r2=928564&rev=928564&view=diff
==============================================================================
--- camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/ErrorHandlerDefintion.java (original)
+++ camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/ErrorHandlerDefinition.java Mon Mar 29 01:56:53 2010
@@ -36,25 +36,20 @@ import org.apache.camel.model.config.Pro
  */
 @XmlRootElement(name = "errorHandler")
 @XmlAccessorType(XmlAccessType.FIELD)
-public class ErrorHandlerDefintion extends IdentifiedType {
-    @XmlAttribute(required = true)
+public class ErrorHandlerDefinition extends IdentifiedType {
+    @XmlAttribute(required = false)
     private ErrorHandlerType type;
     @XmlAttribute(required = false)
     private String deadLetterUri;
     @XmlAttribute(required = false)
     private LoggingLevel level;
     @XmlAttribute(required = false)
-    private Boolean handled;
-    @XmlAttribute(required = false)
     private Boolean useOriginalMessage;
+    @XmlAttribute(required = false)
+    private String transactionTemplateRef;
+    @XmlAttribute(required = false)
+    private String onRedeliveryRef;
     @XmlElement(name = "redeliveryPolicy", required = false)
     private RedeliveryPolicyDefinition redeliveryPolicy;
-    @XmlElements({
-        @XmlElement(name = "exceptionPolicyStrategy",  required = false),
-        @XmlElement(name = "onRedelivery", required = false),
-        @XmlElement(name = "failureProcessor", required = false),
-        @XmlElement(name = "transactionTemplate", required = false),
-        @XmlElement(name = "deadLetter", required = false)})
-    private List beans; 
-
+   
 }

Propchange: camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/ErrorHandlerDefinition.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/ErrorHandlerDefinition.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Propchange: camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/ErrorHandlerDefinition.java
------------------------------------------------------------------------------
    svn:mergeinfo = 

Modified: camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/handler/ErrorHandlerDefinitionParser.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/handler/ErrorHandlerDefinitionParser.java?rev=928564&r1=928563&r2=928564&view=diff
==============================================================================
--- camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/handler/ErrorHandlerDefinitionParser.java (original)
+++ camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/handler/ErrorHandlerDefinitionParser.java Mon Mar 29 01:56:53 2010
@@ -19,7 +19,9 @@ package org.apache.camel.spring.handler;
 
 import java.lang.reflect.Method;
 
+import org.w3c.dom.Attr;
 import org.w3c.dom.Element;
+import org.w3c.dom.NamedNodeMap;
 import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
 
@@ -42,6 +44,8 @@ import org.springframework.beans.factory
 import org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser;
 import org.springframework.beans.factory.xml.BeanDefinitionParserDelegate;
 import org.springframework.beans.factory.xml.ParserContext;
+import org.springframework.util.Assert;
+import org.springframework.util.StringUtils;
 
 /**
  * The DefinitionParser to deal with the ErrorHandler
@@ -57,7 +61,11 @@ public class ErrorHandlerDefinitionParse
     }
 
     protected Class getBeanClass(Element element) {
-        ErrorHandlerType type = ErrorHandlerType.valueOf(element.getAttribute("type"));
+        ErrorHandlerType type = ErrorHandlerType.DefaultErrorHandler;
+        
+        if (ObjectHelper.isNotEmpty(element.getAttribute("type"))) {
+            type = ErrorHandlerType.valueOf(element.getAttribute("type"));
+        }
         Class clazz = null;
         if (type.equals(ErrorHandlerType.NoErrorHandler)) {
             clazz = NoErrorHandlerBuilder.class;
@@ -84,13 +92,18 @@ public class ErrorHandlerDefinitionParse
     protected boolean isEligibleAttribute(String attributeName) {
         return attributeName != null && !ID_ATTRIBUTE.equals(attributeName)
                 && !attributeName.equals("xmlns") && !attributeName.startsWith("xmlns:")
-                && !attributeName.equals("type");
+                && !attributeName.equals("type") && !attributeName.equals("onRedeliveryRef")
+                && !attributeName.equals("transactionTemplateRef");
     }
+   
     
     @Override
     protected void doParse(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) {
         super.doParse(element, parserContext, builder);
-        ErrorHandlerType type = ErrorHandlerType.valueOf(element.getAttribute("type"));
+        ErrorHandlerType type = ErrorHandlerType.DefaultErrorHandler;
+        if (ObjectHelper.isNotEmpty(element.getAttribute("type"))) {
+            type = ErrorHandlerType.valueOf(element.getAttribute("type"));
+        }
         if (type.equals(ErrorHandlerType.NoErrorHandler) || type.equals(ErrorHandlerType.LoggingErrorHandler)) {
             // don't need to parser other stuff
             return;
@@ -110,65 +123,28 @@ public class ErrorHandlerDefinitionParse
                         BeanDefinition redeliveryPolicyDefinition = redeliveryPolicyParser.parse(childElement, parserContext);
                         builder.addPropertyValue(localName, redeliveryPolicyDefinition);
                     }
-                    if (localName.equals("exceptionPolicyStrategy") || localName.equals("onRedelivery")
-                        || localName.equals("failureProcessor") || localName.equals("deadLetter")
-                        || localName.equals("transactionTemplate")) {
-                        // only deal with the first subElement
-                        setFirstChildAsProperty(childElement, parserContext, builder, localName);
-                    }
                 }
             }
+            // deal with onRedeliveryRef
+            parserRefAttribute(element, "onRedeliveryRef", "onRedelivery", builder);
         }
-    }
-    
-    protected void setFirstChildAsProperty(Element element, ParserContext ctx, BeanDefinitionBuilder bean,
-                                           String propertyName) {
-
-        Element first = getFirstElement(element);
-
-        if (first == null) {
-            throw new IllegalStateException(propertyName + " property must have child elements!");
+        if (type.equals(ErrorHandlerType.TransactionErrorHandler)) {
+            // deal with transactionTemplateRef
+            parserRefAttribute(element, "transactionTemplateRef", "transactionTemplate", builder);
         }
+    }
 
-        String id;
-        BeanDefinition child;
-        if (first.getNamespaceURI().equals(BeanDefinitionParserDelegate.BEANS_NAMESPACE_URI)) {
-            String name = first.getLocalName();
-            if ("ref".equals(name)) {
-                id = first.getAttribute("bean");
-                if (id == null) {
-                    throw new IllegalStateException("<ref> elements must have a \"bean\" attribute!");
-                }
-                bean.addPropertyReference(propertyName, id);
-                return;
-            } else if ("bean".equals(name)) {
-                BeanDefinitionHolder bdh = ctx.getDelegate().parseBeanDefinitionElement(first);
-                child = bdh.getBeanDefinition();
-                bean.addPropertyValue(propertyName, child);
-                return;
-            } else {
-                throw new UnsupportedOperationException("Elements with the name " + name
-                                                        + " are not currently "
-                                                        + "supported as sub elements of "
-                                                        + element.getLocalName());
+    private void parserRefAttribute(Element element, String attributeName, String propertyName, BeanDefinitionBuilder builder) {
+        NamedNodeMap attributes = element.getAttributes();
+        for (int x = 0; x < attributes.getLength(); x++) {
+            Attr attribute = (Attr) attributes.item(x);
+            String name = attribute.getLocalName();
+            if (name.equals(attributeName)) {
+                Assert.state(StringUtils.hasText(propertyName),
+                        "Illegal property name returned from 'extractPropertyName(String)': cannot be null or empty.");
+                builder.addPropertyReference(propertyName, attribute.getValue());
             }
         }
-        child = ctx.getDelegate().parseCustomElement(first, bean.getBeanDefinition());
-        bean.addPropertyValue(propertyName, child);
-    }
-    
-    /**
-     * Get the first direct child with a given type
-     */
-    public static Element getFirstElement(Node parent) {
-        Node n = parent.getFirstChild();
-        while (n != null && Node.ELEMENT_NODE != n.getNodeType()) {
-            n = n.getNextSibling();
-        }
-        if (n == null) {
-            return null;
-        }
-        return (Element)n;
     }
     
     class RedeliveryPolicyDefinitionParser extends BeanDefinitionParser {

Modified: camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/handler/ErrorHandlerDefintionParserTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/handler/ErrorHandlerDefintionParserTest.java?rev=928564&r1=928563&r2=928564&view=diff
==============================================================================
--- camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/handler/ErrorHandlerDefintionParserTest.java (original)
+++ camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/handler/ErrorHandlerDefintionParserTest.java Mon Mar 29 01:56:53 2010
@@ -52,17 +52,15 @@ public class ErrorHandlerDefintionParser
     public void testDefaultErrorHandler() {
         DefaultErrorHandlerBuilder errorHandler = (DefaultErrorHandlerBuilder) ctx.getBean("defaultErrorHandler");
         assertNotNull(errorHandler);
-        Processor processor = errorHandler.getFailureProcessor();
-        assertNotNull(processor);
-        assertTrue("It should be MyErrorProcessor", processor instanceof MyErrorProcessor);
-        ExceptionPolicyStrategy strategy = errorHandler.getExceptionPolicyStrategy();
-        assertNotNull(strategy);
-        assertTrue("It should be DefaultExceptionPolicyStrategy", strategy instanceof DefaultExceptionPolicyStrategy);
         RedeliveryPolicy policy = errorHandler.getRedeliveryPolicy();
         assertNotNull(policy);
         assertEquals("Wrong maximumRedeliveries", 2, policy.getMaximumRedeliveries());
         assertEquals("Wrong redeliveryDelay", 0, policy.getRedeliveryDelay());
         assertEquals("Wrong logStackTrace", false, policy.isLogStackTrace());
+        
+        errorHandler = (DefaultErrorHandlerBuilder) ctx.getBean("errorHandler");
+        assertNotNull(errorHandler);
+        
     }
     
     public void testTransactionErrorHandler() {
@@ -76,8 +74,7 @@ public class ErrorHandlerDefintionParser
     public void testDeadLetterErrorHandler() {
         DeadLetterChannelBuilder errorHandler = (DeadLetterChannelBuilder) ctx.getBean("deadLetterErrorHandler");
         assertNotNull(errorHandler);
-        assertNotNull(errorHandler.getDeadLetter());
-        assertTrue("It should be a direct endpoint", errorHandler.getDeadLetter() instanceof DirectEndpoint);
+        assertEquals("get worng deadletteruri ", "log:dead", errorHandler.getDeadLetterUri());
         RedeliveryPolicy policy = errorHandler.getRedeliveryPolicy();
         assertNotNull(policy);
         assertEquals("Wrong maximumRedeliveries", 2, policy.getMaximumRedeliveries());

Modified: camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/handler/ErrorHandlerDefinitionParser.xml
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/handler/ErrorHandlerDefinitionParser.xml?rev=928564&r1=928563&r2=928564&view=diff
==============================================================================
--- camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/handler/ErrorHandlerDefinitionParser.xml (original)
+++ camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/handler/ErrorHandlerDefinitionParser.xml Mon Mar 29 01:56:53 2010
@@ -25,36 +25,20 @@
 
     <errorHandler id="loggingErrorHandler" xmlns="http://camel.apache.org/schema/spring" type="LoggingErrorHandler" level="INFO" />
     
-     <camel:errorHandler id="defaultErrorHandler" type="DefaultErrorHandler">
+    <errorHandler id="errorHandler" xmlns="http://camel.apache.org/schema/spring" />
+    
+    <camel:errorHandler id="defaultErrorHandler" type="DefaultErrorHandler">
        <camel:redeliveryPolicy maximumRedeliveries="2" redeliveryDelay="0" logStackTrace="false" />
-       <camel:failureProcessor>
-          <bean class="org.apache.camel.spring.handler.MyErrorProcessor"/>
-       </camel:failureProcessor>
-       <camel:exceptionPolicyStrategy>
-          <bean class="org.apache.camel.processor.exceptionpolicy.DefaultExceptionPolicyStrategy"/>
-       </camel:exceptionPolicyStrategy>
     </camel:errorHandler>
     
-    <camel:errorHandler id="deadLetterErrorHandler" type="DeadLetterChannel" handled="true">
+    <camel:errorHandler id="deadLetterErrorHandler" type="DeadLetterChannel" deadLetterUri="log:dead">
        <camel:redeliveryPolicy maximumRedeliveries="2" redeliveryDelay="1000" logHandled="true" />
-       <camel:deadLetter>
-           <bean class="org.apache.camel.component.direct.DirectEndpoint">
-               <constructor-arg>
-                  <value>direct:start</value>
-               </constructor-arg>
-           </bean>
-       </camel:deadLetter>
-       
     </camel:errorHandler>
     
-    <camel:errorHandler id="transactionErrorHandler" type="TransactionErrorHandler">
-    	<camel:transactionTemplate>
-         	<ref bean="PROPAGATION_REQUIRED"/>
-        </camel:transactionTemplate>
-        <camel:onRedelivery>
-            <bean class="org.apache.camel.spring.handler.MyErrorProcessor"/>
-        </camel:onRedelivery>
-    </camel:errorHandler>
+    <bean id="myErrorProcessor" class="org.apache.camel.spring.handler.MyErrorProcessor"/>
+    
+    <camel:errorHandler id="transactionErrorHandler" type="TransactionErrorHandler" transactionTemplateRef="PROPAGATION_REQUIRED" onRedeliveryRef="myErrorProcessor" />
+    
     
     <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
         <property name="driverClassName" value="org.hsqldb.jdbcDriver"/>
@@ -71,15 +55,10 @@
     <bean id="PROPAGATION_REQUIRED" class="org.springframework.transaction.support.TransactionTemplate">
         <property name="transactionManager" ref="txManager"/>
     </bean>
-    
-    
         
     <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
     	<camel:errorHandler id="noErrorHandler" type="NoErrorHandler"/>
     </camelContext>
-    
-    
-
    
     <!-- END SNIPPET: example -->
 

Modified: camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/SpringDeadLetterChannelHandledPolicyNewTest.xml
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/SpringDeadLetterChannelHandledPolicyNewTest.xml?rev=928564&r1=928563&r2=928564&view=diff
==============================================================================
--- camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/SpringDeadLetterChannelHandledPolicyNewTest.xml (original)
+++ camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/SpringDeadLetterChannelHandledPolicyNewTest.xml Mon Mar 29 01:56:53 2010
@@ -24,7 +24,7 @@
     ">
 
     <!-- START SNIPPET: e1 -->
-    <camel:errorHandler id="myDLC" type="DeadLetterChannel" deadLetterUri="mock:dead" handled="true">
+    <camel:errorHandler id="myDLC" type="DeadLetterChannel" deadLetterUri="mock:dead">
        <camel:redeliveryPolicy maximumRedeliveries="2" redeliveryDelay="0" logStackTrace="false" />
     </camel:errorHandler>
 

Modified: camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/SpringDeadLetterChannelUseOriginalBodyNewTest.xml
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/SpringDeadLetterChannelUseOriginalBodyNewTest.xml?rev=928564&r1=928563&r2=928564&view=diff
==============================================================================
--- camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/SpringDeadLetterChannelUseOriginalBodyNewTest.xml (original)
+++ camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/SpringDeadLetterChannelUseOriginalBodyNewTest.xml Mon Mar 29 01:56:53 2010
@@ -23,13 +23,13 @@
     ">
 
     <!-- START SNIPPET: e1 -->
-    <errorHandler id="a" type="DeadLetterChannel" deadLetterUri="mock:a" handled="true"
+    <errorHandler id="a" type="DeadLetterChannel" deadLetterUri="mock:a"
        useOriginalMessage="true" xmlns="http://camel.apache.org/schema/spring">
        <redeliveryPolicy maximumRedeliveries="2" redeliveryDelay="0" logStackTrace="false" />
     </errorHandler>
     <!-- END SNIPPET: e1 -->
 
-     <errorHandler id="b" type="DeadLetterChannel" deadLetterUri="mock:b" handled="true"
+     <errorHandler id="b" type="DeadLetterChannel" deadLetterUri="mock:b"
        useOriginalMessage="false" xmlns="http://camel.apache.org/schema/spring">
        <redeliveryPolicy maximumRedeliveries="2" redeliveryDelay="0" logStackTrace="false" />
     </errorHandler>