Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8296410

HttpClient throws java.io.IOException: no statuscode in response for HTTP2

XMLWordPrintable

    • b10
    • generic
    • generic
    • Verified

        ADDITIONAL SYSTEM INFORMATION :
        Ubuntu 20.04.5
        openjdk 19.0.1 2022-10-18
        OpenJDK Runtime Environment (build 19.0.1+10-21)
        OpenJDK 64-Bit Server VM (build 19.0.1+10-21, mixed mode, sharing)

        A DESCRIPTION OF THE PROBLEM :
        HttpClient throws java.io.IOException: no statuscode in response when used with HTTP2 endpoint. Changing the version of request to HTTP 1.1 seems to fix the problem.

        Stack trace seems to be similar in meaning to https://bugs.openjdk.org/browse/JDK-8263031?jql=text%20~%20%22no%20statuscode%20in%20response%22 which should be fix in opne-jdk 19. However I am still experiencing the problem - maybe the root cause is different.

        Exception in thread "main" java.io.IOException: no statuscode in response
        at java.net.http/jdk.internal.net.http.HttpClientImpl.send(HttpClientImpl.java:857)
        at java.net.http/jdk.internal.net.http.HttpClientFacade.send(HttpClientFacade.java:123)
        at Test.main(Test.java:17)
        Caused by: java.io.IOException: no statuscode in response
        at java.net.http/jdk.internal.net.http.Stream.lambda$handleResponse$2(Stream.java:497)
        at java.base/java.util.OptionalLong.orElseThrow(OptionalLong.java:273)
        at java.net.http/jdk.internal.net.http.Stream.handleResponse(Stream.java:497)
        at java.net.http/jdk.internal.net.http.Stream.incoming(Stream.java:463)
        at java.net.http/jdk.internal.net.http.Http2Connection.processFrame(Http2Connection.java:838)
        at java.net.http/jdk.internal.net.http.frame.FramesDecoder.decode(FramesDecoder.java:155)
        at java.net.http/jdk.internal.net.http.Http2Connection$FramesController.processReceivedData(Http2Connection.java:232)
        at java.net.http/jdk.internal.net.http.Http2Connection.asyncReceive(Http2Connection.java:681)
        at java.net.http/jdk.internal.net.http.Http2Connection$Http2TubeSubscriber.processQueue(Http2Connection.java:1387)
        at java.net.http/jdk.internal.net.http.common.SequentialScheduler$LockingRestartableTask.run(SequentialScheduler.java:205)
        at java.net.http/jdk.internal.net.http.common.SequentialScheduler$CompleteRestartableTask.run(SequentialScheduler.java:149)
        at java.net.http/jdk.internal.net.http.common.SequentialScheduler$SchedulableTask.run(SequentialScheduler.java:230)
        at java.net.http/jdk.internal.net.http.common.SequentialScheduler.runOrSchedule(SequentialScheduler.java:303)
        at java.net.http/jdk.internal.net.http.common.SequentialScheduler.runOrSchedule(SequentialScheduler.java:256)
        at java.net.http/jdk.internal.net.http.Http2Connection$Http2TubeSubscriber.runOrSchedule(Http2Connection.java:1405)
        at java.net.http/jdk.internal.net.http.Http2Connection$Http2TubeSubscriber.onNext(Http2Connection.java:1431)
        at java.net.http/jdk.internal.net.http.Http2Connection$Http2TubeSubscriber.onNext(Http2Connection.java:1365)
        at java.net.http/jdk.internal.net.http.common.SSLTube$DelegateWrapper.onNext(SSLTube.java:210)
        at java.net.http/jdk.internal.net.http.common.SSLTube$SSLSubscriberWrapper.onNext(SSLTube.java:492)
        at java.net.http/jdk.internal.net.http.common.SSLTube$SSLSubscriberWrapper.onNext(SSLTube.java:295)
        at java.net.http/jdk.internal.net.http.common.SubscriberWrapper$DownstreamPusher.run1(SubscriberWrapper.java:316)
        at java.net.http/jdk.internal.net.http.common.SubscriberWrapper$DownstreamPusher.run(SubscriberWrapper.java:259)
        at java.net.http/jdk.internal.net.http.common.SequentialScheduler$LockingRestartableTask.run(SequentialScheduler.java:205)
        at java.net.http/jdk.internal.net.http.common.SequentialScheduler$CompleteRestartableTask.run(SequentialScheduler.java:149)
        at java.net.http/jdk.internal.net.http.common.SequentialScheduler$SchedulableTask.run(SequentialScheduler.java:230)
        at java.net.http/jdk.internal.net.http.common.SequentialScheduler.runOrSchedule(SequentialScheduler.java:303)
        at java.net.http/jdk.internal.net.http.common.SequentialScheduler.runOrSchedule(SequentialScheduler.java:256)
        at java.net.http/jdk.internal.net.http.common.SubscriberWrapper.outgoing(SubscriberWrapper.java:232)
        at java.net.http/jdk.internal.net.http.common.SubscriberWrapper.outgoing(SubscriberWrapper.java:198)
        at java.net.http/jdk.internal.net.http.common.SSLFlowDelegate$Reader.processData(SSLFlowDelegate.java:444)
        at java.net.http/jdk.internal.net.http.common.SSLFlowDelegate$Reader$ReaderDownstreamPusher.run(SSLFlowDelegate.java:268)
        at java.net.http/jdk.internal.net.http.common.SequentialScheduler$LockingRestartableTask.run(SequentialScheduler.java:205)
        at java.net.http/jdk.internal.net.http.common.SequentialScheduler$CompleteRestartableTask.run(SequentialScheduler.java:149)
        at java.net.http/jdk.internal.net.http.common.SequentialScheduler$SchedulableTask.run(SequentialScheduler.java:230)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
        at java.base/java.lang.Thread.run(Thread.java:1589)

        Process finished with exit code 1


        STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
        Use java code provided below to send a request via HttpClient.


        ---------- BEGIN SOURCE ----------
        import java.io.IOException;
        import java.net.URI;
        import java.net.http.HttpClient;
        import java.net.http.HttpRequest;
        import java.net.http.HttpResponse;
        import java.net.http.HttpResponse.BodyHandlers;

        public class Test {

            public static void main(String[] args) throws IOException, InterruptedException {

                String baseUri = "https://dawa.aws.dk/autocomplete?q=Rentemestervej+8,+2400+K%C3%B8benhavn+NV";
                HttpRequest build = HttpRequest
                        .newBuilder(URI.create(baseUri))
                        .build();

                HttpResponse<String> send = HttpClient.newHttpClient().send(build, BodyHandlers.ofString());
                String body = send.body();
            }
        }
        ---------- END SOURCE ----------

        CUSTOMER SUBMITTED WORKAROUND :
        Changing the HTTP version to 1.1 by adding .version(HttpClient.Version.HTTP_1_1) when building HttpRequest object.

        FREQUENCY : always


              ccleary Conor Cleary (Inactive)
              webbuggrp Webbug Group
              Votes:
              0 Vote for this issue
              Watchers:
              9 Start watching this issue

                Created:
                Updated:
                Resolved: