1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.index.reader;
20
21 import java.io.IOException;
22 import java.io.InputStream;
23 import java.net.HttpURLConnection;
24 import java.net.URI;
25 import java.net.http.HttpClient;
26 import java.net.http.HttpRequest;
27 import java.net.http.HttpResponse;
28
29 import static java.util.Objects.requireNonNull;
30
31
32
33
34
35 public class HttpResourceHandler implements ResourceHandler {
36 private final HttpClient client =
37 HttpClient.newBuilder().followRedirects(HttpClient.Redirect.NEVER).build();
38 private final URI root;
39
40 public HttpResourceHandler(final URI root) {
41 this.root = requireNonNull(root);
42 }
43
44 @Override
45 public Resource locate(final String name) {
46 return new HttpResource(name);
47 }
48
49 private class HttpResource implements Resource {
50 private final String name;
51
52 private HttpResource(final String name) {
53 this.name = name;
54 }
55
56 @Override
57 public InputStream read() throws IOException {
58 HttpRequest request =
59 HttpRequest.newBuilder().uri(root.resolve(name)).GET().build();
60 try {
61 HttpResponse<InputStream> response = client.send(request, HttpResponse.BodyHandlers.ofInputStream());
62 if (response.statusCode() == HttpURLConnection.HTTP_OK) {
63 return response.body();
64 } else {
65 throw new IOException("Unexpected response: " + response);
66 }
67 } catch (InterruptedException e) {
68 Thread.currentThread().interrupt();
69 throw new IOException(e);
70 }
71 }
72 }
73 }