You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@aries.apache.org by David Jencks <da...@yahoo.com> on 2011/06/10 05:05:45 UTC

Another proxy problem?

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


Re: Another proxy problem?

Posted by David Jencks <da...@yahoo.com>.
Thanks!

david jencks

On Jun 10, 2011, at 6:21 AM, Timothy Ward wrote:

> 
> 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: david_jencks@yahoo.com
>> Subject: Another proxy problem?
>> Date: Thu, 9 Jun 2011 20:05:45 -0700
>> To: dev@aries.apache.org
>> 
>> 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
>> 
> 		 	   		  


RE: Another proxy problem?

Posted by Timothy Ward <ti...@apache.org>.
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: david_jencks@yahoo.com
> Subject: Another proxy problem?
> Date: Thu, 9 Jun 2011 20:05:45 -0700
> To: dev@aries.apache.org
>
> 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
>