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
- use dubbo-samples , https://github.com/apache/dubbo-samples/tree/master/2-advanced/dubbo-samples-generic/dubbo-samples-generic-call
- 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);
}
- 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);
}
}
- 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"/>
- 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);
}
- 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
- [x] I agree to follow this project's Code of Conduct
Comment From: zrlw
one pr should focus on one issue, otherwise we don't know why,how,what
of the pr.