public static PropertyDescriptor[] getPropertyDescriptors(Class beanClass)
            throws IntrospectionException
    {
        // See if the Java Bean has a BeanInfo class that implements
        // JiveBeanInfo. If so, return the PropertyDescriptor from that
        // class. This will bypass properties of parent classes, but this is
        // the normal behavior of classes that implement JiveBeanInfo.
        try {
            JiveBeanInfo beanInfo = (JiveBeanInfo)ClassUtils.forName(
                    beanClass.getName() + "BeanInfo").newInstance();
            return beanInfo.getPropertyDescriptors();
        }
        catch (Exception e) {
            // Ignore.
        }
        // Otherwise, return the PropertyDescriptors from the Introspector.
        return Introspector.getBeanInfo(beanClass).getPropertyDescriptors();
    }
Returns the PropertyDescriptor array for the specified Java Bean Class.
The method also does a special check to see of the bean has a BeanInfo
class that extends the JiveBeanInfo class. If yes, we load the
PropertyDescriptor array directly from that BeanInfo class rather than
through the Introspector in order to preserve the desired ordering of
properties.

@param beanClass the Class of the JavaBean.
@return the PropertyDescriptor array for the specified Java Bean Class.
@throws java.beans.IntrospectionException if there were problems accessing the descriptor
xmppserver/src/main/java/org/jivesoftware/util/BeanUtils.java