public Object getValueAt(int row, int column) {
        try {
            Class c = rows.get(row).getClass();
            BeanInfo beanInfo = Introspector.getBeanInfo(c, Object.class);
            PropertyDescriptor pd = beanInfo.getPropertyDescriptors()[column];
            Method m = pd.getReadMethod();
            if (m != null) {
                Object objVal = m.invoke(rows.get(row), null);
                return (objVal != null) ? objVal : "";
            }
        } catch (IllegalAccessException ex) {
            Logger.getLogger(GenericTableModel.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IllegalArgumentException ex) {
            Logger.getLogger(GenericTableModel.class.getName()).log(Level.SEVERE, null, ex);
        } catch (InvocationTargetException ex) {
            Logger.getLogger(GenericTableModel.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IntrospectionException ex) {
            Logger.getLogger(GenericTableModel.class.getName()).log(Level.SEVERE, null, ex);
        }

        return null;
    }