Good pointer on the dual classLoaders, and I'm
stuck again.
First I tried just calling ObjectInputStream.readObject(),
and it threw:
java.lang.ClassNotFoundException: org.apache.log4j.spi.LoggingEvent
This is because ObjectInputStream doesn't know
to use JarClassLoader, and log4j.jar is no longer
in my classpath.
Next I tried dynamically loading ObjectInputStream using
the same JarClassLoader that has a reference to the
new log4j.jar. On calling ois.readObject() I still get:
java.lang.ClassNotFoundException: org.apache.log4j.spi.LoggingEvent
This is because JarClassLoader is still delegating the
loading to the root ClassLoader (java.io.ObjectInputStream
is not in log4j.jar), which leaves ObjectInputStream
with a reference to root ClassLoader, instead of
the JarClassLoader.
So I altered JarClassLoader to also look in rt.jar
(the Sun jar that includes all the stock packages).
This should leave ObjectInputStream with a reference
to the JarClassLoader as it's ClassLoader.
This fails before JarClassLoader can even return
the O.I.S. Class definition. It throws:
java.lang.SecurityException: Prohibited package name: java.io
Which is the same problem as when I first started on
this with java.io.LoggingEventInputStream
Once again I feel I have reached an impasse. Any ideas?
BTW, I already tried LoggingEvent.readObject( ObjectInputStream ),
which throws:
java.io.NotActiveException: defaultReadObject
at java.io.ObjectInputStream.readFields
Presumeably because ObjectInputStream does something
to initialize the stream before it calls
targetClass.readObject().
-------------------------------------------------------------------
Who owns your data?
Proprietary protocols and file formats are dangerous.
-------------------------------------------------------------------
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>