Skip to content

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

@Tgofjuan

Description

@Tgofjuan

Pre-check

  • I am sure that all the content I provide is in English.

Search before asking

  • 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)

Metadata

Metadata

Assignees

No one assigned

    Labels

    help wantedEverything needs help from contributorstype/bugBugs to being fixed

    Type

    No type

    Projects

    Status

    Todo

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions