ARIES-1903 Cannot create proxy classes from extensions
git-svn-id: https://svn.apache.org/repos/asf/aries/trunk/cdi@1855000 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerBootstrap.java b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerBootstrap.java
index 6640cde..c67a26e 100644
--- a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerBootstrap.java
+++ b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerBootstrap.java
@@ -21,6 +21,7 @@
import org.apache.aries.cdi.container.internal.container.Op.Mode;
import org.apache.aries.cdi.container.internal.container.Op.Type;
+import org.apache.aries.cdi.container.internal.loader.BundleResourcesLoader;
import org.apache.aries.cdi.container.internal.model.ExtendedExtensionDTO;
import org.apache.aries.cdi.container.internal.model.FactoryComponent;
import org.apache.aries.cdi.container.internal.model.SingleComponent;
@@ -105,6 +106,7 @@
Thread currentThread = Thread.currentThread();
ClassLoader current = currentThread.getContextClassLoader();
+ BundleResourcesLoader.Builder builder = new BundleResourcesLoader.Builder(containerState.bundle(), containerState.extenderBundle());
try {
currentThread.setContextClassLoader(containerState.classLoader());
@@ -116,13 +118,16 @@
containerState.containerDTO().extensions.stream().map(
ExtendedExtensionDTO.class::cast
).map(
- e -> new ExtensionMetadata(e.extension.getService(), e.template.serviceFilter)
+ e -> {
+ builder.add(e.serviceReference.getBundle());
+ return new ExtensionMetadata(e.extension.getService(), e.template.serviceFilter);
+ }
).forEach(extensions::add);
_bootstrap = new WeldBootstrap();
BeanDeploymentArchive beanDeploymentArchive = new ContainerDeploymentArchive(
- containerState.loader(),
+ builder.build(),
containerState.id(),
containerState.beansModel().getBeanClassNames(),
containerState.beansModel().getBeansXml());
diff --git a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerState.java b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerState.java
index f5dbd3f..a6c072f 100644
--- a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerState.java
+++ b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerState.java
@@ -14,9 +14,11 @@
package org.apache.aries.cdi.container.internal.container;
-import static org.apache.aries.cdi.container.internal.util.Filters.*;
-import static org.osgi.namespace.extender.ExtenderNamespace.*;
-import static org.osgi.service.cdi.CDIConstants.*;
+import static org.apache.aries.cdi.container.internal.util.Filters.asFilter;
+import static org.osgi.namespace.extender.ExtenderNamespace.EXTENDER_NAMESPACE;
+import static org.osgi.service.cdi.CDIConstants.CDI_CAPABILITY_NAME;
+import static org.osgi.service.cdi.CDIConstants.CDI_CONTAINER_ID;
+import static org.osgi.service.cdi.CDIConstants.CDI_EXTENSION_PROPERTY;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
@@ -330,7 +332,7 @@
@SuppressWarnings("unchecked")
public <T extends ResourceLoader & ProxyServices> T loader() {
- return (T)new BundleResourcesLoader(_bundle, _extenderBundle);
+ return (T)new BundleResourcesLoader.Builder(_bundle, _extenderBundle).build();
}
public PromiseFactory promiseFactory() {
diff --git a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/loader/BundleResourcesLoader.java b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/loader/BundleResourcesLoader.java
index ddfa69b..621ac34 100644
--- a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/loader/BundleResourcesLoader.java
+++ b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/loader/BundleResourcesLoader.java
@@ -33,7 +33,28 @@
public class BundleResourcesLoader implements ProxyServices, ResourceLoader {
- public BundleResourcesLoader(Bundle bundle, Bundle extenderBundle) {
+ public static class Builder {
+
+ public Builder(Bundle bundle, Bundle extenderBundle) {
+ this.bundle = bundle;
+ this.extenderBundle = extenderBundle;
+ }
+
+ public Builder add(Bundle bundle) {
+ additionalBundles.add(bundle);
+ return this;
+ }
+
+ public BundleResourcesLoader build() {
+ return new BundleResourcesLoader(bundle, extenderBundle, additionalBundles);
+ }
+
+ private final Bundle bundle;
+ private final Bundle extenderBundle;
+ private final List<Bundle> additionalBundles = new ArrayList<>();
+ }
+
+ BundleResourcesLoader(Bundle bundle, Bundle extenderBundle, List<Bundle> additionalBundles) {
BundleWiring extenderWiring = extenderBundle.adapt(BundleWiring.class);
List<Bundle> bundles = new ArrayList<>();
@@ -57,6 +78,8 @@
}
}
+ bundles.addAll(additionalBundles);
+
_classLoader = new BundleClassLoader(bundles.toArray(new Bundle[0]));
}