AtomicReference<Metadata> trailersCapture = new AtomicReference<Metadata>(); AtomicReference<Metadata> headersCapture = new AtomicReference<Metadata>(); stub = MetadataUtils.captureMetadata(stub, headersCapture, trailersCapture);
assertNotNull(stub.emptyCall(EMPTY));
// Assert that our side channel object is echoed back in both headers and trailers Assert.assertEquals(contextValue, headersCapture.get().get(METADATA_KEY)); Assert.assertEquals(contextValue, trailersCapture.get().get(METADATA_KEY));public static ClientInterceptor newCaptureMetadataInterceptor(final AtomicReference<Metadata> headersCapture, final AtomicReference<Metadata> trailersCapture) {
return new ClientInterceptor() {
public <ReqT, RespT> ClientCall<ReqT, RespT> interceptCall(MethodDescriptor<ReqT, RespT> method, CallOptions callOptions, Channel next) {
return new SimpleForwardingClientCall(next.newCall(method, callOptions)) {
public void start(final Listener<RespT> responseListener, Metadata headers) {
headersCapture.set((Object)null);
trailersCapture.set((Object)null);
super.start(new SimpleForwardingClientCallListener(responseListener) {
public void onHeaders(Metadata headers) {
headersCapture.set(headers);
super.onHeaders(headers);
[...]
}