in src/main/java/org/apache/commons/ognl/OgnlRuntime.java [1785:1878]
public static Method getReadMethod( Class<?> target, String name, int numParms )
{
try
{
name = name.replace( "\"", "" ).toLowerCase();
BeanInfo info = Introspector.getBeanInfo( target );
MethodDescriptor[] methodDescriptors = info.getMethodDescriptors();
// exact matches first
Method method = null;
for ( MethodDescriptor methodDescriptor : methodDescriptors )
{
if ( !isMethodCallable( methodDescriptor.getMethod() ) )
{
continue;
}
String methodName = methodDescriptor.getName();
String lowerMethodName = methodName.toLowerCase();
int methodParamLen = methodDescriptor.getMethod().getParameterTypes().length;
if ( ( methodName.equalsIgnoreCase( name ) || lowerMethodName.equals( "get" + name )
|| lowerMethodName.equals( "has" + name ) || lowerMethodName.equals( "is" + name ) )
&& !methodName.startsWith( "set" ) )
{
if ( numParms > 0 && methodParamLen == numParms )
{
return methodDescriptor.getMethod();
}
if ( numParms < 0 )
{
if ( methodName.equals( name ) )
{
return methodDescriptor.getMethod();
}
if ( method == null || ( method.getParameterTypes().length > methodParamLen ) )
{
method = methodDescriptor.getMethod();
}
}
}
}
if ( method != null )
{
return method;
}
for ( MethodDescriptor methodDescriptor : methodDescriptors )
{
if ( !isMethodCallable( methodDescriptor.getMethod() ) )
{
continue;
}
if ( methodDescriptor.getName().toLowerCase().endsWith( name ) && !methodDescriptor.getName().startsWith( "set" )
&& methodDescriptor.getMethod().getReturnType() != Void.TYPE )
{
if ( numParms > 0 && methodDescriptor.getMethod().getParameterTypes().length == numParms )
{
return methodDescriptor.getMethod();
}
if ( (numParms < 0) && (method == null || ( method.getParameterTypes().length
> methodDescriptor.getMethod().getParameterTypes().length )) )
{
method = methodDescriptor.getMethod();
}
}
}
if ( method != null )
{
return method;
}
// try one last time adding a get to beginning
if ( !name.startsWith( "get" ) )
{
return OgnlRuntime.getReadMethod( target, "get" + name, numParms );
}
}
catch ( Throwable t )
{
throw OgnlOps.castToRuntime( t );
}
return null;
}