apache / apache/dubbo

[Bug] java.util.ArrayList cannot be assigned to 'java.util.List'

Open
#14,668 5 comments 0 reactions 0 assignees View on GitHub
component/need-triage type/need-triage
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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.