4545import java .util .ArrayDeque ;
4646import java .util .Arrays ;
4747import java .util .HashMap ;
48- import java .util .HashSet ;
4948import java .util .List ;
5049import java .util .Map ;
5150import java .util .Queue ;
5251import java .util .Random ;
53- import java .util .Set ;
5452import java .util .concurrent .Future ;
5553import java .util .concurrent .ScheduledExecutorService ;
5654import java .util .concurrent .Semaphore ;
@@ -511,27 +509,30 @@ public static List<ServerInterceptor> interceptors() {
511509 }
512510
513511 /**
514- * Echo the request headers from a client into response headers and trailers. Useful for
512+ * Echo a request header from a client into response headers and trailers. Useful for
515513 * testing end-to-end metadata propagation.
516514 */
517- private static ServerInterceptor echoRequestHeadersInterceptor (final Metadata .Key <?>... keys ) {
518- final Set <Metadata .Key <?>> keySet = new HashSet <>(Arrays .asList (keys ));
515+ private static <T > ServerInterceptor echoRequestHeadersInterceptor (final Metadata .Key <T > key ) {
519516 return new ServerInterceptor () {
520517 @ Override
521518 public <ReqT , RespT > ServerCall .Listener <ReqT > interceptCall (
522519 ServerCall <ReqT , RespT > call ,
523- final Metadata requestHeaders ,
520+ Metadata requestHeaders ,
524521 ServerCallHandler <ReqT , RespT > next ) {
522+ if (!requestHeaders .containsKey (key )) {
523+ return next .startCall (call , requestHeaders );
524+ }
525+ T value = requestHeaders .get (key );
525526 return next .startCall (new SimpleForwardingServerCall <ReqT , RespT >(call ) {
526527 @ Override
527528 public void sendHeaders (Metadata responseHeaders ) {
528- responseHeaders .merge ( requestHeaders , keySet );
529+ responseHeaders .put ( key , value );
529530 super .sendHeaders (responseHeaders );
530531 }
531532
532533 @ Override
533534 public void close (Status status , Metadata trailers ) {
534- trailers .merge ( requestHeaders , keySet );
535+ trailers .put ( key , value );
535536 super .close (status , trailers );
536537 }
537538 }, requestHeaders );
@@ -540,52 +541,48 @@ public void close(Status status, Metadata trailers) {
540541 }
541542
542543 /**
543- * Echoes request headers with the specified key(s) from a client into response headers only.
544+ * Echoes request headers with the specified key from a client into response headers only.
544545 */
545- private static ServerInterceptor echoRequestMetadataInHeaders (final Metadata .Key <?>... keys ) {
546- final Set <Metadata .Key <?>> keySet = new HashSet <>(Arrays .asList (keys ));
546+ private static <T > ServerInterceptor echoRequestMetadataInHeaders (final Metadata .Key <T > key ) {
547547 return new ServerInterceptor () {
548548 @ Override
549549 public <ReqT , RespT > ServerCall .Listener <ReqT > interceptCall (
550550 ServerCall <ReqT , RespT > call ,
551551 final Metadata requestHeaders ,
552552 ServerCallHandler <ReqT , RespT > next ) {
553+ if (!requestHeaders .containsKey (key )) {
554+ return next .startCall (call , requestHeaders );
555+ }
556+ T value = requestHeaders .get (key );
553557 return next .startCall (new SimpleForwardingServerCall <ReqT , RespT >(call ) {
554558 @ Override
555559 public void sendHeaders (Metadata responseHeaders ) {
556- responseHeaders .merge ( requestHeaders , keySet );
560+ responseHeaders .put ( key , value );
557561 super .sendHeaders (responseHeaders );
558562 }
559-
560- @ Override
561- public void close (Status status , Metadata trailers ) {
562- super .close (status , trailers );
563- }
564563 }, requestHeaders );
565564 }
566565 };
567566 }
568567
569568 /**
570- * Echoes request headers with the specified key(s) from a client into response trailers only.
569+ * Echoes request headers with the specified key from a client into response trailers only.
571570 */
572- private static ServerInterceptor echoRequestMetadataInTrailers (final Metadata .Key <?>... keys ) {
573- final Set <Metadata .Key <?>> keySet = new HashSet <>(Arrays .asList (keys ));
571+ private static <T > ServerInterceptor echoRequestMetadataInTrailers (final Metadata .Key <T > key ) {
574572 return new ServerInterceptor () {
575573 @ Override
576574 public <ReqT , RespT > ServerCall .Listener <ReqT > interceptCall (
577575 ServerCall <ReqT , RespT > call ,
578576 final Metadata requestHeaders ,
579577 ServerCallHandler <ReqT , RespT > next ) {
578+ if (!requestHeaders .containsKey (key )) {
579+ return next .startCall (call , requestHeaders );
580+ }
581+ T value = requestHeaders .get (key );
580582 return next .startCall (new SimpleForwardingServerCall <ReqT , RespT >(call ) {
581- @ Override
582- public void sendHeaders (Metadata responseHeaders ) {
583- super .sendHeaders (responseHeaders );
584- }
585-
586583 @ Override
587584 public void close (Status status , Metadata trailers ) {
588- trailers .merge ( requestHeaders , keySet );
585+ trailers .put ( key , value );
589586 super .close (status , trailers );
590587 }
591588 }, requestHeaders );
0 commit comments