alibaba / alibaba/fastjson2

[BUG] Windows java 8 parseObject 失败

Open
#7,637 1 comment 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

### 问题描述
*简要描述您碰到的问题。*

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

- OS信息: Windows 11
- JDK信息: corretto-1.8.0_492
- 版本信息:2.0.61

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

```java
public class Test {

public class A {
private String a = "";

public String getA() {
return a;
}

public void setA(String a) {
this.a = a;
}

}

@Test
public void test() {
A result = JSON.parseObject("{}".getBytes(StandardCharsets.UTF_8), A.class);
assertNotNull(result);
}
}
```

### 期待的正确结果
正常解析

### 相关日志输出

```
java.lang.RuntimeException: Failed to create lambda for method: public void org.apache.rocketmq.remoting.protocol.body.ConsumerOffsetSerializeWrapperTest$A.setA(java.lang.String)

at com.alibaba.fastjson2.introspect.PropertyAccessorFactoryLambda.setObject(PropertyAccessorFactoryLambda.java:738)
at com.alibaba.fastjson2.introspect.PropertyAccessorFactoryLambda.create(PropertyAccessorFactoryLambda.java:310)
at com.alibaba.fastjson2.introspect.PropertyAccessorFactory.create(PropertyAccessorFactory.java:2808)
at com.alibaba.fastjson2.reader.FieldReader.createPropertyAccessor(FieldReader.java:176)
at com.alibaba.fastjson2.reader.FieldReader.(FieldReader.java:121)
at com.alibaba.fastjson2.reader.FieldReaderString.(FieldReaderString.java:34)
at com.alibaba.fastjson2.reader.ObjectReaderCreator.createFieldReaderMethod(ObjectReaderCreator.java:2820)
at com.alibaba.fastjson2.reader.ObjectReaderCreator.createFieldReader(ObjectReaderCreator.java:1787)
at com.alibaba.fastjson2.reader.ObjectReaderCreator.lambda$createFieldReaders$2(ObjectReaderCreator.java:1896)
at com.alibaba.fastjson2.util.BeanUtils.setters(BeanUtils.java:626)
at com.alibaba.fastjson2.reader.ObjectReaderCreator.createFieldReaders(ObjectReaderCreator.java:1892)
at com.alibaba.fastjson2.reader.ObjectReaderCreatorASM.createObjectReader(ObjectReaderCreatorASM.java:229)
at com.alibaba.fastjson2.reader.ObjectReaderProvider.getObjectReaderInternal(ObjectReaderProvider.java:1148)
at com.alibaba.fastjson2.reader.ObjectReaderProvider.getObjectReader(ObjectReaderProvider.java:1066)
at com.alibaba.fastjson2.JSON.parseObject(JSON.java:1656)
at org.apache.rocketmq.remoting.protocol.body.ConsumerOffsetSerializeWrapperTest.testDecodeUnquotedFieldNames(ConsumerOffsetSerializeWrapperTest.java:28)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)
at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:73)
at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38)
at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11)
at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35)
at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:225)
at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:61)
Caused by: java.lang.invoke.LambdaConversionException: Invalid caller: org.apache.rocketmq.remoting.protocol.body.ConsumerOffsetSerializeWrapperTest$A
at java.lang.invoke.AbstractValidatingLambdaMetafactory.(AbstractValidatingLambdaMetafactory.java:118)
at java.lang.invoke.InnerClassLambdaMetafactory.(InnerClassLambdaMetafactory.java:155)
at java.lang.invoke.LambdaMetafactory.metafactory(LambdaMetafactory.java:299)
at com.alibaba.fastjson2.introspect.PropertyAccessorFactoryLambda.setObject(PropertyAccessorFactoryLambda.java:729)
... 42 more
```

#### 附加信息
linux无问题,windows下2.0.59版本无问题

Contributor guide

Open the contributing guide

Research direction

Start with the JSON.parseObject call in ConsumerOffsetSerializeWrapperTest.java at line 28 and trace the failure through PropertyAccessorFactoryLambda.java, especially lines 729 and 738. Reproduce it on Windows with JDK 8 and compare behavior with Linux and version 2.0.59. Done means the provided A class can parse {} successfully on Windows JDK 8.

Written by the indexing model from the issue text.

Assessment

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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.