1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.eclipse.aether.transport.jdk;
20
21 import java.io.IOException;
22 import java.io.InputStream;
23 import java.net.http.HttpRequest;
24 import java.net.http.HttpRequest.Builder;
25 import java.net.http.HttpResponse;
26 import java.nio.charset.StandardCharsets;
27 import java.util.Optional;
28
29 import org.eclipse.aether.spi.connector.transport.http.HttpConstants;
30 import org.eclipse.aether.spi.connector.transport.http.HttpTransporterException;
31 import org.eclipse.aether.spi.connector.transport.http.RFC9457.RFC9457Reporter;
32
33 public class JdkRFC9457Reporter
34 extends RFC9457Reporter<HttpResponse<InputStream>, HttpTransporterException, HttpRequest.Builder> {
35 public static final JdkRFC9457Reporter INSTANCE = new JdkRFC9457Reporter();
36
37 private JdkRFC9457Reporter() {}
38
39 @Override
40 public void prepareRequest(Builder requestBuilder) {
41 requestBuilder.header(HttpConstants.ACCEPT, CONTENT_TYPE_PROBLEM_DETAILS_JSON);
42 }
43
44 @Override
45 protected boolean isRFC9457Message(final HttpResponse<InputStream> response) {
46 Optional<String> optionalContentType = response.headers().firstValue("Content-Type");
47 if (optionalContentType.isPresent()) {
48 String contentType = optionalContentType.get();
49 return hasRFC9457ContentType(contentType);
50 }
51 return false;
52 }
53
54 @Override
55 protected int getStatusCode(final HttpResponse<InputStream> response) {
56 return response.statusCode();
57 }
58
59 @Override
60 protected String getReasonPhrase(final HttpResponse<InputStream> response) {
61 return null;
62 }
63
64 @Override
65 protected String getBody(final HttpResponse<InputStream> response) throws IOException {
66 try (InputStream is = response.body()) {
67 return new String(is.readAllBytes(), StandardCharsets.UTF_8);
68 }
69 }
70 }