Verifier rejected class software.amazon.awssdk.http.apache.ApacheHttpClient

Viewed 356

I'm trying to run the code that I copy-pasted from here, specifically this line

val region = Region.AP_SOUTHEAST_1
val s3 = S3Client.builder().region(region).build()

but everytime I run it, it will give me this error

java.lang.VerifyError: Verifier rejected class software.amazon.awssdk.http.apache.ApacheHttpClient: void software.amazon.awssdk.http.apache.ApacheHttpClient.lambda$LRMaF_8eLuzzpRjS-Ew4gJswCBw(org.apache.http.client.methods.HttpRequestBase) failed to verify: void software.amazon.awssdk.http.apache.ApacheHttpClient.lambda$LRMaF_8eLuzzpRjS-Ew4gJswCBw(org.apache.http.client.methods.HttpRequestBase): [0x0] 'this' argument 'Reference: org.apache.http.client.methods.HttpRequestBase' not instance of 'Reference: org.apache.http.client.methods.AbstractExecutionAwareRequest' (declaration of 'software.amazon.awssdk.http.apache.ApacheHttpClient' appears in /data/app/com.imincode.earthlings-Jxs426ZYpcjwZtg1zzKjkw==/base.apk!classes3.dex) at software.amazon.awssdk.http.apache.ApacheHttpClient.builder(ApacheHttpClient.java:133) at software.amazon.awssdk.http.apache.ApacheSdkHttpService.createHttpClientBuilder(ApacheSdkHttpService.java:29) at software.amazon.awssdk.core.internal.http.loader.-$$Lambda$-cEpDqlhpsSVBRGa6lPjzgTy1tM.apply(Unknown Source:2) at java.util.Optional.map(Optional.java:211) at software.amazon.awssdk.core.internal.http.loader.DefaultSdkHttpClientBuilder.buildWithDefaults(DefaultSdkHttpClientBuilder.java:41) at software.amazon.awssdk.core.client.builder.SdkDefaultClientBuilder.lambda$resolveSyncHttpClient$5$SdkDefaultClientBuilder(SdkDefaultClientBuilder.java:274) at software.amazon.awssdk.core.client.builder.-$$Lambda$SdkDefaultClientBuilder$mSpkyGAugx5W7tgD88eQuJnqvEs.get(Unknown Source:2) at java.util.Optional.orElseGet(Optional.java:263) at software.amazon.awssdk.core.client.builder.SdkDefaultClientBuilder.resolveSyncHttpClient(SdkDefaultClientBuilder.java:274) at software.amazon.awssdk.core.client.builder.SdkDefaultClientBuilder.finalizeSyncConfiguration(SdkDefaultClientBuilder.java:225) at software.amazon.awssdk.core.client.builder.SdkDefaultClientBuilder.syncClientConfiguration(SdkDefaultClientBuilder.java:158) at software.amazon.awssdk.services.s3.DefaultS3ClientBuilder.buildClient(DefaultS3ClientBuilder.java:27) at software.amazon.awssdk.services.s3.DefaultS3ClientBuilder.buildClient(DefaultS3ClientBuilder.java:22) at software.amazon.awssdk.core.client.builder.SdkDefaultClientBuilder.build(SdkDefaultClientBuilder.java:129)

1 Answers

I got the same error working with timestream db. So in my case, timestreamWriteClient accepts ApacheHttpClient.Builder:

ApacheHttpClient.Builder httpClientBuilder =
            ApacheHttpClient.builder();

return TimestreamWriteClient.builder()
            .httpClientBuilder(httpClientBuilder)
            .overrideConfiguration(overrideConfig.build())
            .region(Region.US_EAST_1)
            .build();

And on runtime, when app tries to create apache client, I got this error. So during some investigations, I found, that I can use another HTTP client - UrlConnectionHttpClient and pass it to TimestreamWriteClient.Builder.

httpClientBuilder: UrlConnectionHttpClient.Builder = UrlConnectionHttpClient.builder()

But this client should be included separately:

implementation 'software.amazon.awssdk:url-connection-client'

You can add version, adding ":X.Y.Z" at the end, but I use BOM, so I don't know anything about versions:

implementation platform('software.amazon.awssdk:bom:2.15.0')

So, I think, that you also can pass this HTTP client to your S3 service builder, like I'm doing this with timestreamWriteClient builder.

Related