-
Bug
-
Resolution: Duplicate
-
Blocker
-
None
-
2.3.2.Final
-
None
Non public interface producer
With the following:
/* package-private */ interface NonPublicInterface { } @Produces @ApplicationScoped NonPublicInterface producer() { }
With Weld SE, the following exception is thrown:
Caused by: org.jboss.weld.exceptions.WeldException: WELD-001524: Unable to load proxy class for bean Producer Method [NonPublicInterface] with qualifiers [@Any @Default] declared as [[BackedAnnotatedMethod] @Produces @ApplicationScoped producer()] with class class java.lang.Object using classloader sun.misc.Launcher$AppClassLoader@5ce345c2 Caused by: java.lang.RuntimeException: java.lang.IllegalAccessError: class org.jboss.weld.proxies.NonPublicInterface$1654568476$Proxy$_$$_WeldClientProxy cannot access its superinterface NonPublicInterface Caused by: java.lang.IllegalAccessError: class org.jboss.weld.proxies.NonPublicInterface$1654568476$Proxy$_$$_WeldClientProxy cannot access its superinterface NonPublicInterface
For injection points within the same package. Note that works fine with OpenWebBeans.
Private nested class
With the following:
import com.codahale.metrics.MetricRegistry; @Produces @ApplicationScoped MetricRegistry registry = new MetricRegistry();
With Weld OSGi (in Karaf with PAX CDI) and JDK 7 (HotSpot build 1.7.0_80-b15), the following exception is thrown:
Caused by: com.google.common.util.concurrent.ExecutionError: java.lang.IllegalAccessError: tried to access class com.codahale.metrics.MetricRegistry$MetricBuilder from class com.codahale.metrics.MetricRegistry$Proxy$_$$_WeldClientProxy at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2256) at com.google.common.cache.LocalCache.get(LocalCache.java:3990) at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3994) at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4878) at org.jboss.weld.util.cache.LoadingCacheUtils.getCacheValue(LoadingCacheUtils.java:49) at org.jboss.weld.util.cache.LoadingCacheUtils.getCastCacheValue(LoadingCacheUtils.java:74) at org.jboss.weld.bean.proxy.ClientProxyProvider.getClientProxy(ClientProxyProvider.java:222) at org.jboss.weld.manager.BeanManagerImpl.getReference(BeanManagerImpl.java:755) at org.jboss.weld.manager.BeanManagerImpl.getInjectableReference(BeanManagerImpl.java:861) at org.jboss.weld.injection.ParameterInjectionPointImpl.getValueToInject(ParameterInjectionPointImpl.java:76) at org.jboss.weld.injection.ConstructorInjectionPoint.getParameterValues(ConstructorInjectionPoint.java:150) at org.jboss.weld.injection.ConstructorInjectionPoint.newInstance(ConstructorInjectionPoint.java:75) at org.jboss.weld.injection.producer.AbstractInstantiator.newInstance(AbstractInstantiator.java:28) at org.jboss.weld.injection.producer.BasicInjectionTarget.produce(BasicInjectionTarget.java:116) at org.jboss.weld.injection.producer.BeanInjectionTarget.produce(BeanInjectionTarget.java:179) at org.jboss.weld.bean.ManagedBean.create(ManagedBean.java:158) at org.jboss.weld.context.AbstractContext.get(AbstractContext.java:96) at org.jboss.weld.bean.ContextualInstanceStrategy$DefaultContextualInstanceStrategy.get(ContextualInstanceStrategy.java:101) at org.jboss.weld.bean.ContextualInstanceStrategy$ApplicationScopedContextualInstanceStrategy.get(ContextualInstanceStrategy.java:141) at org.jboss.weld.bean.ContextualInstance.get(ContextualInstance.java:50) at org.jboss.weld.manager.BeanManagerImpl.getReference(BeanManagerImpl.java:761) at org.jboss.weld.manager.BeanManagerImpl.getReference(BeanManagerImpl.java:784) at org.jboss.weld.util.ForwardingBeanManager.getReference(ForwardingBeanManager.java:61) at org.jboss.weld.bean.builtin.BeanManagerProxy.getReference(BeanManagerProxy.java:85) at io.astefanutti.metrics.cdi.MetricsExtension.getBeanInstance(MetricsExtension.java:123) at io.astefanutti.metrics.cdi.MetricsExtension.configuration(MetricsExtension.java:99) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at org.jboss.weld.injection.StaticMethodInjectionPoint.invoke(StaticMethodInjectionPoint.java:88) ... 44 more Caused by: java.lang.IllegalAccessError: tried to access class com.codahale.metrics.MetricRegistry$MetricBuilder from class com.codahale.metrics.MetricRegistry$Proxy$_$$_WeldClientProxy at com.codahale.metrics.MetricRegistry$Proxy$_$$_WeldClientProxy.<clinit>(Unknown Source) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:526) at java.lang.Class.newInstance(Class.java:383) at org.jboss.weld.bean.proxy.DefaultProxyInstantiator.newInstance(DefaultProxyInstantiator.java:43) at org.jboss.weld.bean.proxy.ProxyFactory.run(ProxyFactory.java:307) at org.jboss.weld.bean.proxy.ProxyFactory.create(ProxyFactory.java:299) at org.jboss.weld.bean.proxy.ClientProxyFactory.create(ClientProxyFactory.java:83) at org.jboss.weld.bean.proxy.ClientProxyProvider.createClientProxy(ClientProxyProvider.java:198) at org.jboss.weld.bean.proxy.ClientProxyProvider.createClientProxy(ClientProxyProvider.java:188) at org.jboss.weld.bean.proxy.ClientProxyProvider.access$100(ClientProxyProvider.java:46) at org.jboss.weld.bean.proxy.ClientProxyProvider$CreateClientProxy.load(ClientProxyProvider.java:57) at org.jboss.weld.bean.proxy.ClientProxyProvider$CreateClientProxy.load(ClientProxyProvider.java:53) at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3589) at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2374) at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2337) at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2252) ... 74 more
Because MetricRegistry contains a private nested class.
The same test run with JDK 8 (HotSpot build 1.8.0_66-b17) throws a different exception:
org.jboss.weld.exceptions.WeldException: WELD-001524: Unable to load proxy class for bean Producer Field [MetricRegistry] with qualifiers [@Default @Named @Any] declared as [[BackedAnnotatedField] @Produces @ApplicationScoped @Named org.apache.camel.cdi.sample.metrics.MetricsCdiConfig.registry] with class class com.codahale.metrics.MetricRegistry using classloader BundleClassLoader{bundle=[DelegatingBundle: [io.astefanutti.camel.cdi.camel-cdi-sample-metrics [15], org.ops4j.pax.cdi.weld [87], org.jboss.weld.osgi-bundle [73], io.astefanutti.metrics.cdi.metrics-cdi [16], io.astefanutti.camel.cdi.camel-cdi [14]]],parent=null} at org.jboss.weld.bean.proxy.ProxyFactory.getProxyClass(ProxyFactory.java:364) at org.jboss.weld.bean.proxy.ProxyFactory.run(ProxyFactory.java:327) at org.jboss.weld.bean.proxy.ProxyFactory.create(ProxyFactory.java:319) at org.jboss.weld.bean.proxy.ClientProxyFactory.create(ClientProxyFactory.java:83) at org.jboss.weld.bean.proxy.ClientProxyProvider.createClientProxy(ClientProxyProvider.java:198) at org.jboss.weld.bean.proxy.ClientProxyProvider.createClientProxy(ClientProxyProvider.java:188) at org.jboss.weld.bean.proxy.ClientProxyProvider.access$100(ClientProxyProvider.java:46) at org.jboss.weld.bean.proxy.ClientProxyProvider$CreateClientProxy.load(ClientProxyProvider.java:57) at org.jboss.weld.bean.proxy.ClientProxyProvider$CreateClientProxy.load(ClientProxyProvider.java:53) at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3589) at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2374) at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2337) at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2252) at com.google.common.cache.LocalCache.get(LocalCache.java:3990) at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3994) at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4878) at org.jboss.weld.util.cache.LoadingCacheUtils.getCacheValue(LoadingCacheUtils.java:49) at org.jboss.weld.util.cache.LoadingCacheUtils.getCastCacheValue(LoadingCacheUtils.java:74) at org.jboss.weld.bean.proxy.ClientProxyProvider.getClientProxy(ClientProxyProvider.java:222) at org.jboss.weld.manager.BeanManagerImpl.getReference(BeanManagerImpl.java:736) at org.jboss.weld.manager.BeanManagerImpl.getInjectableReference(BeanManagerImpl.java:842) at org.jboss.weld.injection.FieldInjectionPoint.inject(FieldInjectionPoint.java:92) at org.jboss.weld.util.Beans.injectBoundFields(Beans.java:378) at org.jboss.weld.util.Beans.injectFieldsAndInitializers(Beans.java:389) at org.jboss.weld.injection.producer.ResourceInjector$1.proceed(ResourceInjector.java:70) at org.jboss.weld.injection.InjectionContextImpl.run(InjectionContextImpl.java:48) at org.jboss.weld.injection.producer.ResourceInjector.inject(ResourceInjector.java:72) at org.jboss.weld.injection.producer.BasicInjectionTarget.inject(BasicInjectionTarget.java:121) at org.jboss.weld.bean.ManagedBean.create(ManagedBean.java:159) at org.jboss.weld.context.unbound.DependentContextImpl.get(DependentContextImpl.java:70) at org.jboss.weld.bean.ContextualInstanceStrategy$DefaultContextualInstanceStrategy.get(ContextualInstanceStrategy.java:101) at org.jboss.weld.bean.ContextualInstance.get(ContextualInstance.java:50) at org.jboss.weld.manager.BeanManagerImpl.getReference(BeanManagerImpl.java:742) at org.jboss.weld.manager.BeanManagerImpl.getReference(BeanManagerImpl.java:765) at org.jboss.weld.util.ForwardingBeanManager.getReference(ForwardingBeanManager.java:61) at org.jboss.weld.bean.builtin.BeanManagerProxy.getReference(BeanManagerProxy.java:85) at io.astefanutti.metrics.cdi.MetricsExtension.getBeanInstance(MetricsExtension.java:123) at io.astefanutti.metrics.cdi.MetricsExtension.configuration(MetricsExtension.java:99) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at org.jboss.weld.injection.StaticMethodInjectionPoint.invoke(StaticMethodInjectionPoint.java:88) at org.jboss.weld.injection.MethodInvocationStrategy$SpecialParamPlusBeanManagerStrategy.invoke(MethodInvocationStrategy.java:144) at org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:309) at org.jboss.weld.event.ExtensionObserverMethodImpl.sendEvent(ExtensionObserverMethodImpl.java:124) at org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:287) at org.jboss.weld.event.ObserverMethodImpl.notify(ObserverMethodImpl.java:265) at org.jboss.weld.event.ObserverNotifier.notifySyncObservers(ObserverNotifier.java:271) at org.jboss.weld.event.ObserverNotifier.notify(ObserverNotifier.java:260) at org.jboss.weld.event.ObserverNotifier.fireEvent(ObserverNotifier.java:154) at org.jboss.weld.event.ObserverNotifier.fireEvent(ObserverNotifier.java:148) at org.jboss.weld.bootstrap.events.AbstractContainerEvent.fire(AbstractContainerEvent.java:53) at org.jboss.weld.bootstrap.events.AbstractDeploymentContainerEvent.fire(AbstractDeploymentContainerEvent.java:35) at org.jboss.weld.bootstrap.events.AfterDeploymentValidationImpl.fire(AfterDeploymentValidationImpl.java:28) at org.jboss.weld.bootstrap.WeldStartup.validateBeans(WeldStartup.java:450) at org.jboss.weld.bootstrap.WeldBootstrap.validateBeans(WeldBootstrap.java:90) at org.ops4j.pax.cdi.weld.impl.WeldCdiContainer.createBeanManager(WeldCdiContainer.java:115) at org.ops4j.pax.cdi.weld.impl.WeldCdiContainer.access$000(WeldCdiContainer.java:55) at org.ops4j.pax.cdi.weld.impl.WeldCdiContainer$1.call(WeldCdiContainer.java:95) at org.ops4j.pax.cdi.weld.impl.WeldCdiContainer$1.call(WeldCdiContainer.java:91) at org.ops4j.pax.swissbox.core.ContextClassLoaderUtils.doWithClassLoader(ContextClassLoaderUtils.java:60) at org.ops4j.pax.cdi.weld.impl.WeldCdiContainer.doStart(WeldCdiContainer.java:91) at org.ops4j.pax.cdi.spi.AbstractCdiContainer.start(AbstractCdiContainer.java:87) at org.ops4j.pax.cdi.extender.impl.CdiExtender.createContainer(CdiExtender.java:184) at org.ops4j.pax.cdi.extender.impl.CdiExtender.addingBundle(CdiExtender.java:133) at org.ops4j.pax.cdi.extender.impl.CdiExtender.addingBundle(CdiExtender.java:64) at org.osgi.util.tracker.BundleTracker$Tracked.customizerAdding(BundleTracker.java:469) at org.osgi.util.tracker.BundleTracker$Tracked.customizerAdding(BundleTracker.java:415) at org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256) at org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:229) at org.osgi.util.tracker.BundleTracker$Tracked.bundleChanged(BundleTracker.java:444) at org.apache.felix.framework.util.EventDispatcher.invokeBundleListenerCallback(EventDispatcher.java:916) at org.apache.felix.framework.util.EventDispatcher.fireEventImmediately(EventDispatcher.java:835) at org.apache.felix.framework.util.EventDispatcher.fireBundleEvent(EventDispatcher.java:517) at org.apache.felix.framework.Felix.fireBundleEvent(Felix.java:4541) at org.apache.felix.framework.Felix.startBundle(Felix.java:2172) at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:998) at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:984) at org.apache.karaf.features.internal.service.FeaturesServiceImpl.startBundle(FeaturesServiceImpl.java:1189) at org.apache.karaf.features.internal.service.Deployer.deploy(Deployer.java:836) at org.apache.karaf.features.internal.service.FeaturesServiceImpl.doProvision(FeaturesServiceImpl.java:1079) at org.apache.karaf.features.internal.service.FeaturesServiceImpl$1.call(FeaturesServiceImpl.java:975) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) Caused by: java.lang.RuntimeException: java.lang.LinkageError: loader (instance of org/ops4j/pax/swissbox/core/BundleClassLoader): attempted duplicate class definition for name: "com/codahale/metrics/MetricRegistry$Proxy$_$$_WeldClientProxy" at org.jboss.weld.util.bytecode.ClassFileUtils.toClass(ClassFileUtils.java:101) at org.jboss.weld.bean.proxy.ProxyFactory.createProxyClass(ProxyFactory.java:484) at org.jboss.weld.bean.proxy.ProxyFactory.getProxyClass(ProxyFactory.java:357) ... 86 more Caused by: java.lang.LinkageError: loader (instance of org/ops4j/pax/swissbox/core/BundleClassLoader): attempted duplicate class definition for name: "com/codahale/metrics/MetricRegistry$Proxy$_$$_WeldClientProxy" at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:760) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at org.jboss.weld.util.bytecode.ClassFileUtils.toClass2(ClassFileUtils.java:108) at org.jboss.weld.util.bytecode.ClassFileUtils.toClass(ClassFileUtils.java:97) ... 88 more
Package private class
With the following:
/* package-private */ class MyBean { }
With Weld OSGi (in Karaf with PAX CDI), the following exception is thrown:
Caused by: java.lang.IllegalAccessError: class MyBean$Proxy$_$$_WeldClientProxy cannot access its superclass MyBean at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:800) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at org.jboss.weld.util.bytecode.ClassFileUtils.toClass2(ClassFileUtils.java:108) at org.jboss.weld.util.bytecode.ClassFileUtils.toClass(ClassFileUtils.java:97) ... 75 more
For injection point within the same package and same bundle.