Dan Garner Dan Garner - 1 year ago 173
Android Question

java.lang.NoSuchMethodError: okhttp3.internal.http.HttpEngine.recover

I have an application which uses ksoap with an underlying


The majority of the time it works - however during a connection retry the application crashes with a NoSuchMethodError. Stack trace below

Fatal Exception: java.lang.NoSuchMethodError: okhttp3.internal.http.HttpEngine.recover
at okhttp3.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:493)
at okhttp3.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:127)
at okhttp3.internal.huc.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:261)
at org.ksoap2.transport.OkHttpServiceConnectionSE.openOutputStream(OkHttpServiceConnectionSE.java:124)
at org.ksoap2.transport.HttpTransportSE.sendData(HttpTransportSE.java:292)
at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:184)
at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:118)
at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:113)
at uk.org.xibo.xmds.CheckConnection.run(CheckConnection.java:106)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:841)

I do use proguard, and have added rules so that okhttp is left alone:

-keepattributes Signature
-keepattributes *Annotation*
-keep class okhttp3.** { *; }
-keep interface okhttp3.** { *; }
-dontwarn okhttp3.**

My grade file contains these dependencies:

compile 'com.squareup.okio:okio:1.8.0'
compile 'com.squareup.okhttp3:okhttp:3.3.0'
compile 'com.google.code.ksoap2-android:ksoap2-android:3.6.1'

I have tried decompiling the resulting APK and can confirm that the
method does exist.

The source for the missing method is here: https://github.com/square/okhttp/blob/master/okhttp-urlconnection/src/main/java/okhttp3/internal/huc/HttpURLConnectionImpl.java#L495

I am not sure how to proceed debugging this issue OR whether I have done something obviously wrong.

Thanks for any assistance.


New theory - ksoap2-android has a reference to part of the okhttp library:


method is contained in the main okhttp library - could it be that my reference to okhttp v3.3.0 is providing the
which is being used by
v3.2.0 from the ksoap2 library?

I've downgraded my okhttp dependency to
compile 'com.squareup.okhttp3:okhttp:3.2.0'
and have installed on a few devices to test. If this is the problem I will update with the answer.

Answer Source

Apologies for the delay - reverting to compile 'com.squareup.okhttp3:okhttp:3.2.0' in my gradle file did solve the problem.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download