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/proper/commons-lang/javadocs/api-2.6/org/apache/commons/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