Skip to content

Commit 4f4ad39

Browse files
committed
fix: Fix compile errors
1 parent 19754fe commit 4f4ad39

File tree

14 files changed

+145
-172
lines changed

14 files changed

+145
-172
lines changed

src/main/java/com/spotify/github/http/HttpResponse.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,17 @@
2020

2121
package com.spotify.github.http;
2222

23+
import java.io.InputStream;
2324
import java.util.List;
2425
import java.util.Map;
2526

2627
public interface HttpResponse {
2728
HttpRequest request();
2829
int statusCode();
2930
String statusMessage();
30-
String body();
31+
InputStream body();
32+
String bodyString();
3133
Map<String, List<String>> headers();
3234
boolean isSuccessful();
35+
void close();
3336
}

src/main/java/com/spotify/github/http/okhttp/OkHttpHttpResponse.java

Lines changed: 31 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,12 @@
2323
import com.spotify.github.http.HttpRequest;
2424
import com.spotify.github.http.HttpResponse;
2525
import java.io.IOException;
26+
import java.io.InputStream;
2627
import java.io.UncheckedIOException;
2728
import java.util.List;
2829
import java.util.Map;
30+
import java.util.Optional;
31+
2932
import okhttp3.Response;
3033
import okhttp3.ResponseBody;
3134

@@ -34,31 +37,19 @@ public class OkHttpHttpResponse implements HttpResponse {
3437
private static final int HTTP_BAD_REQUEST = 400;
3538

3639
private final HttpRequest request;
40+
private final Response response;
3741
private final int statusCode;
3842
private final String statusMessage;
39-
private final String body;
43+
private InputStream body;
4044
private final Map<String, List<String>> headers;
45+
private String bodyString;
4146

4247
public OkHttpHttpResponse(final HttpRequest request, final Response response) {
4348
this.request = request;
4449
this.statusCode = response.code();
4550
this.statusMessage = response.message();
46-
this.body = responseBodyUnchecked(response);
4751
this.headers = response.headers().toMultimap();
48-
response.close();
49-
}
50-
51-
public OkHttpHttpResponse(
52-
final HttpRequest request,
53-
final int statusCode,
54-
final String statusMessage,
55-
final String body,
56-
final Map<String, List<String>> headers) {
57-
this.request = request;
58-
this.statusCode = statusCode;
59-
this.statusMessage = statusMessage;
60-
this.body = body;
61-
this.headers = headers;
52+
this.response = response;
6253
}
6354

6455
@Override
@@ -75,10 +66,23 @@ public String statusMessage() {
7566
return statusMessage;
7667
}
7768

78-
public String body() {
69+
@Override
70+
public InputStream body() {
71+
if (body == null) {
72+
body = Optional.ofNullable(response.body()).map(ResponseBody::byteStream).orElse(null);
73+
}
7974
return body;
8075
}
8176

77+
public String bodyString() {
78+
if (bodyString == null) {
79+
if (response != null) {
80+
bodyString = responseBodyUnchecked(response);
81+
}
82+
}
83+
return bodyString;
84+
}
85+
8286
@Override
8387
public Map<String, List<String>> headers() {
8488
return this.headers;
@@ -89,6 +93,16 @@ public boolean isSuccessful() {
8993
return this.statusCode() >= HTTP_OK && this.statusCode() < HTTP_BAD_REQUEST;
9094
}
9195

96+
@Override
97+
public void close() {
98+
if (response != null) {
99+
response.close();
100+
if (response.body() != null) {
101+
response.body().close();
102+
}
103+
}
104+
}
105+
92106
private static String responseBodyUnchecked(final Response response) {
93107
if (response.body() == null) {
94108
return null;

src/main/java/com/spotify/github/tracing/opentelemetry/OpenTelemetryTracer.java

Lines changed: 11 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@
2020

2121
package com.spotify.github.tracing.opentelemetry;
2222

23+
import static java.util.Objects.requireNonNull;
24+
25+
import com.spotify.github.http.HttpRequest;
2326
import com.spotify.github.tracing.BaseTracer;
2427
import com.spotify.github.tracing.Span;
2528
import io.opentelemetry.api.GlobalOpenTelemetry;
@@ -28,17 +31,10 @@
2831
import io.opentelemetry.api.trace.propagation.W3CTraceContextPropagator;
2932
import io.opentelemetry.context.Context;
3033
import io.opentelemetry.context.propagation.TextMapGetter;
31-
import io.opentelemetry.instrumentation.okhttp.v3_0.OkHttpTelemetry;
32-
import okhttp3.Call;
33-
import okhttp3.OkHttpClient;
34-
import okhttp3.Request;
34+
import java.util.concurrent.CompletionStage;
3535
import org.jetbrains.annotations.NotNull;
3636
import org.jetbrains.annotations.Nullable;
3737

38-
import java.util.concurrent.CompletionStage;
39-
40-
import static java.util.Objects.requireNonNull;
41-
4238
/** Tracer implementation using OpenTelemetry. */
4339
public class OpenTelemetryTracer extends BaseTracer {
4440
private final io.opentelemetry.api.trace.Tracer tracer;
@@ -101,7 +97,7 @@ protected Span internalSpan(
10197
* @return The created span.
10298
*/
10399
@Override
104-
protected Span internalSpan(final Request request, final CompletionStage<?> future) {
100+
protected Span internalSpan(final HttpRequest request, final CompletionStage<?> future) {
105101
requireNonNull(request);
106102
// Extract the context from the request headers.
107103
Context context =
@@ -111,25 +107,21 @@ protected Span internalSpan(final Request request, final CompletionStage<?> futu
111107
request,
112108
new TextMapGetter<>() {
113109
@Override
114-
public Iterable<String> keys(@NotNull final Request carrier) {
115-
return carrier.headers().names();
110+
public Iterable<String> keys(@NotNull final HttpRequest carrier) {
111+
return carrier.headers().keySet();
116112
}
117113

118114
@Nullable
119115
@Override
120-
public String get(@Nullable final Request carrier, @NotNull final String key) {
116+
public String get(
117+
@Nullable final HttpRequest carrier, @NotNull final String key) {
121118
if (carrier == null) {
122119
return null;
123120
}
124-
return carrier.header(key);
121+
return carrier.headers().get(key).get(0);
125122
}
126123
});
127124
context.makeCurrent();
128-
return internalSpan(request.url().toString(), request.method(), future);
129-
}
130-
131-
@Override
132-
public Call.Factory createTracedClient(final OkHttpClient client) {
133-
return OkHttpTelemetry.builder(openTelemetry).build().newCallFactory(client);
125+
return internalSpan(request.url(), request.method(), future);
134126
}
135127
}

src/main/java/com/spotify/github/v3/clients/GitHubClient.java

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -78,10 +78,10 @@ public class GitHubClient {
7878

7979
private Tracer tracer = NoopTracer.INSTANCE;
8080

81-
static final Consumer<Response> IGNORE_RESPONSE_CONSUMER =
81+
static final Consumer<HttpResponse> IGNORE_RESPONSE_CONSUMER =
8282
(response) -> {
83-
if (response.body() != null) {
84-
response.body().close();
83+
if (response != null) {
84+
response.close();
8585
}
8686
};
8787
static final TypeReference<List<Comment>> LIST_COMMENT_TYPE_REFERENCE = new TypeReference<>() {};
@@ -627,7 +627,7 @@ <T> CompletableFuture<T> request(final String path, final Class<T> clazz) {
627627
final HttpRequest request = requestBuilder(path).build();
628628
log.debug("Making request to {}", request.url().toString());
629629
return call(request)
630-
.thenApply(response -> json().fromJsonUncheckedNotNull(response.body(), clazz));
630+
.thenApply(response -> json().fromJsonUncheckedNotNull(response.bodyString(), clazz));
631631
}
632632

633633
/**
@@ -645,7 +645,7 @@ <T> CompletableFuture<T> request(
645645
final HttpRequest request = builder.build();
646646
log.debug("Making request to {}", request.url().toString());
647647
return call(request)
648-
.thenApply(response -> json().fromJsonUncheckedNotNull(response.body(), clazz));
648+
.thenApply(response -> json().fromJsonUncheckedNotNull(response.bodyString(), clazz));
649649
}
650650

651651
/**
@@ -664,7 +664,8 @@ <T> CompletableFuture<T> request(
664664
final HttpRequest request = builder.build();
665665
log.debug("Making request to {}", request.url().toString());
666666
return call(request)
667-
.thenApply(response -> json().fromJsonUncheckedNotNull(response.body(), typeReference));
667+
.thenApply(
668+
response -> json().fromJsonUncheckedNotNull(response.bodyString(), typeReference));
668669
}
669670

670671
/**
@@ -677,7 +678,8 @@ <T> CompletableFuture<T> request(final String path, final TypeReference<T> typeR
677678
final HttpRequest request = requestBuilder(path).build();
678679
log.debug("Making request to {}", request.url().toString());
679680
return call(request)
680-
.thenApply(response -> json().fromJsonUncheckedNotNull(response.body(), typeReference));
681+
.thenApply(
682+
response -> json().fromJsonUncheckedNotNull(response.bodyString(), typeReference));
681683
}
682684

683685
/**
@@ -725,7 +727,7 @@ <T> CompletableFuture<T> post(
725727
final Class<T> clazz,
726728
final Map<String, String> extraHeaders) {
727729
return post(path, data, extraHeaders)
728-
.thenApply(response -> json().fromJsonUncheckedNotNull(response.body(), clazz));
730+
.thenApply(response -> json().fromJsonUncheckedNotNull(response.bodyString(), clazz));
729731
}
730732

731733
/**
@@ -738,7 +740,7 @@ <T> CompletableFuture<T> post(
738740
*/
739741
<T> CompletableFuture<T> post(final String path, final String data, final Class<T> clazz) {
740742
return post(path, data)
741-
.thenApply(response -> json().fromJsonUncheckedNotNull(response.body(), clazz));
743+
.thenApply(response -> json().fromJsonUncheckedNotNull(response.bodyString(), clazz));
742744
}
743745

744746
/**
@@ -778,7 +780,7 @@ CompletableFuture<HttpResponse> put(final String path, final String data) {
778780
*/
779781
<T> CompletableFuture<T> put(final String path, final String data, final Class<T> clazz) {
780782
return put(path, data)
781-
.thenApply(response -> json().fromJsonUncheckedNotNull(response.body(), clazz));
783+
.thenApply(response -> json().fromJsonUncheckedNotNull(response.bodyString(), clazz));
782784
}
783785

784786
/**
@@ -804,7 +806,7 @@ CompletableFuture<HttpResponse> patch(final String path, final String data) {
804806
*/
805807
<T> CompletableFuture<T> patch(final String path, final String data, final Class<T> clazz) {
806808
return patch(path, data)
807-
.thenApply(response -> json().fromJsonUncheckedNotNull(response.body(), clazz));
809+
.thenApply(response -> json().fromJsonUncheckedNotNull(response.bodyString(), clazz));
808810
}
809811

810812
/**
@@ -825,7 +827,7 @@ <T> CompletableFuture<T> patch(
825827
final HttpRequest request = builder.build();
826828
log.debug("Making PATCH request to {}", request.url().toString());
827829
return call(request)
828-
.thenApply(response -> json().fromJsonUncheckedNotNull(response.body(), clazz));
830+
.thenApply(response -> json().fromJsonUncheckedNotNull(response.bodyString(), clazz));
829831
}
830832

831833
/**
@@ -973,13 +975,13 @@ private AccessToken generateInstallationToken(final String jwtToken, final int i
973975
response.statusCode(), response.statusMessage()));
974976
}
975977

976-
if (response.body() == null) {
978+
if (response.bodyString() == null) {
977979
throw new Exception(
978980
String.format(
979981
"Got empty response body when getting an access token from GitHub, HTTP status was: %s",
980982
response.statusMessage()));
981983
}
982-
final String text = response.body();
984+
final String text = response.bodyString();
983985
return Json.create().fromJson(text, AccessToken.class);
984986
}
985987

@@ -1016,7 +1018,7 @@ private CompletableFuture<HttpResponse> handleResponse(
10161018

10171019
private RequestNotOkException mapException(
10181020
final HttpRequest httpRequest, final HttpResponse httpResponse) throws IOException {
1019-
String bodyString = Optional.ofNullable(httpResponse.body()).orElse("");
1021+
String bodyString = Optional.ofNullable(httpResponse.bodyString()).orElse("");
10201022
Map<String, List<String>> headersMap = httpResponse.headers();
10211023

10221024
if (httpResponse.statusCode() == FORBIDDEN) {

src/main/java/com/spotify/github/v3/clients/GithubPage.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020

2121
package com.spotify.github.v3.clients;
2222

23-
import static com.spotify.github.v3.clients.GitHubClient.responseBodyUnchecked;
2423
import static java.util.Arrays.stream;
2524
import static java.util.Objects.nonNull;
2625
import static java.util.function.Function.identity;
@@ -38,7 +37,6 @@
3837
import java.util.Optional;
3938
import java.util.concurrent.CompletableFuture;
4039
import java.util.stream.Stream;
41-
import okhttp3.ResponseBody;
4240

4341
/**
4442
* Async page implementation for github resources
@@ -149,7 +147,7 @@ public Iterator<T> iterator() {
149147
response ->
150148
github
151149
.json()
152-
.fromJsonUncheckedNotNull(responseBodyUnchecked(response), typeReference))
150+
.fromJsonUncheckedNotNull(response.bodyString(), typeReference))
153151
.join()
154152
.iterator();
155153
}
@@ -159,8 +157,7 @@ private CompletableFuture<Map<String, Link>> linkMapAsync() {
159157
.request(path)
160158
.thenApply(
161159
response -> {
162-
Optional.ofNullable(response.body()).ifPresent(ResponseBody::close);
163-
return Optional.ofNullable(response.headers().get("Link"))
160+
return Optional.ofNullable(response.headers().get("Link").get(0))
164161
.map(linkHeader -> stream(linkHeader.split(",")))
165162
.orElseGet(Stream::empty)
166163
.map(linkString -> Link.from(linkString.split(";")))

src/main/java/com/spotify/github/v3/clients/IssueClient.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,14 @@
2424

2525
import com.google.common.collect.ImmutableMap;
2626
import com.spotify.github.async.AsyncPage;
27+
import com.spotify.github.http.HttpResponse;
2728
import com.spotify.github.v3.comment.Comment;
2829
import com.spotify.github.v3.comment.CommentReaction;
2930
import com.spotify.github.v3.comment.CommentReactionContent;
3031
import com.spotify.github.v3.issues.Issue;
3132
import java.lang.invoke.MethodHandles;
3233
import java.util.Iterator;
3334
import java.util.concurrent.CompletableFuture;
34-
import okhttp3.Response;
3535
import org.slf4j.Logger;
3636
import org.slf4j.LoggerFactory;
3737

@@ -167,7 +167,7 @@ public CompletableFuture<CommentReaction> createCommentReaction(
167167
* @param issueNumber issue number
168168
* @param reactionId reaction id
169169
*/
170-
public CompletableFuture<Response> deleteCommentReaction(
170+
public CompletableFuture<HttpResponse> deleteCommentReaction(
171171
final long issueNumber, final long reactionId) {
172172
final String path =
173173
String.format(COMMENTS_REACTION_ID_TEMPLATE, owner, repo, issueNumber, reactionId);

0 commit comments

Comments
 (0)