/** * {@inheritDoc} */ @Override @SuppressWarnings({ "rawtypes", "unchecked" }) public Registration writeClass(Output output, Class type) { Class<?> writeType = type; if (null != type) { if (hibernateUtil.isPersistentList(type)) { writeType = ArrayList.class; // NOPMD } else if (hibernateUtil.isPersistentSet(type)) { writeType = HashSet.class; // NOPMD } else if (hibernateUtil.isPersistentMap(type)) { writeType = HashMap.class; // NOPMD } 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); } }