Skip to content

Commit 1d3754d

Browse files
committed
added example Java 11 HTTP Client
1 parent e7dd080 commit 1d3754d

File tree

9 files changed

+196
-30
lines changed

9 files changed

+196
-30
lines changed

java-10/src/main/java/com/github/wesleyegberto/collections/CollectionsFromStream.java renamed to java-10/src/main/java/com/github/wesleyegberto/collections/StreamToUnmodifiableCollections.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import java.util.function.Function;
66
import java.util.stream.Collectors;
77

8-
public class CollectionsFromStream {
8+
public class StreamToUnmodifiableCollections {
99
public static void main(String[] args) {
1010
List<String> list = List.of("Testing", "Immutable", "List", "From", "Stream");
1111

java-11/pom.xml

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
2+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
3+
<modelVersion>4.0.0</modelVersion>
4+
<groupId>com.github.wesleyegberto</groupId>
5+
<artifactId>java-11-new-features</artifactId>
6+
<version>1.0-SNAPSHOT</version>
7+
<packaging>jar</packaging>
8+
9+
<dependencies>
10+
</dependencies>
11+
12+
<build>
13+
<finalName>java-11-new-features</finalName>
14+
</build>
15+
16+
<properties>
17+
<maven.compiler.source>11</maven.compiler.source>
18+
<maven.compiler.target>11</maven.compiler.target>
19+
<failOnMissingWebXml>false</failOnMissingWebXml>
20+
</properties>
21+
</project>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.github.wesleyegberto.java11.http;
2+
3+
import java.net.http.HttpClient;
4+
import java.net.http.HttpRequest;
5+
import java.net.http.HttpResponse;
6+
7+
public class GetRequestAsyncTest {
8+
public static void main(String[] args) throws InterruptedException {
9+
HttpRequest request = HttpBinRequestBuilder.createGetRequest();
10+
11+
HttpClient httpClient = HttpClientBuilderTest.createHttpClient();
12+
// HttpClient#sendAsync is non-blocking and returns a CompletableFuture
13+
httpClient.sendAsync(request, HttpResponse.BodyHandlers.ofString())
14+
.thenApply(HttpResponse::body)
15+
.thenAccept(body -> System.out.println("Async Response: " + body))
16+
.exceptionally(ex -> {
17+
System.out.println("Exception: " + ex.getLocalizedMessage());
18+
return null;
19+
})
20+
.join(); // let's wait
21+
}
22+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package com.github.wesleyegberto.java11.http;
2+
3+
import java.net.http.HttpRequest;
4+
import java.net.http.HttpResponse.BodyHandlers;
5+
import java.util.concurrent.Flow.Subscriber;
6+
import java.util.concurrent.Flow.Subscription;
7+
8+
public class GetRequestReactiveTest {
9+
public static void main(String[] args) {
10+
HttpRequest request = HttpBinRequestBuilder.createGetRequest();
11+
12+
HttpClientBuilderTest.createHttpClient()
13+
.sendAsync(request, BodyHandlers.fromLineSubscriber(new LinePrinter()))
14+
.join();
15+
}
16+
17+
public static class LinePrinter implements Subscriber<String> {
18+
private Subscription subscription;
19+
20+
@Override
21+
public void onSubscribe(Subscription subscription) {
22+
this.subscription = subscription;
23+
this.subscription.request(1);
24+
}
25+
26+
@Override
27+
public void onNext(String item) {
28+
System.out.println("== [LinePrinter] Line received: " + item);
29+
this.subscription.request(1);
30+
}
31+
32+
@Override
33+
public void onError(Throwable throwable) {
34+
System.out.println("== [LinePrinter] Line received: " + throwable);
35+
}
36+
37+
@Override
38+
public void onComplete() {
39+
System.out.println("== [LinePrinter] Completed");
40+
}
41+
}
42+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.github.wesleyegberto.java11.http;
2+
3+
import java.io.IOException;
4+
import java.net.http.HttpClient;
5+
import java.net.http.HttpRequest;
6+
import java.net.http.HttpResponse;
7+
import java.net.http.HttpResponse.BodyHandlers;
8+
9+
public class GetRequestTest {
10+
public static void main(String[] args) throws IOException, InterruptedException {
11+
HttpRequest request = HttpBinRequestBuilder.createGetRequest();
12+
13+
HttpClient httpClient = HttpClientBuilderTest.createHttpClient();
14+
// HttpClient#send is blocking; the body is kept in memory to be processed
15+
HttpResponse<String> httpResponse = httpClient.send(request, BodyHandlers.ofString());
16+
System.out.println("Response: " + httpResponse.body());
17+
}
18+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package com.github.wesleyegberto.java11.http;
2+
3+
import java.net.URI;
4+
import java.net.http.HttpRequest;
5+
6+
public class HttpBinRequestBuilder {
7+
public static HttpRequest createGetRequest() {
8+
// HttpRequest is immutable
9+
return HttpRequest.newBuilder()
10+
.GET()
11+
.uri(URI.create("http://httpbin.org/get"))
12+
.header("Accept-Language", "en-US,en;q=0.5")
13+
.build();
14+
}
15+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package com.github.wesleyegberto.java11.http;
2+
3+
import java.net.http.HttpClient;
4+
import java.time.Duration;
5+
6+
public class HttpClientBuilderTest {
7+
public static HttpClient createHttpClient() {
8+
// The client is immutable =)
9+
return HttpClient.newBuilder()
10+
.version(HttpClient.Version.HTTP_2) // default value
11+
.connectTimeout(Duration.ofSeconds(3))
12+
.followRedirects(HttpClient.Redirect.NORMAL)
13+
.build();
14+
}
15+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.github.wesleyegberto.java11.http;
2+
3+
import java.io.IOException;
4+
import java.net.URI;
5+
import java.net.http.HttpClient;
6+
import java.net.http.HttpRequest;
7+
import java.net.http.HttpResponse;
8+
9+
import static java.net.http.HttpRequest.*;
10+
11+
public class PostRequestTest {
12+
public static void main(String[] args) throws IOException, InterruptedException {
13+
BodyPublisher body = BodyPublishers.ofString("{'id':1}");
14+
HttpRequest request = newBuilder()
15+
.POST(body)
16+
.uri(URI.create("http://httpbin.org/post"))
17+
.build();
18+
19+
HttpClient httpClient = HttpClientBuilderTest.createHttpClient();
20+
HttpResponse<String> httpResponse = httpClient.send(request, HttpResponse.BodyHandlers.ofString());
21+
System.out.println("Response: " + httpResponse.body());
22+
}
23+
}
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,52 @@
11
package com.github.wesleyegberto.collections.reactive;
22

3+
import java.util.concurrent.Flow;
34
import java.util.concurrent.Flow.Subscriber;
45
import java.util.concurrent.Flow.Subscription;
56
import java.util.concurrent.SubmissionPublisher;
67
import java.util.stream.IntStream;
78

89
public class FlowTest {
9-
public static void main(String[] args) {
10-
try (SubmissionPublisher<String> publisher = new SubmissionPublisher<>()) {
11-
publisher.subscribe(new MySubscriber());
12-
13-
IntStream.range(0, 15)
14-
.mapToObj(String::valueOf)
15-
.forEach(publisher::submit);
16-
}
17-
}
10+
public static void main(String[] args) throws InterruptedException {
11+
try (SubmissionPublisher<String> publisher = new SubmissionPublisher<>()) {
12+
publisher.subscribe(new MySubscriber());
13+
14+
IntStream.range(0, 15)
15+
.mapToObj(String::valueOf)
16+
.forEach(publisher::submit);
17+
}
18+
Thread.sleep(10000);
19+
}
1820
}
1921

2022
class MySubscriber implements Subscriber<String> {
21-
@Override
22-
public void onComplete() {
23-
System.out.println("Completed");
24-
}
25-
26-
@Override
27-
public void onError(Throwable err) {
28-
System.out.println("Error: " + err.getMessage());
29-
}
30-
31-
@Override
32-
public void onNext(String item) {
33-
System.out.println("Next: " + item);
34-
}
35-
36-
@Override
37-
public void onSubscribe(Subscription subscription) {
38-
System.out.println("Subscribed, requesting 10 items...");
39-
subscription.request(10);
40-
}
23+
private Subscription subscription;
24+
25+
@Override
26+
public void onComplete() {
27+
System.out.println("Completed");
28+
}
29+
30+
@Override
31+
public void onError(Throwable err) {
32+
System.out.println("Error: " + err.getMessage());
33+
}
34+
35+
@Override
36+
public void onNext(String item) {
37+
System.out.println("Next: " + item);
38+
requestItem(subscription);
39+
}
40+
41+
@Override
42+
public void onSubscribe(Subscription subscription) {
43+
this.subscription = subscription;
44+
requestItem(subscription);
45+
}
46+
47+
private void requestItem(Subscription subscription) {
48+
System.out.println("Subscribed, requesting 1 items...");
49+
subscription.request(1);
50+
}
4151

4252
}

0 commit comments

Comments
 (0)