Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance. Project price only 1 $
You can buy this project and download/modify it how often you want.
package org.glowroot.shaded.fasterxml.jackson.databind;
import java.io.*;
import java.text.*;
import java.util.*;
import java.util.concurrent.atomic.AtomicReference;
import org.glowroot.shaded.fasterxml.jackson.core.*;
import org.glowroot.shaded.fasterxml.jackson.core.io.CharacterEscapes;
import org.glowroot.shaded.fasterxml.jackson.core.io.SegmentedStringWriter;
import org.glowroot.shaded.fasterxml.jackson.core.io.SerializedString;
import org.glowroot.shaded.fasterxml.jackson.core.type.TypeReference;
import org.glowroot.shaded.fasterxml.jackson.core.util.*;
import org.glowroot.shaded.fasterxml.jackson.databind.cfg.ContextAttributes;
import org.glowroot.shaded.fasterxml.jackson.databind.jsonFormatVisitors.JsonFormatVisitorWrapper;
import org.glowroot.shaded.fasterxml.jackson.databind.jsontype.TypeSerializer;
import org.glowroot.shaded.fasterxml.jackson.databind.ser.*;
import org.glowroot.shaded.fasterxml.jackson.databind.ser.impl.TypeWrappedSerializer;
import org.glowroot.shaded.fasterxml.jackson.databind.type.TypeFactory;
/**
* Builder object that can be used for per-serialization configuration of
* serialization parameters, such as JSON View and root type to use.
* (and thus fully thread-safe with no external synchronization);
* new instances are constructed for different configurations.
* Instances are initially constructed by {@link ObjectMapper} and can be
* reused in completely thread-safe manner with no explicit synchronization
*/
public class ObjectWriter
implements Versioned,
java.io.Serializable // since 2.1
{
private static final long serialVersionUID = 1; // since 2.5
/**
* We need to keep track of explicit disabling of pretty printing;
* easiest to do by a token value.
*/
protected final static PrettyPrinter NULL_PRETTY_PRINTER = new MinimalPrettyPrinter();
/*
/**********************************************************
/* Immutable configuration from ObjectMapper
/**********************************************************
*/
/**
* General serialization configuration settings
*/
protected final SerializationConfig _config;
protected final DefaultSerializerProvider _serializerProvider;
protected final SerializerFactory _serializerFactory;
/**
* Factory used for constructing {@link JsonGenerator}s
*/
protected final JsonFactory _generatorFactory;
/*
/**********************************************************
/* Configuration that can be changed via mutant factories
/**********************************************************
*/
/**
* Container for settings that need to be passed to {@link JsonGenerator}
* constructed for serializing values.
*
* @since 2.5
*/
protected final GeneratorSettings _generatorSettings;
/**
* We may pre-fetch serializer if root type
* is known (has been explicitly declared), and if so, reuse it afterwards.
* This allows avoiding further serializer lookups and increases
* performance a bit on cases where readers are reused.
*
* @since 2.5
*/
protected final Prefetch _prefetch;
/*
/**********************************************************
/* Life-cycle, constructors
/**********************************************************
*/
/**
* Constructor used by {@link ObjectMapper} for initial instantiation
*/
protected ObjectWriter(ObjectMapper mapper, SerializationConfig config,
JavaType rootType, PrettyPrinter pp)
{
_config = config;
_serializerProvider = mapper._serializerProvider;
_serializerFactory = mapper._serializerFactory;
_generatorFactory = mapper._jsonFactory;
_generatorSettings = (pp == null) ? GeneratorSettings.empty
: new GeneratorSettings(pp, null, null, null);
// 29-Apr-2014, tatu: There is no "untyped serializer", so:
if (rootType == null || rootType.hasRawClass(Object.class)) {
_prefetch = Prefetch.empty;
} else {
rootType = rootType.withStaticTyping();
_prefetch = Prefetch.empty.forRootType(this, rootType);
}
}
/**
* Alternative constructor for initial instantiation by {@link ObjectMapper}
*/
protected ObjectWriter(ObjectMapper mapper, SerializationConfig config)
{
_config = config;
_serializerProvider = mapper._serializerProvider;
_serializerFactory = mapper._serializerFactory;
_generatorFactory = mapper._jsonFactory;
_generatorSettings = GeneratorSettings.empty;
_prefetch = Prefetch.empty;
}
/**
* Alternative constructor for initial instantiation by {@link ObjectMapper}
*/
protected ObjectWriter(ObjectMapper mapper, SerializationConfig config,
FormatSchema s)
{
_config = config;
_serializerProvider = mapper._serializerProvider;
_serializerFactory = mapper._serializerFactory;
_generatorFactory = mapper._jsonFactory;
_generatorSettings = (s == null) ? GeneratorSettings.empty
: new GeneratorSettings(null, s, null, null);
_prefetch = Prefetch.empty;
}
/**
* Copy constructor used for building variations.
*/
protected ObjectWriter(ObjectWriter base, SerializationConfig config,
GeneratorSettings genSettings, Prefetch prefetch)
{
_config = config;
_serializerProvider = base._serializerProvider;
_serializerFactory = base._serializerFactory;
_generatorFactory = base._generatorFactory;
_generatorSettings = genSettings;
_prefetch = prefetch;
}
/**
* Copy constructor used for building variations.
*/
protected ObjectWriter(ObjectWriter base, SerializationConfig config)
{
_config = config;
_serializerProvider = base._serializerProvider;
_serializerFactory = base._serializerFactory;
_generatorFactory = base._generatorFactory;
_generatorSettings = base._generatorSettings;
_prefetch = base._prefetch;
}
/**
* @since 2.3
*/
protected ObjectWriter(ObjectWriter base, JsonFactory f)
{
// may need to override ordering, based on data format capabilities
_config = base._config
.with(MapperFeature.SORT_PROPERTIES_ALPHABETICALLY, f.requiresPropertyOrdering());
_serializerProvider = base._serializerProvider;
_serializerFactory = base._serializerFactory;
_generatorFactory = base._generatorFactory;
_generatorSettings = base._generatorSettings;
_prefetch = base._prefetch;
}
/**
* Method that will return version information stored in and read from jar
* that contains this class.
*/
@Override
public Version version() {
return org.glowroot.shaded.fasterxml.jackson.databind.cfg.PackageVersion.VERSION;
}
/*
/**********************************************************
/* Methods sub-classes MUST override, used for constructing
/* writer instances, (re)configuring parser instances.
/* Added in 2.5
/**********************************************************
*/
/**
* Overridable factory method called by various "withXxx()" methods
*
* @since 2.5
*/
protected ObjectWriter _new(ObjectWriter base, JsonFactory f) {
return new ObjectWriter(base, f);
}
/**
* Overridable factory method called by various "withXxx()" methods
*
* @since 2.5
*/
protected ObjectWriter _new(ObjectWriter base, SerializationConfig config) {
return new ObjectWriter(base, config);
}
/**
* Overridable factory method called by various "withXxx()" methods.
* It assumes `this` as base for settings other than those directly
* passed in.
*
* @since 2.5
*/
protected ObjectWriter _new(GeneratorSettings genSettings, Prefetch prefetch) {
return new ObjectWriter(this, _config, genSettings, prefetch);
}
/**
* Overridable factory method called by {@link #writeValues(OutputStream)}
* method (and its various overrides), and initializes it as necessary.
*
* @since 2.5
*/
@SuppressWarnings("resource")
protected SequenceWriter _newSequenceWriter(boolean wrapInArray,
JsonGenerator gen, boolean managedInput)
throws IOException
{
_configureGenerator(gen);
return new SequenceWriter(_serializerProvider(),
gen, managedInput, _prefetch)
.init(wrapInArray);
}
/*
/**********************************************************
/* Life-cycle, fluent factories for SerializationFeature
/**********************************************************
*/
/**
* Method for constructing a new instance that is configured
* with specified feature enabled.
*/
public ObjectWriter with(SerializationFeature feature) {
SerializationConfig newConfig = _config.with(feature);
return (newConfig == _config) ? this : _new(this, newConfig);
}
/**
* Method for constructing a new instance that is configured
* with specified features enabled.
*/
public ObjectWriter with(SerializationFeature first, SerializationFeature... other) {
SerializationConfig newConfig = _config.with(first, other);
return (newConfig == _config) ? this : _new(this, newConfig);
}
/**
* Method for constructing a new instance that is configured
* with specified features enabled.
*/
public ObjectWriter withFeatures(SerializationFeature... features) {
SerializationConfig newConfig = _config.withFeatures(features);
return (newConfig == _config) ? this : _new(this, newConfig);
}
/**
* Method for constructing a new instance that is configured
* with specified feature enabled.
*/
public ObjectWriter without(SerializationFeature feature) {
SerializationConfig newConfig = _config.without(feature);
return (newConfig == _config) ? this : _new(this, newConfig);
}
/**
* Method for constructing a new instance that is configured
* with specified features enabled.
*/
public ObjectWriter without(SerializationFeature first, SerializationFeature... other) {
SerializationConfig newConfig = _config.without(first, other);
return (newConfig == _config) ? this : _new(this, newConfig);
}
/**
* Method for constructing a new instance that is configured
* with specified features enabled.
*/
public ObjectWriter withoutFeatures(SerializationFeature... features) {
SerializationConfig newConfig = _config.withoutFeatures(features);
return (newConfig == _config) ? this : _new(this, newConfig);
}
/*
/**********************************************************
/* Life-cycle, fluent factories for JsonGenerator.Feature
/**********************************************************
*/
/**
* @since 2.5
*/
public ObjectWriter with(JsonGenerator.Feature feature) {
SerializationConfig newConfig = _config.with(feature);
return (newConfig == _config) ? this : _new(this, newConfig);
}
/**
* @since 2.5
*/
public ObjectWriter withFeatures(JsonGenerator.Feature... features) {
SerializationConfig newConfig = _config.withFeatures(features);
return (newConfig == _config) ? this : _new(this, newConfig);
}
/**
* @since 2.5
*/
public ObjectWriter without(JsonGenerator.Feature feature) {
SerializationConfig newConfig = _config.without(feature);
return (newConfig == _config) ? this : _new(this, newConfig);
}
/**
* @since 2.5
*/
public ObjectWriter withoutFeatures(JsonGenerator.Feature... features) {
SerializationConfig newConfig = _config.withoutFeatures(features);
return (newConfig == _config) ? this : _new(this, newConfig);
}
/*
/**********************************************************
/* Life-cycle, fluent factories, type-related
/**********************************************************
*/
/**
* Method that will construct a new instance that uses specific type
* as the root type for serialization, instead of runtime dynamic
* type of the root object itself.
*
* Note that method does NOT change state of this reader, but
* rather construct and returns a newly configured instance.
*
* @since 2.5
*/
public ObjectWriter forType(JavaType rootType)
{
Prefetch pf = _prefetch.forRootType(this, rootType);
return (pf == _prefetch) ? this : _new(_generatorSettings, pf);
}
/**
* Method that will construct a new instance that uses specific type
* as the root type for serialization, instead of runtime dynamic
* type of the root object itself.
*
* @since 2.5
*/
public ObjectWriter forType(Class> rootType) {
if (rootType == Object.class) {
return forType((JavaType) null);
}
return forType(_config.constructType(rootType));
}
/**
* Method that will construct a new instance that uses specific type
* as the root type for serialization, instead of runtime dynamic
* type of the root object itself.
*
* @since 2.5
*/
public ObjectWriter forType(TypeReference> rootType) {
return forType(_config.getTypeFactory().constructType(rootType.getType()));
}
/**
* @deprecated since 2.5 Use {@link #forType(JavaType)} instead
*/
@Deprecated // since 2.5
public ObjectWriter withType(JavaType rootType) {
return forType(rootType);
}
/**
* @deprecated since 2.5 Use {@link #forType(Class)} instead
*/
@Deprecated // since 2.5
public ObjectWriter withType(Class> rootType) {
return forType(rootType);
}
/**
* @deprecated since 2.5 Use {@link #forType(TypeReference)} instead
*/
@Deprecated // since 2.5
public ObjectWriter withType(TypeReference> rootType) {
return forType(rootType);
}
/*
/**********************************************************
/* Life-cycle, fluent factories, other
/**********************************************************
*/
/**
* Fluent factory method that will construct a new writer instance that will
* use specified date format for serializing dates; or if null passed, one
* that will serialize dates as numeric timestamps.
*
* Note that the method does NOT change state of this reader, but
* rather construct and returns a newly configured instance.
*/
public ObjectWriter with(DateFormat df) {
SerializationConfig newConfig = _config.with(df);
return (newConfig == _config) ? this : _new(this, newConfig);
}
/**
* Method that will construct a new instance that will use the default
* pretty printer for serialization.
*/
public ObjectWriter withDefaultPrettyPrinter() {
return with(_config.getDefaultPrettyPrinter());
}
/**
* Method that will construct a new instance that uses specified
* provider for resolving filter instances by id.
*/
public ObjectWriter with(FilterProvider filterProvider) {
return (filterProvider == _config.getFilterProvider()) ? this
: _new(this, _config.withFilters(filterProvider));
}
/**
* Method that will construct a new instance that will use specified pretty
* printer (or, if null, will not do any pretty-printing)
*/
public ObjectWriter with(PrettyPrinter pp) {
GeneratorSettings genSet = _generatorSettings.with(pp);
if (genSet == _generatorSettings) {
return this;
}
return _new(genSet, _prefetch);
}
/**
* Method for constructing a new instance with configuration that
* specifies what root name to use for "root element wrapping".
* See {@link SerializationConfig#withRootName(String)} for details.
*
* Note that method does NOT change state of this reader, but
* rather construct and returns a newly configured instance.
*
* @param rootName Root name to use, if non-empty; `null` for "use defaults",
* and empty String ("") for "do NOT add root wrapper"
*/
public ObjectWriter withRootName(String rootName) {
SerializationConfig newConfig = _config.withRootName(rootName);
return (newConfig == _config) ? this : _new(this, newConfig);
}
/**
* @since 2.6
*/
public ObjectWriter withRootName(PropertyName rootName) {
SerializationConfig newConfig = _config.withRootName(rootName);
return (newConfig == _config) ? this : _new(this, newConfig);
}
/**
* Convenience method that is same as calling:
*
* withRootName("")
*
* which will forcibly prevent use of root name wrapping when writing
* values with this {@link ObjectWriter}.
*
* @since 2.6
*/
public ObjectWriter withoutRootName() {
SerializationConfig newConfig = _config.withRootName(PropertyName.NO_NAME);
return (newConfig == _config) ? this : _new(this, newConfig);
}
/**
* Method that will construct a new instance that uses specific format schema
* for serialization.
*
* Note that method does NOT change state of this reader, but
* rather construct and returns a newly configured instance.
*/
public ObjectWriter with(FormatSchema schema) {
GeneratorSettings genSet = _generatorSettings.with(schema);
if (genSet == _generatorSettings) {
return this;
}
_verifySchemaType(schema);
return _new(genSet, _prefetch);
}
/**
* @deprecated Since 2.5 use {@link #with(FormatSchema)} instead
*/
@Deprecated
public ObjectWriter withSchema(FormatSchema schema) {
return with(schema);
}
/**
* Method that will construct a new instance that uses specified
* serialization view for serialization (with null basically disables
* view processing)
*
* Note that the method does NOT change state of this reader, but
* rather construct and returns a newly configured instance.
*/
public ObjectWriter withView(Class> view) {
SerializationConfig newConfig = _config.withView(view);
return (newConfig == _config) ? this : _new(this, newConfig);
}
public ObjectWriter with(Locale l) {
SerializationConfig newConfig = _config.with(l);
return (newConfig == _config) ? this : _new(this, newConfig);
}
public ObjectWriter with(TimeZone tz) {
SerializationConfig newConfig = _config.with(tz);
return (newConfig == _config) ? this : _new(this, newConfig);
}
/**
* Method that will construct a new instance that uses specified default
* {@link Base64Variant} for base64 encoding
*
* @since 2.1
*/
public ObjectWriter with(Base64Variant b64variant) {
SerializationConfig newConfig = _config.with(b64variant);
return (newConfig == _config) ? this : _new(this, newConfig);
}
/**
* @since 2.3
*/
public ObjectWriter with(CharacterEscapes escapes) {
GeneratorSettings genSet = _generatorSettings.with(escapes);
if (genSet == _generatorSettings) {
return this;
}
return _new(genSet, _prefetch);
}
/**
* @since 2.3
*/
public ObjectWriter with(JsonFactory f) {
return (f == _generatorFactory) ? this : _new(this, f);
}
/**
* @since 2.3
*/
public ObjectWriter with(ContextAttributes attrs) {
SerializationConfig newConfig = _config.with(attrs);
return (newConfig == _config) ? this : _new(this, newConfig);
}
/**
* @since 2.3
*/
public ObjectWriter withAttributes(Map