You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by gn...@apache.org on 2015/11/24 14:56:35 UTC

svn commit: r1716136 - in /aries/trunk/blueprint: blueprint-spring/src/main/java/org/apache/aries/blueprint/spring/ blueprint-testbundles/src/main/java/org/apache/aries/blueprint/testbundles/ blueprint-testbundles/src/main/resources/OSGI-INF/blueprint/

Author: gnodet
Date: Tue Nov 24 13:56:34 2015
New Revision: 1716136

URL: http://svn.apache.org/viewvc?rev=1716136&view=rev
Log:
[ARIES-1456] Add support for auto-wiring and nested <beans> element

Added:
    aries/trunk/blueprint/blueprint-testbundles/src/main/java/org/apache/aries/blueprint/testbundles/BeanC.java
Modified:
    aries/trunk/blueprint/blueprint-spring/src/main/java/org/apache/aries/blueprint/spring/BeansNamespaceHandler.java
    aries/trunk/blueprint/blueprint-spring/src/main/java/org/apache/aries/blueprint/spring/BlueprintNamespaceHandler.java
    aries/trunk/blueprint/blueprint-testbundles/src/main/resources/OSGI-INF/blueprint/config.xml

Modified: aries/trunk/blueprint/blueprint-spring/src/main/java/org/apache/aries/blueprint/spring/BeansNamespaceHandler.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-spring/src/main/java/org/apache/aries/blueprint/spring/BeansNamespaceHandler.java?rev=1716136&r1=1716135&r2=1716136&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-spring/src/main/java/org/apache/aries/blueprint/spring/BeansNamespaceHandler.java (original)
+++ aries/trunk/blueprint/blueprint-spring/src/main/java/org/apache/aries/blueprint/spring/BeansNamespaceHandler.java Tue Nov 24 13:56:34 2015
@@ -16,13 +16,20 @@
  */
 package org.apache.aries.blueprint.spring;
 
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+import java.lang.reflect.Proxy;
+
 import org.springframework.beans.factory.BeanDefinitionStoreException;
 import org.springframework.beans.factory.config.BeanDefinition;
 import org.springframework.beans.factory.config.BeanDefinitionHolder;
 import org.springframework.beans.factory.parsing.BeanComponentDefinition;
 import org.springframework.beans.factory.support.BeanDefinitionReaderUtils;
 import org.springframework.beans.factory.xml.BeanDefinitionParserDelegate;
+import org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader;
 import org.springframework.beans.factory.xml.ParserContext;
+import org.springframework.beans.factory.xml.XmlReaderContext;
+import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 import org.w3c.dom.Node;
 
@@ -52,6 +59,9 @@ public class BeansNamespaceHandler imple
                 // Send registration event.
                 parserContext.getReaderContext().fireComponentRegistered(new BeanComponentDefinition(bdHolder));
             }
+        } else if (DefaultBeanDefinitionDocumentReader.NESTED_BEANS_ELEMENT.equals(ele.getLocalName())) {
+            MyDefaultBeanDefinitionDocumentReader reader = new MyDefaultBeanDefinitionDocumentReader();
+            reader.registerBeanDefinitions(ele, parserContext.getReaderContext());
         } else {
             throw new UnsupportedOperationException();
         }
@@ -62,4 +72,21 @@ public class BeansNamespaceHandler imple
     public BeanDefinitionHolder decorate(Node source, BeanDefinitionHolder definition, ParserContext parserContext) {
         return definition;
     }
+
+    private static class MyDefaultBeanDefinitionDocumentReader extends DefaultBeanDefinitionDocumentReader {
+
+        public void registerBeanDefinitions(final Element ele, XmlReaderContext readerContext) {
+            Document doc = (Document) Proxy.newProxyInstance(getClass().getClassLoader(), new Class[]{Document.class}, new InvocationHandler() {
+                @Override
+                public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
+                    if (method.getName().equals("getDocumentElement")) {
+                        return ele;
+                    }
+                    throw new UnsupportedOperationException();
+                }
+            });
+            registerBeanDefinitions(doc, readerContext);
+        }
+
+    }
 }

Modified: aries/trunk/blueprint/blueprint-spring/src/main/java/org/apache/aries/blueprint/spring/BlueprintNamespaceHandler.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-spring/src/main/java/org/apache/aries/blueprint/spring/BlueprintNamespaceHandler.java?rev=1716136&r1=1716135&r2=1716136&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-spring/src/main/java/org/apache/aries/blueprint/spring/BlueprintNamespaceHandler.java (original)
+++ aries/trunk/blueprint/blueprint-spring/src/main/java/org/apache/aries/blueprint/spring/BlueprintNamespaceHandler.java Tue Nov 24 13:56:34 2015
@@ -23,6 +23,7 @@ import java.util.Set;
 
 import org.apache.aries.blueprint.ComponentDefinitionRegistry;
 import org.apache.aries.blueprint.NamespaceHandler;
+import org.apache.aries.blueprint.NamespaceHandler2;
 import org.apache.aries.blueprint.ParserContext;
 import org.apache.aries.blueprint.PassThroughMetadata;
 import org.apache.aries.blueprint.mutable.MutableBeanMetadata;
@@ -55,7 +56,7 @@ import org.w3c.dom.Node;
 /**
  * Blueprint NamespaceHandler wrapper for a spring NamespaceHandler
  */
-public class BlueprintNamespaceHandler implements NamespaceHandler {
+public class BlueprintNamespaceHandler implements NamespaceHandler2 {
 
     public static final String SPRING_CONTEXT_ID = "." + org.springframework.beans.factory.xml.ParserContext.class.getName();
     public static final String SPRING_BEAN_PROCESSOR_ID = "." + SpringBeanProcessor.class.getName();
@@ -78,6 +79,11 @@ public class BlueprintNamespaceHandler i
     }
 
     @Override
+    public boolean usePsvi() {
+        return true;
+    }
+
+    @Override
     public URL getSchemaLocation(String s) {
         if (schemas.containsKey(s)) {
             return bundle.getResource(schemas.getProperty(s));

Added: aries/trunk/blueprint/blueprint-testbundles/src/main/java/org/apache/aries/blueprint/testbundles/BeanC.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-testbundles/src/main/java/org/apache/aries/blueprint/testbundles/BeanC.java?rev=1716136&view=auto
==============================================================================
--- aries/trunk/blueprint/blueprint-testbundles/src/main/java/org/apache/aries/blueprint/testbundles/BeanC.java (added)
+++ aries/trunk/blueprint/blueprint-testbundles/src/main/java/org/apache/aries/blueprint/testbundles/BeanC.java Tue Nov 24 13:56:34 2015
@@ -0,0 +1,38 @@
+/**
+ *  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.aries.blueprint.testbundles;
+
+import javax.annotation.PostConstruct;
+
+public class BeanC {
+
+    private final BeanA beanA;
+    private boolean initialized;
+
+    public BeanC(BeanA beanA) {
+        this.beanA = beanA;
+    }
+
+    @PostConstruct
+    public void start() {
+        this.initialized = true;
+    }
+
+    public boolean isInitialized() {
+        return initialized;
+    }
+}

Modified: aries/trunk/blueprint/blueprint-testbundles/src/main/resources/OSGI-INF/blueprint/config.xml
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-testbundles/src/main/resources/OSGI-INF/blueprint/config.xml?rev=1716136&r1=1716135&r2=1716136&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-testbundles/src/main/resources/OSGI-INF/blueprint/config.xml (original)
+++ aries/trunk/blueprint/blueprint-testbundles/src/main/resources/OSGI-INF/blueprint/config.xml Tue Nov 24 13:56:34 2015
@@ -28,6 +28,12 @@
 
     <annotation-driven xmlns="http://www.springframework.org/schema/tx"/>
 
+    <bean:beans default-autowire="constructor">
+
+        <bean:bean id="beanC" class="org.apache.aries.blueprint.testbundles.BeanC"/>
+
+    </bean:beans>
+
     <bean id="beanB" class="org.apache.aries.blueprint.testbundles.BeanB">
         <property name="beanA" ref="beanA"/>
     </bean>
@@ -42,6 +48,7 @@
         <ref bean="beanA" />
         <ref bean="beanB"/>
         <ref bean="serializable"/>
+        <ref bean="beanC"/>
     </util:list>
 
     <util:constant id="serializable"