2017-03-14 12 views
0

GRPC-JavaではCallCredentialsを現在使用していません。特定の呼び出しのためにヘッダーの複数のフィールドを渡す必要があります。私は以下のようにヘッダーに値を設定し、非同期スタブ/チャネルを使用しているときに呼び出されるインターセプタを追加しました。grpc javaクライアント要求のヘッダーを設定しています

移入ヘッダ

public Metadata generateHeader() { 
    Metadata.Key<String> jwtKey = Metadata.Key.of("jwt", Metadata.ASCII_STRING_MARSHALLER); 
    headers.put(jwtKey, jwt); 
    Metadata.Key<String> testKey = Metadata.Key.of("testID", Metadata.ASCII_STRING_MARSHALLER); 
    headers.put(testKey, testID); 
    return headers; 
} 

私はクライアントインターセプタに渡されたインスタンス変数としてヘッダフィールドにアクセスしています。私はヘッダーは、それがnullになる時点(私は明らかにヘッダーがサーバー側に移入されて表示されません)になる時点で開始呼び出しになるまで、意図した値が含まれていることがわかります。これを修正するためのアイデア(またはCallCredentialsを使用する必要があります)。 GRPC-Javaのドキュメントには多くの作業が必要です。

@Override 
public <ReqT, RespT> ClientCall<ReqT, RespT> interceptCall(
     MethodDescriptor<ReqT, RespT> method, 
     CallOptions callOptions, 
     Channel next) { 
    log.info("HEADER INTERCEPTOR{}", headers.get(Metadata.Key.of("jwt", Metadata.ASCII_STRING_MARSHALLER))); 
    ClientCall<ReqT, RespT> call = next.newCall(method, callOptions); 
    return new ForwardingClientCall.SimpleForwardingClientCall<ReqT, RespT>(call) { 
     @Override 
     public void start(ClientCall.Listener<RespT> responseListener, Metadata headers) { 
      log.info("HEADER START {}", headers.keys()); 
      super.start(responseListener, headers); 
     } 
    }; 
} 

答えて

-1

私は、ヘッダのキー/値を取得することができたその後メソッドの呼び出しを介してヘッダにアクセスする必要がありました。

Metadata cached = getHeaders().get(Metadata.Key.of("testID", Metadata.ASCII_STRING_MARSHALLER))); 
headers.merge(cached); 

&

public Metadata getHeaders() { 
     return headers; 
} 
+0

あなたは私の修正を共有することができますか? – rana

+0

その答えです。 –

+0

このコードはどこにありますか?あなたはあなたの答えをはっきりと更新できますか? === キャッシュされたメタデータ= getHeaders()。get(Metadata.Key.of( "testID"、Metadata.ASCII_STRING_MARSHALLER))); headers.merge(キャッシュ済み)。 – rana

関連する問題