diff --git a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/StubMethodDescriptor.java b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/StubMethodDescriptor.java index bfe497e2ee..56793dd6f9 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/StubMethodDescriptor.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/StubMethodDescriptor.java @@ -28,7 +28,6 @@ import java.util.stream.Stream; public class StubMethodDescriptor implements MethodDescriptor, PackableMethod { private static final Logger logger = LoggerFactory.getLogger(StubMethodDescriptor.class); - private final ServiceDescriptor serviceDescriptor; private final ConcurrentMap attributeMap = new ConcurrentHashMap<>(); private final String methodName; private final String[] compatibleParamSignatures; @@ -46,14 +45,12 @@ public class StubMethodDescriptor implements MethodDescriptor, PackableMethod { String methodName, Class requestClass, Class responseClass, - StubServiceDescriptor serviceDescriptor, RpcType rpcType, Pack requestPack, Pack responsePack, UnPack requestUnpack, UnPack responseUnpack) { this.methodName = methodName; - this.serviceDescriptor = serviceDescriptor; this.rpcType = rpcType; this.requestPack = requestPack; this.responsePack = responsePack; @@ -65,7 +62,6 @@ public class StubMethodDescriptor implements MethodDescriptor, PackableMethod { this.compatibleParamSignatures = Stream.of(parameterClasses).map(Class::getName).toArray(String[]::new); this.returnTypes = new Type[] {responseClass, responseClass}; - serviceDescriptor.addMethod(this); } @Override diff --git a/dubbo-compiler/src/main/resources/Dubbo3TripleStub.mustache b/dubbo-compiler/src/main/resources/Dubbo3TripleStub.mustache index 4ecef4c333..c75eab4cf3 100644 --- a/dubbo-compiler/src/main/resources/Dubbo3TripleStub.mustache +++ b/dubbo-compiler/src/main/resources/Dubbo3TripleStub.mustache @@ -69,20 +69,19 @@ public final class {{className}} { {{{javaDoc}}} {{/javaDoc}} private static final StubMethodDescriptor {{methodName}}Method = new StubMethodDescriptor("{{originMethodName}}", - {{inputType}}.class, {{outputType}}.class, serviceDescriptor, MethodDescriptor.RpcType.UNARY, + {{inputType}}.class, {{outputType}}.class, MethodDescriptor.RpcType.UNARY, obj -> ((Message) obj).toByteArray(), obj -> ((Message) obj).toByteArray(), {{inputType}}::parseFrom, {{outputType}}::parseFrom); private static final StubMethodDescriptor {{methodName}}AsyncMethod = new StubMethodDescriptor("{{originMethodName}}", - {{inputType}}.class, java.util.concurrent.CompletableFuture.class, serviceDescriptor, MethodDescriptor.RpcType.UNARY, + {{inputType}}.class, java.util.concurrent.CompletableFuture.class, MethodDescriptor.RpcType.UNARY, obj -> ((Message) obj).toByteArray(), obj -> ((Message) obj).toByteArray(), {{inputType}}::parseFrom, {{outputType}}::parseFrom); private static final StubMethodDescriptor {{methodName}}ProxyAsyncMethod = new StubMethodDescriptor("{{originMethodName}}Async", - {{inputType}}.class, {{outputType}}.class, serviceDescriptor, MethodDescriptor.RpcType.UNARY, + {{inputType}}.class, {{outputType}}.class, MethodDescriptor.RpcType.UNARY, obj -> ((Message) obj).toByteArray(), obj -> ((Message) obj).toByteArray(), {{inputType}}::parseFrom, {{outputType}}::parseFrom); - {{/unaryMethods}} {{#serverStreamingMethods}} @@ -90,10 +89,9 @@ public final class {{className}} { {{{javaDoc}}} {{/javaDoc}} private static final StubMethodDescriptor {{methodName}}Method = new StubMethodDescriptor("{{originMethodName}}", - {{inputType}}.class, {{outputType}}.class, serviceDescriptor, MethodDescriptor.RpcType.SERVER_STREAM, + {{inputType}}.class, {{outputType}}.class, MethodDescriptor.RpcType.SERVER_STREAM, obj -> ((Message) obj).toByteArray(), obj -> ((Message) obj).toByteArray(), {{inputType}}::parseFrom, {{outputType}}::parseFrom); - {{/serverStreamingMethods}} {{#clientStreamingMethods}} @@ -101,7 +99,7 @@ public final class {{className}} { {{{javaDoc}}} {{/javaDoc}} private static final StubMethodDescriptor {{methodName}}Method = new StubMethodDescriptor("{{originMethodName}}", - {{inputType}}.class, {{outputType}}.class, serviceDescriptor, MethodDescriptor.RpcType.CLIENT_STREAM, + {{inputType}}.class, {{outputType}}.class, MethodDescriptor.RpcType.CLIENT_STREAM, obj -> ((Message) obj).toByteArray(), obj -> ((Message) obj).toByteArray(), {{inputType}}::parseFrom, {{outputType}}::parseFrom); {{/clientStreamingMethods}} @@ -111,11 +109,27 @@ public final class {{className}} { {{{javaDoc}}} {{/javaDoc}} private static final StubMethodDescriptor {{methodName}}Method = new StubMethodDescriptor("{{originMethodName}}", - {{inputType}}.class, {{outputType}}.class, serviceDescriptor, MethodDescriptor.RpcType.BI_STREAM, + {{inputType}}.class, {{outputType}}.class, MethodDescriptor.RpcType.BI_STREAM, obj -> ((Message) obj).toByteArray(), obj -> ((Message) obj).toByteArray(), {{inputType}}::parseFrom, {{outputType}}::parseFrom); {{/biStreamingWithoutClientStreamMethods}} + static{ + {{#unaryMethods}} + serviceDescriptor.addMethod({{methodName}}Method); + serviceDescriptor.addMethod({{methodName}}ProxyAsyncMethod); + {{/unaryMethods}} + {{#serverStreamingMethods}} + serviceDescriptor.addMethod({{methodName}}Method); + {{/serverStreamingMethods}} + {{#clientStreamingMethods}} + serviceDescriptor.addMethod({{methodName}}Method); + {{/clientStreamingMethods}} + {{#biStreamingWithoutClientStreamMethods}} + serviceDescriptor.addMethod({{methodName}}Method); + {{/biStreamingWithoutClientStreamMethods}} + } + public static class {{interfaceClassName}}Stub implements {{interfaceClassName}}{ private final Invoker<{{interfaceClassName}}> invoker; diff --git a/dubbo-compiler/src/main/resources/ReactorDubbo3TripleStub.mustache b/dubbo-compiler/src/main/resources/ReactorDubbo3TripleStub.mustache index afc799b072..28c7626da8 100644 --- a/dubbo-compiler/src/main/resources/ReactorDubbo3TripleStub.mustache +++ b/dubbo-compiler/src/main/resources/ReactorDubbo3TripleStub.mustache @@ -70,7 +70,7 @@ public final class {{className}} { {{{javaDoc}}} {{/javaDoc}} private static final StubMethodDescriptor {{methodName}}Method = new StubMethodDescriptor("{{originMethodName}}", - {{inputType}}.class, {{outputType}}.class, serviceDescriptor, MethodDescriptor.RpcType.UNARY, + {{inputType}}.class, {{outputType}}.class, MethodDescriptor.RpcType.UNARY, obj -> ((Message) obj).toByteArray(), obj -> ((Message) obj).toByteArray(), {{inputType}}::parseFrom, {{outputType}}::parseFrom); {{/unaryMethods}} @@ -80,7 +80,7 @@ public final class {{className}} { {{{javaDoc}}} {{/javaDoc}} private static final StubMethodDescriptor {{methodName}}Method = new StubMethodDescriptor("{{originMethodName}}", - {{inputType}}.class, {{outputType}}.class, serviceDescriptor, MethodDescriptor.RpcType.SERVER_STREAM, + {{inputType}}.class, {{outputType}}.class, MethodDescriptor.RpcType.SERVER_STREAM, obj -> ((Message) obj).toByteArray(), obj -> ((Message) obj).toByteArray(), {{inputType}}::parseFrom, {{outputType}}::parseFrom); {{/serverStreamingMethods}} @@ -90,7 +90,7 @@ public final class {{className}} { {{{javaDoc}}} {{/javaDoc}} private static final StubMethodDescriptor {{methodName}}Method = new StubMethodDescriptor("{{originMethodName}}", - {{inputType}}.class, {{outputType}}.class, serviceDescriptor, MethodDescriptor.RpcType.CLIENT_STREAM, + {{inputType}}.class, {{outputType}}.class, MethodDescriptor.RpcType.CLIENT_STREAM, obj -> ((Message) obj).toByteArray(), obj -> ((Message) obj).toByteArray(), {{inputType}}::parseFrom, {{outputType}}::parseFrom); {{/clientStreamingMethods}} @@ -100,11 +100,26 @@ public final class {{className}} { {{{javaDoc}}} {{/javaDoc}} private static final StubMethodDescriptor {{methodName}}Method = new StubMethodDescriptor("{{originMethodName}}", - {{inputType}}.class, {{outputType}}.class, serviceDescriptor, MethodDescriptor.RpcType.BI_STREAM, + {{inputType}}.class, {{outputType}}.class, MethodDescriptor.RpcType.BI_STREAM, obj -> ((Message) obj).toByteArray(), obj -> ((Message) obj).toByteArray(), {{inputType}}::parseFrom, {{outputType}}::parseFrom); {{/biStreamingWithoutClientStreamMethods}} + static{ + {{#unaryMethods}} + serviceDescriptor.addMethod({{methodName}}Method); + {{/unaryMethods}} + {{#serverStreamingMethods}} + serviceDescriptor.addMethod({{methodName}}Method); + {{/serverStreamingMethods}} + {{#clientStreamingMethods}} + serviceDescriptor.addMethod({{methodName}}Method); + {{/clientStreamingMethods}} + {{#biStreamingWithoutClientStreamMethods}} + serviceDescriptor.addMethod({{methodName}}Method); + {{/biStreamingWithoutClientStreamMethods}} + } + public static class {{interfaceClassName}}Stub implements {{interfaceClassName}}{ private final Invoker<{{interfaceClassName}}> invoker;