Skip to content

NoClassDefFoundError with OkHttpEngine since okhttp 5.0.0-alpha.17 #1311

@jessestricker

Description

@jessestricker

Describe the bug

We're using the S3 client from the Kotlin AWS SDK in our project. Recently, okhttp 5.0.0-alpha.17 was published, in which they've removed ConnectionListener from the public API.

This leads to a java.lang.NoClassDefFoundError: okhttp3/ConnectionListener when initializing the S3 client using the OkHttpEngine and setting its connectionIdlePollingInterval property to a non-null value.

Regression Issue

  • Select this option if this issue appears to be a regression.

Expected behavior

It should work the same way as before with okhttp 5.0.0-alpha.16.

Current behavior

The following exception is thrown on AWS SDK client initialization:

Exception in thread "main" java.lang.NoClassDefFoundError: okhttp3/ConnectionListener
	at java.base/java.lang.ClassLoader.defineClass1(Native Method)
	at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1027)
	at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150)
	at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:862)
	at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:760)
	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:681)
	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:639)
	at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526)
	at aws.smithy.kotlin.runtime.http.engine.okhttp.OkHttpEngine.<init>(OkHttpEngine.kt:48)
	at aws.smithy.kotlin.runtime.http.engine.okhttp.OkHttpEngine$Companion.invoke(OkHttpEngine.kt:42)
	at aws.smithy.kotlin.runtime.http.engine.okhttp.OkHttpEngine$Companion$engineConstructor$1.invoke(OkHttpEngine.kt:44)
	at aws.smithy.kotlin.runtime.http.engine.okhttp.OkHttpEngine$Companion$engineConstructor$1.invoke(OkHttpEngine.kt:44)
	at aws.smithy.kotlin.runtime.http.engine.HttpEngineConfigImpl$BuilderImpl.httpClientImpl$lambda$9(HttpEngineConfigImpl.kt:74)
	at aws.smithy.kotlin.runtime.http.engine.HttpEngineConfigImpl$BuilderImpl.buildHttpEngineConfig(HttpEngineConfigImpl.kt:77)
	at aws.sdk.kotlin.services.s3.S3Client$Config$Builder.buildHttpEngineConfig(S3Client.kt)
	at aws.sdk.kotlin.services.s3.S3Client$Config.<init>(S3Client.kt:295)
	at aws.sdk.kotlin.services.s3.S3Client$Config.<init>(S3Client.kt)
	at aws.sdk.kotlin.services.s3.S3Client$Config$Builder.build(S3Client.kt:542)
	at aws.sdk.kotlin.services.s3.S3Client$Config$Builder.build(S3Client.kt:359)
	at aws.smithy.kotlin.runtime.client.AbstractSdkClientBuilder.build(AbstractSdkClientBuilder.kt:20)
	at aws.smithy.kotlin.runtime.client.AbstractSdkClientBuilder.build(AbstractSdkClientBuilder.kt:13)
	at aws.sdk.kotlin.runtime.config.AbstractAwsSdkClientFactory.fromEnvironment(AbstractAwsSdkClientFactory.kt:117)

Steps to Reproduce

Create a Kotlin project using the following dependencies:

dependencies {
  implementation("aws.sdk.kotlin:s3:1.4.115")
  implementation("aws.smithy.kotlin:http-client-engine-okhttp:1.4.21")
  implementation("com.squareup.okhttp3:okhttp:5.0.0-alpha.17")
}

Then, create an S3 client like so:

S3Client.fromEnvironment {
  httpClient(OkHttpEngine) {    
    connectionIdlePollingInterval = 200.milliseconds
  }
}

Possible Solution

As a current workaround, we've downgraded our okhttp dependency back to 5.0.0-alpha.16

Context

No response

Smithy-Kotlin version

1.4.21

Platform (JVM/JS/Native)

21

Operating system and version

Windows 11

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugThis issue is a bug.p1This is a high priority issue

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions