@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); } } }
/** * You should override this method if you want to add custom * {@link com.owlike.genson.convert.ChainedFactory ChainedFactory} or if you need to chain * them differently. * * @return the converter <u>factory instance that will be used to resolve * <strong>ALL</strong> converters</u>. */ protected Factory<Converter<?>> createConverterFactory() { ChainedFactory chainHead = new CircularClassReferenceConverterFactory(); chainHead.append(new NullConverterFactory(failOnNullPrimitive)); if (useRuntimeTypeForSerialization) chainHead.append(new RuntimeTypeConverter.RuntimeTypeConverterFactory()); chainHead.append(new ClassMetadataConverter.ClassMetadataConverterFactory(classMetadataWithStaticType)); if (customFactoryChain != null) chainHead.append(customFactoryChain); if (withBeanViewConverter) chainHead.append(new BeanViewConverter.BeanViewConverterFactory( getBeanViewDescriptorProvider())); ContextualFactoryDecorator ctxFactoryDecorator = new ContextualFactoryDecorator( new BasicConvertersFactory(getSerializersMap(), getDeserializersMap(), getFactories(), getBeanDescriptorProvider())); chainHead.append(ctxFactoryDecorator); return chainHead; }
/** * You should override this method if you want to add custom * {@link com.owlike.genson.convert.ChainedFactory ChainedFactory} or if you need to chain * them differently. * * @return the converter <u>factory instance that will be used to resolve * <strong>ALL</strong> converters</u>. */ protected Factory<Converter<?>> createConverterFactory() { ChainedFactory chainHead = new CircularClassReferenceConverterFactory(); chainHead.append(new NullConverterFactory(failOnNullPrimitive)); if (useRuntimeTypeForSerialization) chainHead.append(new RuntimeTypeConverter.RuntimeTypeConverterFactory()); chainHead.append(new ClassMetadataConverter.ClassMetadataConverterFactory(classMetadataWithStaticType)); if (customFactoryChain != null) chainHead.append(customFactoryChain); if (withBeanViewConverter) chainHead.append(new BeanViewConverter.BeanViewConverterFactory( getBeanViewDescriptorProvider())); ContextualFactoryDecorator ctxFactoryDecorator = new ContextualFactoryDecorator( new BasicConvertersFactory(getSerializersMap(), getDeserializersMap(), getFactories(), getBeanDescriptorProvider())); chainHead.append(ctxFactoryDecorator); return chainHead; }
@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); } } }