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 2009/09/01 11:34:30 UTC

svn commit: r809931 - /camel/branches/camel-1.x/components/camel-spring/src/main/java/org/apache/camel/spring/handler/CamelNamespaceHandler.java

Author: ningjiang
Date: Tue Sep  1 09:34:29 2009
New Revision: 809931

URL: http://svn.apache.org/viewvc?rev=809931&view=rev
Log:
CAMEL-1966 Fixed the multi-thread issue of CamelNamespaceHandler

Modified:
    camel/branches/camel-1.x/components/camel-spring/src/main/java/org/apache/camel/spring/handler/CamelNamespaceHandler.java

Modified: camel/branches/camel-1.x/components/camel-spring/src/main/java/org/apache/camel/spring/handler/CamelNamespaceHandler.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-1.x/components/camel-spring/src/main/java/org/apache/camel/spring/handler/CamelNamespaceHandler.java?rev=809931&r1=809930&r2=809931&view=diff
==============================================================================
--- camel/branches/camel-1.x/components/camel-spring/src/main/java/org/apache/camel/spring/handler/CamelNamespaceHandler.java (original)
+++ camel/branches/camel-1.x/components/camel-spring/src/main/java/org/apache/camel/spring/handler/CamelNamespaceHandler.java Tue Sep  1 09:34:29 2009
@@ -62,7 +62,6 @@
     protected BeanDefinitionParser endpointParser = new BeanDefinitionParser(EndpointFactoryBean.class);
     protected BeanDefinitionParser beanPostProcessorParser = new BeanDefinitionParser(CamelBeanPostProcessor.class);
     protected Set<String> parserElementNames = new HashSet<String>();
-    protected Binder<Node> binder;
     private JAXBContext jaxbContext;
     private Map<String, BeanDefinitionParser> parserMap = new HashMap<String, BeanDefinitionParser>();
 
@@ -139,15 +138,9 @@
         return parserElementNames;
     }
 
-    protected Object parseUsingJaxb(Element element, ParserContext parserContext) {
+    protected Object parseUsingJaxb(Element element, ParserContext parserContext, Binder<Node> binder) {
         try {
-            binder = getJaxbContext().createBinder();
             return binder.unmarshal(element);
-            /*
-             * Unmarshaller unmarshaller =
-             * getJaxbContext().createUnmarshaller(); return
-             * unmarshaller.unmarshal(element);
-             */
         } catch (JAXBException e) {
             throw new BeanDefinitionStoreException("Failed to parse JAXB element: " + e, e);
         }
@@ -200,9 +193,15 @@
                 contextId = "camelContext";
                 element.setAttribute("id", contextId);
             }
-
+            
+            Binder<Node> binder = null;
+            try {
+                binder = getJaxbContext().createBinder();
+            } catch (JAXBException e) {
+                throw new BeanDefinitionStoreException("Failed to create the JAXB binder :" + e, e);
+            }
             // now lets parse the routes with JAXB
-            Object value = parseUsingJaxb(element, parserContext);
+            Object value = parseUsingJaxb(element, parserContext, binder);
             
             if (value instanceof CamelContextFactoryBean) {
                 // set the property value with the JAXB parsed value
@@ -265,7 +264,7 @@
 
 
             // lets inject the namespaces into any namespace aware POJOs
-            injectNamespaces(element);
+            injectNamespaces(element, binder);
             if (!createdBeanPostProcessor) {
                 // no bean processor element so lets create it by ourself
                 Element childElement = element.getOwnerDocument().createElement("beanPostProcessor");
@@ -275,7 +274,7 @@
         }
     }
 
-    protected void injectNamespaces(Element element) {
+    protected void injectNamespaces(Element element, Binder<Node> binder) {
         NodeList list = element.getChildNodes();
         Namespaces namespaces = null;
         int size = list.getLength();
@@ -291,7 +290,7 @@
                     }
                     namespaces.configure(namespaceAware);
                 }
-                injectNamespaces(childElement);
+                injectNamespaces(childElement, binder);
             }
         }
     }