You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@johnzon.apache.org by rm...@apache.org on 2017/06/24 12:50:21 UTC
johnzon git commit: JOHNZON-130 ensure access mode if configurable
even for jsonb
Repository: johnzon
Updated Branches:
refs/heads/master 88629d3aa -> 25984cbed
JOHNZON-130 ensure access mode if configurable even for jsonb
Project: http://git-wip-us.apache.org/repos/asf/johnzon/repo
Commit: http://git-wip-us.apache.org/repos/asf/johnzon/commit/25984cbe
Tree: http://git-wip-us.apache.org/repos/asf/johnzon/tree/25984cbe
Diff: http://git-wip-us.apache.org/repos/asf/johnzon/diff/25984cbe
Branch: refs/heads/master
Commit: 25984cbeddff5f713feb319c817559a5b0afbc8b
Parents: 88629d3
Author: rmannibucau <rm...@apache.org>
Authored: Sat Jun 24 14:50:11 2017 +0200
Committer: rmannibucau <rm...@apache.org>
Committed: Sat Jun 24 14:50:11 2017 +0200
----------------------------------------------------------------------
.../apache/johnzon/jsonb/JohnzonBuilder.java | 65 ++++++++++++++------
.../apache/johnzon/jsonb/JsonbAccessMode.java | 9 ++-
.../apache/johnzon/mapper/MapperBuilder.java | 6 +-
3 files changed, 54 insertions(+), 26 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/johnzon/blob/25984cbe/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/JohnzonBuilder.java
----------------------------------------------------------------------
diff --git a/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/JohnzonBuilder.java b/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/JohnzonBuilder.java
index 3778ff6..faee36e 100644
--- a/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/JohnzonBuilder.java
+++ b/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/JohnzonBuilder.java
@@ -33,6 +33,8 @@ import org.apache.johnzon.mapper.Mapper;
import org.apache.johnzon.mapper.MapperBuilder;
import org.apache.johnzon.mapper.ObjectConverter;
import org.apache.johnzon.mapper.SerializeValueFilter;
+import org.apache.johnzon.mapper.access.AccessMode;
+import org.apache.johnzon.mapper.access.FieldAndMethodAccessMode;
import org.apache.johnzon.mapper.internal.AdapterKey;
import org.apache.johnzon.mapper.internal.ConverterAdapter;
@@ -50,6 +52,7 @@ import javax.json.bind.serializer.JsonbSerializer;
import javax.json.spi.JsonProvider;
import javax.json.stream.JsonGenerator;
import javax.json.stream.JsonParserFactory;
+import java.io.Closeable;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
@@ -218,11 +221,16 @@ public class JohnzonBuilder implements JsonbBuilder {
}
throw new IllegalArgumentException("Unsupported factory: " + val);
}).orElseGet(this::findFactory);
- final JsonbAccessMode accessMode = new JsonbAccessMode(
- propertyNamingStrategy, orderValue, visibilityStrategy,
- !namingStrategyValue.orElse("").equals(PropertyNamingStrategy.CASE_INSENSITIVE),
- defaultConverters,
- factory, parserFactoryProvider);
+ final AccessMode accessMode = config.getProperty("johnzon.accessMode")
+ .map(this::toAccessMode)
+ .orElseGet(() -> new JsonbAccessMode(
+ propertyNamingStrategy, orderValue, visibilityStrategy,
+ !namingStrategyValue.orElse("").equals(PropertyNamingStrategy.CASE_INSENSITIVE),
+ defaultConverters,
+ factory, parserFactoryProvider,
+ config.getProperty("johnzon.accessModeDelegate")
+ .map(this::toAccessMode)
+ .orElseGet(() -> new FieldAndMethodAccessMode(true, true, false))));
builder.setAccessMode(accessMode);
@@ -328,7 +336,10 @@ public class JohnzonBuilder implements JsonbBuilder {
});
final boolean useCdi = cdiIntegration != null && cdiIntegration.isCanWrite() && config.getProperty("johnzon.cdi.activated").map(Boolean.class::cast).orElse(Boolean.TRUE);
- final Mapper mapper = builder.addCloseable(accessMode).build();
+ if (Closeable.class.isInstance(accessMode)) {
+ builder.addCloseable(Closeable.class.cast(accessMode));
+ }
+ final Mapper mapper = builder.build();
return useCdi ? new JohnzonJsonb(mapper) {
{
@@ -348,26 +359,40 @@ public class JohnzonBuilder implements JsonbBuilder {
} : new JohnzonJsonb(mapper);
}
+ private AccessMode toAccessMode(final Object s) {
+ if (String.class.isInstance(s)) {
+ try {
+ return AccessMode.class.cast(
+ Thread.currentThread().getContextClassLoader().loadClass(s.toString()).getConstructor().newInstance());
+ } catch (final InstantiationException | IllegalAccessException | NoSuchMethodException | ClassNotFoundException e) {
+ throw new IllegalArgumentException(e);
+ } catch (InvocationTargetException e) {
+ throw new IllegalArgumentException(e.getCause());
+ }
+ }
+ return AccessMode.class.cast(s);
+ }
+
private Supplier<JsonParserFactory> createJsonParserFactory() {
return new Supplier<JsonParserFactory>() { // thread safety is not mandatory
- private final AtomicReference<JsonParserFactory> ref = new AtomicReference<>();
+ private final AtomicReference<JsonParserFactory> ref = new AtomicReference<>();
- @Override
- public JsonParserFactory get() {
- JsonParserFactory factory = ref.get();
- if (factory == null) {
- factory = doCreate();
- if (!ref.compareAndSet(null, factory)) {
- factory = ref.get();
- }
+ @Override
+ public JsonParserFactory get() {
+ JsonParserFactory factory = ref.get();
+ if (factory == null) {
+ factory = doCreate();
+ if (!ref.compareAndSet(null, factory)) {
+ factory = ref.get();
}
- return factory;
}
+ return factory;
+ }
- private JsonParserFactory doCreate() {
- return (jsonp == null ? JsonProvider.provider() : jsonp).createParserFactory(emptyMap());
- }
- };
+ private JsonParserFactory doCreate() {
+ return (jsonp == null ? JsonProvider.provider() : jsonp).createParserFactory(emptyMap());
+ }
+ };
}
private ParameterizedType findPT(final Object s, final Class<?> type) {
http://git-wip-us.apache.org/repos/asf/johnzon/blob/25984cbe/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/JsonbAccessMode.java
----------------------------------------------------------------------
diff --git a/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/JsonbAccessMode.java b/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/JsonbAccessMode.java
index c785f03..3b020d2 100644
--- a/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/JsonbAccessMode.java
+++ b/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/JsonbAccessMode.java
@@ -100,7 +100,7 @@ public class JsonbAccessMode implements AccessMode, Closeable {
private final PropertyNamingStrategy naming;
private final String order;
private final PropertyVisibilityStrategy visibility;
- private final FieldAndMethodAccessMode delegate;
+ private final AccessMode delegate;
private final boolean caseSensitive;
private final Map<AdapterKey, Adapter<?, ?>> defaultConverters;
private final JohnzonAdapterFactory factory;
@@ -122,12 +122,12 @@ public class JsonbAccessMode implements AccessMode, Closeable {
public JsonbAccessMode(final PropertyNamingStrategy propertyNamingStrategy, final String orderValue,
final PropertyVisibilityStrategy visibilityStrategy, final boolean caseSensitive,
final Map<AdapterKey, Adapter<?, ?>> defaultConverters, final JohnzonAdapterFactory factory,
- final Supplier<JsonParserFactory> parserFactory) {
+ final Supplier<JsonParserFactory> parserFactory, final AccessMode delegate) {
this.naming = propertyNamingStrategy;
this.order = orderValue;
this.visibility = visibilityStrategy;
this.caseSensitive = caseSensitive;
- this.delegate = new FieldAndMethodAccessMode(true, true, false);
+ this.delegate = delegate;
this.defaultConverters = defaultConverters;
this.factory = factory;
this.parserFactory = parserFactory;
@@ -661,6 +661,9 @@ public class JsonbAccessMode implements AccessMode, Closeable {
@Override
public void close() throws IOException {
toRelease.forEach(JohnzonAdapterFactory.Instance::release);
+ if (Closeable.class.isInstance(delegate)) {
+ Closeable.class.cast(delegate).close();
+ }
toRelease.clear();
}
http://git-wip-us.apache.org/repos/asf/johnzon/blob/25984cbe/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MapperBuilder.java
----------------------------------------------------------------------
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 36e2e2c..09457cb 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
@@ -144,9 +144,6 @@ public class MapperBuilder {
if (pretty) {
config.put(JsonGenerator.PRETTY_PRINTING, true);
}
- if (autoAdjustStringBuffers) {
- config.put("org.apache.johnzon.auto-adjust-buffer", true);
- }
if (generatorFactory == null) {
generatorFactory = provider.createGeneratorFactory(config);
@@ -162,6 +159,9 @@ public class MapperBuilder {
if (bufferSize > 0) {
config.put(JsonParserFactoryImpl.BUFFER_LENGTH, bufferSize);
}
+ if (autoAdjustStringBuffers) {
+ config.put("org.apache.johnzon.auto-adjust-buffer", true);
+ }
if (readerFactory == null) {
readerFactory = provider.createReaderFactory(config);
}