package org.ovirt.engine.core.utils.serialization.json; import java.util.HashMap; import java.util.Map; import org.codehaus.jackson.annotate.JsonTypeInfo; import org.codehaus.jackson.map.jsontype.impl.ClassNameIdResolver; import org.codehaus.jackson.map.type.TypeFactory; import org.codehaus.jackson.type.JavaType; public class JsonCollectionIdResolver extends ClassNameIdResolver { private static Map<String, String> relacementIds = new HashMap<>(); static { relacementIds.put("java.util.Collections$SingletonSet", "java.util.HashSet"); relacementIds.put("java.util.Collections$SingletonList", "java.util.ArrayList"); relacementIds.put("java.util.Collections$UnmodifiableSet", "java.util.HashSet"); relacementIds.put("java.util.Collections$UnmodifiableList", "java.util.ArrayList"); } public JsonCollectionIdResolver() { this(null, null); } protected JsonCollectionIdResolver(JavaType baseType, TypeFactory typeFactory) { super(baseType, typeFactory); } @Override public String idFromValue(Object o) { String id = super.idFromValue(o); // return a replacement id if it exists return relacementIds.getOrDefault(id, id); } @Override public String idFromValueAndType(Object o, Class<?> aClass) { String id = super.idFromValueAndType(o, aClass); // return a replacement id if it exists return relacementIds.getOrDefault(id, id); } @Override public JsonTypeInfo.Id getMechanism() { return JsonTypeInfo.Id.CLASS; } }