Kopiowanie obiektu za pomocą refleksji

0

Cześć.
Mam za zadanie skopiować wszystkie pola z jednego obiektu do drugiego (obiekty są takie same). Nie mogę korzystać z klasy BeanUtils.
Napisałem taką metodę, ale wyrzuca ona IllegalAccessException. Ma ktoś pomysł w czym może być problem lub jak to lepiej napisać?

public static void copyProperties(Object fromObj, Object toObj) {
        Class<? extends Object> fromClass = fromObj.getClass();
        Class<? extends Object> toClass = toObj.getClass();

        try {
            BeanInfo fromBean = Introspector.getBeanInfo(fromClass);
            BeanInfo toBean = Introspector.getBeanInfo(toClass);

            PropertyDescriptor[] toPd = toBean.getPropertyDescriptors();
            List<PropertyDescriptor> fromPd = Arrays.asList(fromBean
                    .getPropertyDescriptors());

            for (PropertyDescriptor propertyDescriptor : toPd) {
                propertyDescriptor.getDisplayName();
                PropertyDescriptor pd = fromPd.get(fromPd
                        .indexOf(propertyDescriptor));
                if (pd.getDisplayName().equals(
                        propertyDescriptor.getDisplayName())
                        && !pd.getDisplayName().equals("class")) {
                     if(propertyDescriptor.getWriteMethod() != null && pd.getReadMethod() != null)
                        propertyDescriptor.getWriteMethod().invoke(toObj, pd.getReadMethod().invoke(fromObj, new Object[] {}));
                }

            }
        } catch (IntrospectionException e) {
            e.printStackTrace();
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
    }
0

http://commons.apache.org/pro[...]/lang/SerializationUtils.html
SerializationUtils.clone. Jedynym warunkiem jest aby obiekt implementował interfejs Serializable.

0

A jaki konkretnie wyjątek dostajesz?

0

IllegalAccessException niezalogowany baranie.

0

Możesz podać kod ziarna, którego nie da się skopiować. Ja próbowałem na kilku, z powodzeniem.

0
niezalogowany napisał(a):

IllegalAccessException niezalogowany baranie.

Misiu pysiu, jak popatrzysz na kod to zobaczysz, że ten ISE mógł być rzucony w kilku linijkach + zawsze ma dodatkowe info.

Więc zamilknij baranie.

0

Dzięki wszystkim za pomoc.
Wyczytałem w internecie, że w takich wypadkach trzeba sprawdzić dostępność metody i ewentualnie ją zmodyfikować:


if (!mtd.isAccessible()){
    mtd.setAccessible(true);
}
if (!mtd2.isAccessible()){
    mtd2.setAccessible(true);
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0