Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

NoSuchMethodError when using RESTEasyClient on Android

I am developing an Android app and using a library that in turn depends on RESTEasyClient. When using the library at runtime, I get a NoSuchMethodError:

java.lang.NoSuchMethodError: No direct method <init>(Ljavax/net/ssl/SSLContext;Lorg/apache/http/conn/ssl/X509HostnameVerifier;)V in class Lorg/apache/http/conn/ssl/SSLSocketFactory; or its super classes (declaration of 'org.apache.http.conn.ssl.SSLSocketFactory' appears in /system/framework/ext.jar)
                      at org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder.initDefaultEngine(ResteasyClientBuilder.java:418)
                      at org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder.build(ResteasyClientBuilder.java:333)

As I understand it, this is because of an incompatibility with Android's implementation of Apache HttpClient. Searching online, I have found various solutions revolving around including org.apache.httpconnections:httpclient in the gradle dependencies and adding compile.exclude module: httpclient (to resolve the resulting conflict) in several variations. I have tried all these and invariably run into either an error from gradle or the NoSuchMethodErrormentioned above.

Is it possible to successfully use RESTEasyClient on Android? What steps do I need to take to enable this?

like image 327
O.O.Balance Avatar asked Feb 19 '18 14:02

O.O.Balance


1 Answers

It all comes down to versions. The android version is a bit behind, and has not the same method signatures in the api. Apaches recommendation is to add a specific version 4.3+ in the build file.

http://hc.apache.org/httpcomponents-client-4.3.x/android-port.html

like image 170
Alim Özdemir Avatar answered Oct 23 '22 07:10

Alim Özdemir