public static Bean getProperty()

in src/main/java/org/apache/bsf/util/ReflectionUtils.java [370:414]


  public static Bean getProperty (final Object target, final String propName,
                  final Integer index)
       throws IntrospectionException, IllegalArgumentException,
              IllegalAccessException, InvocationTargetException {
    // find the property descriptor
    final BeanInfo bi = Introspector.getBeanInfo (target.getClass ());
    final PropertyDescriptor pd = (PropertyDescriptor)
      findFeatureByName ("property", propName, bi.getPropertyDescriptors ());
    if (pd == null) {
      throw new IllegalArgumentException ("property '" + propName + "' is " +
                          "unknown for '" + target + "'");
    }

    // get read method and type of property
    Method rm;
    Class propType;
    if (index != null) {
      // if index != null, then property is indexed - pd better be so too
      if (!(pd instanceof IndexedPropertyDescriptor)) {
        throw new IllegalArgumentException ("attempt to get non-indexed " +
                            "property '" + propName +
                            "' as being indexed");
      }
      final IndexedPropertyDescriptor ipd = (IndexedPropertyDescriptor) pd;
      rm = ipd.getIndexedReadMethod ();
      propType = ipd.getIndexedPropertyType ();
    } else {
      rm = pd.getReadMethod ();
      propType = pd.getPropertyType ();
    }

    if (rm == null) {
      throw new IllegalArgumentException ("property '" + propName +
                          "' is not readable");
    }

    // now get the value
    Object propVal = null;
    if (index != null) {
      propVal = rm.invoke (target, new Object[] {index});
    } else {
      propVal = rm.invoke (target, null);
    }
    return new Bean (propType, propVal);
  }