Skip to content

Commit bf575f6

Browse files
committed
- Add methods to ClientConfig to be able to determine if any {Request,Reponse}Filters have been registered.
- Avoid unnecessary iterator creation.
1 parent adc88ee commit bf575f6

File tree

7 files changed

+66
-34
lines changed

7 files changed

+66
-34
lines changed

api/src/main/java/org/asynchttpclient/AsyncHttpClient.java

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import java.io.InputStream;
2929
import java.lang.reflect.InvocationTargetException;
3030
import java.util.Collection;
31+
import java.util.List;
3132
import java.util.Map;
3233
import java.util.concurrent.Future;
3334
import java.util.concurrent.atomic.AtomicBoolean;
@@ -592,16 +593,20 @@ public ListenableFuture<Response> executeRequest(Request request) throws IOExcep
592593
* @return {@link FilterContext}
593594
*/
594595
private <T> FilterContext<T> preProcessRequest(FilterContext<T> fc) throws IOException {
595-
for (RequestFilter asyncFilter : config.getRequestFilters()) {
596-
try {
597-
fc = asyncFilter.filter(fc);
598-
if (fc == null) {
599-
throw new NullPointerException("FilterContext is null");
596+
if (config.hasRequestFilters()) {
597+
final List<RequestFilter> requestFilters = config.getRequestFilters();
598+
for (int i = 0, len = requestFilters.size(); i < len; i++) {
599+
final RequestFilter asyncFilter = requestFilters.get(i);
600+
try {
601+
fc = asyncFilter.filter(fc);
602+
if (fc == null) {
603+
throw new NullPointerException("FilterContext is null");
604+
}
605+
} catch (FilterException e) {
606+
IOException ex = new IOException();
607+
ex.initCause(e);
608+
throw ex;
600609
}
601-
} catch (FilterException e) {
602-
IOException ex = new IOException();
603-
ex.initCause(e);
604-
throw ex;
605610
}
606611
}
607612

api/src/main/java/org/asynchttpclient/AsyncHttpClientConfig.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -424,6 +424,15 @@ public Realm getRealm() {
424424
return realm;
425425
}
426426

427+
/**
428+
* @return <code>true</code> if {@link RequestFilter}s have been defined.
429+
*
430+
* @since 2.0.0
431+
*/
432+
public boolean hasRequestFilters() {
433+
return !requestFilters.isEmpty();
434+
}
435+
427436
/**
428437
* Return the list of {@link RequestFilter}
429438
*
@@ -433,6 +442,14 @@ public List<RequestFilter> getRequestFilters() {
433442
return Collections.unmodifiableList(requestFilters);
434443
}
435444

445+
/**
446+
* @return <code>true</code> if {@link ResponseFilter}s have been defined.
447+
* @since 2.0.0
448+
*/
449+
public boolean hasResponseFilters() {
450+
return !requestFilters.isEmpty();
451+
}
452+
436453
/**
437454
* Return the list of {@link ResponseFilter}
438455
*

providers/grizzly/src/main/java/org/asynchttpclient/providers/grizzly/EventHandler.java

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -245,19 +245,20 @@ public void onHttpHeadersParsed(HttpHeader httpHeader,
245245
}
246246

247247
final AsyncHandler handler = context.getHandler();
248-
final List<ResponseFilter> filters = context.getProvider()
249-
.getClientConfig().getResponseFilters();
250248
final GrizzlyResponseHeaders responseHeaders =
251249
new GrizzlyResponseHeaders((HttpResponsePacket) httpHeader,
252250
context.getRequest().getURI(),
253251
provider);
254-
if (!filters.isEmpty()) {
252+
if (context.getProvider().getClientConfig().hasResponseFilters()) {
253+
final List<ResponseFilter> filters = context.getProvider()
254+
.getClientConfig().getResponseFilters();
255255
FilterContext fc = new FilterContext.FilterContextBuilder()
256256
.asyncHandler(handler).request(context.getRequest())
257257
.responseHeaders(responseHeaders)
258258
.responseStatus(context.getResponseStatus()).build();
259259
try {
260-
for (final ResponseFilter f : filters) {
260+
for (int i = 0, len = filters.size(); i < len; i++) {
261+
final ResponseFilter f = filters.get(i);
261262
fc = f.filter(fc);
262263
}
263264
} catch (Exception e) {
@@ -514,9 +515,11 @@ public static Request newRequest(final URI uri,
514515
if (ctx.getProvider().getClientConfig().isRemoveQueryParamOnRedirect()) {
515516
builder.setQueryParameters(null);
516517
}
517-
for (String cookieStr : response.getHeaders().values(Header.Cookie)) {
518-
for (Cookie c : CookieDecoder.decode(cookieStr)) {
519-
builder.addOrReplaceCookie(c);
518+
if (response.getHeader(Header.Cookie) != null) {
519+
for (String cookieStr : response.getHeaders().values(Header.Cookie)) {
520+
for (Cookie c : CookieDecoder.decode(cookieStr)) {
521+
builder.addOrReplaceCookie(c);
522+
}
520523
}
521524
}
522525
return builder.build();

providers/grizzly/src/main/java/org/asynchttpclient/providers/grizzly/GrizzlyResponse.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525

2626
import org.glassfish.grizzly.Buffer;
2727
import org.glassfish.grizzly.http.Cookies;
28+
import org.glassfish.grizzly.http.util.Header;
2829
import org.glassfish.grizzly.utils.Charsets;
2930
import org.glassfish.grizzly.memory.Buffers;
3031
import org.glassfish.grizzly.memory.MemoryManager;
@@ -146,11 +147,11 @@ public Buffer getResponseBodyAsBuffer() {
146147
*/
147148
public List<Cookie> buildCookies() {
148149

149-
List<String> values = headers.getHeaders().get("set-cookie");
150+
List<String> values = headers.getHeaders().get(Header.SetCookie.toString());
150151
if (isNonEmpty(values)) {
151152
ServerCookiesBuilder builder = new ServerCookiesBuilder(false, rfc6265Enabled);
152-
for (String header : values) {
153-
builder.parse(header);
153+
for (int i = 0, len = values.size(); i < len; i++) {
154+
builder.parse(values.get(i));
154155
}
155156
return convertCookies(builder.build());
156157

@@ -166,7 +167,8 @@ private List<Cookie> convertCookies(Cookies cookies) {
166167

167168
final org.glassfish.grizzly.http.Cookie[] grizzlyCookies = cookies.get();
168169
List<Cookie> convertedCookies = new ArrayList<Cookie>(grizzlyCookies.length);
169-
for (org.glassfish.grizzly.http.Cookie gCookie : grizzlyCookies) {
170+
for (int i = 0, len = grizzlyCookies.length; i < len; i++) {
171+
org.glassfish.grizzly.http.Cookie gCookie = grizzlyCookies[i];
170172
convertedCookies.add(new Cookie(gCookie.getDomain(),
171173
gCookie.getName(),
172174
gCookie.getValue(),

providers/grizzly/src/main/java/org/asynchttpclient/providers/grizzly/bodyhandler/BodyHandlerFactory.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@ public BodyHandlerFactory(GrizzlyAsyncHttpProvider grizzlyAsyncHttpProvider) {
3434
}
3535

3636
public BodyHandler getBodyHandler(final Request request) {
37-
for (final BodyHandler h : handlers) {
37+
for (int i = 0, len = handlers.length; i < len; i++) {
38+
final BodyHandler h = handlers[i];
3839
if (h.handlesBodyType(request)) {
3940
return h;
4041
}

providers/grizzly/src/main/java/org/asynchttpclient/providers/grizzly/bodyhandler/ParamsBodyHandler.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,8 @@ public boolean doHandle(final FilterChainContext ctx,
7171
if (sb == null) {
7272
sb = new StringBuilder(128);
7373
}
74-
for (String value : values) {
74+
for (int i = 0, len = values.size(); i < len; i++) {
75+
final String value = values.get(i);
7576
if (sb.length() > 0) {
7677
sb.append('&');
7778
}

providers/grizzly/src/main/java/org/asynchttpclient/providers/grizzly/filters/AsyncHttpClientFilter.java

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -375,8 +375,8 @@ private void addGeneralHeaders(final Request request,
375375
final String headerName = entry.getKey();
376376
final List<String> headerValues = entry.getValue();
377377
if (isNonEmpty(headerValues)) {
378-
for (final String headerValue : headerValues) {
379-
requestPacket.addHeader(headerName, headerValue);
378+
for (int i = 0, len = headerValues.size(); i < len; i++) {
379+
requestPacket.addHeader(headerName, headerValues.get(i));
380380
}
381381
}
382382
}
@@ -418,16 +418,19 @@ private void addCookies(final Request request,
418418
private static void convertCookies(final Collection<Cookie> cookies,
419419
final org.glassfish.grizzly.http.Cookie[] gCookies) {
420420
int idx = 0;
421-
for (final Cookie cookie : cookies) {
422-
final org.glassfish.grizzly.http.Cookie gCookie =
423-
new org.glassfish.grizzly.http.Cookie(cookie.getName(), cookie.getValue());
424-
gCookie.setDomain(cookie.getDomain());
425-
gCookie.setPath(cookie.getPath());
426-
gCookie.setVersion(cookie.getVersion());
427-
gCookie.setMaxAge(cookie.getMaxAge());
428-
gCookie.setSecure(cookie.isSecure());
429-
gCookies[idx] = gCookie;
430-
idx++;
421+
if (!cookies.isEmpty()) {
422+
for (final Cookie cookie : cookies) {
423+
final org.glassfish.grizzly.http.Cookie gCookie =
424+
new org.glassfish.grizzly.http.Cookie(cookie.getName(),
425+
cookie.getValue());
426+
gCookie.setDomain(cookie.getDomain());
427+
gCookie.setPath(cookie.getPath());
428+
gCookie.setVersion(cookie.getVersion());
429+
gCookie.setMaxAge(cookie.getMaxAge());
430+
gCookie.setSecure(cookie.isSecure());
431+
gCookies[idx] = gCookie;
432+
idx++;
433+
}
431434
}
432435

433436
}

0 commit comments

Comments
 (0)