From 19d29cd8367ecaad773d02a6db0fe79794a325bf Mon Sep 17 00:00:00 2001 From: rob bygrave Date: Fri, 26 Oct 2018 14:50:17 +1300 Subject: [PATCH] #1514 - Add support for JacksonAnnotations at bean-properties Fix where Jackson is not present on the classpath --- .../deploy/meta/DeployBeanDescriptor.java | 6 +--- .../deploy/meta/DeployBeanObtainJackson.java | 30 +++++++++++++++++++ 2 files changed, 31 insertions(+), 5 deletions(-) create mode 100644 src/main/java/io/ebeaninternal/server/deploy/meta/DeployBeanObtainJackson.java diff --git a/src/main/java/io/ebeaninternal/server/deploy/meta/DeployBeanDescriptor.java b/src/main/java/io/ebeaninternal/server/deploy/meta/DeployBeanDescriptor.java index 9f26a4f34..18873232a 100644 --- a/src/main/java/io/ebeaninternal/server/deploy/meta/DeployBeanDescriptor.java +++ b/src/main/java/io/ebeaninternal/server/deploy/meta/DeployBeanDescriptor.java @@ -3,7 +3,6 @@ package io.ebeaninternal.server.deploy.meta; import io.ebean.annotation.Cache; import io.ebean.annotation.DocStore; import io.ebean.annotation.DocStoreMode; -import io.ebean.annotation.PartitionMode; import io.ebean.config.ServerConfig; import io.ebean.config.TableName; import io.ebean.config.dbplatform.IdType; @@ -1260,10 +1259,7 @@ public class DeployBeanDescriptor { */ public Object /*AnnotatedClass*/ getJacksonAnnotatedClass() { if (jacksonAnnotatedClass == null) { - com.fasterxml.jackson.databind.ObjectMapper objectMapper = (com.fasterxml.jackson.databind.ObjectMapper) serverConfig.getObjectMapper(); - com.fasterxml.jackson.databind.JavaType javaType = objectMapper.getTypeFactory().constructType(beanType); - jacksonAnnotatedClass = com.fasterxml.jackson.databind.introspect.AnnotatedClassResolver - .resolve(objectMapper.getDeserializationConfig(), javaType, objectMapper.getDeserializationConfig()); + jacksonAnnotatedClass = new DeployBeanObtainJackson(serverConfig, beanType).obtain(); } return jacksonAnnotatedClass; } diff --git a/src/main/java/io/ebeaninternal/server/deploy/meta/DeployBeanObtainJackson.java b/src/main/java/io/ebeaninternal/server/deploy/meta/DeployBeanObtainJackson.java new file mode 100644 index 000000000..9526c2aa2 --- /dev/null +++ b/src/main/java/io/ebeaninternal/server/deploy/meta/DeployBeanObtainJackson.java @@ -0,0 +1,30 @@ +package io.ebeaninternal.server.deploy.meta; + +import com.fasterxml.jackson.databind.JavaType; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.introspect.AnnotatedClassResolver; +import io.ebean.config.ServerConfig; + +/** + * Used to obtain the Jackson AnnotatedClass for a given bean type utlimately to obtain field level Jackson annotations. + */ +class DeployBeanObtainJackson { + + private final ServerConfig serverConfig; + private final Class beanType; + + DeployBeanObtainJackson(ServerConfig serverConfig, Class beanType) { + this.serverConfig = serverConfig; + this.beanType = beanType; + } + + /** + * Return the Jackson AnnotatedClass for the given bean type. + */ + Object obtain() { + + ObjectMapper objectMapper = (ObjectMapper) serverConfig.getObjectMapper(); + JavaType javaType = objectMapper.getTypeFactory().constructType(beanType); + return AnnotatedClassResolver.resolve(objectMapper.getDeserializationConfig(), javaType, objectMapper.getDeserializationConfig()); + } +}