OkHttp won't build on RoboVM - AssertionError on sslSocketFactory

150 views
Skip to first unread message

David Barrell

unread,
Jan 31, 2016, 5:40:49 AM1/31/16
to RoboVM
Hey there, I'm new to RoboVM and am having trouble adapting classes to run on it, particularly OkHttp. When building a client using 
import okhttp3.OkHttpClient;

OkHttpClient
.Builder httpClient = new OkHttpClient.Builder();
OkHttpClient client = httpClient.build();

the following error is thrown
java.lang.AssertionError
at okhttp3.OkHttpClient.<init>(OkHttpClient.java:170)
at okhttp3.OkHttpClient.<init>(OkHttpClient.java:57)
at okhttp3.OkHttpClient$Builder.build(OkHttpClient.java:692)
at rest.RestClient.getClient(RestClient.java:34)

which is asserted here:
if (builder.sslSocketFactory != null) {
this.sslSocketFactory = builder.sslSocketFactory;
} else {
try {
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, null, null);
this.sslSocketFactory = sslContext.getSocketFactory();
} catch (GeneralSecurityException e) {
throw new AssertionError(); // The system has no TLS. Just give up.
}
}


The same code works natively on Android. I've tried declaring using the sslSocketFactory() method, but haven't been able to get it to work yet. What am I missing?

Cheers, David


Victor Mosin

unread,
Jan 31, 2016, 11:18:36 AM1/31/16
to RoboVM
I am not sure, but I had something similar..
Make sure you have the following definitions in robovm.xml:

<pattern>com.android.okhttp.HttpHandler</pattern>
<pattern>com.android.okhttp.HttpsHandler</pattern>
<pattern>com.android.org.conscrypt.**</pattern>
<pattern>com.android.org.bouncycastle.jce.provider.BouncyCastleProvider</pattern>
<pattern>com.android.org.bouncycastle.jcajce.provider.keystore.BC$Mappings</pattern>
<pattern>com.android.org.bouncycastle.jcajce.provider.keystore.bc.BcKeyStoreSpi</pattern>
<pattern>com.android.org.bouncycastle.jcajce.provider.keystore.bc.BcKeyStoreSpi$Std</pattern>
<pattern>com.android.org.bouncycastle.jce.provider.PKIXCertPathValidatorSpi</pattern>
<pattern>com.android.org.bouncycastle.jce.provider.RFC3280CertPathUtilities</pattern>
<pattern>com.android.org.bouncycastle.crypto.digests.AndroidDigestFactoryOpenSSL</pattern>
<pattern>org.apache.harmony.security.provider.**</pattern>

воскресенье, 31 января 2016 г., 11:40:49 UTC+1 пользователь David Barrell написал:

David Barrell

unread,
Feb 6, 2016, 4:00:13 AM2/6/16
to RoboVM
Thanks Victor - that seems to have worked!
Reply all
Reply to author
Forward
0 new messages