shade.com.alibaba.fastjson2.reader.ObjectReaderImplValue Maven / Gradle / Ivy
package com.alibaba.fastjson2.reader;
import com.alibaba.fastjson2.JSONException;
import com.alibaba.fastjson2.JSONReader;
import com.alibaba.fastjson2.schema.JSONSchema;
import java.lang.reflect.Array;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.lang.reflect.Type;
import java.util.function.Function;
public class ObjectReaderImplValue
implements ObjectReader {
final Type valueType;
final Class valueClass;
final long features;
final Constructor constructor;
final Method factoryMethod;
final Function function;
final JSONSchema schema;
final Object emptyVariantArgs;
ObjectReader valueReader;
public ObjectReaderImplValue(
Class objectClass,
Type valueType,
Class valueClass,
long features,
String format,
Object defaultValue,
JSONSchema schema,
Constructor constructor,
Method factoryMethod,
Function function
) {
this.valueType = valueType;
this.valueClass = valueClass;
this.features = features;
this.schema = schema;
this.constructor = constructor;
this.factoryMethod = factoryMethod;
this.function = function;
if (factoryMethod != null && factoryMethod.getParameterCount() == 2) {
Class> varArgType = factoryMethod.getParameterTypes()[1].getComponentType();
emptyVariantArgs = Array.newInstance(varArgType, 0);
} else {
emptyVariantArgs = null;
}
}
@Override
public T readJSONBObject(JSONReader jsonReader, Type fieldType, Object fieldName, long features) {
return readObject(jsonReader, fieldType, fieldName, features);
}
@Override
public T readObject(JSONReader jsonReader, Type fieldType, Object fieldName, long features) {
if (valueReader == null) {
valueReader = jsonReader.getObjectReader(valueType);
}
I value = (I) valueReader.readObject(jsonReader, fieldType, fieldName, features | this.features);
if (value == null) {
return null;
}
if (schema != null) {
schema.validate(value);
}
T object;
if (function != null) {
try {
object = function.apply(value);
} catch (Exception ex) {
throw new JSONException(jsonReader.info("create object error"), ex);
}
} else if (constructor != null) {
try {
object = constructor.newInstance(value);
} catch (Exception ex) {
throw new JSONException(jsonReader.info("create object error"), ex);
}
} else if (factoryMethod != null) {
try {
if (emptyVariantArgs != null) {
object = (T) factoryMethod.invoke(null, value, emptyVariantArgs);
} else {
object = (T) factoryMethod.invoke(null, value);
}
} catch (Exception ex) {
throw new JSONException(jsonReader.info("create object error"), ex);
}
} else {
throw new JSONException(jsonReader.info("create object error"));
}
return object;
}
public static ObjectReaderImplValue of(Class objectClass, Class valueClass, Method method) {
return new ObjectReaderImplValue(objectClass, valueClass, valueClass, 0L, null, null, null, null, method, null);
}
public static ObjectReaderImplValue of(Class objectClass, Class valueClass, Function function) {
return new ObjectReaderImplValue(objectClass, valueClass, valueClass, 0L, null, null, null, null, null, function);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy