[aspectwerkz-user] AspectWerkz fails to preprocess a class

Amit Modi <[email protected]> Fri, 22 Feb 2008 03:05:38 -0800 (PST)
Newsgroups gmane.comp.java.aspectwerkz.user
Message-ID <[email protected]>
--0-599164959-1203678338=:97696
Content-Type: text/plain; charset=us-ascii

Hi,

I was preprocessing the OracleDriver (oracle.jdbc.driver.OracleDriver) using aspectwerkz and it failed while preprocessing. I got the following error.

AW::WARNING - could not load class [oracle/security/pki/OracleWallet] as a resource in loader [sun.misc.Launcher$AppClassLoader@1d14e6]

java.io.IOException: Class not found
    at org.codehaus.aspectwerkz.org.objectweb.asm.ClassReader.readClass(Ljava.io.InputStream;)[B(Unknown Source)
    at org.codehaus.aspectwerkz.org.objectweb.asm.ClassReader.<init>(Ljava.io.InputStream;)V(Unknown Source)
    at org.codehaus.aspectwerkz.reflect.impl.asm.AsmClassInfo.getClassInfo(Ljava.io.InputStream;Ljava.lang.ClassLoader;)Lorg.codehaus.aspectwerkz.reflect.ClassInfo;(AsmClassInfo.java:304)
    at org.codehaus.aspectwerkz.reflect.impl.asm.AsmClassInfo.getClassInfo(Ljava.io.InputStream;Ljava.lang.ClassLoader;Z)Lorg.codehaus.aspectwerkz.reflect.ClassInfo;(AsmClassInfo.java:331)
    at org.codehaus.aspectwerkz.reflect.impl.asm.AsmClassInfo.createClassInfoFromStream(Ljava.lang.String;Ljava.lang.ClassLoader;Z)Lorg.codehaus.aspectwerkz.reflect.ClassInfo;(AsmClassInfo.java:790)
    at org.codehaus.aspectwerkz.reflect.impl.asm.AsmClassInfo.getClassInfo(Ljava.lang.String;Ljava.lang.ClassLoader;)Lorg.codehaus.aspectwerkz.reflect.ClassInfo;(AsmClassInfo.java:273)
    at org.codehaus.aspectwerkz.transform.inlining.weaver.ConstructorCallVisitor$ReplaceNewInstructionCodeAdapter.visitTypeInsn(ILjava.lang.String;)V(ConstructorCallVisitor.java:252)
    at org.codehaus.aspectwerkz.org.objectweb.asm.CodeAdapter.visitTypeInsn(ILjava.lang.String;)V(Unknown Source)
    at org.codehaus.aspectwerkz.transform.inlining.weaver.AfterObjectInitializationCodeAdapter.visitTypeInsn(ILjava.lang.String;)V(AfterObjectInitializationCodeAdapter.java:43)
    at org.codehaus.aspectwerkz.org.objectweb.asm.CodeAdapter.visitTypeInsn(ILjava.lang.String;)V(Unknown Source)
    at org.codehaus.aspectwerkz.org.objectweb.asm.CodeAdapter.visitTypeInsn(ILjava.lang.String;)V(Unknown Source)
    at org.codehaus.aspectwerkz.org.objectweb.asm.ClassReader.accept(Lorg.codehaus.aspectwerkz.org.objectweb.asm.ClassVisitor;[Lorg.codehaus.aspectwerkz.org.objectweb.asm.Attribute;Z)V(Unknown Source)
    at org.codehaus.aspectwerkz.transform.inlining.InliningWeavingStrategy.transform(Ljava.lang.String;Lorg.codehaus.aspectwerkz.transform.Context;)V(InliningWeavingStrategy.java:198)
    at org.codehaus.aspectwerkz.transform.AspectWerkzPreProcessor._preProcess(Ljava.lang.String;[BLjava.lang.ClassLoader;)Lorg.codehaus.aspectwerkz.transform.Context;(AspectWerkzPreProcessor.java:173)
    at org.codehaus.aspectwerkz.transform.AspectWerkzPreProcessor.preProcess(Ljava.lang.String;[BLjava.lang.ClassLoader;)[B(AspectWerkzPreProcessor.java:148)
    at org.codehaus.aspectwerkz.extension.jrockit.JRockitPreProcessor.preProcess(Ljava.lang.ClassLoader;Ljava.lang.String;[B)[B(JRockitPreProcessor.java:85)
    at jrockit.vm.ClassPreProcessorManager.notifyClassPreProcessor(ILjava.lang.String;[B)[B(Unknown Source)
    at jrockit.vm.Classes.defineClass0(ILjava.lang.String;[BII)I(Unknown Source)
    at jrockit.vm.Classes.defineClass(Ljava.lang.ClassLoader;Ljava.lang.String;[BII)Ljava.lang.Class;(Unknown Source)
    at java.lang.ClassLoader.defineClass(Ljava.lang.String;[BIILjava.security.ProtectionDomain;)Ljava.lang.Class;(Unknown Source)
    at java.security.SecureClassLoader.defineClass(Ljava.lang.String;[BIILjava.security.CodeSource;)Ljava.lang.Class;(SecureClassLoader.java:123)
    at java.net.URLClassLoader.defineClass(Ljava.lang.String;Lsun.misc.Resource;)Ljava.lang.Class;(URLClassLoader.java:251)
    at java.net.URLClassLoader.access$100(Ljava.net.URLClassLoader;Ljava.lang.String;Lsun.misc.Resource;)Ljava.lang.Class;(URLClassLoader.java:55)
    at java.net.URLClassLoader$1.run()Ljava.lang.Object;(URLClassLoader.java:194)
    at jrockit.vm.AccessController.do_privileged_exc(Ljava.security.PrivilegedExceptionAction;Ljava.security.AccessControlContext;I)Ljava.lang.Object;(Unknown Source)
    at jrockit.vm.AccessController.doPrivileged(Ljava.security.PrivilegedExceptionAction;Ljava.security.AccessControlContext;)Ljava.lang.Object;(Unknown Source)
    at java.net.URLClassLoader.findClass(Ljava.lang.String;)Ljava.lang.Class;(URLClassLoader.java:187)
    at java.lang.ClassLoader.loadClass(Ljava.lang.String;Z)Ljava.lang.Class;(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Ljava.lang.String;Z)Ljava.lang.Class;(Launcher.java:274)
    at java.lang.ClassLoader.loadClass(Ljava.lang.String;)Ljava.lang.Class;(Unknown Source)
    at java.lang.ClassLoader.loadClassFromNative(II)Ljava.lang.Class;(Unknown Source)
    at jrockit.vm.Classes.defineClass0(ILjava.lang.String;[BII)I(Unknown Source)


I did some research and found that if oraclepki.jar which has the OracleWallet class is not in the classpath, we get this error. If I add that to the classpath along with ojdbc14.jar, we do not get this error. However the oraclepki.jar is not mandatory for oracle driver to work, so aspectwerkz preprocessor should be able to preprocess the OracleDriver even if oraclepki.jar is not in classpath.

I tried to look through the source code and saw that even if we fail to obtain a dependent class as stream, we still call new ASMClassInfo(stream) on it which causes this exception and hence complete preprocessing fails. I looked at the CVS repository and see that there has been some change in version 1.15 of AsmClassInfo which probably resulted in this. (http://cvs.aspectwerkz.codehaus.org/browse/aspectwerkz/aspectwerkz4/src/main/org/codehaus/aspectwerkz/reflect/impl/asm/AsmClassInfo.java?r1=1.14&r2=1.15)

if (componentClassAsStream == null) {
                // might be more than one dimension
                if (componentName.indexOf('[') > 0) {
                    return getClassInfo(componentName, loader);
                }
                System.out.println(
                        "AW::WARNING - could not load class ["
                        + componentName
                        + "] as a resource in loader ["
                        + loader
                        + "]"
                );
                componentInfo = new ClassInfo.NullClassInfo();
            }
//The 1.14 version returned the ClassInfo.NullClassInfo() if componentClassAsStream was null and did not proceed further
            try {
                componentInfo = AsmClassInfo.getClassInfo(componentClassAsStream, loader, lazyAttributes);
            } finally {
                try {
                    componentClassAsStream.close();
                } catch (Exception e) {
                    ;
                }
            }


Any help with this will be greatly appreciated

Thanks Much
Amit









      ____________________________________________________________________________________
Never miss a thing.  Make Yahoo your home page. 
http://www.yahoo.com/r/hs
--0-599164959-1203678338=:97696
Content-Type: text/html; charset=us-ascii

<html><head><style type="text/css"><!-- DIV {margin:0px;} --></style></head><body><div style="font-family:times new roman, new york, times, serif;font-size:12pt"><div style="font-family: times new roman,new york,times,serif; font-size: 12pt;">Hi,<br><br>I was preprocessing the OracleDriver (oracle.jdbc.driver.OracleDriver) using aspectwerkz and it failed while preprocessing. I got the following error.<br><br>AW::WARNING - could not load class [oracle/security/pki/OracleWallet] as a resource in loader [sun.misc.Launcher$AppClassLoader@1d14e6]<br><br>java.io.IOException: Class not found<br>&nbsp;&nbsp;&nbsp; at org.codehaus.aspectwerkz.org.objectweb.asm.ClassReader.readClass(Ljava.io.InputStream;)[B(Unknown Source)<br>&nbsp;&nbsp;&nbsp; at org.codehaus.aspectwerkz.org.objectweb.asm.ClassRead
 er.&lt;init&gt;(Ljava.io.InputStream;)V(Unknown Source)<br>&nbsp;&nbsp;&nbsp; at
 org.codehaus.aspectwerkz.reflect.impl.asm.AsmClassInfo.getClassInfo(Ljava.io.InputStream;Ljava.lang.ClassLoader;)Lorg.codehaus.aspectwerkz.reflect.ClassInfo;(AsmClassInfo.java:304)<br>&nbsp;&nbsp;&nbsp; at org.codehaus.aspectwerkz.reflect.impl.asm.AsmClassInfo.getClassInfo(Ljava.io.InputStream;Ljava.lang.ClassLoader;Z)Lorg.codehaus.aspectwerkz.reflect.ClassInfo;(AsmClassInfo.java:331)<br>&nbsp;&nbsp;&nbsp; at org.codehaus.aspectwerkz.reflect.impl.asm.AsmClassInfo.createClassInfoFromStream(Ljava.lang.String;Ljava.lang.ClassLoader;Z)Lorg.codehaus.aspectwerkz.reflect.ClassInfo;(AsmClassInfo.java:790)<br>&nbsp;&nbsp;&nbsp; at org.codehaus.aspectwerkz.reflect.impl.asm.AsmClassInfo.getClassInfo(Ljava.lang.String;Ljava.lang.ClassLoader;)Lorg.codehaus.aspectwerkz.reflect.ClassInfo;(AsmClassInfo.j
 ava:273)<br>&nbsp;&nbsp;&nbsp; at
 org.codehaus.aspectwerkz.transform.inlining.weaver.ConstructorCallVisitor$ReplaceNewInstructionCodeAdapter.visitTypeInsn(ILjava.lang.String;)V(ConstructorCallVisitor.java:252)<br>&nbsp;&nbsp;&nbsp; at org.codehaus.aspectwerkz.org.objectweb.asm.CodeAdapter.visitTypeInsn(ILjava.lang.String;)V(Unknown Source)<br>&nbsp;&nbsp;&nbsp; at org.codehaus.aspectwerkz.transform.inlining.weaver.AfterObjectInitializationCodeAdapter.visitTypeInsn(ILjava.lang.String;)V(AfterObjectInitializationCodeAdapter.java:43)<br>&nbsp;&nbsp;&nbsp; at org.codehaus.aspectwerkz.org.objectweb.asm.CodeAdapter.visitTypeInsn(ILjava.lang.String;)V(Unknown Source)<br>&nbsp;&nbsp;&nbsp; at org.codehaus.aspectwerkz.org.objectweb.asm.CodeAdapter.visitTypeInsn(ILjava.lang.String;)V(Unknown Source)<br>&nbsp;&nbsp;&nbsp; at
 org.codehaus.aspectwerkz.org.objectweb.asm.ClassReader.accept(Lorg.codehaus.aspectwerkz.org.objectweb.asm.ClassVisitor;[Lorg.codehaus.aspectwerkz.org.objectweb.asm.Attribute;Z)V(Unknown Source)<br>&nbsp;&nbsp;&nbsp; at org.codehaus.aspectwerkz.transform.inlining.InliningWeavingStrategy.transform(Ljava.lang.String;Lorg.codehaus.aspectwerkz.transform.Context;)V(InliningWeavingStrategy.java:198)<br>&nbsp;&nbsp;&nbsp; at org.codehaus.aspectwerkz.transform.AspectWerkzPreProcessor._preProcess(Ljava.lang.String;[BLjava.lang.ClassLoader;)Lorg.codehaus.aspectwerkz.transform.Context;(AspectWerkzPreProcessor.java:173)<br>&nbsp;&nbsp;&nbsp; at org.codehaus.aspectwerkz.transform.AspectWerkzPreProcessor.preProcess(Ljava.lang.String;[BLjava.lang.ClassLoader;)[B(AspectWerkzPreProcessor.java:148)<br>&nbsp
 ;&nbsp;&nbsp; at
 org.codehaus.aspectwerkz.extension.jrockit.JRockitPreProcessor.preProcess(Ljava.lang.ClassLoader;Ljava.lang.String;[B)[B(JRockitPreProcessor.java:85)<br>&nbsp;&nbsp;&nbsp; at jrockit.vm.ClassPreProcessorManager.notifyClassPreProcessor(ILjava.lang.String;[B)[B(Unknown Source)<br>&nbsp;&nbsp;&nbsp; at jrockit.vm.Classes.defineClass0(ILjava.lang.String;[BII)I(Unknown Source)<br>&nbsp;&nbsp;&nbsp; at jrockit.vm.Classes.defineClass(Ljava.lang.ClassLoader;Ljava.lang.String;[BII)Ljava.lang.Class;(Unknown Source)<br>&nbsp;&nbsp;&nbsp; at java.lang.ClassLoader.defineClass(Ljava.lang.String;[BIILjava.security.ProtectionDomain;)Ljava.lang.Class;(Unknown Source)<br>&nbsp;&nbsp;&nbsp; at java.security.SecureClassLoader.defineClass(Ljava.lang.String;[BIILjava.security.CodeSource;)Ljava.lang.Class;(Secu
 reClassLoader.java:123)<br>&nbsp;&nbsp;&nbsp; at
 java.net.URLClassLoader.defineClass(Ljava.lang.String;Lsun.misc.Resource;)Ljava.lang.Class;(URLClassLoader.java:251)<br>&nbsp;&nbsp;&nbsp; at java.net.URLClassLoader.access$100(Ljava.net.URLClassLoader;Ljava.lang.String;Lsun.misc.Resource;)Ljava.lang.Class;(URLClassLoader.java:55)<br>&nbsp;&nbsp;&nbsp; at java.net.URLClassLoader$1.run()Ljava.lang.Object;(URLClassLoader.java:194)<br>&nbsp;&nbsp;&nbsp; at jrockit.vm.AccessController.do_privileged_exc(Ljava.security.PrivilegedExceptionAction;Ljava.security.AccessControlContext;I)Ljava.lang.Object;(Unknown Source)<br>&nbsp;&nbsp;&nbsp; at jrockit.vm.AccessController.doPrivileged(Ljava.security.PrivilegedExceptionAction;Ljava.security.AccessControlContext;)Ljava.lang.Object;(Unknown Source)<br>&nbsp;&nbsp;&nbsp; at java.net.URLClassLoader.find
 Class(Ljava.lang.String;)Ljava.lang.Class;(URLClassLoader.java:187)<br>&nbsp;&nbsp;&nbsp; at
 java.lang.ClassLoader.loadClass(Ljava.lang.String;Z)Ljava.lang.Class;(Unknown Source)<br>&nbsp;&nbsp;&nbsp; at sun.misc.Launcher$AppClassLoader.loadClass(Ljava.lang.String;Z)Ljava.lang.Class;(Launcher.java:274)<br>&nbsp;&nbsp;&nbsp; at java.lang.ClassLoader.loadClass(Ljava.lang.String;)Ljava.lang.Class;(Unknown Source)<br>&nbsp;&nbsp;&nbsp; at java.lang.ClassLoader.loadClassFromNative(II)Ljava.lang.Class;(Unknown Source)<br>&nbsp;&nbsp;&nbsp; at jrockit.vm.Classes.defineClass0(ILjava.lang.String;[BII)I(Unknown Source)<br><br><br>I did some research and found that if oraclepki.jar which has the OracleWallet class is not in the classpath, we get this error. If I add that to the classpath along with ojdbc14.jar, we do not get this error. <span style="font-weight: bold;">However the oraclepki
 .jar is not mandatory for oracle driver to work, so aspectwerkz preprocessor should be able to preprocess the OracleDriver even if oraclepki.jar is not in
 classpath.<br><br></span><span>I tried to look through the source code and saw that even if we fail to obtain a dependent class as stream, we still call new ASMClassInfo(stream) on it which causes this exception and hence complete preprocessing fails. I looked at the CVS repository and see that there has been some change in version 1.15 of AsmClassInfo which probably resulted in this. (<a target="_blank" href="http://cvs.aspectwerkz.codehaus.org/browse/aspectwerkz/aspectwerkz4/src/main/org/codehaus/aspectwerkz/reflect/impl/asm/AsmClassInfo.java?r1=1.14&amp;r2=1.15">http://cvs.aspectwerkz.codehaus.org/browse/aspectwerkz/aspectwerkz4/src/main/org/codehaus/aspectwerkz/reflect/impl/asm/AsmClassInfo.java?r1=1.14&amp;r2=1.15</a>)</span><br><br>if (componentClassAsStream == null) {<br>&nbsp;&nbs
 p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // might be more than one
 dimension<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (componentName.indexOf('[') &gt; 0) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return getClassInfo(componentName, loader);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "AW::WARNING - could not load class ["<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n
 bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +
 componentName<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + "] as a resource in loader ["<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + loader<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + "]"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; componentInfo = new ClassInfo.NullClassInfo();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br
 ><span style="font-weight: bold; font-style: italic;">//The 1.14 version returned the ClassInfo.NullClassInfo() if </span><span style="font-weight: bold; font-style:
 italic;">componentClassAsStream was null and did not proceed further</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; componentInfo = AsmClassInfo.getClassInfo(componentClassAsStream, loader, lazyAttributes);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } finally {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; componentClassAsStream.close();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (Exception e) {<br>&nbsp;&nb
 sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 ;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br><br><br>Any help with this will be greatly appreciated<br><br>Thanks Much<br>Amit<br><br><br><span style="font-weight: bold;"><br><span style="font-weight: bold;"></span><br></span><br></div></div><br>
      <hr size=1>Be a better friend, newshound, and 
know-it-all with Yahoo! Mobile. <a href="http://us.rd.yahoo.com/evt=51733/*http://mobile.yahoo.com/;_ylt=Ahu06i62sR8HDtDypao8Wcj9tAcJ "> Try it now.</a></body></html>
--0-599164959-1203678338=:97696--