# Class IntrospectionUtils

java.lang.Object
org.apache.tomcat.util.IntrospectionUtils

public final class IntrospectionUtils extends Object
Utils for introspection and reflection

- ## Nested Class Summary

  Nested Classes
  Modifier and Type
  Class
  Description
  `static interface`
  `IntrospectionUtils.PropertySource`
  Interface for a source of named properties used during introspection.
  `static interface`
  `IntrospectionUtils.SecurePropertySource`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `static Object`
  `callMethod1(Object target, String methodN, Object param1, String typeParam1, ClassLoader cl)`
  Call a method with a single parameter on the given target object.
  `static Object`
  `callMethodN(Object target, String methodN, Object[] params, Class<?>[] typeParams)`
  Call a method with multiple parameters on the given target object.
  `static String`
  `capitalize(String name)`
  Reverse of Introspector.decapitalize.
  `static void`
  `clear()`
  Clear the internal method cache.
  `static Object`
  `convert(String object, Class<?> paramType)`
  Convert a string value to the specified type.
  `static String`
  `escape(String s)`
  Escapes special characters in a string for use in generated code.
  `static Method`
  `findMethod(Class<?> c, String name, Class<?>[] params)`
  Find a specific method by name and parameter types.
  `static Method[]`
  `findMethods(Class<?> c)`
  Find all public methods of the given class, using a cache for performance.
  `static Object`
  `getProperty(Object o, String name)`
  Get the value of a property from the given object.
  `static boolean`
  `isInstance(Class<?> clazz, String type)`
  Checks to see if the specified class is an instance of or assignable from the specified type.
  `static String`
  `replaceProperties(String value, Hashtable<Object,Object> staticProp, IntrospectionUtils.PropertySource[] dynamicProp)`
  Deprecated.
  Use `replaceProperties(String, Hashtable, PropertySource[], ClassLoader)`
  `static String`
  `replaceProperties(String value, Hashtable<Object,Object> staticProp, IntrospectionUtils.PropertySource[] dynamicProp, ClassLoader classLoader)`
  Replace ${NAME} with the property value.
  `static boolean`
  `setProperty(Object o, String name, String value)`
  Find a method with the right name If found, call the method ( if param is int or boolean we'll convert value to the right type before) - that means you can have setDebug(1).
  `static boolean`
  `setProperty(Object o, String name, String value, boolean invokeSetProperty)`
  Set a property on the given object.
  `static boolean`
  `setProperty(Object o, String name, String value, boolean invokeSetProperty, StringBuilder actualMethod)`
  Set a property on the given object, tracking the actual method called.

  ### Methods inherited from class Object

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

- ## Method Details

  - ### setProperty

    public static boolean setProperty(Object o, String name, String value)
    Find a method with the right name If found, call the method ( if param is int or boolean we'll convert value to the right type before) - that means you can have setDebug(1).
    Parameters:
      `o` - The object to set a property on
      `name` - The property name
      `value` - The property value
    Returns:
      `true` if operation was successful

  - ### setProperty

    public static boolean setProperty(Object o, String name, String value, boolean invokeSetProperty)
    Set a property on the given object.
    Parameters:
      `o` - the object to set the property on
      `name` - the property name
      `value` - the property value
      `invokeSetProperty` - whether to invoke setProperty as a fallback
    Returns:
      `true` if the operation was successful

  - ### setProperty

    public static boolean setProperty(Object o, String name, String value, boolean invokeSetProperty, StringBuilder actualMethod)
    Set a property on the given object, tracking the actual method called.
    Parameters:
      `o` - the object to set the property on
      `name` - the property name
      `value` - the property value
      `invokeSetProperty` - whether to invoke setProperty as a fallback
      `actualMethod` - StringBuilder to append the actual method call to, or `null`
    Returns:
      `true` if the operation was successful

  - ### escape

    public static String escape(String s)
    Escapes special characters in a string for use in generated code.
    Parameters:
      `s` - the input string
    Returns:
      the escaped string with double quotes, backslashes, newlines and carriage returns escaped

  - ### getProperty

    public static Object getProperty(Object o, String name)
    Get the value of a property from the given object.
    Parameters:
      `o` - the object to get the property from
      `name` - the property name
    Returns:
      the property value, or `null` if not found

  - ### replaceProperties

    @Deprecated public static String replaceProperties(String value, Hashtable<Object,Object> staticProp, IntrospectionUtils.PropertySource[] dynamicProp)
    Deprecated.
    Use `replaceProperties(String, Hashtable, PropertySource[], ClassLoader)`
    Replaces ${NAME} in the value with the value of the property 'NAME'. Replaces ${NAME:DEFAULT} with the value of the property 'NAME:DEFAULT', if the property 'NAME:DEFAULT' is not set, the expression is replaced with the value of the property 'NAME', if the property 'NAME' is not set, the expression is replaced with 'DEFAULT'. If the property is not set and there is no default the value will be returned unmodified.
    Parameters:
      `value` - The value
      `staticProp` - Replacement properties
      `dynamicProp` - Replacement properties
    Returns:
      the replacement value

  - ### replaceProperties

    public static String replaceProperties(String value, Hashtable<Object,Object> staticProp, IntrospectionUtils.PropertySource[] dynamicProp, ClassLoader classLoader)
    Replace ${NAME} with the property value.
    Parameters:
      `value` - The value
      `staticProp` - Replacement properties
      `dynamicProp` - Replacement properties
      `classLoader` - Class loader associated with the code requesting the property
    Returns:
      the replacement value

  - ### capitalize

    public static String capitalize(String name)
    Reverse of Introspector.decapitalize.
    Parameters:
      `name` - The name
    Returns:
      the capitalized string

  - ### clear

    public static void clear()
    Clear the internal method cache.

  - ### findMethods

    public static Method[] findMethods(Class<?> c)
    Find all public methods of the given class, using a cache for performance.
    Parameters:
      `c` - the class
    Returns:
      the array of methods

  - ### findMethod

    public static Method findMethod(Class<?> c, String name, Class<?>[] params)
    Find a specific method by name and parameter types.
    Parameters:
      `c` - the class
      `name` - the method name
      `params` - the parameter types, or `null` for no parameters
    Returns:
      the matching method, or `null` if not found

  - ### callMethod1

    public static Object callMethod1(Object target, String methodN, Object param1, String typeParam1, ClassLoader cl) throws Exception
    Call a method with a single parameter on the given target object.
    Parameters:
      `target` - the target object
      `methodN` - the method name
      `param1` - the parameter value
      `typeParam1` - the parameter type name, or `null` to infer from the parameter
      `cl` - the class loader to use for loading the parameter type
    Returns:
      the result of the method call
    Throws:
      `Exception` - if the method cannot be found or invoked

  - ### callMethodN

    public static Object callMethodN(Object target, String methodN, Object[] params, Class<?>[] typeParams) throws Exception
    Call a method with multiple parameters on the given target object.
    Parameters:
      `target` - the target object
      `methodN` - the method name
      `params` - the parameter values
      `typeParams` - the parameter types
    Returns:
      the result of the method call, or `null` if the method cannot be found
    Throws:
      `Exception` - if the method cannot be invoked

  - ### convert

    public static Object convert(String object, Class<?> paramType)
    Convert a string value to the specified type.
    Parameters:
      `object` - the string value to convert
      `paramType` - the target type
    Returns:
      the converted object
    Throws:
      `IllegalArgumentException` - if conversion fails

  - ### isInstance

    public static boolean isInstance(Class<?> clazz, String type)
    Checks to see if the specified class is an instance of or assignable from the specified type. The class `clazz`, all its superclasses, interfaces and those superinterfaces are tested for a match against the type name `type`. This is similar to `instanceof` or `Class.isAssignableFrom(Class)` except that the target type will not be resolved into a Class object, which provides some security and memory benefits.
    Parameters:
      `clazz` - The class to test for a match.
      `type` - The name of the type that `clazz` must be.
    Returns:
      `true` if the `clazz` tested is an instance of the specified `type`, `false` otherwise.