@Override
@SuppressWarnings({ "rawtypes", "unchecked" })
public Registration writeClass(Output output, Class type) {
Class<?> writeType = type;
if (null != type) {
if (hibernateUtil.isPersistentList(type)) {
writeType = ArrayList.class;
} else if (hibernateUtil.isPersistentSet(type)) {
writeType = HashSet.class;
} else if (hibernateUtil.isPersistentMap(type)) {
writeType = HashMap.class;
} else if (hibernateUtil.isProxy(writeType)) {
writeType = writeType.getSuperclass();
Registration registration = super.writeClass(output, writeType);
Registration returnRegistration = hibernateProxiesRegistrations.get(writeType);
if (null == returnRegistration) {
returnRegistration = new Registration(registration.getType(), new HibernateProxySerializer(hibernateUtil, registration.getSerializer()), registration.getId());
hibernateProxiesRegistrations.put(writeType, returnRegistration);
}
return returnRegistration;
}
}
return super.writeClass(output, writeType);
}
}