Refactoring to allow usage of interceptors for metadata/authorization

Code Refactoring to allow usage of interceptors Why:

  • In order to handle metadata/authorization and more generally use interceptors the code base needed some changes to allow to specify interceptors nicely on the client and server side.

This change addresses the need by:

  • Adding a Channel Builder utility.
  • Adding a new builder function for SiLAServer which takes a ServerServiceDefinition and allows to bind a feature together with an interceptor.

This change has the following side effects:

  • None

Server interceptor example usage:

builder.addFeature(getResourceContent("GreetingProvider.sila.xml"),
                    ServerInterceptors.intercept(
                            new SayHelloCommand(),
                            new ServerInterceptor() {
                                @Override
                                public <ReqT, RespT> ServerCall.Listener<ReqT> interceptCall(
                                        ServerCall<ReqT, RespT> serverCall,
                                        Metadata metadata,
                                        ServerCallHandler<ReqT, RespT> serverCallHandler
                                ) {
                                    // todo handle metadata here
                                    return null;
                                }
                            }
                    )
            );

Client interceptor example usage:

final ManagedChannel serviceChannel = ChannelBuilder.builderWithEncryption(server.getHost(), server.getPort())
                    .intercept(new ClientInterceptor() {
                        @Override
                        public <ReqT, RespT> ClientCall<ReqT, RespT> interceptCall(
                                MethodDescriptor<ReqT, RespT> methodDescriptor,
                                CallOptions callOptions,
                                Channel channel
                        ) {
                            // todo handle metadata here
                            return null;
                        }
                    }).build();

Merge request reports

Loading