aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJim Hahn <jrh3@att.com>2019-09-16 11:38:20 -0400
committerJim Hahn <jrh3@att.com>2019-09-16 12:27:50 -0400
commit00ab9f38e08643acda3b560e01236ced0d77d5c2 (patch)
treeae1e560e9918be4de1dbbacad0e144f589ec761d
parentaf2e4018c92b0fb311f60dfe507335b12e2935a4 (diff)
Eliminate constructors with side-effects
Several of the Gson and Jackson handlers take a GsonBuilder, which they then configure with additional adapters prior to create a Gson object that they subsequently use. The code has been modified so that the constructors no longer take a GsonBuilder, thus eliminating the side-effects that they had on the builders. Instead, a configBuilder() method has been added to the handler classes that makes it clear tht they modify the GsonBuilder. This also has the advantage that classes that want a Gson object configured per a given handler need only call that handler's configBuilder() method; previously, they had to constructor the handler and then retrieve its gson object. Also updated a few tests to specify the HTTP "Accept" header to ensure that return results are in yaml format. Change-Id: I2ef98198041ff9f73913d01ee6ee14ecf20ba617 Issue-ID: POLICY-2081 Signed-off-by: Jim Hahn <jrh3@att.com>
-rw-r--r--gson/src/main/java/org/onap/policy/common/gson/GsonMessageBodyHandler.java26
-rw-r--r--gson/src/main/java/org/onap/policy/common/gson/JacksonHandler.java27
-rw-r--r--policy-endpoints/src/main/java/org/onap/policy/common/endpoints/http/server/YamlJacksonHandler.java4
-rw-r--r--policy-endpoints/src/main/java/org/onap/policy/common/endpoints/http/server/YamlMessageBodyHandler.java3
-rw-r--r--policy-endpoints/src/test/java/org/onap/policy/common/endpoints/http/server/test/HttpServerTest.java1
-rw-r--r--policy-endpoints/src/test/java/org/onap/policy/common/endpoints/http/server/test/RestServerTest.java1
-rw-r--r--utils-test/src/main/java/org/onap/policy/common/utils/gson/GsonTestUtilsBuilder.java2
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);
}
/**