Skip to content

Commit c5eff42

Browse files
kringolslandelle
authored andcommitted
Added toBuilder methods to Request (#1673)
* Added toBuilder methods to Request * deprecated RequestBuilder prototype methods and moved implementation as default on the Request interface
1 parent a7ea7cf commit c5eff42

File tree

10 files changed

+25
-12
lines changed

10 files changed

+25
-12
lines changed

client/src/main/java/org/asynchttpclient/DefaultAsyncHttpClient.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@ public <T> ListenableFuture<T> executeRequest(Request request, AsyncHandler<T> h
194194
try {
195195
List<Cookie> cookies = config.getCookieStore().get(request.getUri());
196196
if (!cookies.isEmpty()) {
197-
RequestBuilder requestBuilder = new RequestBuilder(request);
197+
RequestBuilder requestBuilder = request.toBuilder();
198198
for (Cookie cookie : cookies) {
199199
requestBuilder.addOrReplaceCookie(cookie);
200200
}
@@ -264,7 +264,7 @@ private <T> FilterContext<T> preProcessRequest(FilterContext<T> fc) throws Filte
264264
}
265265

266266
if (request.getRangeOffset() != 0) {
267-
RequestBuilder builder = new RequestBuilder(request);
267+
RequestBuilder builder = request.toBuilder();
268268
builder.setHeader("Range", "bytes=" + request.getRangeOffset() + "-");
269269
request = builder.build();
270270
}

client/src/main/java/org/asynchttpclient/Request.java

+8
Original file line numberDiff line numberDiff line change
@@ -180,4 +180,12 @@ public interface Request {
180180
* @return the NameResolver to be used to resolve hostnams's IP
181181
*/
182182
NameResolver<InetAddress> getNameResolver();
183+
184+
/**
185+
* @return a new request builder using this request as a prototype
186+
*/
187+
@SuppressWarnings("deprecation")
188+
default RequestBuilder toBuilder() {
189+
return new RequestBuilder(this);
190+
}
183191
}

client/src/main/java/org/asynchttpclient/RequestBuilder.java

+5
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,15 @@ public RequestBuilder(String method, boolean disableUrlEncoding, boolean validat
3939
super(method, disableUrlEncoding, validateHeaders);
4040
}
4141

42+
/**
43+
* @deprecated Use request.toBuilder() instead
44+
*/
45+
@Deprecated
4246
public RequestBuilder(Request prototype) {
4347
super(prototype);
4448
}
4549

50+
@Deprecated
4651
public RequestBuilder(Request prototype, boolean disableUrlEncoding, boolean validateHeaders) {
4752
super(prototype, disableUrlEncoding, validateHeaders);
4853
}

client/src/main/java/org/asynchttpclient/handler/resumable/ResumableAsyncHandler.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,7 @@ public Request adjustRequestRange(Request request) {
198198
byteTransferred.set(resumableListener.length());
199199
}
200200

201-
RequestBuilder builder = new RequestBuilder(request);
201+
RequestBuilder builder = request.toBuilder();
202202
if (request.getHeaders().get(RANGE) == null && byteTransferred.get() != 0) {
203203
builder.setHeader(RANGE, "bytes=" + byteTransferred.get() + "-");
204204
}

client/src/main/java/org/asynchttpclient/netty/handler/intercept/ConnectSuccessInterceptor.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public boolean exitAfterHandlingConnect(Channel channel,
5252

5353
future.setReuseChannel(true);
5454
future.setConnectAllowed(false);
55-
Request targetRequest = new RequestBuilder(future.getTargetRequest()).build();
55+
Request targetRequest = future.getTargetRequest().toBuilder().build();
5656
if (whenHandshaked == null) {
5757
requestSender.drainChannelAndExecuteNextRequest(channel, future, targetRequest);
5858
} else {

client/src/main/java/org/asynchttpclient/netty/handler/intercept/ProxyUnauthorized407Interceptor.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ public boolean exitAfterHandling407(Channel channel,
163163
throw new IllegalStateException("Invalid Authentication scheme " + proxyRealm.getScheme());
164164
}
165165

166-
RequestBuilder nextRequestBuilder = new RequestBuilder(future.getCurrentRequest()).setHeaders(requestHeaders);
166+
RequestBuilder nextRequestBuilder = future.getCurrentRequest().toBuilder().setHeaders(requestHeaders);
167167
if (future.getCurrentRequest().getUri().isSecured()) {
168168
nextRequestBuilder.setMethod(CONNECT);
169169
}

client/src/main/java/org/asynchttpclient/netty/handler/intercept/Unauthorized401Interceptor.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ public boolean exitAfterHandling401(final Channel channel,
162162
throw new IllegalStateException("Invalid Authentication scheme " + realm.getScheme());
163163
}
164164

165-
final Request nextRequest = new RequestBuilder(future.getCurrentRequest()).setHeaders(requestHeaders).build();
165+
final Request nextRequest = future.getCurrentRequest().toBuilder().setHeaders(requestHeaders).build();
166166

167167
LOGGER.debug("Sending authentication to {}", request.getUri());
168168
if (future.isKeepAlive()

client/src/test/java/org/asynchttpclient/RequestBuilderTest.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ public void testEncodesQueryParameters() {
7272
public void testChaining() {
7373
Request request = get("http://foo.com").addQueryParam("x", "value").build();
7474

75-
Request request2 = new RequestBuilder(request).build();
75+
Request request2 = request.toBuilder().build();
7676

7777
assertEquals(request2.getUri(), request.getUri());
7878
}

client/src/test/java/org/asynchttpclient/filter/FilterTest.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ public void replayResponseFilterTest() throws Exception {
101101
ResponseFilter responseFilter = new ResponseFilter() {
102102
public <T> FilterContext<T> filter(FilterContext<T> ctx) {
103103
if (replay.getAndSet(false)) {
104-
Request request = new RequestBuilder(ctx.getRequest()).addHeader("X-Replay", "true").build();
104+
Request request = ctx.getRequest().toBuilder().addHeader("X-Replay", "true").build();
105105
return new FilterContext.FilterContextBuilder<T>().asyncHandler(ctx.getAsyncHandler()).request(request).replayRequest(true).build();
106106
}
107107
return ctx;
@@ -123,7 +123,7 @@ public void replayStatusCodeResponseFilterTest() throws Exception {
123123
ResponseFilter responseFilter = new ResponseFilter() {
124124
public <T> FilterContext<T> filter(FilterContext<T> ctx) {
125125
if (ctx.getResponseStatus() != null && ctx.getResponseStatus().getStatusCode() == 200 && replay.getAndSet(false)) {
126-
Request request = new RequestBuilder(ctx.getRequest()).addHeader("X-Replay", "true").build();
126+
Request request = ctx.getRequest().toBuilder().addHeader("X-Replay", "true").build();
127127
return new FilterContext.FilterContextBuilder<T>().asyncHandler(ctx.getAsyncHandler()).request(request).replayRequest(true).build();
128128
}
129129
return ctx;
@@ -145,7 +145,7 @@ public void replayHeaderResponseFilterTest() throws Exception {
145145
ResponseFilter responseFilter = new ResponseFilter() {
146146
public <T> FilterContext<T> filter(FilterContext<T> ctx) {
147147
if (ctx.getResponseHeaders() != null && ctx.getResponseHeaders().get("Ping").equals("Pong") && replay.getAndSet(false)) {
148-
Request request = new RequestBuilder(ctx.getRequest()).addHeader("Ping", "Pong").build();
148+
Request request = ctx.getRequest().toBuilder().addHeader("Ping", "Pong").build();
149149
return new FilterContext.FilterContextBuilder<T>().asyncHandler(ctx.getAsyncHandler()).request(request).replayRequest(true).build();
150150
}
151151
return ctx;

extras/simple/src/main/java/org/asynchttpclient/extras/simple/SimpleAsyncHttpClient.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -275,7 +275,7 @@ public Future<Response> options(BodyConsumer bodyConsumer, ThrowableHandler thro
275275
}
276276

277277
private RequestBuilder rebuildRequest(Request rb) {
278-
return new RequestBuilder(rb);
278+
return rb.toBuilder();
279279
}
280280

281281
private Future<Response> execute(RequestBuilder rb, BodyConsumer bodyConsumer, ThrowableHandler throwableHandler) throws IOException {
@@ -422,7 +422,7 @@ public Builder() {
422422
}
423423

424424
private Builder(SimpleAsyncHttpClient client) {
425-
this.requestBuilder = new RequestBuilder(client.requestBuilder.build());
425+
this.requestBuilder = client.requestBuilder.build().toBuilder();
426426
this.defaultThrowableHandler = client.defaultThrowableHandler;
427427
this.errorDocumentBehaviour = client.errorDocumentBehaviour;
428428
this.enableResumableDownload = client.resumeEnabled;

0 commit comments

Comments
 (0)