Interface ClientInterceptor
Channel
.
Implementers use this mechanism to add cross-cutting behavior to Channel
and
stub implementations. Common examples of such behavior include:
- Logging and monitoring call behavior
- Adding metadata for proxies to observe
- Request and response rewriting
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.
-
Method Summary
Modifier and TypeMethodDescription<ReqT,
RespT>
ClientCall<ReqT, RespT> interceptCall
(MethodDescriptor<ReqT, RespT> method, CallOptions callOptions, Channel next)
-
Method Details
-
interceptCall
<ReqT,RespT> ClientCall<ReqT,RespT> interceptCall(MethodDescriptor<ReqT, RespT> method, CallOptions callOptions, Channel next) InterceptClientCall
creation by thenext
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 ofnext.newCall()
.next.newCall()
must not be called under a differentContext
other than the currentContext
. The outcome of such usage is undefined and may cause memory leak due to unbounded chain ofContext
s.- Parameters:
method
- the remote method to be called.callOptions
- the runtime options to be applied to this call.next
- the channel which is being intercepted.- Returns:
- the call object for the remote operation, never
null
.
-