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>