Hi, I agree with your assessment, we shouldn't cause the Class to fail to load for a different reason than it was already going to. I've committed your patch under ARIES-673.
Regards, Tim ---------------------------------------- > From: [email protected] > Subject: Another proxy problem? > Date: Thu, 9 Jun 2011 20:05:45 -0700 > To: [email protected] > > I saw this... > > ... > Caused by: java.lang.ClassFormatError: Unexpected error from weaving hook. > at > org.eclipse.osgi.internal.baseadaptor.weaving.WeavingHookConfigurator.processClass(WeavingHookConfigurator.java:74) > at > org.eclipse.osgi.baseadaptor.loader.ClasspathManager.defineClass(ClasspathManager.java:596) > at > org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findClassImpl(ClasspathManager.java:567) > at > org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClassImpl(ClasspathManager.java:490) > at > org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass_LockClassLoader(ClasspathManager.java:478) > at > org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:458) > at > org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:216) > at > org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:400) > at > org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:476) > at > org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:429) > at > org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:417) > at > org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107) > at java.lang.ClassLoader.loadClass(ClassLoader.java:248) > at > org.eclipse.osgi.internal.loader.BundleLoader.loadClass(BundleLoader.java:345) > at > org.eclipse.osgi.framework.internal.core.BundleHost.loadClass(BundleHost.java:229) > at > org.eclipse.osgi.framework.internal.core.AbstractBundle.loadClass(AbstractBundle.java:1207) > at > org.apache.xbean.osgi.bundle.util.BundleClassLoader.loadClass(BundleClassLoader.java:75) > at java.lang.ClassLoader.loadClass(ClassLoader.java:248) > at org.apache.openejb.cdi.CdiScanner.load(CdiScanner.java:146) > at org.apache.openejb.cdi.CdiScanner.init(CdiScanner.java:128) > at > org.apache.openejb.cdi.OpenEJBLifecycle.startApplication(OpenEJBLifecycle.java:193) > at > org.apache.geronimo.openejb.ThreadSingletonServiceAdapter.initialize(ThreadSingletonServiceAdapter.java:99) > at org.apache.openejb.cdi.CdiBuilder.build(CdiBuilder.java:49) > at > org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:682) > ... 68 more > Caused by: org.osgi.framework.hooks.weaving.WeavingException: There was a > serious error trying to weave the class bsh.util.BeanShellBSFEngine. See the > associated exception for more information. > at > org.apache.aries.proxy.impl.weaving.ProxyWeavingHook.weave(ProxyWeavingHook.java:75) > at > org.eclipse.osgi.internal.baseadaptor.weaving.WovenClassImpl.call(WovenClassImpl.java:129) > at > org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.notifyHookPrivileged(ServiceRegistry.java:1239) > at > org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.notifyHooksPrivileged(ServiceRegistry.java:1222) > at > org.eclipse.osgi.internal.baseadaptor.weaving.WovenClassImpl.callHooks(WovenClassImpl.java:154) > at > org.eclipse.osgi.internal.baseadaptor.weaving.WeavingHookConfigurator.processClass(WeavingHookConfigurator.java:68) > ... 91 more > Caused by: java.lang.RuntimeException: Unable to load the super type > org.apache.bsf.util.BSFEngineImpl for class bsh.util.BeanShellBSFEngine. > at > org.apache.aries.proxy.impl.common.AbstractWovenProxyAdapter.visit(AbstractWovenProxyAdapter.java:260) > at org.objectweb.asm.ClassAdapter.visit(Unknown Source) > at org.objectweb.asm.commons.SerialVersionUIDAdder.visit(Unknown Source) > at org.objectweb.asm.ClassReader.accept(Unknown Source) > at org.objectweb.asm.ClassReader.accept(Unknown Source) > at > org.apache.aries.proxy.impl.weaving.WovenProxyGenerator.getWovenProxy(WovenProxyGenerator.java:52) > at > org.apache.aries.proxy.impl.weaving.ProxyWeavingHook.weave(ProxyWeavingHook.java:62) > ... 96 more > Caused by: java.lang.ClassNotFoundException: org.apache.bsf.util.BSFEngineImpl > at > org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:513) > at > org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:429) > at > org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:417) > at > org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107) > at java.lang.ClassLoader.loadClass(ClassLoader.java:248) > at java.lang.Class.forName0(Native Method) > at java.lang.Class.forName(Class.java:247) > at > org.apache.aries.proxy.impl.common.AbstractWovenProxyAdapter.visit(AbstractWovenProxyAdapter.java:214) > ... 102 more > > > running the cdi tck. I think it means that the weaving code is converting a > NoClassDefFoundError due to a missing superclass into a ClassFormatError. > This seems like a mistake. A lot of code can deal with a NoClassDefFoundError > and its more or less expected sometimes but ClassFormatError is much less > usual. In particular OpenWebBeans tries to load every class to look for > annotations and doesn't worry if it cant load the class but it's not set up > to deal with ClassFormatErrors. > > I'm thinking this might be a good idea: > > Index: > proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/common/AbstractWovenProxyAdapter.java > =================================================================== > --- > proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/common/AbstractWovenProxyAdapter.java > (revision 1134136) > +++ > proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/common/AbstractWovenProxyAdapter.java > (working copy) > @@ -257,7 +257,8 @@ > } catch (ClassNotFoundException e) { > // If this happens we're about to hit bigger trouble on verify, so we can > // just throw it > - throw new > RuntimeException(NLS.MESSAGES.getMessage("cannot.load.superclass", > superName.replace('/', '.'), typeBeingWoven.getClassName()), e); > + UnableToProxyException u = new UnableToProxyException(name, e); > + throw new > RuntimeException(NLS.MESSAGES.getMessage("cannot.load.superclass", > superName.replace('/', '.'), typeBeingWoven.getClassName()), u); > } > } > > and it seems to fix the immediate problem. > > thoughts? > > thanks > david jencks >
