mirror of
https://github.com/alibaba/fastjson.git
synced 2026-10-17 05:12:08 +08:00
修复jdk9模块化导致的NoClassDefFoundError: java/sql/Timestamp
This commit is contained in:
@@ -429,13 +429,13 @@ public class JSONArray extends JSON implements List<Object>, Cloneable, RandomAc
|
||||
return castToDate(value);
|
||||
}
|
||||
|
||||
public java.sql.Date getSqlDate(int index) {
|
||||
public Object getSqlDate(int index) {
|
||||
Object value = get(index);
|
||||
|
||||
return castToSqlDate(value);
|
||||
}
|
||||
|
||||
public java.sql.Timestamp getTimestamp(int index) {
|
||||
public Object getTimestamp(int index) {
|
||||
Object value = get(index);
|
||||
|
||||
return castToTimestamp(value);
|
||||
|
||||
@@ -337,13 +337,13 @@ public class JSONObject extends JSON implements Map<String, Object>, Cloneable,
|
||||
return castToDate(value);
|
||||
}
|
||||
|
||||
public java.sql.Date getSqlDate(String key) {
|
||||
public Object getSqlDate(String key) {
|
||||
Object value = get(key);
|
||||
|
||||
return castToSqlDate(value);
|
||||
}
|
||||
|
||||
public java.sql.Timestamp getTimestamp(String key) {
|
||||
public Object getTimestamp(String key) {
|
||||
Object value = get(key);
|
||||
|
||||
return castToTimestamp(value);
|
||||
|
||||
@@ -31,6 +31,7 @@ import java.nio.charset.Charset;
|
||||
import java.security.AccessControlException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.Callable;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.ConcurrentMap;
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
@@ -401,12 +402,18 @@ public class ParserConfig {
|
||||
|
||||
}
|
||||
|
||||
private final Callable<Void> initDeserializersWithJavaSql = new Callable<Void>() {
|
||||
public Void call() {
|
||||
deserializers.put(java.sql.Timestamp.class, SqlDateDeserializer.instance_timestamp);
|
||||
deserializers.put(java.sql.Date.class, SqlDateDeserializer.instance);
|
||||
deserializers.put(java.sql.Time.class, TimeDeserializer.instance);
|
||||
deserializers.put(java.util.Date.class, DateCodec.instance);
|
||||
return null;
|
||||
}
|
||||
};
|
||||
|
||||
private void initDeserializers() {
|
||||
deserializers.put(SimpleDateFormat.class, MiscCodec.instance);
|
||||
deserializers.put(java.sql.Timestamp.class, SqlDateDeserializer.instance_timestamp);
|
||||
deserializers.put(java.sql.Date.class, SqlDateDeserializer.instance);
|
||||
deserializers.put(java.sql.Time.class, TimeDeserializer.instance);
|
||||
deserializers.put(java.util.Date.class, DateCodec.instance);
|
||||
deserializers.put(Calendar.class, CalendarCodec.instance);
|
||||
deserializers.put(XMLGregorianCalendar.class, CalendarCodec.instance);
|
||||
|
||||
@@ -482,6 +489,7 @@ public class ParserConfig {
|
||||
deserializers.put(Closeable.class, JavaObjectDeserializer.instance);
|
||||
|
||||
deserializers.put(JSONPObject.class, new JSONPDeserializer());
|
||||
ModuleUtil.callWhenHasJavaSql(initDeserializersWithJavaSql);
|
||||
}
|
||||
|
||||
private static String[] splitItemsFormProperty(final String property ){
|
||||
@@ -1155,28 +1163,37 @@ public class ParserConfig {
|
||||
return isPrimitive2(clazz);
|
||||
}
|
||||
|
||||
private static Function<Class<?>, Boolean> isPrimitiveFuncation = new Function<Class<?>, Boolean>() {
|
||||
public Boolean apply(Class<?> clazz) {
|
||||
return clazz == java.sql.Date.class //
|
||||
|| clazz == java.sql.Time.class //
|
||||
|| clazz == java.sql.Timestamp.class;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* @deprecated internal method, dont call
|
||||
*/
|
||||
public static boolean isPrimitive2(Class<?> clazz) {
|
||||
return clazz.isPrimitive() //
|
||||
|| clazz == Boolean.class //
|
||||
|| clazz == Character.class //
|
||||
|| clazz == Byte.class //
|
||||
|| clazz == Short.class //
|
||||
|| clazz == Integer.class //
|
||||
|| clazz == Long.class //
|
||||
|| clazz == Float.class //
|
||||
|| clazz == Double.class //
|
||||
|| clazz == BigInteger.class //
|
||||
|| clazz == BigDecimal.class //
|
||||
|| clazz == String.class //
|
||||
|| clazz == java.util.Date.class //
|
||||
|| clazz == java.sql.Date.class //
|
||||
|| clazz == java.sql.Time.class //
|
||||
|| clazz == java.sql.Timestamp.class //
|
||||
|| clazz.isEnum() //
|
||||
;
|
||||
public static boolean isPrimitive2(final Class<?> clazz) {
|
||||
Boolean primitive = clazz.isPrimitive() //
|
||||
|| clazz == Boolean.class //
|
||||
|| clazz == Character.class //
|
||||
|| clazz == Byte.class //
|
||||
|| clazz == Short.class //
|
||||
|| clazz == Integer.class //
|
||||
|| clazz == Long.class //
|
||||
|| clazz == Float.class //
|
||||
|| clazz == Double.class //
|
||||
|| clazz == BigInteger.class //
|
||||
|| clazz == BigDecimal.class //
|
||||
|| clazz == String.class //
|
||||
|| clazz == java.util.Date.class //
|
||||
|| clazz.isEnum() //
|
||||
;
|
||||
if (!primitive) {
|
||||
primitive = ModuleUtil.callWhenHasJavaSql(isPrimitiveFuncation, clazz);
|
||||
}
|
||||
return primitive != null ? primitive : false;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
package com.alibaba.fastjson.util;
|
||||
|
||||
public interface Function<ARG, V> {
|
||||
/**
|
||||
* Computes a result
|
||||
*
|
||||
* @return computed result
|
||||
*/
|
||||
V apply(ARG arg);
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
package com.alibaba.fastjson.util;
|
||||
|
||||
import java.util.concurrent.Callable;
|
||||
|
||||
public class ModuleUtil {
|
||||
private static boolean hasJavaSql = false;
|
||||
|
||||
static {
|
||||
try {
|
||||
Class.forName("java.sql.Time");
|
||||
hasJavaSql = true;
|
||||
} catch (Throwable e) {
|
||||
hasJavaSql = false;
|
||||
}
|
||||
}
|
||||
|
||||
public static <T> T callWhenHasJavaSql(Callable<T> callable) {
|
||||
if (hasJavaSql) {
|
||||
try {
|
||||
return callable.call();
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static <ARG, T> T callWhenHasJavaSql(Function<ARG, T> callable, ARG arg) {
|
||||
if (hasJavaSql) {
|
||||
return callable.apply(arg);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user