alibaba / alibaba/fastjson2

[BUG] 反序列化类型转换错误

Open
#7,748 0 comments 0 reactions 0 assignees View on GitHub
bug
Dominant language
Java
Stars
4.4k
Forks
613
Avg merge
1d 22h
Merged PRs (30d)
6

Description

### 问题描述
*简要描述您碰到的问题。*
一个tomcat 部署两个web应用,在使用JSON.parseObject(String text, Class clazz) 时,遇到下面的错误
class xxx..Generator cannot be cast to class xxx..Generator (xxx..Generator is in unnamed module of loader org.apache.catalina.loader.ParallelWebappClassLoader @77d43ca5; xxx..Generator is in unnamed module of loader org.apache.catalina.loader.ParallelWebappClassLoader @700983ed)

入参 Class 对应的类,两个web应用使用各自的ParallelWebappClassLoader 类加载器加载的,但反序列化时,生成的成员属性所属类归属的classloader不一致,导致类型转换异常

### 环境信息
*请填写以下信息:*

- OS信息: [e.g.:CentOS 8.4.2105 4Core 3.10GHz 16 GB]
- JDK信息: Openjdk 21
- 版本信息:Fastjson2 2.0.52

### 重现步骤
*如何操作可以重现该问题:*

1. 使用 `JSON.parseObject()` 方法
2. 输入 `...` 数据
3. 出现 `...` 错误
```java
public class Data
{
private Generator generator;
}

JSON.parseObject("{\"generator\":{}}", Data.class);
```

### 期待的正确结果
*对您期望发生的结果进行清晰简洁的描述。*

### 相关日志输出
*请复制并粘贴任何相关的日志输出。*

#### 附加信息
*如果你还有其他需要提供的信息,可以在这里填写(可以提供截图、视频等)。*

Contributor guide

Open the contributing guide

Research direction

Start at the JSON.parseObject(String, Class) deserialization path and reproduce the Data/Generator example with two Tomcat web applications using separate ParallelWebappClassLoader instances. Trace how the Generator member type is resolved during deserialization. Done means the example no longer fails with a class-cast error under Fastjson2 2.0.52 and a regression test covers the classloader setup.

Written by the indexing model from the issue text.

Assessment

Tech stack
java
Domain
backend
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
48/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.