import java.beans.PropertyDescriptor; import java.lang.reflect.InvocationTargetException; import java.util.Map; import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.beanutils.PropertyUtils; public class CopyBean { /** * 比較一個對象,如是這個對象的某一個屬性不爲空,把他copy到另外一個有這個屬性的bean中 * * @param result 要copy到的bean * @param orig 原來BEAN * @throws InvocationTargetException * @throws IllegalAccessException */ public static void copyOrigNotNullPropertyToDestBean(Object result, Object orig) throws IllegalAccessException, InvocationTargetException { // Validate existence of the specified beans if (result == null) { throw new IllegalArgumentException("No destination bean specified"); } if (orig == null) { throw new IllegalArgumentException("No origin bean specified"); } if (orig instanceof Map) { throw new IllegalArgumentException("No support map"); } /* if (orig is a standard JavaBean) */ PropertyDescriptor origDescriptors[] = PropertyUtils.getPropertyDescriptors(orig); for (int i = 0; i < origDescriptors.length; i++) { String name = origDescriptors[i].getName(); if ("class".equals(name)) { continue; // No point in trying to set an object's class } if (PropertyUtils.isReadable(orig, name) && PropertyUtils.isWriteable(result, name)) { try { Object value1 = PropertyUtils.getSimpleProperty(orig, name); if (value1 != null) { if (PropertyUtils.isReadable(result, name) && PropertyUtils.isWriteable(result, name)) { BeanUtils.copyProperty(result, name, value1); } } } catch (NoSuchMethodException e) { } } } } }