[Bug] java.util.ArrayList cannot be assigned to 'java.util.List'
- Dominant language
- Java
- Stars
- 41.6k
- Forks
- 26.4k
- Avg merge
- 15h 13m
- Merged PRs (30d)
- 4
Description
### Pre-check
- [X] I am sure that all the content I provide is in English.
### Search before asking
- [X] I had searched in the [issues](https://github.com/apache/dubbo/issues?q=is%3Aissue) and found no similar issues.
### Apache Dubbo Component
Java SDK (apache/dubbo)
### Dubbo Version
dubbo 3.0.11
jdk 1.8
mac 14.2
### Steps to reproduce this issue
When provider throw a custom exception, then consumer get a exception :
```
org.apache.dubbo.rpc.RpcException: Failfast invoke providers DefaultServiceInstance{serviceName='bss-security-service', host='10.73.195.73', ....}, cause: org.apache.dubbo.remoting.RemotingException: com.alibaba.com.caucho.hessian.io.HessianFieldException: java.lang.Throwable.suppressedExceptions: java.util.ArrayList cannot be assigned to 'java.util.List'
com.alibaba.com.caucho.hessian.io.HessianFieldException: java.lang.Throwable.suppressedExceptions: java.util.ArrayList cannot be assigned to 'java.util.List'
at com.alibaba.com.caucho.hessian.io.JavaDeserializer.logDeserializeError(JavaDeserializer.java:172)
at com.alibaba.com.caucho.hessian.io.JavaDeserializer$ObjectListFieldDeserializer.deserialize(JavaDeserializer.java:534)
at com.alibaba.com.caucho.hessian.io.JavaDeserializer.readObject(JavaDeserializer.java:277)
...
Caused by: java.lang.IllegalAccessException: class com.alibaba.com.caucho.hessian.io.JavaDeserializer$ObjectListFieldDeserializer cannot access a member of class java.lang.Throwable (in module java.base) with modifiers "private"
at java.base/jdk.internal.reflect.Reflection.newIllegalAccessException(Reflection.java:394)
at java.base/java.lang.reflect.AccessibleObject.checkAccess(AccessibleObject.java:674)
at java.base/java.lang.reflect.Field.checkAccess(Field.java:1140)
at java.base/java.lang.reflect.Field.set(Field.java:817)
at com.alibaba.com.caucho.hessian.io.JavaDeserializer$ObjectListFieldDeserializer.deserialize(JavaDeserializer.java:532)
... 81 more
Caused by: java.util.concurrent.ExecutionException: org.apache.dubbo.remoting.RemotingException: com.alibaba.com.caucho.hessian.io.HessianFieldException: java.lang.Throwable.suppressedExceptions: java.util.ArrayList cannot be assigned to 'java.util.List'
com.alibaba.com.caucho.hessian.io.HessianFieldException: java.lang.Throwable.suppressedExceptions: java.util.ArrayList cannot be assigned to 'java.util.List'
at com.alibaba.com.caucho.hessian.io.JavaDeserializer.logDeserializeError(JavaDeserializer.java:172)
at com.alibaba.com.caucho.hessian.io.JavaDeserializer$ObjectListFieldDeserializer.deserialize(JavaDeserializer.java:534)
at com.alibaba.com.caucho.hessian.io.JavaDeserializer.readObject(JavaDeserializer.java:277)
at com.alibaba.com.caucho.hessian.io.JavaDeserializer.readObject(JavaDeserializer.java:204)
at com.alibaba.com.caucho.hessian.io.SerializerFactory.readObject(SerializerFactory.java:548)
...
Caused by: java.lang.IllegalAccessException: class com.alibaba.com.caucho.hessian.io.JavaDeserializer$ObjectListFieldDeserializer cannot access a member of class java.lang.Throwable (in module java.base) with modifiers "private"
at java.base/jdk.internal.reflect.Reflection.newIllegalAccessException(Reflection.java:394)
at java.base/java.lang.reflect.AccessibleObject.checkAccess(AccessibleObject.java:674)
at java.base/java.lang.reflect.Field.checkAccess(Field.java:1140)
at java.base/java.lang.reflect.Field.set(Field.java:817)
at com.alibaba.com.caucho.hessian.io.JavaDeserializer$ObjectListFieldDeserializer.deserialize(JavaDeserializer.java:532)
...
Caused by: org.apache.dubbo.remoting.RemotingException: com.alibaba.com.caucho.hessian.io.HessianFieldException: java.lang.Throwable.suppressedExceptions: java.util.ArrayList cannot be assigned to 'java.util.List'
com.alibaba.com.caucho.hessian.io.HessianFieldException: java.lang.Throwable.suppressedExceptions: java.util.ArrayList cannot be assigned to 'java.util.List'
at com.alibaba.com.caucho.hessian.io.JavaDeserializer.logDeserializeError(JavaDeserializer.java:172)
at com.alibaba.com.caucho.hessian.io.JavaDeserializer$ObjectListFieldDeserializer.deserialize(JavaDeserializer.java:534)
at com.alibaba.com.caucho.hessian.io.JavaDeserializer.readObject(JavaDeserializer.java:277)
at com.alibaba.com.caucho.hessian.io.JavaDeserializer.readObject(JavaDeserializer.java:204)
at com.alibaba.com.caucho.hessian.io.SerializerFactory.readObject(SerializerFactory.java:548)
at com.alibaba.com.caucho.hessian.io.Hessian2Input.readObjectInstance(Hessian2Input.java:2850)
...
Caused by: java.lang.IllegalAccessException: class com.alibaba.com.caucho.hessian.io.JavaDeserializer$ObjectListFieldDeserializer cannot access a member of class java.lang.Throwable (in module java.base) with modifiers "private"
at java.base/jdk.internal.reflect.Reflection.newIllegalAccessException(Reflection.java:394)
at java.base/java.lang.reflect.AccessibleObject.checkAccess(AccessibleObject.java:674)
at java.base/java.lang.reflect.Field.checkAccess(Field.java:1140)
at java.base/java.lang.reflect.Field.set(Field.java:817)
at com.alibaba.com.caucho.hessian.io.JavaDeserializer$ObjectListFieldDeserializer.deserialize(JavaDeserializer.java:532)
... 81 more
```
### What you expected to happen
A right exception or tips.
### Anything else
dubbo service method:
BaseResponseDTO changeSecurityStatus(Integer market, String securityCode, Integer securityStatus);
consumer throws custom exception:
```java
package com.hst.arch.components.exception.types;
import com.hst.arch.components.exception.AbstractHSTBaseException;
public class HSTAlertingBaseException extends AbstractHSTBaseException {
public HSTAlertingBaseException(String code, String msg, Object... args) {
super(code, msg, args);
}
}
```
### Are you willing to submit a pull request to fix on your own?
- [ ] Yes I am willing to submit a pull request on my own!
### Code of Conduct
- [X] I agree to follow this project's [Code of Conduct](https://www.apache.org/foundation/policies/conduct)
Contributor guide
Research direction
Start with JavaDeserializer.java, especially ObjectListFieldDeserializer.deserialize at the stack-trace location, and reproduce the failure by throwing the shown custom exception through a Dubbo Java SDK provider and consumer. Determine why Throwable.suppressedExceptions cannot be assigned during Hessian deserialization; done means the consumer receives a usable exception or a clear diagnostic without this failure.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- java
- Domain
- backend-api-design, distributed-systems
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 25/100