2017-03-14 7 views
0

Ich verwende CallCredentials nicht ab sofort mit GRPC-Java. Ich muss in den Überschriften für bestimmte Anrufe mehrere Felder übergeben. Ich habe die Header wie unten angegeben aufgefüllt und einen Interceptor hinzugefügt, der aufgerufen wird, während ein asynchroner Stub/Kanal verwendet wird.Popup-Header für Grpc Java-Client-Anfrage

bevölKopf

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; 
} 

ich die Header-Feld als Instanzvariable am Zugriff auf den Client-Abfangjäger übergeben. Ich kann sehen, dass die Header den beabsichtigten Wert enthält, bis es in den Startaufruf gelangt, zu welchem ​​Zeitpunkt es Null wird (ich sehe natürlich die Header nicht auf der Serverseite aufgefüllt). Irgendwelche Ideen, um das zu beheben (oder sollte ich CallCredentials verwenden). Dokumentation für GRPC-Java benötigt viel Arbeit.

@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); 
     } 
    }; 
} 

Antwort

-1

Ich musste auf die Header über einen Methodenaufruf zugreifen, nach dem ich die Header Keys/Werte erhalten konnte.

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

&

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

können Sie mir das Update teilen? – rana

+0

ist es in der Antwort oben. –

+0

Wohin geht dieser Code? Können Sie Ihre Antwort bitte klar auf den neuesten Stand bringen? === Metadaten zwischengespeichert = getHeaders(). Get (Metadata.Key.of ("testID", Metadata.ASCII_STRING_MARSHALLER))); headers.merge (zwischengespeichert); – rana