This repository was archived by the owner on Oct 23, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 6.5k
This repository was archived by the owner on Oct 23, 2024. It is now read-only.
在jdk17里使用fastjson反序列化Exception时,会抛出下面的异常,IgnoreErrorGetter配置不生效 #4077
Copy link
Copy link
Open
Description
java.lang.reflect.InaccessibleObjectException: Unable to make field private java.lang.Throwable java.lang.Throwable.cause accessible: module java.base does not "opens java.lang" to unnamed module @2dc96ada
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:354)
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297)
at java.base/java.lang.reflect.Field.checkCanSetAccessible(Field.java:178)
at java.base/java.lang.reflect.Field.setAccessible(Field.java:172)
at com.alibaba.fastjson.util.TypeUtils.setAccessible(TypeUtils.java:2510)
at com.alibaba.fastjson.util.FieldInfo.<init>(FieldInfo.java:196)
at com.alibaba.fastjson.util.FieldInfo.<init>(FieldInfo.java:115)
at com.alibaba.fastjson.util.TypeUtils.computeGetters(TypeUtils.java:2093)
at com.alibaba.fastjson.util.TypeUtils.buildBeanInfo(TypeUtils.java:1819)
at com.alibaba.fastjson.util.TypeUtils.buildBeanInfo(TypeUtils.java:1759)
at com.alibaba.fastjson.serializer.SerializeConfig.getObjectWriter(SerializeConfig.java:564)
at com.alibaba.fastjson.serializer.SerializeConfig.getObjectWriter(SerializeConfig.java:440)
at com.alibaba.fastjson.serializer.JSONSerializer.getObjectWriter(JSONSerializer.java:448)
at com.alibaba.fastjson.serializer.JSONSerializer.write(JSONSerializer.java:309)
at com.alibaba.fastjson.JSON.toJSONString(JSON.java:687)
at com.alibaba.fastjson.JSON.toJSONString(JSON.java:676)
com.alibaba.fastjson.util.TypeUtils 里的 catch AccessControlException 感觉要改为 Throwable,因为在jdk 17里抛出的异常是 java.lang.reflect.InaccessibleObjectException
static void setAccessible(AccessibleObject obj){
if(!setAccessibleEnable){
return;
}
if(obj.isAccessible()){
return;
}
try{
obj.setAccessible(true);
} catch(AccessControlException error){
setAccessibleEnable = false;
}
}