package fr.openwide.core.rest.jersey.util.jackson.serializer; import org.hibernate.proxy.HibernateProxy; import com.fasterxml.jackson.databind.JavaType; import com.fasterxml.jackson.databind.JsonMappingException; import com.fasterxml.jackson.databind.JsonSerializer; import com.fasterxml.jackson.databind.SerializerProvider; import com.fasterxml.jackson.databind.cfg.SerializerFactoryConfig; import com.fasterxml.jackson.databind.ser.BeanSerializerFactory; import com.fasterxml.jackson.databind.ser.SerializerFactory; public class HibernateBeanSerializerFactory extends BeanSerializerFactory { private static final long serialVersionUID = -7256206834065593118L; public HibernateBeanSerializerFactory() { super(null); } protected HibernateBeanSerializerFactory(SerializerFactoryConfig config) { super(config); } @Override public SerializerFactory withConfig(SerializerFactoryConfig config) { return new HibernateBeanSerializerFactory(config); } @Override public JsonSerializer<Object> createSerializer(SerializerProvider prov, JavaType origType) throws JsonMappingException { Class<?> clazz = origType.getRawClass(); // as we only have the class information, we can't use Hibernate.getClass(object) if (HibernateProxy.class.isAssignableFrom(clazz)) { origType = prov.constructType(clazz.getSuperclass()); } return super.createSerializer(prov, origType); } }