@ThreadSafe public interface ClientInterceptor
Channel.
Implementers use this mechanism to add cross-cutting behavior to Channel and
stub implementations. Common examples of such behavior include:
Providing authentication credentials is better served by CallCredentials. But a ClientInterceptor could set the CallCredentials within the CallOptions.
The interceptor may be called for multiple calls by one or more threads
without completing the previous ones first. Refer to the
ClientCall.Listener docs for more details regarding thread
safety of the returned listener.
| Modifier and Type | Method and Description |
|---|---|
<ReqT,RespT> |
interceptCall(MethodDescriptor<ReqT,RespT> method,
CallOptions callOptions,
Channel next)
|
<ReqT,RespT> ClientCall<ReqT,RespT> interceptCall(MethodDescriptor<ReqT,RespT> method, CallOptions callOptions, Channel next)
ClientCall creation by the next Channel.
Many variations of interception are possible. Complex implementations may return a wrapper
around the result of next.newCall(), whereas a simpler implementation may just modify
the header metadata prior to returning the result of next.newCall().
next.newCall() must not be called under a different Context
other than the current Context. The outcome of such usage is undefined and may cause
memory leak due to unbounded chain of Contexts.
method - the remote method to be called.callOptions - the runtime options to be applied to this call.next - the channel which is being intercepted.null.