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 java 3.3.1 , jdk 17, mac os 15.3.2

Steps to reproduce this issue

  1. use dubbo-samples , https://github.com/apache/dubbo-samples/tree/master/2-advanced/dubbo-samples-generic/dubbo-samples-generic-call
  2. add proto file
syntax = "proto3";

option java_multiple_files = true;

package org.apache.dubbo.samples.tri.grpc;

message GreeterRequest {
  string name = 1;
}

message GreeterReply {
  string message = 1;
}

service Greeter{

  rpc Greet(GreeterRequest) returns (GreeterReply);

}
  1. Provider implement interface
public class GreeterImpl extends DubboGreeterTriple.GreeterImplBase{

    @Override
    public GreeterReply greet(GreeterRequest request) {
        System.out.println("接收来自客户端消息:" + request.getName());
        GreeterReply pax = GreeterReply.newBuilder().setMessage("pax").build();
        return pax;
    }

    public CompletableFuture<GreeterReply> greetAsync(GreeterRequest request) {
        System.out.println("接收来自客户端消息 async:" + request.getName());
        GreeterReply pax = GreeterReply.newBuilder().setMessage("pax").build();
        return CompletableFuture.completedFuture(pax);
    }

}

  1. Inject beans into the provider. Update dubbo-samples-generic-call-provider resources/spring/generic-provider.xml
  <bean id="greeterimpl" class="org.apache.dubbo.samples.generic.call.impl.GreeterImpl"/>
  <dubbo:service interface="org.apache.dubbo.samples.tri.grpc.Greeter" ref="greeterimpl"/>
  1. Update consumer. Update dubbo-samples-generic-call-consumer GenericCallConsumer
 public static void main(String[] args) throws Exception {
        ApplicationConfig applicationConfig = new ApplicationConfig();
        applicationConfig.setName("generic-call-consumer");
        RegistryConfig registryConfig = new RegistryConfig();
        registryConfig.setAddress("zookeeper://127.0.0.1:2181");
        ReferenceConfig<GenericService> referenceConfig = new ReferenceConfig<>();
        referenceConfig.setInterface(GenericService.class.getName());
        //测试普通接口
        referenceConfig.setInterface("org.apache.dubbo.samples.generic.call.api.HelloService");
// 低版本       referenceConfig.setInterface("org.apache.dubbo.samples.tri.grpc.GreeterDubbo$IGreeter");
        //高版本 测试proto
        referenceConfig.setInterface("org.apache.dubbo.samples.tri.grpc.Greeter");
        applicationConfig.setRegistry(registryConfig);
        referenceConfig.setApplication(applicationConfig);
        referenceConfig.setGeneric(Constants.GENERIC_SERIALIZATION_PROTOBUF);
        //TODO 为什么要显示设置为 false
        referenceConfig.setAsync(false);
        referenceConfig.setTimeout(7000);

        genericService = referenceConfig.get();
        invokeGreet(); //测试 proto
    }
    public static void invokeGreet() throws InterruptedException {
        Map<String, Object> greeterRequest = new HashMap<>();
        greeterRequest.put("name", "pax");
        String requestString = new Gson().toJson(greeterRequest);
        Object result = genericService.$invoke("Greet",
                new String[]{"org.apache.dubbo.samples.tri.grpc.GreeterRequest"},
                new Object[]{requestString});
        System.err.println("invokeSayHello(return): " + result);
    }
  1. run provider and consumer, then throws exception
Exception in thread "main" org.apache.dubbo.rpc.RpcException: Failed to invoke the method Greet in the service org.apache.dubbo.rpc.service.GenericService. Tried 3 times of the providers [10.8.0.2:20880] (1/1) from the registry 127.0.0.1:2181 on the consumer 192.168.31.47 using the dubbo version 3.3.4-SNAPSHOT. Last error is: Failed to invoke remote method: $invoke, provider: dubbo://10.8.0.2:20880/org.apache.dubbo.samples.tri.grpc.Greeter?application=generic-provider&async=false&background=false&category=providers,configurators,routers&check=false&deprecated=false&dubbo=2.0.2&dynamic=true&executor-management-mode=isolation&file-cache=true&generic=false&interface=org.apache.dubbo.samples.tri.grpc.Greeter&methods=biStream,greet,greetAsync,serverStream&pid=7977&prefer.serialization=hessian2,fastjson2&proxy=nativestub&release=3.3.4-SNAPSHOT&service-name-mapping=true&side=provider&sticky=false&timeout=7000&token=e95e27e1-d8ba-46c7-b8bd-934317753155&unloadClusterRelated=false, cause: org.apache.dubbo.remoting.RemotingException: java.lang.NullPointerException: Cannot invoke "java.lang.reflect.Method.getParameterTypes()" because "method" is null
java.lang.NullPointerException: Cannot invoke "java.lang.reflect.Method.getParameterTypes()" because "method" is null
    at org.apache.dubbo.rpc.filter.GenericFilter.invoke(GenericFilter.java:97)
    at org.apache.dubbo.rpc.cluster.filter.FilterChainBuilder$CopyOfFilterChainNode.invoke(FilterChainBuilder.java:349)
    at org.apache.dubbo.rpc.protocol.tri.h12.HttpContextFilter.invoke(HttpContextFilter.java:38)
    at org.apache.dubbo.rpc.cluster.filter.FilterChainBuilder$CopyOfFilterChainNode.invoke(FilterChainBuilder.java:349)
    at org.apache.dubbo.rpc.filter.ClassLoaderFilter.invoke(ClassLoaderFilter.java:54)
    at org.apache.dubbo.rpc.cluster.filter.FilterChainBuilder$CopyOfFilterChainNode.invoke(FilterChainBuilder.java:349)
    at org.apache.dubbo.rpc.filter.EchoFilter.invoke(EchoFilter.java:41)
    at org.apache.dubbo.rpc.cluster.filter.FilterChainBuilder$CopyOfFilterChainNode.invoke(FilterChainBuilder.java:349)
    at org.apache.dubbo.metrics.filter.MetricsFilter.invoke(MetricsFilter.java:86)
    at org.apache.dubbo.metrics.filter.MetricsProviderFilter.invoke(MetricsProviderFilter.java:37)
    at org.apache.dubbo.rpc.cluster.filter.FilterChainBuilder$CopyOfFilterChainNode.invoke(FilterChainBuilder.java:349)
    at org.apache.dubbo.rpc.filter.ProfilerServerFilter.invoke(ProfilerServerFilter.java:66)
    at org.apache.dubbo.rpc.cluster.filter.FilterChainBuilder$CopyOfFilterChainNode.invoke(FilterChainBuilder.java:349)
    at org.apache.dubbo.rpc.filter.ContextFilter.invoke(ContextFilter.java:191)
    at org.apache.dubbo.rpc.cluster.filter.FilterChainBuilder$CopyOfFilterChainNode.invoke(FilterChainBuilder.java:349)
    at org.apache.dubbo.rpc.cluster.filter.FilterChainBuilder$CallbackRegistrationInvoker.invoke(FilterChainBuilder.java:197)
    at org.apache.dubbo.rpc.protocol.dubbo.DubboProtocol$1.reply(DubboProtocol.java:167)
    at org.apache.dubbo.remoting.exchange.support.header.HeaderExchangeHandler.handleRequest(HeaderExchangeHandler.java:110)
    at org.apache.dubbo.remoting.exchange.support.header.HeaderExchangeHandler.received(HeaderExchangeHandler.java:205)
    at org.apache.dubbo.remoting.transport.DecodeHandler.received(DecodeHandler.java:52)
    at org.apache.dubbo.remoting.transport.dispatcher.ChannelEventRunnable.run(ChannelEventRunnable.java:64)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
    at org.apache.dubbo.common.threadlocal.InternalRunnable.run(InternalRunnable.java:39)
    at java.base/java.lang.Thread.run(Thread.java:840)

    at org.apache.dubbo.rpc.cluster.support.FailoverClusterInvoker.doInvoke(FailoverClusterInvoker.java:126)
    at org.apache.dubbo.rpc.cluster.support.AbstractClusterInvoker.invoke(AbstractClusterInvoker.java:366)
    at org.apache.dubbo.rpc.cluster.router.RouterSnapshotFilter.invoke(RouterSnapshotFilter.java:46)
    at org.apache.dubbo.rpc.cluster.filter.FilterChainBuilder$CopyOfFilterChainNode.invoke(FilterChainBuilder.java:349)
    at org.apache.dubbo.monitor.support.MonitorFilter.invoke(MonitorFilter.java:109)
    at org.apache.dubbo.rpc.cluster.filter.FilterChainBuilder$CopyOfFilterChainNode.invoke(FilterChainBuilder.java:349)
    at org.apache.dubbo.rpc.cluster.filter.support.MetricsClusterFilter.invoke(MetricsClusterFilter.java:57)
    at org.apache.dubbo.rpc.cluster.filter.FilterChainBuilder$CopyOfFilterChainNode.invoke(FilterChainBuilder.java:349)
    at org.apache.dubbo.rpc.protocol.dubbo.filter.FutureFilter.invoke(FutureFilter.java:53)
    at org.apache.dubbo.rpc.cluster.filter.FilterChainBuilder$CopyOfFilterChainNode.invoke(FilterChainBuilder.java:349)
    at org.apache.dubbo.spring.security.filter.ContextHolderParametersSelectedTransferFilter.invoke(ContextHolderParametersSelectedTransferFilter.java:40)
    at org.apache.dubbo.rpc.cluster.filter.FilterChainBuilder$CopyOfFilterChainNode.invoke(FilterChainBuilder.java:349)
    at org.apache.dubbo.metrics.filter.MetricsFilter.invoke(MetricsFilter.java:86)
    at org.apache.dubbo.rpc.cluster.filter.support.MetricsConsumerFilter.invoke(MetricsConsumerFilter.java:38)
    at org.apache.dubbo.rpc.cluster.filter.FilterChainBuilder$CopyOfFilterChainNode.invoke(FilterChainBuilder.java:349)
    at org.apache.dubbo.rpc.cluster.filter.support.ConsumerClassLoaderFilter.invoke(ConsumerClassLoaderFilter.java:40)
    at org.apache.dubbo.rpc.cluster.filter.FilterChainBuilder$CopyOfFilterChainNode.invoke(FilterChainBuilder.java:349)
    at org.apache.dubbo.rpc.cluster.filter.support.ConsumerContextFilter.invoke(ConsumerContextFilter.java:119)
    at org.apache.dubbo.rpc.cluster.filter.FilterChainBuilder$CopyOfFilterChainNode.invoke(FilterChainBuilder.java:349)
    at org.apache.dubbo.rpc.cluster.filter.FilterChainBuilder$CallbackRegistrationInvoker.invoke(FilterChainBuilder.java:197)
    at org.apache.dubbo.rpc.cluster.support.wrapper.AbstractCluster$ClusterFilterInvoker.invoke(AbstractCluster.java:101)
    at org.apache.dubbo.rpc.cluster.support.wrapper.MockClusterInvoker.invoke(MockClusterInvoker.java:107)
    at org.apache.dubbo.rpc.cluster.support.wrapper.ScopeClusterInvoker.invoke(ScopeClusterInvoker.java:171)
    at org.apache.dubbo.registry.client.migration.MigrationInvoker.invoke(MigrationInvoker.java:294)
    at org.apache.dubbo.rpc.proxy.InvocationUtil.invoke(InvocationUtil.java:64)
    at org.apache.dubbo.rpc.proxy.InvokerInvocationHandler.invoke(InvokerInvocationHandler.java:81)
    at org.apache.dubbo.samples.tri.grpc.GreeterDubboProxy0.$invoke(GreeterDubboProxy0.java)
    at org.apache.dubbo.samples.generic.call.GenericCallConsumer.invokeGreet(GenericCallConsumer.java:78)
    at org.apache.dubbo.samples.generic.call.GenericCallConsumer.main(GenericCallConsumer.java:65)
Caused by: java.util.concurrent.ExecutionException: org.apache.dubbo.remoting.RemotingException: java.lang.NullPointerException: Cannot invoke "java.lang.reflect.Method.getParameterTypes()" because "method" is null

What you expected to happen

No exceptions and return results

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

Comment From: zrlw

one pr should focus on one issue, otherwise we don't know why,how,what of the pr.