[BUG] Windows java 8 parseObject 失败
- 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
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