Receives notifications from server-streaming calls.
The application is responsible for implementing the ResponseObserver and passing it to
GAX, which then calls the observer with the messages for the application to receive them. The
methods might be called by different threads, but are guaranteed to happen sequentially. The
order of callbacks is guaranteed to be:
exactly 1 onStart
0 or more on Response
exactly 1 onError or onComplete
By default, the stream uses automatic flow control, where the next response will be delivered
as soon as the current one is processed by onResponse. A consumer can disable automatic flow
control by calling disableAutoInboundFlowControl() in onStart. After this, the
consumer must request responses by calling request().
Type Parameter
Name
Description
V
Methods
onComplete()
publicabstractvoidonComplete()
Receives a notification of successful stream completion.
May only be called once, and if called, it must be the last method called. In particular, if
an exception is thrown by an implementation of onComplete, no further calls to any
method are allowed.
onError(Throwable t)
publicabstractvoidonError(Throwablet)
Receives a terminating error from the stream.
May only be called once, and if called, it must be the last method called. In particular, if
an exception is thrown by an implementation of onError, no further calls to any method
are allowed.
Clients may may receive 0 or more onResponse callbacks.
If an exception is thrown by an implementation the caller will terminate the stream by
calling #onError(Throwable) with the caught exception as the cause.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Hard to understand","hardToUnderstand","thumb-down"],["Incorrect information or sample code","incorrectInformationOrSampleCode","thumb-down"],["Missing the information/samples I need","missingTheInformationSamplesINeed","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-09-03 UTC."],[[["\u003cp\u003eThis document outlines the \u003ccode\u003eResponseObserver\u003c/code\u003e interface for handling server-streaming calls in the Google API Client Library for Java.\u003c/p\u003e\n"],["\u003cp\u003e\u003ccode\u003eResponseObserver\u003c/code\u003e provides methods like \u003ccode\u003eonStart\u003c/code\u003e, \u003ccode\u003eonResponse\u003c/code\u003e, \u003ccode\u003eonError\u003c/code\u003e, and \u003ccode\u003eonComplete\u003c/code\u003e to manage the lifecycle and data flow of a stream.\u003c/p\u003e\n"],["\u003cp\u003eThe stream guarantees that there will be exactly one \u003ccode\u003eonStart\u003c/code\u003e call, zero or more \u003ccode\u003eonResponse\u003c/code\u003e calls, and exactly one of either \u003ccode\u003eonError\u003c/code\u003e or \u003ccode\u003eonComplete\u003c/code\u003e.\u003c/p\u003e\n"],["\u003cp\u003eBy default, the stream employs automatic flow control, but users can disable this in \u003ccode\u003eonStart\u003c/code\u003e via \u003ccode\u003eStreamController\u003c/code\u003e and manage the flow manually.\u003c/p\u003e\n"],["\u003cp\u003eThe document contains various versions of the ResponseObserver from version 2.7.1 to 2.63.1, the latest version, and provides the javadoc for each version.\u003c/p\u003e\n"]]],[],null,["# Interface ResponseObserver<V> (2.69.0)\n\nVersion latestkeyboard_arrow_down\n\n- [2.69.0 (latest)](/java/docs/reference/gax/latest/com.google.api.gax.rpc.ResponseObserver)\n- [2.68.2](/java/docs/reference/gax/2.68.2/com.google.api.gax.rpc.ResponseObserver)\n- [2.67.0](/java/docs/reference/gax/2.67.0/com.google.api.gax.rpc.ResponseObserver)\n- [2.66.0](/java/docs/reference/gax/2.66.0/com.google.api.gax.rpc.ResponseObserver)\n- [2.65.0](/java/docs/reference/gax/2.65.0/com.google.api.gax.rpc.ResponseObserver)\n- [2.63.1](/java/docs/reference/gax/2.63.1/com.google.api.gax.rpc.ResponseObserver)\n- [2.62.0](/java/docs/reference/gax/2.62.0/com.google.api.gax.rpc.ResponseObserver)\n- [2.61.0](/java/docs/reference/gax/2.61.0/com.google.api.gax.rpc.ResponseObserver)\n- [2.60.0](/java/docs/reference/gax/2.60.0/com.google.api.gax.rpc.ResponseObserver)\n- [2.59.1](/java/docs/reference/gax/2.59.1/com.google.api.gax.rpc.ResponseObserver)\n- [2.58.0](/java/docs/reference/gax/2.58.0/com.google.api.gax.rpc.ResponseObserver)\n- [2.57.0](/java/docs/reference/gax/2.57.0/com.google.api.gax.rpc.ResponseObserver)\n- [2.55.0](/java/docs/reference/gax/2.55.0/com.google.api.gax.rpc.ResponseObserver)\n- [2.54.1](/java/docs/reference/gax/2.54.1/com.google.api.gax.rpc.ResponseObserver)\n- [2.53.0](/java/docs/reference/gax/2.53.0/com.google.api.gax.rpc.ResponseObserver)\n- [2.52.0](/java/docs/reference/gax/2.52.0/com.google.api.gax.rpc.ResponseObserver)\n- [2.51.0](/java/docs/reference/gax/2.51.0/com.google.api.gax.rpc.ResponseObserver)\n- [2.50.0](/java/docs/reference/gax/2.50.0/com.google.api.gax.rpc.ResponseObserver)\n- [2.49.0](/java/docs/reference/gax/2.49.0/com.google.api.gax.rpc.ResponseObserver)\n- [2.48.1](/java/docs/reference/gax/2.48.1/com.google.api.gax.rpc.ResponseObserver)\n- [2.47.0](/java/docs/reference/gax/2.47.0/com.google.api.gax.rpc.ResponseObserver)\n- [2.46.1](/java/docs/reference/gax/2.46.1/com.google.api.gax.rpc.ResponseObserver)\n- [2.45.0](/java/docs/reference/gax/2.45.0/com.google.api.gax.rpc.ResponseObserver)\n- [2.43.0](/java/docs/reference/gax/2.43.0/com.google.api.gax.rpc.ResponseObserver)\n- [2.42.0](/java/docs/reference/gax/2.42.0/com.google.api.gax.rpc.ResponseObserver)\n- [2.41.0](/java/docs/reference/gax/2.41.0/com.google.api.gax.rpc.ResponseObserver)\n- [2.39.0](/java/docs/reference/gax/2.39.0/com.google.api.gax.rpc.ResponseObserver)\n- [2.38.0](/java/docs/reference/gax/2.38.0/com.google.api.gax.rpc.ResponseObserver)\n- [2.37.0](/java/docs/reference/gax/2.37.0/com.google.api.gax.rpc.ResponseObserver)\n- [2.36.0](/java/docs/reference/gax/2.36.0/com.google.api.gax.rpc.ResponseObserver)\n- [2.35.0](/java/docs/reference/gax/2.35.0/com.google.api.gax.rpc.ResponseObserver)\n- [2.34.1](/java/docs/reference/gax/2.34.1/com.google.api.gax.rpc.ResponseObserver)\n- [2.33.0](/java/docs/reference/gax/2.33.0/com.google.api.gax.rpc.ResponseObserver)\n- [2.32.1](/java/docs/reference/gax/2.32.1/com.google.api.gax.rpc.ResponseObserver)\n- [2.31.1](/java/docs/reference/gax/2.31.1/com.google.api.gax.rpc.ResponseObserver)\n- [2.30.1](/java/docs/reference/gax/2.30.1/com.google.api.gax.rpc.ResponseObserver)\n- [2.24.0](/java/docs/reference/gax/2.24.0/com.google.api.gax.rpc.ResponseObserver)\n- [2.23.3](/java/docs/reference/gax/2.23.3/com.google.api.gax.rpc.ResponseObserver)\n- [2.22.0](/java/docs/reference/gax/2.22.0/com.google.api.gax.rpc.ResponseObserver)\n- [2.21.0](/java/docs/reference/gax/2.21.0/com.google.api.gax.rpc.ResponseObserver)\n- [2.20.1](/java/docs/reference/gax/2.20.1/com.google.api.gax.rpc.ResponseObserver)\n- [2.19.6](/java/docs/reference/gax/2.19.6/com.google.api.gax.rpc.ResponseObserver)\n- [2.18.7](/java/docs/reference/gax/2.18.7/com.google.api.gax.rpc.ResponseObserver)\n- [2.17.0](/java/docs/reference/gax/2.17.0/com.google.api.gax.rpc.ResponseObserver)\n- [2.16.0](/java/docs/reference/gax/2.16.0/com.google.api.gax.rpc.ResponseObserver)\n- [2.15.0](/java/docs/reference/gax/2.15.0/com.google.api.gax.rpc.ResponseObserver)\n- [2.14.0](/java/docs/reference/gax/2.14.0/com.google.api.gax.rpc.ResponseObserver)\n- [2.13.0](/java/docs/reference/gax/2.13.0/com.google.api.gax.rpc.ResponseObserver)\n- [2.12.2](/java/docs/reference/gax/2.12.2/com.google.api.gax.rpc.ResponseObserver)\n- [2.11.0](/java/docs/reference/gax/2.11.0/com.google.api.gax.rpc.ResponseObserver)\n- [2.10.0](/java/docs/reference/gax/2.10.0/com.google.api.gax.rpc.ResponseObserver)\n- [2.9.0](/java/docs/reference/gax/2.9.0/com.google.api.gax.rpc.ResponseObserver)\n- [2.8.1](/java/docs/reference/gax/2.8.1/com.google.api.gax.rpc.ResponseObserver)\n- [2.7.1](/java/docs/reference/gax/2.7.1/com.google.api.gax.rpc.ResponseObserver) \n\n public interface ResponseObserver\u003cV\u003e\n\nReceives notifications from server-streaming calls.\n\nThe application is responsible for implementing the `ResponseObserver` and passing it to\nGAX, which then calls the observer with the messages for the application to receive them. The\nmethods might be called by different threads, but are guaranteed to happen sequentially. The\norder of callbacks is guaranteed to be:\n\n- exactly 1 onStart\n- 0 or more on Response\n- exactly 1 onError or onComplete\n\nBy default, the stream uses automatic flow control, where the next response will be delivered\nas soon as the current one is processed by onResponse. A consumer can disable automatic flow\ncontrol by calling `disableAutoInboundFlowControl()` in `onStart`. After this, the\nconsumer must request responses by calling `request()`.\n\nMethods\n-------\n\n### onComplete()\n\n public abstract void onComplete()\n\nReceives a notification of successful stream completion.\n\nMay only be called once, and if called, it must be the last method called. In particular, if\nan exception is thrown by an implementation of `onComplete`, no further calls to any\nmethod are allowed.\n\n### onError(Throwable t)\n\n public abstract void onError(Throwable t)\n\nReceives a terminating error from the stream.\n\nMay only be called once, and if called, it must be the last method called. In particular, if\nan exception is thrown by an implementation of `onError`, no further calls to any method\nare allowed.\n\n### onResponse(V response)\n\n public abstract void onResponse(V response)\n\nReceives a value from the stream.\n\nCan be called many times but is never called after [#onError(Throwable)](/java/docs/reference/gax/latest/com.google.api.gax.rpc.ResponseObserver#com_google_api_gax_rpc_ResponseObserver_onError_java_lang_Throwable_) or [#onComplete()](/java/docs/reference/gax/latest/com.google.api.gax.rpc.ResponseObserver#com_google_api_gax_rpc_ResponseObserver_onComplete__) are called.\n\nClients may may receive 0 or more onResponse callbacks.\n\nIf an exception is thrown by an implementation the caller will terminate the stream by\ncalling [#onError(Throwable)](/java/docs/reference/gax/latest/com.google.api.gax.rpc.ResponseObserver#com_google_api_gax_rpc_ResponseObserver_onError_java_lang_Throwable_) with the caught exception as the cause.\n\n### onStart(StreamController controller)\n\n public abstract void onStart(StreamController controller)\n\nCalled before the stream is started. This must be invoked synchronously on the same thread that\ncalled [ServerStreamingCallable#call(Object, ResponseObserver, ApiCallContext)](/java/docs/reference/gax/latest/com.google.api.gax.rpc.ServerStreamingCallable#com_google_api_gax_rpc_ServerStreamingCallable_call_)\n\nAllows for disabling flow control and early stream termination via `StreamController`."]]