Uploaded image for project: 'Directory Studio'
  1. Directory Studio
  2. DIRSTUDIO-585

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

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 1.4.0, 1.5.0
    • 1.5.3
    • studio-ldapbrowser
    • None

    Description

      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

      Attachments

        Activity

          People

            seelmann Stefan Seelmann
            karstenb Karsten Baensch
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: