I am working with a Java framework that generates some (proxy) classes at runtime, using a custom ClassLoader. I would like to get for any such class that the custom ClassLoader returns from loadClass(..) the raw byte array that corresponds to this class. Is this possible? I know that if a class exists as a resource then you can use an input stream to load the class in binary format but how can I go about this if the class is generated at runtime?
+3
A:
If you replace the custom ClassLoader with your own, you can add some mechanism for saving the raw bytes yourself.
Adam Goode
2010-01-15 19:06:17
A:
Classes in the ClassLoader are created by the defineClass() method. If you already have a custom classloader you can simply override all of the defineClass() methods. To that method you are passed a byte[] containing the bytes of the class. Store these and you can access them later however you need to for your application.
See [defineClass() Java Documentation][1] for more information.
[1]: http://java.sun.com/javase/6/docs/api/java/lang/ClassLoader.html#defineClass(java.lang.String, byte[], int, int)
Chris Dail
2010-01-15 19:47:45
All the defineClass methods are final.
bkail
2010-05-21 05:56:45
+1
A:
Register a ClassFileTransformer. Rather than modifying the bytes, record the data you need.
bkail
2010-05-21 05:58:39