Uploaded image for project: 'Harmony'
  1. Harmony
  2. HARMONY-5477

[classlib][beans][geronimo] PropertyEditorManager.findEditor() uses wrong classloader

    XMLWordPrintableJSON

Details

    Description

      PropertyEditorManager.findEditor() always uses the target class loader to locate the editor, while it should use thread context class loader when a particular editor is not found the the target class loader.

      Here's the test demonstrating the problem:

      import java.beans.*;
      import java.net.*;
      public class Test {
      public static void main(String[] args) {
      try {
      PropertyEditorManager.setEditorSearchPath(new String[]

      { "myPackage" }

      );
      ClassLoader editorLoader = new URLClassLoader(new URL[]

      { new URL("file:./editor/") }

      );
      Thread.currentThread().setContextClassLoader(editorLoader);
      PropertyEditor editor = PropertyEditorManager.findEditor(MyClass.class);
      if (editor == null)

      { System.out.println("FAIL: null"); }

      else

      { String editorName = editor.getClass().getName(); System.out.println(editorName.equals("myPackage.MyClassEditor") ? "SUCCESS" : ("FAIL: " + editorName)); }

      } catch (Throwable e)

      { System.out.print("ERROR: "); e.printStackTrace(System.out); }

      }
      }

      class MyClass {
      }

      package myPackage;
      public class MyClassEditor extends java.beans.PropertyEditorSupport {
      }

      Compiled MyClassEditor.class should be put to ./editor/myPackage/MyClassEditor.class for the test to work.

      Output on RI:

      SUCCESS

      Output on Harmony:

      FAIL: null

      The reason the test fails is the editor is available in other classloader than the original class. That classloader is preliminarily specified by Thread.currentThread().setContextClassLoader(), but Harmony implementation doesn't use it. To fix, the classloader handling mechanism in PropertyEditorManager.findEditor() needs to be changed.

      This testcase was derived from org.apache.geronimo.common.propertyeditor.PropertyEditors.findEditor(String, ClassLoader) method.

      This issue prevents Geronimo 2.1-snapshot from starting on Harmony.

      Attachments

        1. Harmony-5477-Test.patch
          3 kB
          Vasily Zakharov
        2. Harmony-5477.patch
          5 kB
          Vasily Zakharov

        Issue Links

          Activity

            People

              vmz Vasily Zakharov
              vmz Vasily Zakharov
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: