You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by "Vasily Zakharov (JIRA)" <ji...@apache.org> on 2008/02/08 18:12:08 UTC

[jira] Commented: (HARMONY-5477) [classlib][beans][geronimo] PropertyEditorManager.findEditor() used wrong classloader

    [ https://issues.apache.org/jira/browse/HARMONY-5477?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12567098#action_12567098 ] 

Vasily Zakharov commented on HARMONY-5477:
------------------------------------------

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:

{code:java}
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 {
}
{code}

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

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

Output on RI:

{code}SUCCESS{code}

Output on Harmony:

{code}FAIL: null{code}

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.


> [classlib][beans][geronimo] PropertyEditorManager.findEditor() used wrong classloader
> -------------------------------------------------------------------------------------
>
>                 Key: HARMONY-5477
>                 URL: https://issues.apache.org/jira/browse/HARMONY-5477
>             Project: Harmony
>          Issue Type: Bug
>          Components: App-Oriented Bug Reports, Classlib
>    Affects Versions: 5.0M5
>            Reporter: Vasily Zakharov
>            Assignee: Vasily Zakharov
>
> 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:
> {code:java}
> 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 {
> }
> {code}
> {code:java}
> package myPackage;
> public class MyClassEditor extends java.beans.PropertyEditorSupport {
> }
> {code}
> Compiled {{MyClassEditor.class}} should be put to {{./editor/myPackage/MyClassEditor.class}} for the test to work.
> Output on RI:
> {code}SUCCESS{code}
> Output on Harmony:
> {code}FAIL: null{code}
> 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.

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