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]>

Reply via email to