in johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MapperBuilder.java [121:248]
public Mapper build() {
if (readerFactory == null || generatorFactory == null) {
final JsonProvider provider;
if (this.provider != null) {
provider = this.provider;
} else {
provider = JsonProvider.provider();
JsonProviderUtil.setMaxBigDecimalScale(provider, maxBigDecimalScale);
this.provider = provider;
}
final Map<String, Object> config = new HashMap<String, Object>();
if (bufferStrategy != null) {
config.put("org.apache.johnzon.buffer-strategy", bufferStrategy);
}
if (encoding != null) {
config.put("org.apache.johnzon.encoding", encoding);
}
if (generatorFactory == null) {
if (pretty) {
config.put(JsonGenerator.PRETTY_PRINTING, true);
}
generatorFactory = provider.createGeneratorFactory(config);
}
if (readerFactory == null) {
config.remove(JsonGenerator.PRETTY_PRINTING); // doesn't mean anything anymore for reader
if (supportsComments) {
config.put("org.apache.johnzon.supports-comments", "true");
}
if (maxSize > 0) {
config.put("org.apache.johnzon.max-string-length", maxSize);
}
if (bufferSize > 0) {
config.put("org.apache.johnzon.default-char-buffer", bufferSize);
}
if (autoAdjustStringBuffers) {
config.put("org.apache.johnzon.auto-adjust-buffer", true);
}
readerFactory = provider.createReaderFactory(config);
}
} else if (this.provider == null) {
this.provider = JsonProvider.provider();
JsonProviderUtil.setMaxBigDecimalScale(provider, maxBigDecimalScale);
}
if (builderFactory == null) {
builderFactory = provider.createBuilderFactory(emptyMap());
}
if (accessMode == null) {
if ("field".equalsIgnoreCase(accessModeName)) {
accessMode = new FieldAccessMode(supportConstructors, supportHiddenAccess);
} else if ("method".equalsIgnoreCase(accessModeName)) {
accessMode = new MethodAccessMode(supportConstructors, supportHiddenAccess, true);
} else if ("strict-method".equalsIgnoreCase(accessModeName)) {
accessMode = new MethodAccessMode(supportConstructors, supportHiddenAccess, false);
} else if ("both".equalsIgnoreCase(accessModeName) || accessModeName == null) {
accessMode = new FieldAndMethodAccessMode(supportConstructors, supportHiddenAccess, useGetterForCollections, true, false);
} else {
throw new IllegalArgumentException("Unsupported access mode: " + accessModeName);
}
}
if (fieldFilteringStrategy != null) {
if (!BaseAccessMode.class.isInstance(accessMode)) {
throw new IllegalArgumentException("fieldFilteringStrategy can't be set with this access mode: " + accessMode);
}
BaseAccessMode.class.cast(accessMode).setFieldFilteringStrategy(fieldFilteringStrategy);
}
if (!ignoredForFields.isEmpty()) {
if (BaseAccessMode.class.isInstance(accessMode)) {
final BaseAccessMode baseAccessMode = BaseAccessMode.class.cast(accessMode);
final BaseAccessMode.FieldFilteringStrategy strategy = baseAccessMode.getFieldFilteringStrategy();
if (BaseAccessMode.ConfiguredFieldFilteringStrategy.class.isInstance(strategy)) {
final BaseAccessMode.ConfiguredFieldFilteringStrategy filteringStrategy =
BaseAccessMode.ConfiguredFieldFilteringStrategy.class.cast(strategy);
for (final Map.Entry<Class<?>, String[]> ignored : ignoredForFields.entrySet()) {
final String[] fields = ignored.getValue();
if (fields == null || fields.length == 0) {
filteringStrategy.getFieldsToRemove().remove(ignored.getKey());
} else {
filteringStrategy.getFieldsToRemove().put(ignored.getKey(), asList(fields));
}
}
}
} else {
throw new IllegalStateException("AccessMode is not an BaseAccessMode");
}
}
if (!skipAccessModeWrapper && !KnownNotOpenedJavaTypesAccessMode.class.isInstance(accessMode)) {
accessMode = new KnownNotOpenedJavaTypesAccessMode(accessMode);
}
if (primitiveConverters) {
adapters.put(new AdapterKey(Byte.class, String.class), new ConverterAdapter<>(new CachedDelegateConverter<>(new ByteConverter()), Byte.class));
adapters.put(new AdapterKey(Character.class, String.class), new ConverterAdapter<>(new CharacterConverter(), Character.class));
adapters.put(new AdapterKey(Double.class, String.class), new ConverterAdapter<>(new DoubleConverter(), Double.class));
adapters.put(new AdapterKey(Float.class, String.class), new ConverterAdapter<>(new FloatConverter(), Float.class));
adapters.put(new AdapterKey(Integer.class, String.class), new ConverterAdapter<>(new IntegerConverter(), Integer.class));
adapters.put(new AdapterKey(Long.class, String.class), new ConverterAdapter<>(new LongConverter(), Long.class));
adapters.put(new AdapterKey(Short.class, String.class), new ConverterAdapter<>(new ShortConverter(), Short.class));
adapters.put(new AdapterKey(Boolean.class, String.class), new ConverterAdapter<>(new CachedDelegateConverter<>(new BooleanConverter()), Boolean.class));
adapters.put(new AdapterKey(byte.class, String.class), adapters.get(new AdapterKey(Byte.class, String.class)));
adapters.put(new AdapterKey(char.class, String.class), adapters.get(new AdapterKey(Character.class, String.class)));
adapters.put(new AdapterKey(double.class, String.class), adapters.get(new AdapterKey(Double.class, String.class)));
adapters.put(new AdapterKey(float.class, String.class), adapters.get(new AdapterKey(Float.class, String.class)));
adapters.put(new AdapterKey(int.class, String.class), adapters.get(new AdapterKey(Integer.class, String.class)));
adapters.put(new AdapterKey(long.class, String.class), adapters.get(new AdapterKey(Long.class, String.class)));
adapters.put(new AdapterKey(short.class, String.class), adapters.get(new AdapterKey(Short.class, String.class)));
adapters.put(new AdapterKey(boolean.class, String.class), adapters.get(new AdapterKey(Boolean.class, String.class)));
}
return new Mapper(
readerFactory, generatorFactory, builderFactory, provider,
new MapperConfig(
adapters, objectConverterWriters, objectConverterReaders,
version, close,
skipNull, skipEmptyArray,
treatByteArrayAsBase64, treatByteArrayAsBase64URL, readAttributeBeforeWrite,
accessMode, encoding, attributeOrder, failOnUnknownProperties,
serializeValueFilter, useBigDecimalForFloats, deduplicateObjects,
interfaceImplementationMapping, useJsRange, useBigDecimalForObjectNumbers, maxBigDecimalScale,
supportEnumContainerDeserialization,
typeLoader, discriminatorMapper, discriminator,
deserializationPredicate, serializationPredicate,
enumConverterFactory,
JohnzonCores.snippetFactory(snippetMaxLength, generatorFactory), mappingsFactory),
closeables);
}