EnricSala / RxSSE

Server-Sent Events client for Android and Java applications

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Crash by OnErrorNotImplementedException

TangoHanks opened this issue · comments

FATAL EXCEPTION: RxNewThreadScheduler-1

                                                             io.reactivex.exceptions.OnErrorNotImplementedException: \n not found: limit=0 content=…
                                                                 at io.reactivex.internal.functions.Functions$OnErrorMissingConsumer.accept(Functions.java:704)
                                                                 at io.reactivex.internal.functions.Functions$OnErrorMissingConsumer.accept(Functions.java:701)
                                                                 at io.reactivex.internal.subscribers.LambdaSubscriber.onError(LambdaSubscriber.java:79)
                                                                 at io.reactivex.internal.operators.flowable.FlowableObserveOn$BaseObserveOnSubscriber.checkTerminated(FlowableObserveOn.java:207)
                                                                 at io.reactivex.internal.operators.flowable.FlowableObserveOn$ObserveOnSubscriber.runAsync(FlowableObserveOn.java:392)
                                                                 at io.reactivex.internal.operators.flowable.FlowableObserveOn$BaseObserveOnSubscriber.run(FlowableObserveOn.java:176)
                                                                 at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:61)
                                                                 at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:52)
                                                                 at java.util.concurrent.FutureTask.run(FutureTask.java:237)
                                                                 at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:272)
                                                                 at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
                                                                 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
                                                                 at java.lang.Thread.run(Thread.java:761)
                                                              Caused by: java.io.EOFException: \n not found: limit=0 content=…
                                                                 at okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.java:227)
                                                                 at okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.java:211)
                                                                 at com.saladevs.rxsse.RxSSE$lines$1.accept(RxSSE.kt:46)
                                                                 at com.saladevs.rxsse.RxSSE$lines$1.accept(RxSSE.kt:9)
                                                                 at io.reactivex.internal.operators.flowable.FlowableInternalHelper$SimpleGenerator.apply(FlowableInternalHelper.java:44)
                                                                 at io.reactivex.internal.operators.flowable.FlowableInternalHelper$SimpleGenerator.apply(FlowableInternalHelper.java:35)
                                                                 at io.reactivex.internal.operators.flowable.FlowableGenerate$GeneratorSubscription.request(FlowableGenerate.java:109)
                                                                 at io.reactivex.internal.operators.flowable.FlowableUsing$UsingSubscriber.request(FlowableUsing.java:158)
                                                                 at io.reactivex.internal.operators.flowable.FlowableScanSeed$ScanSeedSubscriber.onSubscribe(FlowableScanSeed.java:101)
                                                                 at io.reactivex.internal.operators.flowable.FlowableUsing$UsingSubscriber.onSubscribe(FlowableUsing.java:99)
                                                                 at io.reactivex.internal.operators.flowable.FlowableGenerate.subscribeActual(FlowableGenerate.java:52)
                                                                 at io.reactivex.Flowable.subscribe(Flowable.java:12994)
                                                                 at io.reactivex.Flowable.subscribe(Flowable.java:12940)
                                                                 at io.reactivex.internal.operators.flowable.FlowableUsing.subscribeActual(FlowableUsing.java:74)
                                                                 at io.reactivex.Flowable.subscribe(Flowable.java:12994)
                                                                 at io.reactivex.internal.operators.flowable.FlowableScanSeed.subscribeActual(FlowableScanSeed.java:52)
                                                                 at io.reactivex.Flowable.subscribe(Flowable.java:12994)
                                                                 at io.reactivex.internal.operators.flowable.FlowableFilter.subscribeActual(FlowableFilter.java:37)
                                                                 at io.reactivex.Flowable.subscribe(Flowable.java:12994)
                                                                 at io.reactivex.internal.operators.flowable.FlowableMap.subscribeActual(FlowableMap.java:38)
                                                                 at io.reactivex.Flowable.subscribe(Flowable.java:12994)
                                                                 at io.reactivex.Flowable.subscribe(Flowable.java:12940)
                                                                 at io.reactivex.internal.operators.flowable.FlowableFlatMap$MergeSubscriber.onNext(FlowableFlatMap.java:163)
                                                                 at io.reactivex.internal.subscriptions.DeferredScalarSubscription.complete(DeferredScalarSubscription.java:133)
                                                                 at io.reactivex.internal.operators.single.SingleToFlowable$SingleToFlowableObserver.onSuccess(SingleToFlowable.java:63)
                                                                 at io.reactivex.internal.operators.single.SingleCreate$Emitter.onSuccess(SingleCreate.java:68)
                                                                 at com.saladevs.rxsse.RxSSE$execute$1.subscribe(RxSSE.kt:31)
                                                                 at io.reactivex.internal.operators.single.SingleCreate.subscribeActual(SingleCreate.java:39)
                                                                 at io.reactivex.Single.subscribe(Single.java:2779)

02-19 17:49:12.390 13289-13355/com.imtb.tb.dev E/AndroidRuntime: at io.reactivex.internal.operators.single.SingleToFlowable.subscribeActual(SingleToFlowable.java:37)
at io.reactivex.Flowable.subscribe(Flowable.java:12994)
at io.reactivex.internal.operators.flowable.FlowableFlatMap.subscribeActual(FlowableFlatMap.java:53)
at io.reactivex.Flowable.subscribe(Flowable.java:12994)
at io.reactivex.Flowable.subscribe(Flowable.java:12940)
at io.reactivex.internal.operators.flowable.FlowableSubscribeOn$SubscribeOnSubscriber.run(FlowableSubscribeOn.java:82)
... 7 more

    kotlin_version = '1.1.51'
    rxjava_version = '2.1.5'
    okhttp_version = '3.9.0'

It seems that the SSE stream you are connecting to terminated but did not end in a new line:

Caused by: java.io.EOFException: \n not found: limit=0 content=…

Your code should handle possible errors, example:

rxsse
    .connectTo("https://localhost/events")
    .subscribe(
        { log.info("Received $it") },
        { log.error("Oops!", it) })

Let me know if this solves your issue. Please add your code if it doesn't.

RxSSE rxSSE = new RxSSE();
Request request = new Request.Builder().url(getSseApi())
.addHeader("Connection", "Keep-Alive")
.addHeader("Charset", "UTF-8").build();

    disposable = rxSSE.connectTo(request)
            .onBackpressureLatest()
            .subscribeOn(Schedulers.io(), false)
            .observeOn(Schedulers.newThread())
            .subscribe(new Consumer<ServerSentEvent>() {
                @Override
                public void accept(ServerSentEvent serverSentEvent) throws Exception {
                    Log.d("test", "Received data:" + serverSentEvent.getData());
                    Log.d("test", "Received event:" + serverSentEvent.getEvent());
                    Log.d("test", "Received id:" + serverSentEvent.getLastId());
                }
            }, new Consumer<Throwable>() {
                @Override
                public void accept(Throwable throwable) throws Exception {
                    Log.d("test", "Received throwable:" + throwable.getMessage());
                }
            });

Hi EnricSala : i catched that throwable ,and its message showed:"D/test: Received throwable:\n not found: limit=0 content=…"

Hi EnricSala: it was fixed, that caused by serve cut down SSE stream . thanks a lot!

@TangoHanks im using

 val client = OkHttpClient.Builder()
                .readTimeout(10, TimeUnit.MINUTES)
                .build()
        val rxsse = RxSSE(client)