diff -r 44a9dd4e4d96 -r 04dcc65c9d58 test/jdk/java/net/httpclient/examples/JavadocExamples.java --- a/test/jdk/java/net/httpclient/examples/JavadocExamples.java Fri Jan 25 18:12:06 2019 +0100 +++ b/test/jdk/java/net/httpclient/examples/JavadocExamples.java Fri Jan 25 18:13:25 2019 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -24,6 +24,8 @@ import java.io.IOException; import java.io.InputStream; import java.io.PrintStream; +import java.io.UncheckedIOException; +import java.lang.reflect.UndeclaredThrowableException; import java.net.Authenticator; import java.net.InetSocketAddress; import java.net.ProxySelector; @@ -36,6 +38,7 @@ import java.net.http.HttpResponse; import java.net.http.HttpResponse.BodyHandler; import java.net.http.HttpResponse.BodyHandlers; +import java.net.http.HttpResponse.BodySubscriber; import java.net.http.HttpResponse.BodySubscribers; import java.nio.file.Path; import java.nio.file.Paths; @@ -44,6 +47,7 @@ import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.Flow; +import java.util.function.Supplier; import java.util.regex.Pattern; import static java.nio.charset.StandardCharsets.UTF_8; @@ -177,6 +181,11 @@ .send(request, responseInfo -> BodySubscribers.mapping(BodySubscribers.ofString(UTF_8), String::getBytes)); + // Maps an InputStream to a Foo object. + HttpResponse> response9 = client.send(request, + (resp) -> FromMappingSubscriber.asJSON(Foo.class)); + String resp = response9.body().get().asString(); + } /** @@ -290,4 +299,51 @@ } } + public static class Foo { + byte[] bytes; + public Foo(byte[] bytes) { + this.bytes = bytes; + } + public String asString() { + return new String(bytes, UTF_8); + } + } + + static class ObjectMapper { + W readValue(InputStream is, Class targetType) + throws IOException + { + byte[] bytes = is.readAllBytes(); + return map(bytes, targetType); + } + + static W map(byte[] bytes, Class targetType) { + try { + return targetType.getConstructor(byte[].class).newInstance(bytes); + } catch (RuntimeException | Error x) { + throw x; + } catch (Exception x) { + throw new UndeclaredThrowableException(x); + } + } + } + + static class FromMappingSubscriber { + public static BodySubscriber> asJSON(Class targetType) { + BodySubscriber upstream = BodySubscribers.ofInputStream(); + + BodySubscriber> downstream = BodySubscribers.mapping( + upstream, (InputStream is) -> () -> { + try (InputStream stream = is) { + ObjectMapper objectMapper = new ObjectMapper(); + return objectMapper.readValue(stream, targetType); + } catch (IOException e) { + throw new UncheckedIOException(e); + } + }); + return downstream; + } + + } + }