@Override public Converter<Collection<?>> create(Type type, Genson genson) { final CollectionConverter defaultConverter = (CollectionConverter) defaultFactory.create(type, genson); return new Converter<Collection<?>>() { @Override public void serialize(Collection object, ObjectWriter writer, Context ctx) throws Exception { defaultConverter.serialize(object, writer, ctx); } @Override public Collection deserialize(ObjectReader reader, Context ctx) throws Exception { ValueType vt = reader.getValueType(); if (vt != ValueType.ARRAY && vt != ValueType.NULL ) { Object object = defaultConverter.getElementConverter().deserialize(reader, ctx); Collection result = defaultConverter.create(); result.add(object); return result; } else return defaultConverter.deserialize( reader, ctx ); } }; } }
@Override public Converter<Collection<?>> create(Type type, Genson genson) { final CollectionConverter defaultConverter = (CollectionConverter) defaultFactory.create(type, genson); return new Converter<Collection<?>>() { @Override public void serialize(Collection object, ObjectWriter writer, Context ctx) throws Exception { defaultConverter.serialize(object, writer, ctx); } @Override public Collection deserialize(ObjectReader reader, Context ctx) throws Exception { ValueType vt = reader.getValueType(); if (vt != ValueType.ARRAY && vt != ValueType.NULL ) { Object object = defaultConverter.getElementConverter().deserialize(reader, ctx); Collection result = defaultConverter.create(); result.add(object); return result; } else return defaultConverter.deserialize( reader, ctx ); } }; } }
public Converter<?> create(Type type, Genson genson) { Converter<?> nextConverter = null; if (next != null) { nextConverter = next.create(type, genson); } Converter<?> converter = create(type, genson, nextConverter); return converter == null ? nextConverter : converter; }
@Override public Converter<?> create(Type type, Genson genson) { Converter<?> converter = ThreadLocalHolder.get(CONTEXT_KEY, Converter.class); if (converter != null) return converter; return delegatedFactory.create(type, genson); } }
public Converter<?> create(Type type, Genson genson) { Converter<?> nextConverter = null; if (next != null) { nextConverter = next.create(type, genson); } Converter<?> converter = create(type, genson, nextConverter); return converter == null ? nextConverter : converter; }
@Override public Converter<?> create(Type type, Genson genson) { Converter<?> converter = ThreadLocalHolder.get(CONTEXT_KEY, Converter.class); if (converter != null) return converter; return delegatedFactory.create(type, genson); } }
/** * Provides an instance of Converter capable of handling objects of type forType. * * @param forType the type for which a converter is needed. * @return the converter instance. * @throws com.owlike.genson.JsonBindingException if a problem occurs during converters lookup/construction. */ @SuppressWarnings("unchecked") public <T> Converter<T> provideConverter(Type forType) { if (Boolean.TRUE.equals(ThreadLocalHolder.get("__GENSON$DO_NOT_CACHE_CONVERTER", Boolean.class))) { return (Converter<T>) converterFactory.create(forType, this); } else { Converter<T> converter = (Converter<T>) converterCache.get(forType); if (converter == null) { converter = (Converter<T>) converterFactory.create(forType, this); if (converter == null) throw new JsonBindingException("No converter found for type " + forType); converterCache.putIfAbsent(forType, converter); } return converter; } }
/** * Provides an instance of Converter capable of handling objects of type forType. * * @param forType the type for which a converter is needed. * @return the converter instance. * @throws com.owlike.genson.JsonBindingException if a problem occurs during converters lookup/construction. */ @SuppressWarnings("unchecked") public <T> Converter<T> provideConverter(Type forType) { if (Boolean.TRUE.equals(ThreadLocalHolder.get("__GENSON$DO_NOT_CACHE_CONVERTER", Boolean.class))) { return (Converter<T>) converterFactory.create(forType, this); } else { Converter<T> converter = (Converter<T>) converterCache.get(forType); if (converter == null) { converter = (Converter<T>) converterFactory.create(forType, this); if (converter == null) throw new JsonBindingException("No converter found for type " + forType); converterCache.putIfAbsent(forType, converter); } return converter; } }
@Override @SuppressWarnings({"rawtypes", "unchecked"}) public Converter<?> create(Type type, Genson genson) { Map<Type, CircularConverter<?>> map = _circularConverters.get(); if (map == null) { map = new HashMap<Type, CircularConverter<?>>(); _circularConverters.set(map); } if (_circularConverters.get().containsKey(type)) { return _circularConverters.get().get(type); } else { try { CircularConverter circularConverter = new CircularConverter(); try { _circularConverters.get().put(type, circularConverter); Converter converter = next().create(type, genson); circularConverter.setDelegateConverter(converter); return converter; } finally { circularConverter.initLatch.countDown(); } } finally { _circularConverters.get().remove(type); } } }
@Override @SuppressWarnings({"rawtypes", "unchecked"}) public Converter<?> create(Type type, Genson genson) { Map<Type, CircularConverter<?>> map = _circularConverters.get(); if (map == null) { map = new HashMap<Type, CircularConverter<?>>(); _circularConverters.set(map); } if (_circularConverters.get().containsKey(type)) { return _circularConverters.get().get(type); } else { try { CircularConverter circularConverter = new CircularConverter(); _circularConverters.get().put(type, circularConverter); Converter converter = next().create(type, genson); circularConverter.setDelegateConverter(converter); return converter; } finally { _circularConverters.get().remove(type); } } }
@SuppressWarnings("unchecked") protected <T> T provide(Class<T> forClass, Type withParameterType, Map<Type, ? extends T> fromTypeMap, Genson genson) { if (fromTypeMap.containsKey(withParameterType)) return fromTypeMap.get(withParameterType); Type wrappedParameterType = withParameterType; if (withParameterType instanceof Class<?> && ((Class<?>) withParameterType).isPrimitive()) wrappedParameterType = TypeUtil.wrap((Class<?>) withParameterType); for (Iterator<Factory<?>> it = factories.iterator(); it.hasNext(); ) { Factory<?> factory = it.next(); Object object; Type factoryType = TypeUtil.lookupGenericType(Factory.class, factory.getClass()); factoryType = TypeUtil.expandType(factoryType, factory.getClass()); // it is a parameterized type and we want the parameter corresponding to Serializer from // Factory<Serializer<?>> factoryType = TypeUtil.typeOf(0, factoryType); Type factoryParameter = TypeUtil.typeOf(0, factoryType); if (forClass.isAssignableFrom(TypeUtil.getRawClass(factoryType)) && TypeUtil.match(wrappedParameterType, factoryParameter, false) && (object = factory.create(withParameterType, genson)) != null) { return forClass.cast(object); } } return (T) beanDescriptorProvider.provide(TypeUtil.getRawClass(withParameterType), withParameterType, genson); }
@SuppressWarnings("unchecked") protected <T> T provide(Class<T> forClass, Type withParameterType, Map<Type, ? extends T> fromTypeMap, Genson genson) { if (fromTypeMap.containsKey(withParameterType)) return fromTypeMap.get(withParameterType); Type wrappedParameterType = withParameterType; if (withParameterType instanceof Class<?> && ((Class<?>) withParameterType).isPrimitive()) wrappedParameterType = TypeUtil.wrap((Class<?>) withParameterType); for (Iterator<Factory<?>> it = factories.iterator(); it.hasNext(); ) { Factory<?> factory = it.next(); Object object; Type factoryType = TypeUtil.lookupGenericType(Factory.class, factory.getClass()); factoryType = TypeUtil.expandType(factoryType, factory.getClass()); // it is a parameterized type and we want the parameter corresponding to Serializer from // Factory<Serializer<?>> factoryType = TypeUtil.typeOf(0, factoryType); Type factoryParameter = TypeUtil.typeOf(0, factoryType); if (forClass.isAssignableFrom(TypeUtil.getRawClass(factoryType)) && TypeUtil.match(wrappedParameterType, factoryParameter, false) && (object = factory.create(withParameterType, genson)) != null) { return forClass.cast(object); } } return (T) beanDescriptorProvider.provide(TypeUtil.getRawClass(withParameterType), withParameterType, genson); }