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();