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>