JOHNZON-367 Allow Snippet size to be configurable (via @rmannibucau)
All code written by Romain Manni-Bucau
diff --git a/johnzon-jaxrs/src/main/java/org/apache/johnzon/jaxrs/ConfigurableJohnzonProvider.java b/johnzon-jaxrs/src/main/java/org/apache/johnzon/jaxrs/ConfigurableJohnzonProvider.java
index ab616cc..f841e30 100644
--- a/johnzon-jaxrs/src/main/java/org/apache/johnzon/jaxrs/ConfigurableJohnzonProvider.java
+++ b/johnzon-jaxrs/src/main/java/org/apache/johnzon/jaxrs/ConfigurableJohnzonProvider.java
@@ -108,6 +108,10 @@
instance().writeTo(t, rawType, genericType, annotations, mediaType, httpHeaders, entityStream);
}
+ public void setSnippetMaxLength(final int value) {
+ builder.setSnippetMaxLength(value);
+ }
+
public void setUseJsRange(final boolean value) {
builder.setUseJsRange(value);
}
diff --git a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MapperBuilder.java b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MapperBuilder.java
index 5075ed4..999df68 100644
--- a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MapperBuilder.java
+++ b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MapperBuilder.java
@@ -23,6 +23,7 @@
import static java.util.Locale.ROOT;
// import org.apache.johnzon.core.JsonParserFactoryImpl; // don't depend on core in mapper
+import org.apache.johnzon.core.Snippet;
import org.apache.johnzon.mapper.access.AccessMode;
import org.apache.johnzon.mapper.access.BaseAccessMode;
import org.apache.johnzon.mapper.access.FieldAccessMode;
@@ -81,6 +82,7 @@
private boolean pretty;
private final Collection<Closeable> closeables = new ArrayList<Closeable>();
private int version = -1;
+ private int snippetMaxLength = 50;
private boolean close;
private boolean skipNull = true;
private boolean skipEmptyArray;
@@ -236,7 +238,8 @@
supportEnumContainerDeserialization,
typeLoader, discriminatorMapper, discriminator,
deserializationPredicate, serializationPredicate,
- enumConverterFactory),
+ enumConverterFactory,
+ new Snippet(snippetMaxLength, generatorFactory)),
closeables);
}
@@ -248,6 +251,11 @@
return adapters;
}
+ public MapperBuilder setSnippetMaxLength(final int snippetMaxLength) {
+ this.snippetMaxLength = snippetMaxLength;
+ return this;
+ }
+
public MapperBuilder setUseShortISO8601Format(final boolean useShortISO8601Format) {
adapters.setUseShortISO8601Format(useShortISO8601Format);
return this;
diff --git a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MapperConfig.java b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MapperConfig.java
index 4d8bceb..eb8affc 100644
--- a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MapperConfig.java
+++ b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MapperConfig.java
@@ -18,11 +18,13 @@
*/
package org.apache.johnzon.mapper;
+import org.apache.johnzon.core.Snippet;
import org.apache.johnzon.mapper.access.AccessMode;
import org.apache.johnzon.mapper.internal.AdapterKey;
import org.apache.johnzon.mapper.internal.ConverterAdapter;
import org.apache.johnzon.mapper.map.LazyConverterMap;
+import javax.json.Json;
import javax.json.JsonValue;
import java.lang.reflect.Type;
import java.nio.charset.Charset;
@@ -36,6 +38,7 @@
import java.util.function.Function;
import java.util.function.Predicate;
+import static java.util.Collections.emptyMap;
import static java.util.stream.Collectors.toList;
/**
@@ -94,6 +97,42 @@
private final Function<Class<?>, CustomEnumConverter<?>> enumConverterFactory;
+ private final Snippet snippet;
+
+ //CHECKSTYLE:OFF
+ @Deprecated
+ public MapperConfig(final LazyConverterMap adapters,
+ final Map<Class<?>, ObjectConverter.Writer<?>> objectConverterWriters,
+ final Map<Class<?>, ObjectConverter.Reader<?>> objectConverterReaders,
+ final int version, final boolean close,
+ final boolean skipNull, final boolean skipEmptyArray,
+ final boolean treatByteArrayAsBase64, final boolean treatByteArrayAsBase64URL,
+ final boolean readAttributeBeforeWrite,
+ final AccessMode accessMode, final Charset encoding,
+ final Comparator<String> attributeOrder,
+ final boolean failOnUnknown,
+ final SerializeValueFilter serializeValueFilter,
+ final boolean useBigDecimalForFloats,
+ final Boolean deduplicateObjects,
+ final Map<Class<?>, Class<?>> interfaceImplementationMapping,
+ final boolean useJsRange,
+ final boolean useBigDecimalForObjectNumbers,
+ final boolean supportEnumMapDeserialization,
+ final Function<String, Class<?>> typeLoader,
+ final Function<Class<?>, String> discriminatorMapper,
+ final String discriminator,
+ final Predicate<Class<?>> deserializationPredicate,
+ final Predicate<Class<?>> serializationPredicate,
+ final Function<Class<?>, CustomEnumConverter<?>> enumConverterFactory) {
+ //CHECKSTYLE:ON
+ this(adapters, objectConverterWriters, objectConverterReaders, version, close, skipNull, skipEmptyArray,
+ treatByteArrayAsBase64, treatByteArrayAsBase64URL, readAttributeBeforeWrite, accessMode, encoding,
+ attributeOrder, failOnUnknown, serializeValueFilter, useBigDecimalForFloats, deduplicateObjects, interfaceImplementationMapping,
+ useJsRange, useBigDecimalForObjectNumbers, supportEnumMapDeserialization, typeLoader,
+ discriminatorMapper, discriminator, deserializationPredicate, serializationPredicate, enumConverterFactory,
+ new Snippet(50, Json.createGeneratorFactory(emptyMap())));
+ }
+
//disable checkstyle for 10+ parameters
//CHECKSTYLE:OFF
public MapperConfig(final LazyConverterMap adapters,
@@ -118,7 +157,8 @@
final String discriminator,
final Predicate<Class<?>> deserializationPredicate,
final Predicate<Class<?>> serializationPredicate,
- final Function<Class<?>, CustomEnumConverter<?>> enumConverterFactory) {
+ final Function<Class<?>, CustomEnumConverter<?>> enumConverterFactory,
+ final Snippet snippet) {
//CHECKSTYLE:ON
this.objectConverterWriters = objectConverterWriters;
this.objectConverterReaders = objectConverterReaders;
@@ -156,6 +196,11 @@
this.objectConverterReaderCache = new HashMap<>(objectConverterReaders.size());
this.useBigDecimalForFloats = useBigDecimalForFloats;
this.deduplicateObjects = deduplicateObjects;
+ this.snippet = snippet;
+ }
+
+ public Snippet getSnippet() {
+ return snippet;
}
public Function<Class<?>, CustomEnumConverter<?>> getEnumConverterFactory() {
diff --git a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingParserImpl.java b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingParserImpl.java
index 5c8af0c..546f131 100644
--- a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingParserImpl.java
+++ b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingParserImpl.java
@@ -18,7 +18,6 @@
*/
package org.apache.johnzon.mapper;
-import org.apache.johnzon.core.Snippet;
import org.apache.johnzon.mapper.access.AccessMode;
import org.apache.johnzon.mapper.converter.CharacterConverter;
import org.apache.johnzon.mapper.internal.AdapterKey;
@@ -34,7 +33,6 @@
import javax.json.JsonString;
import javax.json.JsonStructure;
import javax.json.JsonValue;
-
import java.lang.reflect.Array;
import java.lang.reflect.GenericArrayType;
import java.lang.reflect.InvocationTargetException;
@@ -109,7 +107,6 @@
*/
private Map<String, Object> jsonPointers;
-
public MappingParserImpl(MapperConfig config, Mappings mappings, JsonReader jsonReader, Map<String, Object> jsonPointers) {
this.config = config;
this.mappings = mappings;
@@ -347,7 +344,7 @@
}
}
if (classMapping == null) {
- throw new MapperException("Can't map JSON Object to " + type + ": " + new Snippet(50).of(object));
+ throw new MapperException("Can't map JSON Object to " + type + ": " + config.getSnippet().of(object));
}
if (applyObjectConverter && classMapping.reader != null && (skippedConverters == null || !skippedConverters.contains(type))) {