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/27 05:24:47 UTC
svn commit: r928142 - 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: Sat Mar 27 04:24:46 2010
New Revision: 928142
URL: http://svn.apache.org/viewvc?rev=928142&view=rev
Log:
CAMEL-1799 Added unit test of the ErrorHandlerDefinitionParser
Added:
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/handler/
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/handler/ErrorHandlerDefintionParserTest.java (with props)
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/handler/MyErrorProcessor.java (with props)
camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/handler/
camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/handler/ErrorHandlerDefinitionParser.xml (with props)
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/ErrorHandlerDefintion.java
camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/handler/ErrorHandlerDefinitionParser.java
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=928142&r1=928141&r2=928142&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 Sat Mar 27 04:24:46 2010
@@ -66,7 +66,7 @@
<!-- the transaction error handle we refer to from the route -->
<camel:errorHandler id="transactionErrorHandler" type="TransactionErrorHandler">
<camel:transactionTemplate>
- <refbean value="PROPAGATION_REQUIRED"/>
+ <ref bean="PROPAGATION_REQUIRED"/>
</camel:transactionTemplate>
</camel:errorHandler>
Modified: 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/ErrorHandlerDefintion.java?rev=928142&r1=928141&r2=928142&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/ErrorHandlerDefintion.java Sat Mar 27 04:24:46 2010
@@ -44,7 +44,7 @@ public class ErrorHandlerDefintion exten
@XmlAttribute(required = false)
private LoggingLevel level;
@XmlAttribute(required = false)
- private Boolean handled;
+ private Boolean handled = true;
@XmlAttribute(required = false)
private Boolean useOriginalMessage;
@XmlElement(name = "redeliveryPolicy", required = false)
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=928142&r1=928141&r2=928142&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 Sat Mar 27 04:24:46 2010
@@ -35,10 +35,12 @@ import org.apache.camel.util.ObjectHelpe
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.config.BeanDefinition;
+import org.springframework.beans.factory.config.BeanDefinitionHolder;
import org.springframework.beans.factory.config.RuntimeBeanReference;
import org.springframework.beans.factory.parsing.BeanComponentDefinition;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser;
+import org.springframework.beans.factory.xml.BeanDefinitionParserDelegate;
import org.springframework.beans.factory.xml.ParserContext;
/**
@@ -109,15 +111,66 @@ public class ErrorHandlerDefinitionParse
builder.addPropertyValue(localName, redeliveryPolicyDefinition);
}
if (localName.equals("exceptionPolicyStrategy") || localName.equals("onRedelivery")
- || localName.equals("failureProcessor") || localName.equals("deadLetter")) {
- Object value = parserContext.getDelegate().parsePropertySubElement(childElement, builder.getBeanDefinition());
- builder.addPropertyValue(localName, value);
+ || localName.equals("failureProcessor") || localName.equals("deadLetter")
+ || localName.equals("transactionTemplate")) {
+ // only deal with the first subElement
+ setFirstChildAsProperty(childElement, parserContext, builder, localName);
}
}
}
}
}
+ 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!");
+ }
+
+ 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());
+ }
+ }
+ 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 {
public RedeliveryPolicyDefinitionParser(Class type) {
super(type);
Added: 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=928142&view=auto
==============================================================================
--- camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/handler/ErrorHandlerDefintionParserTest.java (added)
+++ camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/handler/ErrorHandlerDefintionParserTest.java Sat Mar 27 04:24:46 2010
@@ -0,0 +1,88 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.spring.handler;
+
+import junit.framework.TestCase;
+import org.apache.camel.LoggingLevel;
+import org.apache.camel.Processor;
+import org.apache.camel.builder.DeadLetterChannelBuilder;
+import org.apache.camel.builder.DefaultErrorHandlerBuilder;
+import org.apache.camel.builder.LoggingErrorHandlerBuilder;
+import org.apache.camel.component.direct.DirectEndpoint;
+import org.apache.camel.processor.DefaultErrorHandler;
+import org.apache.camel.processor.RedeliveryPolicy;
+import org.apache.camel.processor.exceptionpolicy.DefaultExceptionPolicyStrategy;
+import org.apache.camel.processor.exceptionpolicy.ExceptionPolicyStrategy;
+import org.apache.camel.spring.spi.TransactionErrorHandlerBuilder;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+public class ErrorHandlerDefintionParserTest extends TestCase {
+ protected ClassPathXmlApplicationContext ctx;
+
+ public void setUp() throws Exception {
+ ctx = new ClassPathXmlApplicationContext("org/apache/camel/spring/handler/ErrorHandlerDefinitionParser.xml");
+ }
+
+
+ public void tearDown() throws Exception {
+ ctx.close();
+ }
+
+ public void testLoggingErrorHandler() {
+ LoggingErrorHandlerBuilder errorHandler = (LoggingErrorHandlerBuilder) ctx.getBean("loggingErrorHandler");
+ assertNotNull(errorHandler);
+ assertEquals("The loglevel should be INFO", LoggingLevel.INFO, errorHandler.getLevel());
+ }
+
+ 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());
+ }
+
+ public void testTransactionErrorHandler() {
+ TransactionErrorHandlerBuilder errorHandler = (TransactionErrorHandlerBuilder) ctx.getBean("transactionErrorHandler");
+ assertNotNull(errorHandler);
+ assertNotNull(errorHandler.getTransactionTemplate());
+ Processor processor = errorHandler.getOnRedelivery();
+ assertTrue("It should be MyErrorProcessor", processor instanceof MyErrorProcessor);
+ }
+
+ 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);
+ RedeliveryPolicy policy = errorHandler.getRedeliveryPolicy();
+ assertNotNull(policy);
+ assertEquals("Wrong maximumRedeliveries", 2, policy.getMaximumRedeliveries());
+ assertEquals("Wrong redeliveryDelay", 1000, policy.getRedeliveryDelay());
+ assertEquals("Wrong logStackTrace", true, policy.isLogHandled());
+ }
+
+}
+
Propchange: camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/handler/ErrorHandlerDefintionParserTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/handler/ErrorHandlerDefintionParserTest.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/handler/MyErrorProcessor.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/handler/MyErrorProcessor.java?rev=928142&view=auto
==============================================================================
--- camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/handler/MyErrorProcessor.java (added)
+++ camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/handler/MyErrorProcessor.java Sat Mar 27 04:24:46 2010
@@ -0,0 +1,32 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.spring.handler;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+
+public class MyErrorProcessor implements Processor {
+
+ public void process(Exchange exchange) throws Exception {
+ // do nothing here
+ }
+
+ public String toString() {
+ return "MyErrorProcessor";
+ }
+
+}
Propchange: camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/handler/MyErrorProcessor.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/handler/MyErrorProcessor.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: 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=928142&view=auto
==============================================================================
--- camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/handler/ErrorHandlerDefinitionParser.xml (added)
+++ camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/handler/ErrorHandlerDefinitionParser.xml Sat Mar 27 04:24:46 2010
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:camel="http://camel.apache.org/schema/spring"
+ xsi:schemaLocation="
+ http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
+ http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
+ ">
+
+ <errorHandler id="loggingErrorHandler" xmlns="http://camel.apache.org/schema/spring" type="LoggingErrorHandler" level="INFO" />
+
+ <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: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="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
+ <property name="driverClassName" value="org.hsqldb.jdbcDriver"/>
+ <property name="url" value="jdbc:hsqldb:mem:camel"/>
+ <property name="username" value="sa"/>
+ <property name="password" value=""/>
+ </bean>
+
+ <!-- spring transaction manager -->
+ <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
+ <property name="dataSource" ref="dataSource"/>
+ </bean>
+
+ <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">
+ </camelContext>
+
+
+ <!-- END SNIPPET: example -->
+
+</beans>
Propchange: camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/handler/ErrorHandlerDefinitionParser.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/handler/ErrorHandlerDefinitionParser.xml
------------------------------------------------------------------------------
svn:keywords = Rev Date
Propchange: camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/handler/ErrorHandlerDefinitionParser.xml
------------------------------------------------------------------------------
svn:mime-type = text/xml