-
Notifications
You must be signed in to change notification settings - Fork 38.9k
Open
Labels
in: webIssues in web modules (web, webmvc, webflux, websocket)Issues in web modules (web, webmvc, webflux, websocket)status: waiting-for-triageAn issue we've not yet triaged or decided onAn issue we've not yet triaged or decided on
Description
Versions:
spring-web: 7.0.1
spring-boot: 4.0.0
Reproducer:
RestClient.create().head()
.uri("https://maven.neoforged.net/releases/net/neoforged/neoforge/0.25w14craftmine.3-beta/neoforge-0.25w14craftmine.3-beta.pom")
.retrieve()
.toBodilessEntity();
This code will crash with the stack-trace shown further down below.
The custom decompressing body handler doesn't seem to handle responses with Content-Encoding: gzip, but without a response body. This is the case for responses to HEAD requests. GET requests will work normally, even when using toBodilessEntity().
What I don't know is if the body handler should generally handle 0-byte responses (outside of HEAD) as empty content, even with that encoding.
Stacktrace:
org.springframework.web.client.ResourceAccessException: I/O error on HEAD request for "https://maven.neoforged.net/releases/net/neoforged/neoforge/0.25w14craftmine.3-beta/neoforge-0.25w14craftmine.3-beta.pom": null
at org.springframework.web.client.DefaultRestClient$DefaultRequestBodyUriSpec.createResourceAccessException(DefaultRestClient.java:763) ~[spring-web-7.0.1.jar:7.0.1]
at org.springframework.web.client.DefaultRestClient$DefaultRequestBodyUriSpec.exchangeInternal(DefaultRestClient.java:615) ~[spring-web-7.0.1.jar:7.0.1]
at org.springframework.web.client.DefaultRestClient$DefaultRequestBodyUriSpec.exchange(DefaultRestClient.java:567) ~[spring-web-7.0.1.jar:7.0.1]
at org.springframework.web.client.RestClient$RequestHeadersSpec.exchange(RestClient.java:750) ~[spring-web-7.0.1.jar:7.0.1]
at org.springframework.web.client.DefaultRestClient$DefaultResponseSpec.executeAndExtract(DefaultRestClient.java:896) ~[spring-web-7.0.1.jar:7.0.1]
at org.springframework.web.client.DefaultRestClient$DefaultResponseSpec.toBodilessEntity(DefaultRestClient.java:860) ~[spring-web-7.0.1.jar:7.0.1]
at net.neoforged.meta.jobs.MavenVersionDiscoveryJob.discover(MavenVersionDiscoveryJob.java:95) ~[classes/:na]
at net.neoforged.meta.jobs.MavenVersionDiscoveryJob.run(MavenVersionDiscoveryJob.java:46) ~[classes/:na]
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:565) ~[na:na]
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:359) ~[spring-aop-7.0.1.jar:7.0.1]
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190) ~[spring-aop-7.0.1.jar:7.0.1]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:158) ~[spring-aop-7.0.1.jar:7.0.1]
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:370) ~[spring-tx-7.0.1.jar:7.0.1]
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:118) ~[spring-tx-7.0.1.jar:7.0.1]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-7.0.1.jar:7.0.1]
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:719) ~[spring-aop-7.0.1.jar:7.0.1]
at net.neoforged.meta.jobs.MavenVersionDiscoveryJob$$SpringCGLIB$$0.run(<generated>) ~[classes/:na]
at net.neoforged.meta.MetaApiApplication.runJob(MetaApiApplication.java:74) ~[classes/:na]
at net.neoforged.meta.MetaApiApplication.runConsoleCommand(MetaApiApplication.java:63) ~[classes/:na]
at net.neoforged.meta.MetaApiApplication.main(MetaApiApplication.java:43) ~[classes/:na]
Caused by: java.io.EOFException: null
at java.base/java.util.zip.GZIPInputStream.readUByte(GZIPInputStream.java:296) ~[na:na]
at java.base/java.util.zip.GZIPInputStream.readUShort(GZIPInputStream.java:286) ~[na:na]
at java.base/java.util.zip.GZIPInputStream.readHeader(GZIPInputStream.java:198) ~[na:na]
at java.base/java.util.zip.GZIPInputStream.<init>(GZIPInputStream.java:82) ~[na:na]
at java.base/java.util.zip.GZIPInputStream.<init>(GZIPInputStream.java:114) ~[na:na]
at org.springframework.http.client.JdkClientHttpRequest$DecompressingBodyHandler.lambda$apply$0(JdkClientHttpRequest.java:336) ~[spring-web-7.0.1.jar:7.0.1]
at java.base/java.util.concurrent.CompletableFuture.uniApplyNow(CompletableFuture.java:705) ~[na:na]
at java.base/java.util.concurrent.CompletableFuture.uniApplyStage(CompletableFuture.java:683) ~[na:na]
at java.base/java.util.concurrent.CompletableFuture.thenApply(CompletableFuture.java:2227) ~[na:na]
at java.base/java.util.concurrent.CompletableFuture$MinimalStage.thenApply(CompletableFuture.java:2967) ~[na:na]
at java.net.http/jdk.internal.net.http.ResponseSubscribers$MappingSubscriber.getBody(ResponseSubscribers.java:754) ~[java.net.http:na]
at java.net.http/jdk.internal.net.http.common.HttpBodySubscriberWrapper.getBody(HttpBodySubscriberWrapper.java:360) ~[java.net.http:na]
at java.net.http/jdk.internal.net.http.ResponseSubscribers.lambda$getBodyAsync$0(ResponseSubscribers.java:1086) ~[java.net.http:na]
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090) ~[na:na]
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614) ~[na:na]
at java.base/java.lang.Thread.run(Thread.java:1474) ~[na:na]
Metadata
Metadata
Assignees
Labels
in: webIssues in web modules (web, webmvc, webflux, websocket)Issues in web modules (web, webmvc, webflux, websocket)status: waiting-for-triageAn issue we've not yet triaged or decided onAn issue we've not yet triaged or decided on