@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
.
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 Context
s.
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
.