dubbo icon indicating copy to clipboard operation
dubbo copied to clipboard

[Bug] Type inconsistency in RpcServiceContext.localInvoke field causes NullPointerException

Open Tgofjuan opened this issue 6 months ago • 1 comments

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 and found no similar issues.

Apache Dubbo Component

Java SDK (apache/dubbo)

Dubbo Version

dubbo-cluster-sepcify-address-dubbo3:3.3.1

Bug Description

There's a type inconsistency in RpcServiceContext class that can cause NullPointerException:

  • Field localInvoke is declared as Boolean (wrapper type) with initial value null
  • Method setLocalInvoke(boolean localInvoke) accepts boolean (primitive type)

Code Location

  • File: dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/RpcServiceContext.java
  • Field declaration: Line 60
  • Setter method: Lines 628-630

Steps to reproduce this issue

When trying to restore the original localInvoke value:

Boolean originalLocalInvoke = RpcContext.getServiceContext().getLocalInvoke(); // returns null  
try {
    if (!LocalContextConfig.getServerAddress().equals(ip)) {
         RpcContext.getServiceContext().setLocalInvoke(false);
    }
    UserSpecifiedAddressUtil.setAddress(new Address(ip, port, false));
} finally {
    // Later trying to restore:  
    RpcContext.getServiceContext().setLocalInvoke(originalLocalInvoke); // NPE when originalLocalInvoke is null
}

### What you expected to happen

Change the setter method to accept Boolean type: setLocalInvoke(Boolean localInvoke)

### Anything else

_No response_

### Are you willing to submit a pull request to fix on your own?

- [x] 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)

Tgofjuan avatar Jun 20 '25 07:06 Tgofjuan

could you provide a pr?

zrlw avatar Jun 20 '25 13:06 zrlw