public GuiceBeanConverter(Mapper mapper, Injector injector) { this(mapper, new GuiceBeanProvider(injector)); }
public boolean propertyDefinedInClass(String name, Class<?> type) { return getProperty(name, type) != null; }
public void marshal(final Object source, final HierarchicalStreamWriter writer, final MarshallingContext context) { beanProvider.visitSerializableProperties(source, new GuiceBeanProvider.Visitor() { public boolean shouldVisit(String name, Class<?> definedIn) {
public Object unmarshal(final HierarchicalStreamReader reader, final UnmarshallingContext context) { final Object result = instantiateNewInstance(context); while (reader.hasMoreChildren()) { reader.moveDown(); String propertyName = mapper.realMember(result.getClass(), reader .getNodeName()); boolean propertyExistsInClass = beanProvider.propertyDefinedInClass( propertyName, result.getClass()); if (propertyExistsInClass) { Class<?> type = determineType(reader, result, propertyName); Object value = context.convertAnother(result, type); beanProvider.writeProperty(result, propertyName, value); } else if (mapper.shouldSerializeMember(result.getClass(), propertyName)) { throw new ConversionException("Property '" + propertyName + "' not defined in class " + result.getClass().getName()); } reader.moveUp(); } return result; }
private Object instantiateNewInstance(UnmarshallingContext context) { Object result = context.currentObject(); if (result == null) { result = beanProvider.newInstance(context.getRequiredType()); } return result; }
private Class<?> determineType(HierarchicalStreamReader reader, Object result, String fieldName) { final String classAttributeName = mapper.attributeForAlias("class"); String classAttribute = reader.getAttribute(classAttributeName); if (classAttribute != null) { return mapper.realClass(classAttribute); } else { return mapper.defaultImplementationOf(beanProvider.getPropertyType( result, fieldName)); } } }
public void visitSerializableProperties(Object object, Visitor visitor) { for (PropertyDescriptor property : getSerializableProperties(object)) { try { Method readMethod = property.getReadMethod(); String name = property.getName(); Class<?> definedIn = readMethod.getDeclaringClass(); if (visitor.shouldVisit(name, definedIn)) { Object value = readMethod.invoke(object); visitor.visit(name, property.getPropertyType(), definedIn, value); } } catch (IllegalArgumentException e) { throw new ObjectAccessException("Could not get property " + object.getClass() + '.' + property.getName(), e); } catch (IllegalAccessException e) { throw new ObjectAccessException("Could not get property " + object.getClass() + '.' + property.getName(), e); } catch (InvocationTargetException e) { throw new ObjectAccessException("Could not get property " + object.getClass() + '.' + property.getName(), e); } } }
private List<PropertyDescriptor> getSerializableProperties(Object object) { Map<String, PropertyDescriptor> nameMap = getNameMap(object.getClass()); Set<String> names = (propertyNameComparator == null) ? nameMap.keySet() : ImmutableSortedSet.orderedBy(propertyNameComparator).addAll(nameMap.keySet()).build(); List<PropertyDescriptor> result = Lists.newArrayListWithCapacity(nameMap.size()); for (final String name : names) { final PropertyDescriptor descriptor = nameMap.get(name); if (canStreamProperty(descriptor)) { result.add(descriptor); } } return result; }
private List<PropertyDescriptor> getSerializableProperties(Object object) { Map<String, PropertyDescriptor> nameMap = propertyNameCache.getUnchecked(object.getClass()); Set<String> names = (propertyNameComparator == null) ? nameMap.keySet() : ImmutableSortedSet.orderedBy(propertyNameComparator).addAll(nameMap.keySet()).build(); List<PropertyDescriptor> result = Lists.newArrayListWithCapacity(nameMap.size()); for (final String name : names) { final PropertyDescriptor descriptor = nameMap.get(name); if (canStreamProperty(descriptor)) { result.add(descriptor); } } return result; }
private PropertyDescriptor getProperty(String name, Class<?> type) { return getNameMap(type).get(name); }
public Object unmarshal(final HierarchicalStreamReader reader, final UnmarshallingContext context) { final Object result = instantiateNewInstance(context); while (reader.hasMoreChildren()) { reader.moveDown(); String propertyName = mapper.realMember(result.getClass(), reader .getNodeName()); boolean propertyExistsInClass = beanProvider.propertyDefinedInClass( propertyName, result.getClass()); if (propertyExistsInClass) { Class<?> type = determineType(reader, result, propertyName); Object value = context.convertAnother(result, type); beanProvider.writeProperty(result, propertyName, value); } else if (mapper.shouldSerializeMember(result.getClass(), propertyName)) { throw new ConversionException("Property '" + propertyName + "' not defined in class " + result.getClass().getName()); } reader.moveUp(); } return result; }
private Object instantiateNewInstance(UnmarshallingContext context) { Object result = context.currentObject(); if (result == null) { result = beanProvider.newInstance(context.getRequiredType()); } return result; }
private Class<?> determineType(HierarchicalStreamReader reader, Object result, String fieldName) { final String classAttributeName = mapper.attributeForAlias("class"); String classAttribute = reader.getAttribute(classAttributeName); if (classAttribute != null) { return mapper.realClass(classAttribute); } else { return mapper.defaultImplementationOf(beanProvider.getPropertyType( result, fieldName)); } } }
public void visitSerializableProperties(Object object, Visitor visitor) { for (PropertyDescriptor property : getSerializableProperties(object)) { try { Method readMethod = property.getReadMethod(); String name = property.getName(); Class<?> definedIn = readMethod.getDeclaringClass(); if (visitor.shouldVisit(name, definedIn)) { Object value = readMethod.invoke(object); visitor.visit(name, property.getPropertyType(), definedIn, value); } } catch (IllegalArgumentException e) { throw new ObjectAccessException("Could not get property " + object.getClass() + '.' + property.getName(), e); } catch (IllegalAccessException e) { throw new ObjectAccessException("Could not get property " + object.getClass() + '.' + property.getName(), e); } catch (InvocationTargetException e) { throw new ObjectAccessException("Could not get property " + object.getClass() + '.' + property.getName(), e); } } }
private List<PropertyDescriptor> getSerializableProperties(Object object) { Map<String, PropertyDescriptor> nameMap = getNameMap(object.getClass()); Set<String> names = (propertyNameComparator == null) ? nameMap.keySet() : ImmutableSortedSet.orderedBy(propertyNameComparator).addAll(nameMap.keySet()).build(); List<PropertyDescriptor> result = Lists.newArrayListWithCapacity(nameMap.size()); for (final String name : names) { final PropertyDescriptor descriptor = nameMap.get(name); if (canStreamProperty(descriptor)) { result.add(descriptor); } } return result; }
private List<PropertyDescriptor> getSerializableProperties(Object object) { Map<String, PropertyDescriptor> nameMap = propertyNameCache.getUnchecked(object.getClass()); Set<String> names = (propertyNameComparator == null) ? nameMap.keySet() : ImmutableSortedSet.orderedBy(propertyNameComparator).addAll(nameMap.keySet()).build(); List<PropertyDescriptor> result = Lists.newArrayListWithCapacity(nameMap.size()); for (final String name : names) { final PropertyDescriptor descriptor = nameMap.get(name); if (canStreamProperty(descriptor)) { result.add(descriptor); } } return result; }
private PropertyDescriptor getProperty(String name, Class<?> type) { return getNameMap(type).get(name); }
public boolean propertyDefinedInClass(String name, Class<?> type) { return getProperty(name, type) != null; }
public Object unmarshal(final HierarchicalStreamReader reader, final UnmarshallingContext context) { final Object result = instantiateNewInstance(context); while (reader.hasMoreChildren()) { reader.moveDown(); String propertyName = mapper.realMember(result.getClass(), reader .getNodeName()); boolean propertyExistsInClass = beanProvider.propertyDefinedInClass( propertyName, result.getClass()); if (propertyExistsInClass) { Class<?> type = determineType(reader, result, propertyName); Object value = context.convertAnother(result, type); beanProvider.writeProperty(result, propertyName, value); } else if (mapper.shouldSerializeMember(result.getClass(), propertyName)) { throw new ConversionException("Property '" + propertyName + "' not defined in class " + result.getClass().getName()); } reader.moveUp(); } return result; }
private Object instantiateNewInstance(UnmarshallingContext context) { Object result = context.currentObject(); if (result == null) { result = beanProvider.newInstance(context.getRequiredType()); } return result; }