1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.eclipse.aether.transport.apache;
20
21 import java.io.IOException;
22 import java.nio.charset.StandardCharsets;
23
24 import org.apache.http.Header;
25 import org.apache.http.HttpHeaders;
26 import org.apache.http.HttpRequest;
27 import org.apache.http.client.HttpResponseException;
28 import org.apache.http.client.methods.CloseableHttpResponse;
29 import org.apache.http.util.EntityUtils;
30 import org.eclipse.aether.spi.connector.transport.http.HttpConstants;
31 import org.eclipse.aether.spi.connector.transport.http.RFC9457.RFC9457Reporter;
32
33 public class ApacheRFC9457Reporter extends RFC9457Reporter<CloseableHttpResponse, HttpResponseException, HttpRequest> {
34 public static final ApacheRFC9457Reporter INSTANCE = new ApacheRFC9457Reporter();
35
36 private ApacheRFC9457Reporter() {}
37
38 @Override
39 public void prepareRequest(HttpRequest request) {
40 request.addHeader(HttpConstants.ACCEPT, CONTENT_TYPE_PROBLEM_DETAILS_JSON);
41 }
42
43 @Override
44 protected boolean isRFC9457Message(final CloseableHttpResponse response) {
45 Header[] headers = response.getHeaders(HttpHeaders.CONTENT_TYPE);
46 if (headers.length > 0) {
47 String contentType = headers[0].getValue();
48 return hasRFC9457ContentType(contentType);
49 }
50 return false;
51 }
52
53 @Override
54 protected int getStatusCode(final CloseableHttpResponse response) {
55 return response.getStatusLine().getStatusCode();
56 }
57
58 @Override
59 protected String getReasonPhrase(final CloseableHttpResponse response) {
60 String reasonPhrase = response.getStatusLine().getReasonPhrase();
61 if (reasonPhrase == null || reasonPhrase.isEmpty()) {
62 return "";
63 }
64 int statusCode = getStatusCode(response);
65 return reasonPhrase + " (" + statusCode + ")";
66 }
67
68 @Override
69 protected String getBody(final CloseableHttpResponse response) throws IOException {
70 return EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8);
71 }
72 }