/** * Creates an instance of BeanDescriptor based on the passed arguments. Subclasses can override * this method to create their own BeanDescriptors. * * @param forClass * @param ofType * @param creator * @param accessors * @param mutators * @return a instance */ protected <T> BeanDescriptor<T> create(Class<T> forClass, Type ofType, BeanCreator creator, List<PropertyAccessor> accessors, Map<String, PropertyMutator> mutators, Genson genson) { return new BeanDescriptor<T>(forClass, getRawClass(ofType), accessors, mutators, creator, genson.failOnMissingProperty()); }
public T deserialize(ObjectReader reader, Context ctx) { T bean = null; // optimization for default ctr if (_noArgCtr) { bean = ofClass.cast(creator.create()); deserialize(bean, reader, ctx); } else { if (creator == null) throw new JsonBindingException("No constructor has been found for type " + ofClass); bean = _deserWithCtrArgs(reader, ctx); } return bean; }
private JsonBindingException missingPropertyException(String name) { return new JsonBindingException("No matching property in " + getOfClass() + " for key " + name); } }
reader.skipValue(); } else if (failOnMissingProperty) throw missingPropertyException(propName); else reader.skipValue(); if (foundCtrParameters < creator.parameters.size()) updateWithDefaultValues(creatorArgs, ctx.genson);
/** * Deserializes the stream in the existing object. Note however that this works only for Pojos * and doesn't handle nested objects (will be overridden by the values from the stream). * * @return the object enriched with the properties from the stream. */ public <T> T deserializeInto(ObjectReader reader, T object, Context ctx) { BeanDescriptor<T> bd = (BeanDescriptor<T>) getBeanDescriptorProvider().provide(object.getClass(), this); bd.deserialize(object, reader, ctx); return object; }
public void deserialize(T into, ObjectReader reader, Context ctx) { reader.beginObject(); RuntimePropertyFilter runtimePropertyFilter = ctx.genson.runtimePropertyFilter(); for (; reader.hasNext(); ) { reader.next(); String propName = reader.name(); PropertyMutator mutator = mutableProperties.get(propName); if (mutator != null) { if (runtimePropertyFilter.shouldInclude(mutator, ctx)) { mutator.deserialize(into, reader, ctx); } else { reader.skipValue(); } } else if (failOnMissingProperty) throw missingPropertyException(propName); else reader.skipValue(); } reader.endObject(); }
public void serialize(T obj, ObjectWriter writer, Context ctx) throws Exception { boolean handled = false; List<Class<? extends BeanView<?>>> views = ctx.views(); if (views != null && views.size() > 0) { Class<? extends BeanView<T>> viewClass = findViewFor(type, views); if (viewClass != null) { Type viewForType = TypeUtil.expandType(BeanView.class.getTypeParameters()[0], viewClass); @SuppressWarnings("unchecked") Class<T> viewForClass = (Class<T>) TypeUtil.getRawClass(viewForType); BeanDescriptor<T> descriptor = provider .provide(viewForClass, viewClass, ctx.genson); descriptor.serialize(obj, writer, ctx); handled = true; } } if (!handled) wrapped.serialize(obj, writer, ctx); }
reader.skipValue(); } else if (failOnMissingProperty) throw missingPropertyException(propName); else reader.skipValue(); if (foundCtrParameters < creator.parameters.size()) updateWithDefaultValues(creatorArgs, ctx.genson);
/** * Deserializes the stream in the existing object. Note however that this works only for Pojos * and doesn't handle nested objects (will be overridden by the values from the stream). * * @return the object enriched with the properties from the stream. */ public <T> T deserializeInto(ObjectReader reader, T object, Context ctx) { BeanDescriptor<T> bd = (BeanDescriptor<T>) getBeanDescriptorProvider().provide(object.getClass(), this); bd.deserialize(object, reader, ctx); return object; }
public void deserialize(T into, ObjectReader reader, Context ctx) { reader.beginObject(); RuntimePropertyFilter runtimePropertyFilter = ctx.genson.runtimePropertyFilter(); for (; reader.hasNext(); ) { reader.next(); String propName = reader.name(); PropertyMutator mutator = mutableProperties.get(propName); if (mutator != null) { if (runtimePropertyFilter.shouldInclude(mutator, ctx)) { mutator.deserialize(into, reader, ctx); } else { reader.skipValue(); } } else if (failOnMissingProperty) throw missingPropertyException(propName); else reader.skipValue(); } reader.endObject(); }
public void serialize(T obj, ObjectWriter writer, Context ctx) throws Exception { boolean handled = false; List<Class<? extends BeanView<?>>> views = ctx.views(); if (views != null && views.size() > 0) { Class<? extends BeanView<T>> viewClass = findViewFor(type, views); if (viewClass != null) { Type viewForType = TypeUtil.expandType(BeanView.class.getTypeParameters()[0], viewClass); @SuppressWarnings("unchecked") Class<T> viewForClass = (Class<T>) TypeUtil.getRawClass(viewForType); BeanDescriptor<T> descriptor = provider .provide(viewForClass, viewClass, ctx.genson); descriptor.serialize(obj, writer, ctx); handled = true; } } if (!handled) wrapped.serialize(obj, writer, ctx); }
public T deserialize(ObjectReader reader, Context ctx) { T bean = null; // optimization for default ctr if (_noArgCtr) { bean = ofClass.cast(creator.create()); deserialize(bean, reader, ctx); } else { if (creator == null) throw new JsonBindingException("No constructor has been found for type " + ofClass); bean = _deserWithCtrArgs(reader, ctx); } return bean; }
public T deserialize(ObjectReader reader, Context ctx) throws Exception { if (ctx.hasViews()) { Class<? extends BeanView<T>> viewClass = findViewFor(type, ctx.views()); if (viewClass != null) { Type viewForType = TypeUtil.expandType(BeanView.class.getTypeParameters()[0], viewClass); @SuppressWarnings("unchecked") Class<T> viewForClass = (Class<T>) TypeUtil.getRawClass(viewForType); BeanDescriptor<T> descriptor = provider .provide(viewForClass, viewClass, ctx.genson); return descriptor.deserialize(reader, ctx); } } return wrapped.deserialize(reader, ctx); } }
private JsonBindingException missingPropertyException(String name) { return new JsonBindingException("No matching property in " + getOfClass() + " for key " + name); } }
/** * Creates an instance of BeanDescriptor based on the passed arguments. Subclasses can override * this method to create their own BeanDescriptors. * * @param forClass * @param ofType * @param creator * @param accessors * @param mutators * @return a instance */ protected <T> BeanDescriptor<T> create(Class<T> forClass, Type ofType, BeanCreator creator, List<PropertyAccessor> accessors, Map<String, PropertyMutator> mutators, Genson genson) { return new BeanDescriptor<T>(forClass, getRawClass(ofType), accessors, mutators, creator, genson.failOnMissingProperty()); }
public T deserialize(ObjectReader reader, Context ctx) throws Exception { if (ctx.hasViews()) { Class<? extends BeanView<T>> viewClass = findViewFor(type, ctx.views()); if (viewClass != null) { Type viewForType = TypeUtil.expandType(BeanView.class.getTypeParameters()[0], viewClass); @SuppressWarnings("unchecked") Class<T> viewForClass = (Class<T>) TypeUtil.getRawClass(viewForType); BeanDescriptor<T> descriptor = provider .provide(viewForClass, viewClass, ctx.genson); return descriptor.deserialize(reader, ctx); } } return wrapped.deserialize(reader, ctx); } }
if (!ofClass.isAssignableFrom(descriptor.getOfClass())) throw new ClassCastException("Actual implementation of BeanDescriptorProvider " + getClass() + " seems to do something wrong. Expected BeanDescriptor for type " + ofClass + " but provided BeanDescriptor for type " + descriptor.getOfClass()); return descriptor;
if (!ofClass.isAssignableFrom(descriptor.getOfClass())) throw new ClassCastException("Actual implementation of BeanDescriptorProvider " + getClass() + " seems to do something wrong. Expected BeanDescriptor for type " + ofClass + " but provided BeanDescriptor for type " + descriptor.getOfClass()); return descriptor;