[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> at org.codehaus.aspectwerkz.org.objectweb.asm.ClassReader.readClass(Ljava.io.InputStream;)[B(Unknown Source)<br> at org.codehaus.aspectwerkz.org.objectweb.asm.ClassRead
er.<init>(Ljava.io.InputStream;)V(Unknown Source)<br> at
org.codehaus.aspectwerkz.reflect.impl.asm.AsmClassInfo.getClassInfo(Ljava.io.InputStream;Ljava.lang.ClassLoader;)Lorg.codehaus.aspectwerkz.reflect.ClassInfo;(AsmClassInfo.java:304)<br> 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> 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> 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> at
org.codehaus.aspectwerkz.transform.inlining.weaver.ConstructorCallVisitor$ReplaceNewInstructionCodeAdapter.visitTypeInsn(ILjava.lang.String;)V(ConstructorCallVisitor.java:252)<br> at org.codehaus.aspectwerkz.org.objectweb.asm.CodeAdapter.visitTypeInsn(ILjava.lang.String;)V(Unknown Source)<br> at org.codehaus.aspectwerkz.transform.inlining.weaver.AfterObjectInitializationCodeAdapter.visitTypeInsn(ILjava.lang.String;)V(AfterObjectInitializationCodeAdapter.java:43)<br> at org.codehaus.aspectwerkz.org.objectweb.asm.CodeAdapter.visitTypeInsn(ILjava.lang.String;)V(Unknown Source)<br> at org.codehaus.aspectwerkz.org.objectweb.asm.CodeAdapter.visitTypeInsn(ILjava.lang.String;)V(Unknown Source)<br> 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> at org.codehaus.aspectwerkz.transform.inlining.InliningWeavingStrategy.transform(Ljava.lang.String;Lorg.codehaus.aspectwerkz.transform.Context;)V(InliningWeavingStrategy.java:198)<br> at org.codehaus.aspectwerkz.transform.AspectWerkzPreProcessor._preProcess(Ljava.lang.String;[BLjava.lang.ClassLoader;)Lorg.codehaus.aspectwerkz.transform.Context;(AspectWerkzPreProcessor.java:173)<br> at org.codehaus.aspectwerkz.transform.AspectWerkzPreProcessor.preProcess(Ljava.lang.String;[BLjava.lang.ClassLoader;)[B(AspectWerkzPreProcessor.java:148)<br> 
; at
org.codehaus.aspectwerkz.extension.jrockit.JRockitPreProcessor.preProcess(Ljava.lang.ClassLoader;Ljava.lang.String;[B)[B(JRockitPreProcessor.java:85)<br> at jrockit.vm.ClassPreProcessorManager.notifyClassPreProcessor(ILjava.lang.String;[B)[B(Unknown Source)<br> at jrockit.vm.Classes.defineClass0(ILjava.lang.String;[BII)I(Unknown Source)<br> at jrockit.vm.Classes.defineClass(Ljava.lang.ClassLoader;Ljava.lang.String;[BII)Ljava.lang.Class;(Unknown Source)<br> at java.lang.ClassLoader.defineClass(Ljava.lang.String;[BIILjava.security.ProtectionDomain;)Ljava.lang.Class;(Unknown Source)<br> at java.security.SecureClassLoader.defineClass(Ljava.lang.String;[BIILjava.security.CodeSource;)Ljava.lang.Class;(Secu
reClassLoader.java:123)<br> at
java.net.URLClassLoader.defineClass(Ljava.lang.String;Lsun.misc.Resource;)Ljava.lang.Class;(URLClassLoader.java:251)<br> at java.net.URLClassLoader.access$100(Ljava.net.URLClassLoader;Ljava.lang.String;Lsun.misc.Resource;)Ljava.lang.Class;(URLClassLoader.java:55)<br> at java.net.URLClassLoader$1.run()Ljava.lang.Object;(URLClassLoader.java:194)<br> at jrockit.vm.AccessController.do_privileged_exc(Ljava.security.PrivilegedExceptionAction;Ljava.security.AccessControlContext;I)Ljava.lang.Object;(Unknown Source)<br> at jrockit.vm.AccessController.doPrivileged(Ljava.security.PrivilegedExceptionAction;Ljava.security.AccessControlContext;)Ljava.lang.Object;(Unknown Source)<br> at java.net.URLClassLoader.find
Class(Ljava.lang.String;)Ljava.lang.Class;(URLClassLoader.java:187)<br> at
java.lang.ClassLoader.loadClass(Ljava.lang.String;Z)Ljava.lang.Class;(Unknown Source)<br> at sun.misc.Launcher$AppClassLoader.loadClass(Ljava.lang.String;Z)Ljava.lang.Class;(Launcher.java:274)<br> at java.lang.ClassLoader.loadClass(Ljava.lang.String;)Ljava.lang.Class;(Unknown Source)<br> at java.lang.ClassLoader.loadClassFromNative(II)Ljava.lang.Class;(Unknown Source)<br> 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&r2=1.15">http://cvs.aspectwerkz.codehaus.org/browse/aspectwerkz/aspectwerkz4/src/main/org/codehaus/aspectwerkz/reflect/impl/asm/AsmClassInfo.java?r1=1.14&r2=1.15</a>)</span><br><br>if (componentClassAsStream == null) {<br> &nbs
p; // might be more than one
dimension<br> if (componentName.indexOf('[') > 0) {<br> return getClassInfo(componentName, loader);<br> }<br> System.out.println(<br> "AW::WARNING - could not load class ["<br> &n
bsp; +
componentName<br> + "] as a resource in loader ["<br> + loader<br> + "]"<br> );<br> componentInfo = new ClassInfo.NullClassInfo();<br> }<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> try {<br> componentInfo = AsmClassInfo.getClassInfo(componentClassAsStream, loader, lazyAttributes);<br> } finally {<br> try {<br> componentClassAsStream.close();<br> } catch (Exception e) {<br> &nb
sp;
;<br> }<br> }<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--