openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Jonathan Feinberg (JIRA)" <j...@apache.org>
Subject [jira] Created: (OPENJPA-251) org.apache.openjpa.enhance.Reflection.getDeclaredMethod() has undefined behavior, leading to VM-dependent crashes
Date Wed, 06 Jun 2007 16:29:25 GMT
org.apache.openjpa.enhance.Reflection.getDeclaredMethod() has undefined behavior, leading to
VM-dependent crashes
-----------------------------------------------------------------------------------------------------------------

                 Key: OPENJPA-251
                 URL: https://issues.apache.org/jira/browse/OPENJPA-251
             Project: OpenJPA
          Issue Type: Bug
          Components: jpa
    Affects Versions: 1.0.0
         Environment: Sun JDK 6.01
            Reporter: Jonathan Feinberg


Given 

public interface A { Object getId(); }

@Entity
public class B implements A { 
    @Id
    public String getId() { return "foo"; } 
}

B.class.getDeclaredMethods() will include both "public java.lang.String B.getId()" and "public
java.lang.Object B.getId()". The order in which these two methods appear is NOT DEFINED! Because
org.apache.openjpa.enhance.Reflection.getDeclaredMethod()  returns the first matching method,
and because that method might well be the abstract one retuning Object, OpenJPA will complain
that it cannot persist an ID with a non-explicit strategy, and throw up.

Class.getDeclaredMethod() (note singular, not plural) is defined to return the method with
the most specific return type under these circumstances, and should therefore be used. Here's
my implementation of Reflection.getDeclaredMethod:

	private static Method getDeclaredMethod(Class cls, String name, Class param)
	{
		Class[] params = param == null ? new Class[0] : new Class[] { param };
		try
		{
			return cls.getDeclaredMethod(name, params);
		}
		catch (Exception e)
		{
			return null;
		}
	}


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


Mime
View raw message