org.apache.xalan.extensions

## Class MethodResolver

- java.lang.Object
- - org.apache.xalan.extensions.MethodResolver

    public class MethodResolver
    extends java.lang.Object

Utility class to help resolve method overloading with Xalan XSLT argument types.

### Field Summary

Fields
`static int` `DYNAMIC` Specifies a Dynamic method search.
`static int` `INSTANCE_ONLY` Specifies a search for instance methods only.
`static int` `STATIC_AND_INSTANCE` Specifies a search for both static and instance methods.
`static int` `STATIC_ONLY` Specifies a search for static methods only.

### Constructor Summary

Constructors
Constructor and Description
`MethodResolver()`

### Method Summary

Methods
`static void` `convertParams(java.lang.Object[] argsIn, java.lang.Object[][] argsOut, java.lang.Class[] paramTypes, ExpressionContext exprContext)` Convert a set of parameters based on a set of paramTypes.
`static java.lang.reflect.Constructor` `getConstructor(java.lang.Class classObj, java.lang.Object[] argsIn, java.lang.Object[][] argsOut, ExpressionContext exprContext)` Given a class, figure out the resolution of the Java Constructor from the XSLT argument types, and perform the conversion of the arguments.
`static java.lang.reflect.Method` `getElementMethod(java.lang.Class classObj, java.lang.String name)` Given the name of a method, figure out the resolution of the Java Method
`static java.lang.reflect.Method` `getMethod(java.lang.Class classObj, java.lang.String name, java.lang.Object[] argsIn, java.lang.Object[][] argsOut, ExpressionContext exprContext, int searchMethod)` Given the name of a method, figure out the resolution of the Java Method from the XSLT argument types, and perform the conversion of the arguments.
`static int` `scoreMatch(java.lang.Class[] javaParamTypes, int javaParamsStart, java.lang.Object[] xsltArgs, int score)` Score the conversion of a set of XSLT arguments to a given set of Java parameters.

### Methods inherited from class java.lang.Object

`equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Field Detail

#### STATIC_ONLY

    public static final int STATIC_ONLY

Specifies a search for static methods only.

See Also:
  Constant Field Values

#### INSTANCE_ONLY

    public static final int INSTANCE_ONLY

Specifies a search for instance methods only.

See Also:
  Constant Field Values

#### STATIC_AND_INSTANCE

    public static final int STATIC_AND_INSTANCE

Specifies a search for both static and instance methods.

See Also:
  Constant Field Values

#### DYNAMIC

    public static final int DYNAMIC

Specifies a Dynamic method search. If the method being evaluated is a static method, all arguments are used. Otherwise, it is an instance method and only arguments beginning with the second argument are used.

See Also:
  Constant Field Values

### Constructor Detail

#### MethodResolver

    public MethodResolver()

### Method Detail

#### getConstructor

    public static java.lang.reflect.Constructor getConstructor(java.lang.Class classObj,
                                               java.lang.Object[] argsIn,
                                               java.lang.Object[][] argsOut,
                                               ExpressionContext exprContext)
                                                        throws java.lang.NoSuchMethodException,
                                                               java.lang.SecurityException,
                                                               TransformerException

Given a class, figure out the resolution of the Java Constructor from the XSLT argument types, and perform the conversion of the arguments.

Parameters:
  `classObj` - the Class of the object to be constructed.
  `argsIn` - An array of XSLT/XPath arguments.
  `argsOut` - An array of the exact size as argsIn, which will be populated with converted arguments if a suitable method is found.
Returns:
  A constructor that will work with the argsOut array.
Throws:
  `TransformerException` - may be thrown for Xalan conversion exceptions.
  `java.lang.NoSuchMethodException`
  `java.lang.SecurityException`

#### getMethod

    public static java.lang.reflect.Method getMethod(java.lang.Class classObj,
                                     java.lang.String name,
                                     java.lang.Object[] argsIn,
                                     java.lang.Object[][] argsOut,
                                     ExpressionContext exprContext,
                                     int searchMethod)
                                              throws java.lang.NoSuchMethodException,
                                                     java.lang.SecurityException,
                                                     TransformerException

Given the name of a method, figure out the resolution of the Java Method from the XSLT argument types, and perform the conversion of the arguments.

Parameters:
  `classObj` - The Class of the object that should have the method.
  `name` - The name of the method to be invoked.
  `argsIn` - An array of XSLT/XPath arguments.
  `argsOut` - An array of the exact size as argsIn, which will be populated with converted arguments if a suitable method is found.
Returns:
  A method that will work with the argsOut array.
Throws:
  `TransformerException` - may be thrown for Xalan conversion exceptions.
  `java.lang.NoSuchMethodException`
  `java.lang.SecurityException`

#### getElementMethod

    public static java.lang.reflect.Method getElementMethod(java.lang.Class classObj,
                                            java.lang.String name)
                                                     throws java.lang.NoSuchMethodException,
                                                            java.lang.SecurityException,
                                                            TransformerException

Given the name of a method, figure out the resolution of the Java Method

Parameters:
  `classObj` - The Class of the object that should have the method.
  `name` - The name of the method to be invoked.
Returns:
  A method that will work to be called as an element.
Throws:
  `TransformerException` - may be thrown for Xalan conversion exceptions.
  `java.lang.NoSuchMethodException`
  `java.lang.SecurityException`

#### convertParams

    public static void convertParams(java.lang.Object[] argsIn,
                     java.lang.Object[][] argsOut,
                     java.lang.Class[] paramTypes,
                     ExpressionContext exprContext)
                              throws TransformerException

Convert a set of parameters based on a set of paramTypes.

Parameters:
  `argsIn` - An array of XSLT/XPath arguments.
  `argsOut` - An array of the exact size as argsIn, which will be populated with converted arguments.
  `paramTypes` - An array of class objects, of the exact same size as argsIn and argsOut.
Throws:
  `TransformerException` - may be thrown for Xalan conversion exceptions.

#### scoreMatch

    public static int scoreMatch(java.lang.Class[] javaParamTypes,
                 int javaParamsStart,
                 java.lang.Object[] xsltArgs,
                 int score)

Score the conversion of a set of XSLT arguments to a given set of Java parameters. If any invocations of this function for a method with the same name return the same positive value, then a conflict has occured, and an error should be signaled.

Parameters:
  `javaParamTypes` - Must be filled with valid class names, and of the same length as xsltArgs.
  `xsltArgs` - Must be filled with valid object instances, and of the same length as javeParamTypes.
Returns:
  -1 for no allowed conversion, or a positive score that is closer to zero for more preferred, or further from zero for less preferred.