Do not modify the current thread's ClassLoader; or reset it afterwards
----------------------------------------------------------------------

                 Key: DIRSTUDIO-585
                 URL: https://issues.apache.org/jira/browse/DIRSTUDIO-585
             Project: Directory Studio
          Issue Type: Bug
          Components: studio-ldapbrowser
    Affects Versions: 1.5.0, 1.4.0
            Reporter: Karsten Baensch


Hi,

in BrowserConnectionManager.load
and in
Utils.serialize / deserialize
we recognized that the ClassLoader is modified without conserving / resetting 
it to the previous one at the end.
This conflicted with our class loading mechanisms ... streaming from our own 
class store.

As a quick fix for testing, we could do for example the following; however, 
this is not a real solution:

    public static String serialize( Object o )
    {
        String s = null;
        Thread cur_thrd = Thread.currentThread(); //patch reset current class 
loader
        ClassLoader cur_thrd_cl = cur_thrd.getContextClassLoader();
        try{
                cur_thrd.setContextClassLoader( Utils.class.getClassLoader() );
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                XMLEncoder encoder = new XMLEncoder( baos );
                encoder.writeObject( o );
                encoder.close();
                s = LdifUtils.utf8decode( baos.toByteArray() );
        }finally{
            cur_thrd.setContextClassLoader(cur_thrd_cl);
        }
        return s;
    }

=> Is there a better way?

Thanks and regards,
Karsten

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to