protected ObjectReader(ObjectMapper mapper, DeserializationConfig config, JavaType valueType, Object valueToUpdate, FormatSchema schema, InjectableValues injectableValues) { _config = config; _rootDeserializers = mapper._rootDeserializers; _provider = mapper._deserializerProvider; _jsonFactory = mapper._jsonFactory; _valueType = valueType; _valueToUpdate = valueToUpdate; if (valueToUpdate != null && valueType.isArrayType()) { throw new IllegalArgumentException("Can not update an array value"); } _schema = schema; _injectableValues = injectableValues; _unwrapRoot = config.isEnabled(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE); }
/** * Copy constructor used for building variations. */ protected ObjectReader(ObjectReader base, DeserializationConfig config, JavaType valueType, Object valueToUpdate, FormatSchema schema, InjectableValues injectableValues) { _config = config; _rootDeserializers = base._rootDeserializers; _provider = base._provider; _jsonFactory = base._jsonFactory; _valueType = valueType; _valueToUpdate = valueToUpdate; if (valueToUpdate != null && valueType.isArrayType()) { throw new IllegalArgumentException("Can not update an array value"); } _schema = schema; _injectableValues = injectableValues; _unwrapRoot = config.isEnabled(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE); }
/** * Constructor used by {@link ObjectMapper} for initial instantiation */ protected BackportedObjectReader(ObjectMapper mapper, JavaType valueType, Object valueToUpdate) { _rootDeserializers = ReflectionUtils.getField(ROOT_DESERIALIZERS, mapper); _provider = mapper.getDeserializerProvider(); _jsonFactory = mapper.getJsonFactory(); // must make a copy at this point, to prevent further changes from trickling down _config = mapper.copyDeserializationConfig(); _valueType = valueType; _valueToUpdate = valueToUpdate; if (valueToUpdate != null && valueType.isArrayType()) { throw new IllegalArgumentException("Can not update an array value"); } }
/** * Helper method called to see if we need a comparator Object to check if values * of a container (Collection, array) property should be suppressed. * This is usually * * @param propertyName Name of property to handle * @param propertyType Declared type of values of the property to handle * @return Object whose <code>equals()</code> method is called to check if given value * is "empty Collection" value to suppress; or null if no such check should be done * (declared type not Collection or array) * * @since 1.9 */ protected Object getContainerValueChecker(String propertyName, JavaType propertyType) { // currently we will only check for certain kinds of empty containers: if (!_config.isEnabled(SerializationConfig.Feature.WRITE_EMPTY_JSON_ARRAYS)) { if (propertyType.isArrayType()) { return new EmptyArrayChecker(); } if (Collection.class.isAssignableFrom(propertyType.getRawClass())) { return new EmptyCollectionChecker(); } } return null; }
return new EmptyStringChecker(); if (propertyType.isArrayType()) { return new EmptyArrayChecker();
/** * Method called to check if the default type handler should be * used for given type. * Note: "natural types" (String, Boolean, Integer, Double) will never * use typing; that is both due to them being concrete and final, * and since actual serializers and deserializers will also ignore any * attempts to enforce typing. */ public boolean useForType(JavaType t) { switch (_appliesFor) { case NON_CONCRETE_AND_ARRAYS: while (t.isArrayType()) { t = t.getContentType(); } // fall through case OBJECT_AND_NON_CONCRETE: return (t.getRawClass() == Object.class) || !t.isConcrete(); case NON_FINAL: while (t.isArrayType()) { t = t.getContentType(); } return !t.isFinal(); // includes Object.class default: //case JAVA_LANG_OBJECT: return (t.getRawClass() == Object.class); } } }
@Override public JsonNode getSchema(SerializerProvider provider, Type typeHint) throws JsonMappingException { ObjectNode o = createSchemaNode("array", true); if (typeHint != null) { JavaType javaType = provider.constructType(typeHint); if (javaType.isArrayType()) { Class<?> componentType = ((ArrayType) javaType).getContentType().getRawClass(); // 15-Oct-2010, tatu: We can't serialize plain Object.class; but what should it produce here? Untyped? if (componentType == Object.class) { o.put("items", JsonSchema.getDefaultSchemaNode()); } else { JsonSerializer<Object> ser = provider.findValueSerializer(componentType, _property); JsonNode schemaNode = (ser instanceof SchemaAware) ? ((SchemaAware) ser).getSchema(provider, null) : JsonSchema.getDefaultSchemaNode(); o.put("items", schemaNode); } } } return o; }
if (type.isArrayType()) { return (JsonDeserializer<Object>)_factory.createArrayDeserializer(config, this, (ArrayType) type, property);
elementTypeSerializer, elementValueSerializer); if (type.isArrayType()) { return buildArraySerializer(config, (ArrayType) type, beanDesc, property, staticTyping, elementTypeSerializer, elementValueSerializer);
protected ObjectReader(ObjectMapper mapper, DeserializationConfig config, JavaType valueType, Object valueToUpdate, FormatSchema schema, InjectableValues injectableValues) { _config = config; _rootDeserializers = mapper._rootDeserializers; _provider = mapper._deserializerProvider; _jsonFactory = mapper._jsonFactory; _valueType = valueType; _valueToUpdate = valueToUpdate; if (valueToUpdate != null && valueType.isArrayType()) { throw new IllegalArgumentException("Can not update an array value"); } _schema = schema; _injectableValues = injectableValues; _unwrapRoot = config.isEnabled(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE); }
/** * Copy constructor used for building variations. */ protected ObjectReader(ObjectReader base, DeserializationConfig config, JavaType valueType, Object valueToUpdate, FormatSchema schema, InjectableValues injectableValues) { _config = config; _rootDeserializers = base._rootDeserializers; _provider = base._provider; _jsonFactory = base._jsonFactory; _valueType = valueType; _valueToUpdate = valueToUpdate; if (valueToUpdate != null && valueType.isArrayType()) { throw new IllegalArgumentException("Can not update an array value"); } _schema = schema; _injectableValues = injectableValues; _unwrapRoot = config.isEnabled(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE); }
/** * Helper method called to see if we need a comparator Object to check if values * of a container (Collection, array) property should be suppressed. * This is usually * * @param propertyName Name of property to handle * @param propertyType Declared type of values of the property to handle * @return Object whose <code>equals()</code> method is called to check if given value * is "empty Collection" value to suppress; or null if no such check should be done * (declared type not Collection or array) * * @since 1.9 */ protected Object getContainerValueChecker(String propertyName, JavaType propertyType) { // currently we will only check for certain kinds of empty containers: if (!_config.isEnabled(SerializationConfig.Feature.WRITE_EMPTY_JSON_ARRAYS)) { if (propertyType.isArrayType()) { return new EmptyArrayChecker(); } if (Collection.class.isAssignableFrom(propertyType.getRawClass())) { return new EmptyCollectionChecker(); } } return null; }
/** * Method called to check if the default type handler should be * used for given type. * Note: "natural types" (String, Boolean, Integer, Double) will never * use typing; that is both due to them being concrete and final, * and since actual serializers and deserializers will also ignore any * attempts to enforce typing. */ public boolean useForType(JavaType t) { switch (_appliesFor) { case NON_CONCRETE_AND_ARRAYS: while (t.isArrayType()) { t = t.getContentType(); } // fall through case OBJECT_AND_NON_CONCRETE: return (t.getRawClass() == Object.class) || !t.isConcrete(); case NON_FINAL: while (t.isArrayType()) { t = t.getContentType(); } return !t.isFinal(); // includes Object.class default: //case JAVA_LANG_OBJECT: return (t.getRawClass() == Object.class); } } }
return new EmptyStringChecker(); if (propertyType.isArrayType()) { return new EmptyArrayChecker();
@Override public JsonNode getSchema(SerializerProvider provider, Type typeHint) throws JsonMappingException { ObjectNode o = createSchemaNode("array", true); if (typeHint != null) { JavaType javaType = provider.constructType(typeHint); if (javaType.isArrayType()) { Class<?> componentType = ((ArrayType) javaType).getContentType().getRawClass(); // 15-Oct-2010, tatu: We can't serialize plain Object.class; but what should it produce here? Untyped? if (componentType == Object.class) { o.put("items", JsonSchema.getDefaultSchemaNode()); } else { JsonSerializer<Object> ser = provider.findValueSerializer(componentType, _property); JsonNode schemaNode = (ser instanceof SchemaAware) ? ((SchemaAware) ser).getSchema(provider, null) : JsonSchema.getDefaultSchemaNode(); o.put("items", schemaNode); } } } return o; }
protected ObjectReader(ObjectMapper mapper, DeserializationConfig config, JavaType valueType, Object valueToUpdate, FormatSchema schema) { _config = config; _rootDeserializers = mapper._rootDeserializers; _provider = mapper._deserializerProvider; _jsonFactory = mapper._jsonFactory; _valueType = valueType; _valueToUpdate = valueToUpdate; if (valueToUpdate != null && valueType.isArrayType()) { throw new IllegalArgumentException("Can not update an array value"); } _schema = schema; }
if (type.isArrayType()) { return (JsonDeserializer<Object>)_factory.createArrayDeserializer(config, this, (ArrayType) type, property);
elementTypeSerializer, elementValueSerializer); if (type.isArrayType()) { return buildArraySerializer(config, (ArrayType) type, beanDesc, property, staticTyping, elementTypeSerializer, elementValueSerializer);
@Override public boolean useForType(JavaType t) { if (t.getRawClass() == Object.class) { return true; } if (t.getRawClass().getName().startsWith("java.")) { return false; } if (t.isArrayType()) { return false; } return super.useForType(t); }
/** * Constructor used by {@link ObjectMapper} for initial instantiation */ protected BackportedObjectReader(ObjectMapper mapper, JavaType valueType, Object valueToUpdate) { _rootDeserializers = ReflectionUtils.getField(ROOT_DESERIALIZERS, mapper); _provider = mapper.getDeserializerProvider(); _jsonFactory = mapper.getJsonFactory(); // must make a copy at this point, to prevent further changes from trickling down _config = mapper.copyDeserializationConfig(); _valueType = valueType; _valueToUpdate = valueToUpdate; if (valueToUpdate != null && valueType.isArrayType()) { throw new IllegalArgumentException("Can not update an array value"); } }