Hi Team,
i am very new in GRPC. I have created a service and i want to get the header in my service. I have added the server intercepter but not able to get my header in below service.
Can any one help ?
@Override
public void sendPing(Ping pingRequest, StreamObserver<Pong> pongResponseObserver){
Pong pong= null;
try {
pong = createPongResponse(pingRequest);
} catch (ServiceException e) {
logger.log(Level.WARNING,"Error in PingPong Service");
Metadata metadata = trailersFromThrowable(e);
pongResponseObserver.onError(FAILED_PRECONDITION.asRuntimeException(metadata));
}
pongResponseObserver.onNext(pong);
pongResponseObserver.onCompleted();
}
in metadata i am passing below json and in debugging mode it's visible in interceptor
Interceptor code:
public class HeaderServerInterceptor implements ServerInterceptor {
private static final Logger logger = Logger.getLogger(HeaderServerInterceptor.class.getName());
@VisibleForTesting
static final Metadata.Key<String> CUSTOM_HEADER_KEY =
Metadata.Key.of("custom_server_header_key", Metadata.ASCII_STRING_MARSHALLER);
@Override
public <ReqT, RespT> ServerCall.Listener<ReqT> interceptCall(
ServerCall<ReqT, RespT> call,
final Metadata requestHeaders,
ServerCallHandler<ReqT, RespT> next) {
logger.log(Level.WARNING,"header received from client:" + requestHeaders);
return next.startCall(new ForwardingServerCall.SimpleForwardingServerCall<ReqT, RespT>(call) {
@Override
public void sendHeaders(Metadata responseHeaders) {
responseHeaders.put(CUSTOM_HEADER_KEY, "customRespondValue");
super.sendHeaders(responseHeaders);
}
}, requestHeaders);
}
}