From a0eeb9d9493bab76239010df6e7792508178dd42 Mon Sep 17 00:00:00 2001 From: Chris Nokleberg Date: Mon, 30 Mar 2020 14:07:24 -0700 Subject: [PATCH] core: copy the SchemaDescriptor when rebuilding descriptor (#6851) useMarshalledMessages works by duplicating a ServerServiceDefinition while replacing just the marshallers. It currently does not copy over the SchemaDescriptors, which breaks at least the ProtoReflectionService. --- api/src/main/java/io/grpc/ServerInterceptors.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/api/src/main/java/io/grpc/ServerInterceptors.java b/api/src/main/java/io/grpc/ServerInterceptors.java index 430b90b9d0b7..153c7b4068ed 100644 --- a/api/src/main/java/io/grpc/ServerInterceptors.java +++ b/api/src/main/java/io/grpc/ServerInterceptors.java @@ -197,10 +197,15 @@ public static ServerServiceDefinition useMarshalledMessages( wrappedMethods.add(wrapMethod(definition, wrappedMethodDescriptor)); } // Build the new service descriptor - final ServerServiceDefinition.Builder serviceBuilder = ServerServiceDefinition - .builder(new ServiceDescriptor(serviceDef.getServiceDescriptor().getName(), - wrappedDescriptors)); - // Create the new service definiton. + final ServiceDescriptor.Builder serviceDescriptorBuilder = + ServiceDescriptor.newBuilder(serviceDef.getServiceDescriptor().getName()) + .setSchemaDescriptor(serviceDef.getServiceDescriptor().getSchemaDescriptor()); + for (MethodDescriptor wrappedDescriptor : wrappedDescriptors) { + serviceDescriptorBuilder.addMethod(wrappedDescriptor); + } + // Create the new service definition. + final ServerServiceDefinition.Builder serviceBuilder = + ServerServiceDefinition.builder(serviceDescriptorBuilder.build()); for (ServerMethodDefinition definition : wrappedMethods) { serviceBuilder.addMethod(definition); }