package com.fasterxml.jackson.databind.ser.std; import com.fasterxml.jackson.core.JsonGenerationException; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.BeanProperty; import com.fasterxml.jackson.databind.JavaType; import com.fasterxml.jackson.databind.JsonMappingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.JsonSerializer; import com.fasterxml.jackson.databind.MapperFeature; import com.fasterxml.jackson.databind.SerializerProvider; import com.fasterxml.jackson.databind.annotation.JacksonStdImpl; import com.fasterxml.jackson.databind.jsonFormatVisitors.JsonFormatVisitable; import com.fasterxml.jackson.databind.jsonFormatVisitors.JsonFormatVisitorWrapper; import com.fasterxml.jackson.databind.jsonschema.JsonSchema; import com.fasterxml.jackson.databind.jsonschema.SchemaAware; import com.fasterxml.jackson.databind.jsontype.TypeSerializer; import com.fasterxml.jackson.databind.ser.ContextualSerializer; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.lang.reflect.Type; @JacksonStdImpl public class JsonValueSerializer extends StdSerializer<Object> implements ContextualSerializer, JsonFormatVisitable, SchemaAware { protected final Method _accessorMethod; protected final boolean _forceTypeInformation; protected final BeanProperty _property; protected final JsonSerializer<Object> _valueSerializer; public JsonValueSerializer(Method method, JsonSerializer<Object> jsonSerializer) { super(Object.class); this._accessorMethod = method; this._valueSerializer = jsonSerializer; this._property = null; this._forceTypeInformation = true; } public JsonValueSerializer(JsonValueSerializer jsonValueSerializer, BeanProperty beanProperty, JsonSerializer<?> jsonSerializer, boolean z) { super(_notNullClass(jsonValueSerializer.handledType())); this._accessorMethod = jsonValueSerializer._accessorMethod; this._valueSerializer = jsonSerializer; this._property = beanProperty; this._forceTypeInformation = z; } private static final Class<Object> _notNullClass(Class<?> cls) { return cls == null ? Object.class : cls; } public JsonValueSerializer withResolved(BeanProperty beanProperty, JsonSerializer<?> jsonSerializer, boolean z) { if (this._property == beanProperty && this._valueSerializer == jsonSerializer && z == this._forceTypeInformation) { return this; } return new JsonValueSerializer(this, beanProperty, jsonSerializer, z); } @Override // com.fasterxml.jackson.databind.ser.ContextualSerializer public JsonSerializer<?> createContextual(SerializerProvider serializerProvider, BeanProperty beanProperty) throws JsonMappingException { JsonSerializer<?> jsonSerializer = this._valueSerializer; if (jsonSerializer != null) { return withResolved(beanProperty, serializerProvider.handlePrimaryContextualization(jsonSerializer, beanProperty), this._forceTypeInformation); } if (!serializerProvider.isEnabled(MapperFeature.USE_STATIC_TYPING) && !Modifier.isFinal(this._accessorMethod.getReturnType().getModifiers())) { return this; } JavaType constructType = serializerProvider.constructType(this._accessorMethod.getGenericReturnType()); JsonSerializer<Object> findPrimaryPropertySerializer = serializerProvider.findPrimaryPropertySerializer(constructType, this._property); return withResolved(beanProperty, findPrimaryPropertySerializer, isNaturalTypeWithStdHandling(constructType.getRawClass(), findPrimaryPropertySerializer)); } @Override // com.fasterxml.jackson.databind.JsonSerializer, com.fasterxml.jackson.databind.ser.std.StdSerializer public void serialize(Object obj, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonGenerationException { try { Object invoke = this._accessorMethod.invoke(obj, new Object[0]); if (invoke == null) { serializerProvider.defaultSerializeNull(jsonGenerator); return; } JsonSerializer<Object> jsonSerializer = this._valueSerializer; if (jsonSerializer == null) { jsonSerializer = serializerProvider.findTypedValueSerializer(invoke.getClass(), true, this._property); } jsonSerializer.serialize(invoke, jsonGenerator, serializerProvider); } catch (IOException e) { throw e; } catch (Exception e2) { e = e2; while ((e instanceof InvocationTargetException) && e.getCause() != null) { e = e.getCause(); } if (e instanceof Error) { throw ((Error) e); } throw JsonMappingException.wrapWithPath(e, obj, this._accessorMethod.getName() + "()"); } } @Override // com.fasterxml.jackson.databind.JsonSerializer public void serializeWithType(Object obj, JsonGenerator jsonGenerator, SerializerProvider serializerProvider, TypeSerializer typeSerializer) throws IOException, JsonProcessingException { try { Object invoke = this._accessorMethod.invoke(obj, new Object[0]); if (invoke == null) { serializerProvider.defaultSerializeNull(jsonGenerator); return; } JsonSerializer<Object> jsonSerializer = this._valueSerializer; if (jsonSerializer == null) { jsonSerializer = serializerProvider.findValueSerializer(invoke.getClass(), this._property); } else if (this._forceTypeInformation) { typeSerializer.writeTypePrefixForScalar(obj, jsonGenerator); jsonSerializer.serialize(invoke, jsonGenerator, serializerProvider); typeSerializer.writeTypeSuffixForScalar(obj, jsonGenerator); return; } jsonSerializer.serializeWithType(invoke, jsonGenerator, serializerProvider, typeSerializer); } catch (IOException e) { throw e; } catch (Exception e2) { e = e2; while ((e instanceof InvocationTargetException) && e.getCause() != null) { e = e.getCause(); } if (e instanceof Error) { throw ((Error) e); } throw JsonMappingException.wrapWithPath(e, obj, this._accessorMethod.getName() + "()"); } } @Override // com.fasterxml.jackson.databind.jsonschema.SchemaAware, com.fasterxml.jackson.databind.ser.std.StdSerializer public JsonNode getSchema(SerializerProvider serializerProvider, Type type) throws JsonMappingException { JsonSerializer<Object> jsonSerializer = this._valueSerializer; if (jsonSerializer instanceof SchemaAware) { return ((SchemaAware) jsonSerializer).getSchema(serializerProvider, null); } return JsonSchema.getDefaultSchemaNode(); } @Override // com.fasterxml.jackson.databind.jsonFormatVisitors.JsonFormatVisitable, com.fasterxml.jackson.databind.JsonSerializer, com.fasterxml.jackson.databind.ser.std.StdSerializer public void acceptJsonFormatVisitor(JsonFormatVisitorWrapper jsonFormatVisitorWrapper, JavaType javaType) throws JsonMappingException { JsonSerializer<Object> jsonSerializer = this._valueSerializer; if (jsonSerializer == null) { if (javaType == null) { BeanProperty beanProperty = this._property; if (beanProperty != null) { javaType = beanProperty.getType(); } if (javaType == null) { javaType = jsonFormatVisitorWrapper.getProvider().constructType(this._accessorMethod.getReturnType()); } } jsonSerializer = jsonFormatVisitorWrapper.getProvider().findTypedValueSerializer(javaType, false, this._property); if (jsonSerializer == null) { jsonFormatVisitorWrapper.expectAnyFormat(javaType); return; } } jsonSerializer.acceptJsonFormatVisitor(jsonFormatVisitorWrapper, null); } /* access modifiers changed from: protected */ public boolean isNaturalTypeWithStdHandling(Class<?> cls, JsonSerializer<?> jsonSerializer) { if (cls.isPrimitive()) { if (!(cls == Integer.TYPE || cls == Boolean.TYPE || cls == Double.TYPE)) { return false; } } else if (!(cls == String.class || cls == Integer.class || cls == Boolean.class || cls == Double.class)) { return false; } return isDefaultSerializer(jsonSerializer); } public String toString() { return "(@JsonValue serializer for method " + this._accessorMethod.getDeclaringClass() + "#" + this._accessorMethod.getName() + ")"; } }