@SuppressWarnings("unchecked") public static <T, R> R merge(final T source, final R target) { if (null != source) { final HasProperties hasProperties = (HasProperties) DataBinder.forModel(source).getModel(); if (null != hasProperties) { final Map<String, PropertyType> propertyTypeMap = hasProperties.getBeanProperties(); if (null != propertyTypeMap && !propertyTypeMap.isEmpty()) { final HasProperties targetProperties = (HasProperties) DataBinder.forModel(target).getModel(); for (final Map.Entry<String, PropertyType> entry : propertyTypeMap.entrySet()) { final String pId = entry.getKey(); try { targetProperties.set(pId, hasProperties.get(pId)); } catch (NonExistingPropertyException exception) { // Just skip it, Go to next property. LOGGER.log(Level.INFO, "BindableAdapterUtils#merge - Skipping merge property [" + pId + "]"); } } return (R) target; } } } return null; } }
type = hasProperties.getBeanProperties().get(meta.getProperty()).getType().getName();