aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/com
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com')
-rw-r--r--src/main/java/com/fasterxml/jackson/databind/deser/BeanDeserializerFactory.java14
-rw-r--r--src/main/java/com/fasterxml/jackson/databind/ser/BeanSerializerFactory.java15
-rw-r--r--src/main/java/com/fasterxml/jackson/databind/util/BeanUtil.java46
-rw-r--r--src/main/java/com/fasterxml/jackson/databind/util/ClassUtil.java7
4 files changed, 58 insertions, 24 deletions
diff --git a/src/main/java/com/fasterxml/jackson/databind/deser/BeanDeserializerFactory.java b/src/main/java/com/fasterxml/jackson/databind/deser/BeanDeserializerFactory.java
index 91e6ebc26..fcf93b1fa 100644
--- a/src/main/java/com/fasterxml/jackson/databind/deser/BeanDeserializerFactory.java
+++ b/src/main/java/com/fasterxml/jackson/databind/deser/BeanDeserializerFactory.java
@@ -12,6 +12,7 @@ import com.fasterxml.jackson.databind.exc.InvalidDefinitionException;
import com.fasterxml.jackson.databind.introspect.*;
import com.fasterxml.jackson.databind.jsontype.TypeDeserializer;
import com.fasterxml.jackson.databind.jsontype.impl.SubTypeValidator;
+import com.fasterxml.jackson.databind.util.BeanUtil;
import com.fasterxml.jackson.databind.util.ClassUtil;
import com.fasterxml.jackson.databind.util.SimpleBeanPropertyDefinition;
@@ -200,14 +201,11 @@ public class BeanDeserializerFactory
JavaType type, BeanDescription beanDesc)
throws JsonMappingException
{
- if (ClassUtil.isJava8TimeClass(type.getRawClass())) {
- // 05-May-2020, tatu: Should we check for possible Shape override to "POJO"?
- // (to let users force 'serialize-as-POJO'?
- return new UnsupportedTypeDeserializer(type,
-"Java 8 date/time type "+ClassUtil.getTypeDescription(type)
-+" not supported by default: please register module `jackson-datatype-jsr310` to add handling");
- }
- return null;
+ // 05-May-2020, tatu: Should we check for possible Shape override to "POJO"?
+ // (to let users force 'serialize-as-POJO'? Or not?
+ final String errorMsg = BeanUtil.checkUnsupportedType(type);
+ return (errorMsg == null) ? null
+ : new UnsupportedTypeDeserializer(type, errorMsg);
}
protected JavaType materializeAbstractType(DeserializationContext ctxt,
diff --git a/src/main/java/com/fasterxml/jackson/databind/ser/BeanSerializerFactory.java b/src/main/java/com/fasterxml/jackson/databind/ser/BeanSerializerFactory.java
index 043485cc8..e71f4fd70 100644
--- a/src/main/java/com/fasterxml/jackson/databind/ser/BeanSerializerFactory.java
+++ b/src/main/java/com/fasterxml/jackson/databind/ser/BeanSerializerFactory.java
@@ -20,6 +20,7 @@ import com.fasterxml.jackson.databind.ser.impl.UnsupportedTypeSerializer;
import com.fasterxml.jackson.databind.ser.std.MapSerializer;
import com.fasterxml.jackson.databind.ser.std.StdDelegatingSerializer;
import com.fasterxml.jackson.databind.type.ReferenceType;
+import com.fasterxml.jackson.databind.util.BeanUtil;
import com.fasterxml.jackson.databind.util.ClassUtil;
import com.fasterxml.jackson.databind.util.Converter;
@@ -825,14 +826,10 @@ public class BeanSerializerFactory
JavaType type, BeanDescription beanDesc)
throws JsonMappingException
{
- if (ClassUtil.isJava8TimeClass(type.getRawClass())) {
- // 05-May-2020, tatu: Should we check for possible Shape override to "POJO"?
- // (to let users force 'serialize-as-POJO'?
- return new UnsupportedTypeSerializer(type,
-"Java 8 date/time type "+ClassUtil.getTypeDescription(type)
-+" not supported by default: please register module `jackson-datatype-jsr310` to add handling");
- }
- return null;
-
+ // 05-May-2020, tatu: Should we check for possible Shape override to "POJO"?
+ // (to let users force 'serialize-as-POJO'?
+ final String errorMsg = BeanUtil.checkUnsupportedType(type);
+ return (errorMsg == null) ? null
+ : new UnsupportedTypeSerializer(type, errorMsg);
}
}
diff --git a/src/main/java/com/fasterxml/jackson/databind/util/BeanUtil.java b/src/main/java/com/fasterxml/jackson/databind/util/BeanUtil.java
index d381cdbf0..c58930bf6 100644
--- a/src/main/java/com/fasterxml/jackson/databind/util/BeanUtil.java
+++ b/src/main/java/com/fasterxml/jackson/databind/util/BeanUtil.java
@@ -289,4 +289,50 @@ public class BeanUtil
sb.append(basename, offset+1, end);
return sb.toString();
}
+
+ /*
+ /**********************************************************
+ /* Package-specific type detection for error handling
+ /**********************************************************
+ */
+
+ /**
+ * Helper method called by {@link com.fasterxml.jackson.databind.deser.BeanDeserializerFactory}
+ * and {@link com.fasterxml.jackson.databind.ser.BeanSerializerFactory} to check
+ * if given unrecognized type (to be (de)serialized as general POJO) is one of
+ * "well-known" types for which there would be a datatype module; and if so,
+ * return appropriate failure message to give to caller.
+ *
+ * @since 2.12
+ */
+ public static String checkUnsupportedType(JavaType type) {
+ final Class<?> rawType = type.getRawClass();
+ String typeName, moduleName;
+
+ if (isJava8TimeClass(rawType)) {
+ typeName = "Java 8 date/time";
+ moduleName = "com.fasterxml.jackson.datatype:jackson-datatype-jsr310";
+ } else if (isJodaTimeClass(rawType)) {
+ typeName = "Joda date/time";
+ moduleName = "com.fasterxml.jackson.datatype:jackson-datatype-joda";
+ } else {
+ return null;
+ }
+ return String.format("%s type %s not supported by default: add Module \"%s\" to enable handling",
+ typeName, ClassUtil.getTypeDescription(type), moduleName);
+ }
+
+ /**
+ * @since 2.12
+ */
+ public static boolean isJava8TimeClass(Class<?> rawType) {
+ return rawType.getName().startsWith("java.time.");
+ }
+
+ /**
+ * @since 2.12
+ */
+ public static boolean isJodaTimeClass(Class<?> rawType) {
+ return rawType.getName().startsWith("org.joda.time.");
+ }
}
diff --git a/src/main/java/com/fasterxml/jackson/databind/util/ClassUtil.java b/src/main/java/com/fasterxml/jackson/databind/util/ClassUtil.java
index a80b72a2a..78f5562e9 100644
--- a/src/main/java/com/fasterxml/jackson/databind/util/ClassUtil.java
+++ b/src/main/java/com/fasterxml/jackson/databind/util/ClassUtil.java
@@ -1088,13 +1088,6 @@ public final class ClassUtil
return rawType.getName().startsWith("java.");
}
- /**
- * @since 2.12
- */
- public static boolean isJava8TimeClass(Class<?> rawType) {
- return rawType.getName().startsWith("java.time.");
- }
-
/*
/**********************************************************
/* Access to various Class definition aspects; possibly