public JsonDeserializer<?> findDefaultDeserializer(DeserializationContext paramDeserializationContext, JavaType paramJavaType, BeanDescription paramBeanDescription) { Class localClass = paramJavaType.getRawClass(); String str = localClass.getName(); if ((localClass.isPrimitive()) || (str.startsWith("java."))) { if (localClass == CLASS_OBJECT) return UntypedObjectDeserializer.instance; if ((localClass == CLASS_STRING) || (localClass == CLASS_CHAR_BUFFER)) return StringDeserializer.instance; if (localClass == CLASS_ITERABLE) { TypeFactory localTypeFactory = paramDeserializationContext.getTypeFactory(); JavaType localJavaType; if (paramJavaType.containedTypeCount() > 0) localJavaType = paramJavaType.containedType(0); else localJavaType = TypeFactory.unknownType(); return createCollectionDeserializer(paramDeserializationContext, localTypeFactory.constructCollectionType(Collection.class, localJavaType), paramBeanDescription); } JsonDeserializer localJsonDeserializer1 = NumberDeserializers.find(localClass, str); Object localObject = localJsonDeserializer1; if (localJsonDeserializer1 == null) { JsonDeserializer localJsonDeserializer2 = DateDeserializers.find(localClass, str); localObject = localJsonDeserializer2; if (localJsonDeserializer2 == null) localObject = JdkDeserializers.find(localClass, str); } return localObject; } if (str.startsWith("com.fasterxml.")) return JacksonDeserializers.find(localClass); return null; }
/** * Constructs and initializes a JsonService with an {@link ObjectService}. * * @param objectService */ public DefaultJsonService(final ObjectService objectService) { idToObjDeserializer = new UntypedObjectDeserializer(null, null) { @Override public Object deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException { final Object obj = super.deserialize(p, ctxt); if (!(obj instanceof String && ((String) obj).startsWith("object:"))) return obj; final String id = (String) obj; if (!objectService.contains(id)) { throw new JsonMappingException(p, "Object does not exist"); } final ObjectInfo info = objectService.find(id); info.updateLastUsed(); return info.getObject(); } }; final JsonSerializer<Object> objToIdSerializer = new JsonSerializer<Object>() { @Override public void serialize(Object value, JsonGenerator gen, SerializerProvider serializers) throws IOException, JsonProcessingException { gen.writeString(objectService.register(value, "DefaultJsonService")); } }; final SimpleModule objToIdModule = new SimpleModule(); objToIdModule.setSerializerModifier(new BeanSerializerModifier() { @Override public JsonSerializer<?> modifySerializer(SerializationConfig config, BeanDescription beanDesc, JsonSerializer<?> serializer) { if (Mixins.support(beanDesc.getBeanClass())) return serializer; // If the serialized class is unknown (i.e. serialized using the general // BeanSerializer) or should not be serialized (i.e. complicated class // implemented interfaces such as Iterable), would be serialized as an // ID. if (serializer instanceof BeanSerializer) return objToIdSerializer; if (notSerialized(beanDesc.getBeanClass())) return objToIdSerializer; return serializer; } }); objToIdMapper = new ObjectMapper(); objToIdMapper.registerModule(objToIdModule); // register Jackson MixIns to obtain better json output format for some // specific types Mixins.registerMixIns(objToIdMapper); }