public class Transformer {
public OutputBean transformToOutputBean(InputBean inputBean) {
BeanTransformerSpi transformer = new BeanTransformer(new DateTransformerFactory())
.initDetailedPropertyFilter(new MyDetailedPropertyFilter())
;
BeanReplicator beanReplicator = new BeanReplicator(transformer);
return beanReplicator.replicateBean(inputBean, OutputBean.class);
}
}
// ==================================
// File MyDetailedPropertyFilter.java
// ==================================
import java.lang.reflect.Method;
import java.util.Date;
import javax.xml.datatype.XMLGregorianCalendar;
import net.sf.beanlib.provider.JavaBeanDetailedPropertyFilter;
public class MyDetailedPropertyFilter extends JavaBeanDetailedPropertyFilter
{
@Override public boolean propagate(
String propertyName,
Object fromBean,
Method readerMethod,
Object toBean,
Method setterMethod)
{
Class<?> returnType = readerMethod.getReturnType();
Class<?> paramType = setterMethod.getParameterTypes()[0];
// allow cross types propagation from GregorianCalendar to Date via custom transformer
return XMLGregorianCalendar.class.isAssignableFrom(returnType) && Date.class.isAssignableFrom(paramType)
|| paramType.isAssignableFrom(returnType);
public class MyDetailedPropertyFilter implements DetailedPropertyFilter
But you get the idea.
h