diff options
7 files changed, 41 insertions, 23 deletions
diff --git a/gson/src/main/java/org/onap/policy/common/gson/GsonMessageBodyHandler.java b/gson/src/main/java/org/onap/policy/common/gson/GsonMessageBodyHandler.java index ad270910..37d24177 100644 --- a/gson/src/main/java/org/onap/policy/common/gson/GsonMessageBodyHandler.java +++ b/gson/src/main/java/org/onap/policy/common/gson/GsonMessageBodyHandler.java @@ -37,6 +37,7 @@ import javax.ws.rs.core.MultivaluedMap; import javax.ws.rs.ext.MessageBodyReader; import javax.ws.rs.ext.MessageBodyWriter; import javax.ws.rs.ext.Provider; +import lombok.AccessLevel; import lombok.Getter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -54,7 +55,7 @@ public class GsonMessageBodyHandler implements MessageBodyReader<Object>, Messag /** * Object to be used to serialize and de-serialize. */ - @Getter + @Getter(AccessLevel.PROTECTED) private final Gson gson; /** @@ -62,17 +63,7 @@ public class GsonMessageBodyHandler implements MessageBodyReader<Object>, Messag * into Integer/Long, where possible. */ public GsonMessageBodyHandler() { - this(new GsonBuilder()); - } - - /** - * Constructs the object, using a Gson object that translates Doubles inside of Maps - * into Integer/Long, where possible. - * - * @param builder builder to use to create the gson object - */ - public GsonMessageBodyHandler(GsonBuilder builder) { - this(builder.registerTypeAdapterFactory(new MapDoubleAdapterFactory()).create()); + this(configBuilder(new GsonBuilder()).create()); } /** @@ -86,6 +77,17 @@ public class GsonMessageBodyHandler implements MessageBodyReader<Object>, Messag logger.info("Using GSON for REST calls"); } + /** + * Configures a builder with the adapters normally used by this handler (e.g., mapper + * that converts Double to Integer). + * + * @param builder builder to be configured + * @return the configured builder + */ + public static GsonBuilder configBuilder(GsonBuilder builder) { + return builder.registerTypeAdapterFactory(new MapDoubleAdapterFactory()); + } + @Override public boolean isWriteable(Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) { return canHandle(mediaType); diff --git a/gson/src/main/java/org/onap/policy/common/gson/JacksonHandler.java b/gson/src/main/java/org/onap/policy/common/gson/JacksonHandler.java index 6d946439..6df5ad2e 100644 --- a/gson/src/main/java/org/onap/policy/common/gson/JacksonHandler.java +++ b/gson/src/main/java/org/onap/policy/common/gson/JacksonHandler.java @@ -20,6 +20,7 @@ package org.onap.policy.common.gson; +import com.google.gson.Gson; import com.google.gson.GsonBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -36,20 +37,30 @@ public class JacksonHandler extends GsonMessageBodyHandler { * Constructs the object. */ public JacksonHandler() { - this(new GsonBuilder()); + this(configBuilder(new GsonBuilder()).create()); + } + /** + * Constructs the object. + * + * @param gson the Gson object to be used to serialize and de-serialize + */ + public JacksonHandler(Gson gson) { + super(gson); logger.info("Using GSON with Jackson behaviors for REST calls"); } /** - * Constructs the object. - * @param builder builder to use to create the gson object + * Configures a builder with the adapters normally used by this handler (e.g., + * adapters for GsonJsonXxx annotations). + * + * @param builder builder to be configured + * @return the configured builder */ - public JacksonHandler(GsonBuilder builder) { - super(builder - .registerTypeAdapterFactory(new JacksonFieldAdapterFactory()) + public static GsonBuilder configBuilder(GsonBuilder builder) { + return builder.registerTypeAdapterFactory(new JacksonFieldAdapterFactory()) .registerTypeAdapterFactory(new JacksonMethodAdapterFactory()) - .setExclusionStrategies(new JacksonExclusionStrategy())); + .registerTypeAdapterFactory(new MapDoubleAdapterFactory()) + .setExclusionStrategies(new JacksonExclusionStrategy()); } - } diff --git a/policy-endpoints/src/main/java/org/onap/policy/common/endpoints/http/server/YamlJacksonHandler.java b/policy-endpoints/src/main/java/org/onap/policy/common/endpoints/http/server/YamlJacksonHandler.java index 0cab374f..f71aa90f 100644 --- a/policy-endpoints/src/main/java/org/onap/policy/common/endpoints/http/server/YamlJacksonHandler.java +++ b/policy-endpoints/src/main/java/org/onap/policy/common/endpoints/http/server/YamlJacksonHandler.java @@ -20,6 +20,7 @@ package org.onap.policy.common.endpoints.http.server; +import com.google.gson.GsonBuilder; import javax.ws.rs.Consumes; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; @@ -40,7 +41,8 @@ public class YamlJacksonHandler extends YamlMessageBodyHandler { * Translator to be used. We want a GSON object that's configured the same way as it * is in {@link JacksonHandler}, so just get it from there. */ - private static final YamlJsonTranslator TRANS = new YamlJsonTranslator(new JacksonHandler().getGson()); + private static final YamlJsonTranslator TRANS = + new YamlJsonTranslator(JacksonHandler.configBuilder(new GsonBuilder()).create()); /** * Constructs the object. diff --git a/policy-endpoints/src/main/java/org/onap/policy/common/endpoints/http/server/YamlMessageBodyHandler.java b/policy-endpoints/src/main/java/org/onap/policy/common/endpoints/http/server/YamlMessageBodyHandler.java index 89aa8ff6..8506a283 100644 --- a/policy-endpoints/src/main/java/org/onap/policy/common/endpoints/http/server/YamlMessageBodyHandler.java +++ b/policy-endpoints/src/main/java/org/onap/policy/common/endpoints/http/server/YamlMessageBodyHandler.java @@ -20,6 +20,7 @@ package org.onap.policy.common.endpoints.http.server; +import com.google.gson.GsonBuilder; import com.google.gson.JsonSyntaxException; import java.io.IOException; import java.io.InputStream; @@ -60,7 +61,7 @@ public class YamlMessageBodyHandler implements MessageBodyReader<Object>, Messag * from there. */ private static final YamlJsonTranslator DEFAULT_TRANSLATOR = - new YamlJsonTranslator(new GsonMessageBodyHandler().getGson()); + new YamlJsonTranslator(GsonMessageBodyHandler.configBuilder(new GsonBuilder()).create()); private final YamlJsonTranslator translator; diff --git a/policy-endpoints/src/test/java/org/onap/policy/common/endpoints/http/server/test/HttpServerTest.java b/policy-endpoints/src/test/java/org/onap/policy/common/endpoints/http/server/test/HttpServerTest.java index 6dee6f1f..82faa052 100644 --- a/policy-endpoints/src/test/java/org/onap/policy/common/endpoints/http/server/test/HttpServerTest.java +++ b/policy-endpoints/src/test/java/org/onap/policy/common/endpoints/http/server/test/HttpServerTest.java @@ -509,6 +509,7 @@ public class HttpServerTest { conn.setRequestMethod("POST"); conn.setDoOutput(true); conn.setRequestProperty("Content-Type", mediaType); + conn.setRequestProperty("Accept", mediaType); IOUtils.write(post, conn.getOutputStream()); return response(conn); } diff --git a/policy-endpoints/src/test/java/org/onap/policy/common/endpoints/http/server/test/RestServerTest.java b/policy-endpoints/src/test/java/org/onap/policy/common/endpoints/http/server/test/RestServerTest.java index 519bbd1d..959945b9 100644 --- a/policy-endpoints/src/test/java/org/onap/policy/common/endpoints/http/server/test/RestServerTest.java +++ b/policy-endpoints/src/test/java/org/onap/policy/common/endpoints/http/server/test/RestServerTest.java @@ -265,6 +265,7 @@ public class RestServerTest { String auth = params.getUserName() + ":" + params.getPassword(); conn.setRequestProperty("Authorization", "Basic " + Base64.getEncoder().encodeToString(auth.getBytes())); conn.setRequestProperty("Content-type", mediaType); + conn.setRequestProperty("Accept", mediaType); conn.connect(); try (PrintWriter wtr = new PrintWriter(conn.getOutputStream())) { diff --git a/utils-test/src/main/java/org/onap/policy/common/utils/gson/GsonTestUtilsBuilder.java b/utils-test/src/main/java/org/onap/policy/common/utils/gson/GsonTestUtilsBuilder.java index 1f697fdb..dcf27750 100644 --- a/utils-test/src/main/java/org/onap/policy/common/utils/gson/GsonTestUtilsBuilder.java +++ b/utils-test/src/main/java/org/onap/policy/common/utils/gson/GsonTestUtilsBuilder.java @@ -37,7 +37,7 @@ public class GsonTestUtilsBuilder { gsonBldr = new GsonBuilder(); // register jackson behaviors with the builder - new JacksonHandler(gsonBldr); + JacksonHandler.configBuilder(gsonBldr); } /** |