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 2017/09/28 06:50:23 UTC

svn commit: r1809952 - in /aries/trunk/blueprint/blueprint-spring: pom.xml src/main/java/org/apache/aries/blueprint/spring/BlueprintBeanFactory.java src/main/java/org/apache/aries/blueprint/spring/SpringApplicationContext.java

Author: gnodet
Date: Thu Sep 28 06:50:23 2017
New Revision: 1809952

URL: http://svn.apache.org/viewvc?rev=1809952&view=rev
Log:
[ARIES-1744] Unable to load resource from blueprint-spring

Modified:
    aries/trunk/blueprint/blueprint-spring/pom.xml
    aries/trunk/blueprint/blueprint-spring/src/main/java/org/apache/aries/blueprint/spring/BlueprintBeanFactory.java
    aries/trunk/blueprint/blueprint-spring/src/main/java/org/apache/aries/blueprint/spring/SpringApplicationContext.java

Modified: aries/trunk/blueprint/blueprint-spring/pom.xml
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-spring/pom.xml?rev=1809952&r1=1809951&r2=1809952&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-spring/pom.xml (original)
+++ aries/trunk/blueprint/blueprint-spring/pom.xml Thu Sep 28 06:50:23 2017
@@ -71,7 +71,7 @@
             <id>dev</id>
             <properties>
                 <blueprint.api.version>1.0.1</blueprint.api.version>
-                <blueprint.core.version>1.7.1-SNAPSHOT</blueprint.core.version>
+                <blueprint.core.version>1.8.3-SNAPSHOT</blueprint.core.version>
                 <blueprint.parser.version>1.5.0-SNAPSHOT</blueprint.parser.version>
             </properties>
         </profile>

Modified: aries/trunk/blueprint/blueprint-spring/src/main/java/org/apache/aries/blueprint/spring/BlueprintBeanFactory.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-spring/src/main/java/org/apache/aries/blueprint/spring/BlueprintBeanFactory.java?rev=1809952&r1=1809951&r2=1809952&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-spring/src/main/java/org/apache/aries/blueprint/spring/BlueprintBeanFactory.java (original)
+++ aries/trunk/blueprint/blueprint-spring/src/main/java/org/apache/aries/blueprint/spring/BlueprintBeanFactory.java Thu Sep 28 06:50:23 2017
@@ -40,14 +40,18 @@ import org.springframework.beans.factory
 import org.springframework.beans.factory.config.BeanDefinition;
 import org.springframework.beans.factory.support.DefaultListableBeanFactory;
 import org.springframework.core.ResolvableType;
+import org.springframework.core.io.Resource;
+import org.springframework.core.io.ResourceLoader;
 
-public class BlueprintBeanFactory extends DefaultListableBeanFactory {
+public class BlueprintBeanFactory extends DefaultListableBeanFactory implements ResourceLoader {
 
     private final ExtendedBlueprintContainer container;
+    private final ResourceLoader resourceLoader;
 
-    public BlueprintBeanFactory(ExtendedBlueprintContainer container) {
+    public BlueprintBeanFactory(ExtendedBlueprintContainer container, ResourceLoader resourceLoader) {
         super(new WrapperBeanFactory(container));
         this.container = container;
+        this.resourceLoader = resourceLoader;
     }
 
     @Override
@@ -75,6 +79,16 @@ public class BlueprintBeanFactory extend
         super.removeBeanDefinition(beanName);
     }
 
+    @Override
+    public Resource getResource(String location) {
+        return resourceLoader.getResource(location);
+    }
+
+    @Override
+    public ClassLoader getClassLoader() {
+        return resourceLoader.getClassLoader();
+    }
+
     public class SpringMetadata implements BeanMetadata {
         private final String beanName;
 

Modified: aries/trunk/blueprint/blueprint-spring/src/main/java/org/apache/aries/blueprint/spring/SpringApplicationContext.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-spring/src/main/java/org/apache/aries/blueprint/spring/SpringApplicationContext.java?rev=1809952&r1=1809951&r2=1809952&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-spring/src/main/java/org/apache/aries/blueprint/spring/SpringApplicationContext.java (original)
+++ aries/trunk/blueprint/blueprint-spring/src/main/java/org/apache/aries/blueprint/spring/SpringApplicationContext.java Thu Sep 28 06:50:23 2017
@@ -16,8 +16,12 @@
  */
 package org.apache.aries.blueprint.spring;
 
+import java.io.IOException;
+import java.net.URL;
 import java.util.ArrayList;
+import java.util.Enumeration;
 import java.util.List;
+import java.util.NoSuchElementException;
 
 import org.apache.aries.blueprint.services.ExtendedBlueprintContainer;
 import org.osgi.framework.Bundle;
@@ -34,7 +38,6 @@ public class SpringApplicationContext ex
 
     public SpringApplicationContext(ExtendedBlueprintContainer container) {
         this.container = container;
-        this.beanFactory = new BlueprintBeanFactory(container);
         parentClassLoaders.add(container.getClassLoader());
         setClassLoader(new ClassLoader() {
             @Override
@@ -48,7 +51,51 @@ public class SpringApplicationContext ex
                 }
                 throw new ClassNotFoundException(name);
             }
+
+            @Override
+            public URL getResource(String name) {
+                for (ClassLoader cl : parentClassLoaders) {
+                    URL url =  cl.getResource(name);
+                    if (url != null) {
+                        return url;
+                    }
+                }
+                return null;
+            }
+
+            @Override
+            public Enumeration<URL> getResources(String name) throws IOException {
+                final Enumeration<URL>[] enums = (Enumeration<URL>[]) new Enumeration<?>[parentClassLoaders.size()];
+                for (int i = 0; i < enums.length; i++) {
+                    enums[i] = parentClassLoaders.get(i).getResources(name);
+                }
+                return new Enumeration<URL>() {
+                    private int index = 0;
+                    @Override
+                    public boolean hasMoreElements() {
+                        return next();
+                    }
+                    @Override
+                    public URL nextElement() {
+                        if (!this.next()) {
+                            throw new NoSuchElementException();
+                        } else {
+                            return enums[this.index].nextElement();
+                        }
+                    }
+                    private boolean next() {
+                        while(this.index < enums.length) {
+                            if (enums[this.index] != null && enums[this.index].hasMoreElements()) {
+                                return true;
+                            }
+                            ++this.index;
+                        }
+                        return false;
+                    }
+                };
+            }
         });
+        this.beanFactory = new BlueprintBeanFactory(container, this);
         prepareBeanFactory(beanFactory);
         prepareRefresh();
     }