Repository: johnzon Updated Branches: refs/heads/master 125cbf225 -> 68dc83757
JOHNZON-115 add SerializeValueFilter configuration for providers Project: http://git-wip-us.apache.org/repos/asf/johnzon/repo Commit: http://git-wip-us.apache.org/repos/asf/johnzon/commit/68dc8375 Tree: http://git-wip-us.apache.org/repos/asf/johnzon/tree/68dc8375 Diff: http://git-wip-us.apache.org/repos/asf/johnzon/diff/68dc8375 Branch: refs/heads/master Commit: 68dc83757910422ba5d81bd9b808c747117ea3fb Parents: 125cbf2 Author: rmannibucau <[email protected]> Authored: Wed Apr 19 11:18:22 2017 +0200 Committer: rmannibucau <[email protected]> Committed: Wed Apr 19 11:18:22 2017 +0200 ---------------------------------------------------------------------- .../johnzon/jaxrs/ConfigurableJohnzonProvider.java | 13 +++++++++++++ .../org/apache/johnzon/jsonb/JohnzonBuilder.java | 17 ++++++++++++++++- 2 files changed, 29 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/johnzon/blob/68dc8375/johnzon-jaxrs/src/main/java/org/apache/johnzon/jaxrs/ConfigurableJohnzonProvider.java ---------------------------------------------------------------------- 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 6e35b0a..f59d48e 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 @@ -19,6 +19,7 @@ package org.apache.johnzon.jaxrs; import org.apache.johnzon.mapper.MapperBuilder; +import org.apache.johnzon.mapper.SerializeValueFilter; import org.apache.johnzon.mapper.access.AccessMode; import javax.json.JsonReaderFactory; @@ -34,6 +35,7 @@ import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.lang.annotation.Annotation; +import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Type; import java.util.Comparator; import java.util.List; @@ -211,4 +213,15 @@ public class ConfigurableJohnzonProvider<T> implements MessageBodyWriter<T>, Mes public void setPrimitiveConverters(final boolean val) { builder.setPrimitiveConverters(val); } + + public void setSerializeValueFilter(final String val) { + try { + builder.setSerializeValueFilter(SerializeValueFilter.class.cast( + Thread.currentThread().getContextClassLoader().loadClass(val).getConstructor().newInstance())); + } catch (final InstantiationException | IllegalAccessException | NoSuchMethodException | ClassNotFoundException e) { + throw new IllegalArgumentException(e); + } catch (InvocationTargetException e) { + throw new IllegalArgumentException(e.getCause()); + } + } } http://git-wip-us.apache.org/repos/asf/johnzon/blob/68dc8375/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 3ac1cdf..36c21b6 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 @@ -51,6 +51,7 @@ import javax.json.spi.JsonProvider; import javax.json.stream.JsonGenerator; import javax.json.stream.JsonParserFactory; import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.lang.reflect.ParameterizedType; @@ -289,7 +290,21 @@ public class JohnzonBuilder implements JsonbBuilder { builder.setReadAttributeBeforeWrite( config.getProperty("johnzon.readAttributeBeforeWrite").map(Boolean.class::cast).orElse(false)); - config.getProperty("johnzon.serialize-value-filter").ifPresent(s -> builder.setSerializeValueFilter(SerializeValueFilter.class.cast(s))); + config.getProperty("johnzon.serialize-value-filter") + .map(s -> { + if (String.class.isInstance(s)) { + try { + return SerializeValueFilter.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 s; + }) + .ifPresent(s -> builder.setSerializeValueFilter(SerializeValueFilter.class.cast(s))); config.getProperty(JsonbConfig.SERIALIZERS).map(JsonbSerializer[].class::cast).ifPresent(serializers -> { Stream.of(serializers).forEach(s -> {
