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: [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
>> 
>                                         

Reply via email to