title: retrofit2.HttpException thrown even though it was handled in onError
body: <p>I'm always getting an unhandled exception when google+ responses with error json</p>
  
  <pre><code>retrofit2.HttpException: HTTP 404 
                           at retrofit2.RxJavaCallAdapterFactory$SimpleCallAdapter$1.call(RxJavaCallAdapterFactory.java:159)
                           at retrofit2.RxJavaCallAdapterFactory$SimpleCallAdapter$1.call(RxJavaCallAdapterFactory.java:154)
                           at rx.internal.operators.OperatorMap$1.onNext(OperatorMap.java:54)
                           at retrofit2.RxJavaCallAdapterFactory$CallOnSubscribe.call(RxJavaCallAdapterFactory.java:109)
                           at retrofit2.RxJavaCallAdapterFactory$CallOnSubscribe.call(RxJavaCallAdapterFactory.java:88)
                           at rx.Observable$2.call(Observable.java:162)
                           at rx.Observable$2.call(Observable.java:154)
                           at rx.Observable$2.call(Observable.java:162)
                           at rx.Observable$2.call(Observable.java:154)
                           ....
  </code></pre>
  
  <p>In that code:</p>
  
  <pre><code>Observable.create(new Observable.OnSubscribe&lt;String&gt;() {
          @Override
          public void call(Subscriber&lt;? super String&gt; strSub) {
              // Getting ID
              strSub.onNext(AccountUtils.getAccountId(appContext));
              strSub.onCompleted();})
  
            .subscribeOn(Schedulers.io())
            // Get Google+ Image through Retrofit2
            .flatMap(str -&gt; createGPlusUserObservable(str, AccountUtils.ANDROID_API_KEY))
            .map(this::setprofileImage)    // I don't see Timber.d message inside that method!
            .compose(binder)
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(subscriber);
  </code></pre>
  
  <p>In createGPlusUserObservable I use Retrofit 2 to get google+ image</p>
  
  <pre><code>private Observable&lt;GPlusUser&gt; createGPlusUserObservable(String userId, String apiKey) {
      //try {
      GoogleApiService service = ServiceFactory.getInstance().createJsonRetrofitService(
              GoogleApiService.class,
              GoogleApiService.SERVICE_ENDPOINT
      );
  
      Observable&lt;GPlusUser&gt; result = service.getGPlusUserInfo(userId, apiKey);
      Timber.d("Here1!"); // I see that in console!
      return result;  // It always returns result!
      /*} catch (Throwable e) { - it doesn't catch anything!
          Timber.d("Here!");
      }*/
  }
  </code></pre>
  
  <p>And subscriber is:</p>
  
  <pre><code>new Subscriber&lt;GPlusUser&gt;() {
          @Override
          public void onCompleted() {
              Timber.d("GPlusUserSubscriber ON COMPLETED");
          }
  
          @Override
          public void onError(Throwable e) {
              if (e instanceof HttpException) {
                  Timber.d("RETROFIT!"); // I see that in console!
              }
          }
  
          @Override
          public void onNext(GPlusUser gPlusUser) {
              setupAccountBox();
          }
      };
  </code></pre>
  
  <p>UPDATE: setprofileImage method</p>
  
  <pre><code>private GPlusUser setprofileImage(GPlusUser gPlusUser) {
      Timber.d("FOUR"); // As I've said, it doesn't appear in console
      AccountUtils.setProfileImage(appContext, gPlusUser.image.url);
      Timber.d("Setting profile image: %s", gPlusUser.image.url);
      return gPlusUser;
  }
  </code></pre>
  
  <p>So the question is - why I'm getting unhandled exception if I handle it in subscriber's onError(Throwable e)</p>
  
  <p>Thanks!</p>