You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2010/05/21 09:12:18 UTC

svn commit: r946915 - /camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/handler/CamelNamespaceHandler.java

Author: davsclaus
Date: Fri May 21 07:12:17 2010
New Revision: 946915

URL: http://svn.apache.org/viewvc?rev=946915&view=rev
Log:
CAMEL-2739: Fixed issue with using Spring Eclipse Tooling and let it validate the Spring XML file which has Camel routes.

Modified:
    camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/handler/CamelNamespaceHandler.java

Modified: camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/handler/CamelNamespaceHandler.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/handler/CamelNamespaceHandler.java?rev=946915&r1=946914&r2=946915&view=diff
==============================================================================
--- camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/handler/CamelNamespaceHandler.java (original)
+++ camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/handler/CamelNamespaceHandler.java Fri May 21 07:12:17 2010
@@ -50,6 +50,7 @@ import org.apache.camel.util.ObjectHelpe
 import org.apache.camel.view.ModelFileGenerator;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.springframework.beans.factory.BeanCreationException;
 import org.springframework.beans.factory.BeanDefinitionStoreException;
 import org.springframework.beans.factory.config.BeanDefinition;
 import org.springframework.beans.factory.config.RuntimeBeanReference;
@@ -404,38 +405,56 @@ public class CamelNamespaceHandler exten
             }
         }
 
-        // either we have not used template before or we have auto registered it already and therefore we
-        // need it to allow to do it so it can remove the existing auto registered as there is now a clash id
-        // since we have multiple camel contexts
-        boolean canDoTemplate = autoRegisterMap.get("template") != null
-                || !parserContext.getRegistry().isBeanNameInUse("template");
-        if (!template && canDoTemplate) {
-            String id = "template";
-            // auto create a template
-            Element templateElement = element.getOwnerDocument().createElement("template");
-            templateElement.setAttribute("id", id);
-            BeanDefinitionParser parser = parserMap.get("template");
-            BeanDefinition definition = parser.parse(templateElement, parserContext);
-
-            // auto register it
-            autoRegisterBeanDefinition(id, definition, parserContext, contextId);
-        }
-
-        // either we have not used template before or we have auto registered it already and therefore we
-        // need it to allow to do it so it can remove the existing auto registered as there is now a clash id
-        // since we have multiple camel contexts
-        boolean canDoConsumerTemplate = autoRegisterMap.get("consumerTemplate") != null
-                || !parserContext.getRegistry().isBeanNameInUse("consumerTemplate");
-        if (!consumerTemplate && canDoConsumerTemplate) {
-            String id = "consumerTemplate";
-            // auto create a template
-            Element templateElement = element.getOwnerDocument().createElement("consumerTemplate");
-            templateElement.setAttribute("id", id);
-            BeanDefinitionParser parser = parserMap.get("consumerTemplate");
-            BeanDefinition definition = parser.parse(templateElement, parserContext);
+        if (!template) {
+            // either we have not used template before or we have auto registered it already and therefore we
+            // need it to allow to do it so it can remove the existing auto registered as there is now a clash id
+            // since we have multiple camel contexts
+            boolean existing = autoRegisterMap.get("template") != null;
+            boolean inUse = false;
+            try {
+                inUse = parserContext.getRegistry().isBeanNameInUse("template");
+            } catch (BeanCreationException e) {
+                // Spring Eclipse Tooling may throw an exception when you edit the Spring XML online in Eclipse
+                // when the isBeanNameInUse method is invoked, so ignore this and continue (CAMEL-2739)
+                LOG.debug("Error checking isBeanNameInUse(template). This exception will be ignored", e);
+            }
+            if (!inUse || existing) {
+                String id = "template";
+                // auto create a template
+                Element templateElement = element.getOwnerDocument().createElement("template");
+                templateElement.setAttribute("id", id);
+                BeanDefinitionParser parser = parserMap.get("template");
+                BeanDefinition definition = parser.parse(templateElement, parserContext);
+
+                // auto register it
+                autoRegisterBeanDefinition(id, definition, parserContext, contextId);
+            }
+        }
 
-            // auto register it
-            autoRegisterBeanDefinition(id, definition, parserContext, contextId);
+        if (!consumerTemplate) {
+            // either we have not used template before or we have auto registered it already and therefore we
+            // need it to allow to do it so it can remove the existing auto registered as there is now a clash id
+            // since we have multiple camel contexts
+            boolean existing = autoRegisterMap.get("consumerTemplate") != null;
+            boolean inUse = false;
+            try {
+                inUse = parserContext.getRegistry().isBeanNameInUse("consumerTemplate");
+            } catch (BeanCreationException e) {
+                // Spring Eclipse Tooling may throw an exception when you edit the Spring XML online in Eclipse
+                // when the isBeanNameInUse method is invoked, so ignore this and continue (CAMEL-2739)
+                LOG.debug("Error checking isBeanNameInUse(consumerTemplate). This exception will be ignored", e);
+            }
+            if (!inUse || existing) {
+                String id = "consumerTemplate";
+                // auto create a template
+                Element templateElement = element.getOwnerDocument().createElement("consumerTemplate");
+                templateElement.setAttribute("id", id);
+                BeanDefinitionParser parser = parserMap.get("consumerTemplate");
+                BeanDefinition definition = parser.parse(templateElement, parserContext);
+
+                // auto register it
+                autoRegisterBeanDefinition(id, definition, parserContext, contextId);
+            }
         }
 
     }