aboutsummaryrefslogtreecommitdiffstats
path: root/utils/src/main
diff options
context:
space:
mode:
authorJim Hahn <jrh3@att.com>2019-02-04 18:19:15 -0500
committerJim Hahn <jrh3@att.com>2019-02-05 15:38:49 -0500
commit20f911459a62058b854d0379acb348b93b56ede5 (patch)
treeedb1dc00c3594db59b5fcf0821c4b1a4300e4ae6 /utils/src/main
parentbda6bcb4f61cd4b42b216db9a9b2c7dcaa72997e (diff)
Skip all fields in gson by default
Created an exclusion strategy that will prevent gson from serializing any fields within a class. The strategy must be registered to take effect. Uses lists to identify classes to be excluded when using gson with the jackson default behavior. Change-Id: I747fb1159846ad3000f69603f9b5d3f03bc8764f Issue-ID: POLICY-1428 Signed-off-by: Jim Hahn <jrh3@att.com>
Diffstat (limited to 'utils/src/main')
-rw-r--r--utils/src/main/java/org/onap/policy/common/utils/gson/JacksonExclusionStrategy.java104
1 files changed, 104 insertions, 0 deletions
diff --git a/utils/src/main/java/org/onap/policy/common/utils/gson/JacksonExclusionStrategy.java b/utils/src/main/java/org/onap/policy/common/utils/gson/JacksonExclusionStrategy.java
new file mode 100644
index 00000000..96213a65
--- /dev/null
+++ b/utils/src/main/java/org/onap/policy/common/utils/gson/JacksonExclusionStrategy.java
@@ -0,0 +1,104 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP
+ * ================================================================================
+ * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.common.utils.gson;
+
+import com.google.gson.ExclusionStrategy;
+import com.google.gson.FieldAttributes;
+import com.google.gson.JsonElement;
+import java.lang.reflect.GenericArrayType;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Excludes all fields from serialization/deserialization, if the class is managed.
+ */
+public class JacksonExclusionStrategy implements ExclusionStrategy {
+
+ /**
+ * Classes that are explicitly not managed by the GSON jackson adapters.
+ */
+ // @formatter:off
+ private static final Set<Class<?>> unmanaged = new HashSet<>(Arrays.asList(
+ boolean.class,
+ byte.class,
+ short.class,
+ int.class,
+ long.class,
+ float.class,
+ double.class,
+ char.class,
+ Boolean.class,
+ Byte.class,
+ Short.class,
+ Integer.class,
+ Long.class,
+ Float.class,
+ Double.class,
+ Character.class,
+ String.class));
+ // @formatter:on
+
+ /**
+ * Classes whose subclasses are explicitly not managed by the GSON jackson adapters.
+ */
+ // @formatter:off
+ private static final Set<Class<?>> unmanagedSuper = new HashSet<>(Arrays.asList(
+ GenericArrayType.class,
+ Map.class,
+ Collection.class,
+ JsonElement.class));
+ // @formatter:on
+
+ @Override
+ public boolean shouldSkipField(FieldAttributes attrs) {
+ return isManaged(attrs.getDeclaringClass());
+ }
+
+ @Override
+ public boolean shouldSkipClass(Class<?> clazz) {
+ return false;
+ }
+
+ /**
+ * Determines if a class is managed by this adapter, which typically means that it is
+ * <i>not</i> a generic class such as {@link JsonElement} or some type of collection.
+ *
+ * @param clazz the class to be examined
+ * @return {@code true} if the class is managed by this adapter, {@code false}
+ * otherwise
+ */
+ public static boolean isManaged(Class<?> clazz) {
+ if (clazz.isArray() || clazz.isEnum() || clazz.isPrimitive() || unmanaged.contains(clazz)) {
+ return false;
+ }
+
+ for (Class<?> sup : unmanagedSuper) {
+ if (sup.isAssignableFrom(clazz)) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+}