From 8d058e0e53660aa0982e58042551363f90c67be9 Mon Sep 17 00:00:00 2001
From: Rick Herrick <jrherrick@wustl.edu>
Date: Mon, 9 May 2016 21:43:52 -0500
Subject: [PATCH] Added Hibernate 4 module to JSON serializer/deserializer to
 remove proxy properties in serialized JSON.

---
 build.gradle                                         |  1 +
 .../java/org/nrg/xnat/configuration/WebConfig.java   | 12 +++++++++---
 .../java/org/nrg/xnat/initialization/RootConfig.java |  3 +++
 3 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/build.gradle b/build.gradle
index b0f73e81..c4358a0c 100644
--- a/build.gradle
+++ b/build.gradle
@@ -327,6 +327,7 @@ dependencies {
     compile "com.fasterxml.jackson.core:jackson-core:${vJackson}"
     compile "com.fasterxml.jackson.core:jackson-databind:${vJackson}"
     compile "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:${vJackson}"
+    compile "com.fasterxml.jackson.datatype:jackson-datatype-hibernate4:${vJackson}"
     compile "org.json:json:20151123"
     compile "xerces:xercesImpl:2.11.0"
 
diff --git a/src/main/java/org/nrg/xnat/configuration/WebConfig.java b/src/main/java/org/nrg/xnat/configuration/WebConfig.java
index ae542c22..bf51d790 100644
--- a/src/main/java/org/nrg/xnat/configuration/WebConfig.java
+++ b/src/main/java/org/nrg/xnat/configuration/WebConfig.java
@@ -1,6 +1,9 @@
 package org.nrg.xnat.configuration;
 
 import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import com.fasterxml.jackson.datatype.hibernate4.Hibernate4Module;
 import org.nrg.framework.annotations.XapiRestController;
 import org.nrg.xnat.spawner.configuration.SpawnerConfig;
 import org.slf4j.Logger;
@@ -35,9 +38,12 @@ import springfox.documentation.swagger2.annotations.EnableSwagger2;
 public class WebConfig extends WebMvcConfigurerAdapter {
     @Bean
     public Jackson2ObjectMapperBuilder objectMapperBuilder() {
-        Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();
-        builder.serializationInclusion(JsonInclude.Include.NON_NULL);
-        return builder;
+        return new Jackson2ObjectMapperBuilder()
+                .serializationInclusion(JsonInclude.Include.NON_NULL)
+                .failOnEmptyBeans(false)
+                .featuresToEnable(JsonParser.Feature.ALLOW_SINGLE_QUOTES, JsonParser.Feature.ALLOW_YAML_COMMENTS)
+                .featuresToDisable(SerializationFeature.FAIL_ON_EMPTY_BEANS, SerializationFeature.WRITE_NULL_MAP_VALUES)
+                .modules(new Hibernate4Module());
     }
 
     @Override
diff --git a/src/main/java/org/nrg/xnat/initialization/RootConfig.java b/src/main/java/org/nrg/xnat/initialization/RootConfig.java
index a7cb0e50..c29194b1 100644
--- a/src/main/java/org/nrg/xnat/initialization/RootConfig.java
+++ b/src/main/java/org/nrg/xnat/initialization/RootConfig.java
@@ -8,6 +8,7 @@ import com.fasterxml.jackson.core.util.DefaultPrettyPrinter;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.SerializationFeature;
 import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
+import com.fasterxml.jackson.datatype.hibernate4.Hibernate4Module;
 import org.nrg.framework.datacache.SerializerRegistry;
 import org.nrg.framework.exceptions.NrgServiceException;
 import org.nrg.framework.services.ContextService;
@@ -72,6 +73,7 @@ public class RootConfig {
         mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
         mapper.configure(SerializationFeature.WRITE_NULL_MAP_VALUES, false);
         mapper.configure(JsonParser.Feature.ALLOW_YAML_COMMENTS, true);
+        mapper.registerModule(new Hibernate4Module());
         return mapper;
     }
 
@@ -83,6 +85,7 @@ public class RootConfig {
         mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
         mapper.configure(SerializationFeature.WRITE_NULL_MAP_VALUES, false);
         mapper.configure(JsonParser.Feature.ALLOW_YAML_COMMENTS, true);
+        mapper.registerModule(new Hibernate4Module());
         return mapper;
     }
 
-- 
GitLab