okhttp: OkHttp 3.x fails with OpenJDK Zulu 8.0.252

Hi folks,

We found that this particular piece of code in okhttp 3.x: https://github.com/square/okhttp/blob/okhttp_3.14.x/okhttp/src/main/java/okhttp3/internal/platform/Jdk9Platform.java#L81-L94 breaks.

This checks for setApplicationProtocols and getApplicationProtocol which are JDK 9. however, these ones got backported to Zulu 8.0.252 causing OkHttp believing that is running on jdk9 and initializing a Jdk9Platform which breaks projects

Wondering if a patch could be released for 3.x since there are several libraries and projects out there that haven’t migrated to 4.x

Thanks

About this issue

  • Original URL
  • State: closed
  • Created 4 years ago
  • Reactions: 5
  • Comments: 22

Most upvoted comments

Why would anyone do that???

    public String getApplicationProtocol() {
        throw new UnsupportedOperationException();
    }

Looks great! JDK 9 platform activates and the fallback for UnsupportedOperationException for our incompatible SslSocket wrapper successfully falls back to HTTP/1.

Sure can - let us know where to pickup your snapshots and we’ll give it a try.

Our wrapper is fixed, we switched to a javaassist generated proxy, so we should be good to go there.

Here’s the upstream change https://hg.openjdk.java.net/jdk8u/jdk8u41/jdk/rev/b26b096d4c89

Full stack trace:

java.lang.AssertionError: failed to get ALPN selected protocol
	at okhttp3.internal.platform.Jdk9Platform.getSelectedProtocol(Jdk9Platform.java:68) ~[carson-0.461.0-all.jar:0.461.0]
	at okhttp3.internal.connection.RealConnection.connectTls(RealConnection.java:363) ~[carson-0.461.0-all.jar:0.461.0]
	at okhttp3.internal.connection.RealConnection.establishProtocol(RealConnection.java:300) ~[carson-0.461.0-all.jar:0.461.0]
	at okhttp3.internal.connection.RealConnection.connect(RealConnection.java:185) ~[carson-0.461.0-all.jar:0.461.0]
	at okhttp3.internal.connection.ExchangeFinder.findConnection(ExchangeFinder.java:224) ~[carson-0.461.0-all.jar:0.461.0]
	at okhttp3.internal.connection.ExchangeFinder.findHealthyConnection(ExchangeFinder.java:108) ~[carson-0.461.0-all.jar:0.461.0]
	at okhttp3.internal.connection.ExchangeFinder.find(ExchangeFinder.java:88) ~[carson-0.461.0-all.jar:0.461.0]
	at okhttp3.internal.connection.Transmitter.newExchange(Transmitter.java:169) ~[carson-0.461.0-all.jar:0.461.0]
	at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:41) ~[carson-0.461.0-all.jar:0.461.0]
	at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:142) ~[carson-0.461.0-all.jar:0.461.0]
	at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:117) ~[carson-0.461.0-all.jar:0.461.0]
	at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:94) ~[carson-0.461.0-all.jar:0.461.0]
	at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:142) ~[carson-0.461.0-all.jar:0.461.0]
	at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:117) ~[carson-0.461.0-all.jar:0.461.0]
	at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.java:93) ~[carson-0.461.0-all.jar:0.461.0]
	at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:142) ~[carson-0.461.0-all.jar:0.461.0]
	at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:88) ~[carson-0.461.0-all.jar:0.461.0]
	at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:142) ~[carson-0.461.0-all.jar:0.461.0]
	at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:117) ~[carson-0.461.0-all.jar:0.461.0]
	at okhttp3.logging.HttpLoggingInterceptor.intercept(HttpLoggingInterceptor.java:223) ~[carson-0.461.0-all.jar:0.461.0]
	at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:142) ~[carson-0.461.0-all.jar:0.461.0]
	at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:117) ~[carson-0.461.0-all.jar:0.461.0]
	at com.netflix.engtools.carson.JenkinsClient$userAgentUpdate$1.invoke(JenkinsClient.kt:32) ~[carson-0.461.0-all.jar:0.461.0]
	at com.netflix.engtools.carson.JenkinsClient$userAgentUpdate$1.invoke(JenkinsClient.kt:19) ~[carson-0.461.0-all.jar:0.461.0]
	at com.netflix.engtools.carson.JenkinsClient$sam$okhttp3_Interceptor$0.intercept(JenkinsClient.kt) ~[carson-0.461.0-all.jar:0.461.0]
	at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:142) ~[carson-0.461.0-all.jar:0.461.0]
	at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:117) ~[carson-0.461.0-all.jar:0.461.0]
	at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:229) ~[carson-0.461.0-all.jar:0.461.0]
	at okhttp3.RealCall.execute(RealCall.java:81) ~[carson-0.461.0-all.jar:0.461.0]
	at retrofit2.OkHttpCall.execute(OkHttpCall.java:190) ~[carson-0.461.0-all.jar:0.461.0]
...
Caused by: java.lang.reflect.InvocationTargetException
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_252]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_252]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_252]
	at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_252]
	at okhttp3.internal.platform.Jdk9Platform.getSelectedProtocol(Jdk9Platform.java:58) ~[carson-0.461.0-all.jar:0.461.0]
	... 37 more
Caused by: java.lang.UnsupportedOperationException
	at javax.net.ssl.SSLSocket.getApplicationProtocol(SSLSocket.java:691) ~[?:1.8.0_252]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_252]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_252]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_252]
	at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_252]
	at okhttp3.internal.platform.Jdk9Platform.getSelectedProtocol(Jdk9Platform.java:58) ~[carson-0.461.0-all.jar:0.461.0]
	... 37 more