Skip to content

Commit 9b0e390

Browse files
committed
Merge pull request AsyncHttpClient#103 from cowtowncoder/master
Cleaning up
2 parents 64cdeb2 + cacd726 commit 9b0e390

18 files changed

+152
-149
lines changed

src/main/java/com/ning/http/client/AsyncHttpProvider.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
import java.io.IOException;
1919
import java.util.Collection;
20+
import java.util.List;
2021

2122
/**
2223
* Interface to be used when implementing custom asynchronous I/O HTTP client.
@@ -48,6 +49,5 @@ public interface AsyncHttpProvider {
4849
*/
4950
public Response prepareResponse(HttpResponseStatus status,
5051
HttpResponseHeaders headers,
51-
Collection<HttpResponseBodyPart> bodyParts);
52-
52+
List<HttpResponseBodyPart> bodyParts);
5353
}

src/main/java/com/ning/http/client/HttpResponseBodyPart.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
package com.ning.http.client;
1717

1818
import java.io.IOException;
19+
import java.io.InputStream;
1920
import java.io.OutputStream;
2021
import java.net.URI;
2122
import java.nio.ByteBuffer;
@@ -29,13 +30,27 @@ public HttpResponseBodyPart(URI uri, AsyncHttpProvider provider) {
2930
super(uri, provider);
3031
}
3132

33+
/**
34+
* Return length of this part in bytes.
35+
*
36+
* @since 1.8.0
37+
*/
38+
abstract public int length();
39+
3240
/**
3341
* Return the response body's part bytes received.
3442
*
3543
* @return the response body's part bytes received.
3644
*/
3745
abstract public byte[] getBodyPartBytes();
3846

47+
/**
48+
* Method for accessing contents of this part via stream.
49+
*
50+
* @since 1.8.0
51+
*/
52+
abstract public InputStream readBodyPartBytes();
53+
3954
/**
4055
* Write the available bytes to the {@link java.io.OutputStream}
4156
*

src/main/java/com/ning/http/client/HttpResponseBodyPartsInputStream.java

Lines changed: 0 additions & 63 deletions
This file was deleted.

src/main/java/com/ning/http/client/Response.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -178,8 +178,8 @@ public interface Response {
178178

179179

180180
public static class ResponseBuilder {
181-
private final Collection<HttpResponseBodyPart> bodies =
182-
Collections.synchronizedCollection(new ArrayList<HttpResponseBodyPart>());
181+
private final List<HttpResponseBodyPart> bodies =
182+
Collections.synchronizedList(new ArrayList<HttpResponseBodyPart>());
183183
private HttpResponseStatus status;
184184
private HttpResponseHeaders headers;
185185

src/main/java/com/ning/http/client/providers/apache/ApacheAsyncHttpProvider.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,7 @@ public <T> ListenableFuture<T> execute(Request request, AsyncHandler<T> handler)
202202
}
203203

204204
HttpMethodBase method = createMethod(httpClient, request);
205-
ApacheResponseFuture f = new ApacheResponseFuture<T>(handler, requestTimeout, request, method);
205+
ApacheResponseFuture<T> f = new ApacheResponseFuture<T>(handler, requestTimeout, request, method);
206206
f.touch();
207207

208208
f.setInnerFuture(config.executorService().submit(new ApacheClientRunnable(request, handler, method, f, httpClient)));
@@ -224,7 +224,7 @@ public void close() {
224224
}
225225
}
226226

227-
public Response prepareResponse(HttpResponseStatus status, HttpResponseHeaders headers, Collection<HttpResponseBodyPart> bodyParts) {
227+
public Response prepareResponse(HttpResponseStatus status, HttpResponseHeaders headers, List<HttpResponseBodyPart> bodyParts) {
228228
return new ApacheResponse(status, headers, bodyParts);
229229
}
230230

src/main/java/com/ning/http/client/providers/apache/ApacheResponse.java

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
import com.ning.http.client.Cookie;
1616
import com.ning.http.client.FluentCaseInsensitiveStringsMap;
1717
import com.ning.http.client.HttpResponseBodyPart;
18-
import com.ning.http.client.HttpResponseBodyPartsInputStream;
1918
import com.ning.http.client.HttpResponseHeaders;
2019
import com.ning.http.client.HttpResponseStatus;
2120
import com.ning.http.client.Response;
@@ -24,28 +23,28 @@
2423
import java.io.ByteArrayInputStream;
2524
import java.io.IOException;
2625
import java.io.InputStream;
26+
import java.io.SequenceInputStream;
2727
import java.net.MalformedURLException;
2828
import java.net.URI;
2929
import java.util.ArrayList;
30-
import java.util.Collection;
3130
import java.util.Collections;
3231
import java.util.List;
3332
import java.util.Map;
34-
33+
import java.util.Vector;
3534

3635
public class ApacheResponse implements Response {
3736
private final static String DEFAULT_CHARSET = "ISO-8859-1";
3837
private final static String HEADERS_NOT_COMPUTED = "Response's headers hasn't been computed by your AsyncHandler.";
3938

4039
private final URI uri;
41-
private final Collection<HttpResponseBodyPart> bodyParts;
40+
private final List<HttpResponseBodyPart> bodyParts;
4241
private final HttpResponseHeaders headers;
4342
private final HttpResponseStatus status;
4443
private final List<Cookie> cookies = new ArrayList<Cookie>();
4544

4645
public ApacheResponse(HttpResponseStatus status,
4746
HttpResponseHeaders headers,
48-
Collection<HttpResponseBodyPart> bodyParts) {
47+
List<HttpResponseBodyPart> bodyParts) {
4948

5049
this.bodyParts = bodyParts;
5150
this.headers = headers;
@@ -91,11 +90,17 @@ public String getResponseBody(String charset) throws IOException {
9190

9291
/* @Override */
9392
public InputStream getResponseBodyAsStream() throws IOException {
94-
if (bodyParts.size() > 0) {
95-
return new HttpResponseBodyPartsInputStream(bodyParts.toArray(new HttpResponseBodyPart[bodyParts.size()]));
96-
} else {
97-
return new ByteArrayInputStream("".getBytes());
93+
switch (bodyParts.size()) {
94+
case 0:
95+
return new ByteArrayInputStream(new byte[0]);
96+
case 1:
97+
return bodyParts.get(0).readBodyPartBytes();
98+
}
99+
Vector<InputStream> streams = new Vector<InputStream>(bodyParts.size());
100+
for (HttpResponseBodyPart part : bodyParts) {
101+
streams.add(part.readBodyPartBytes());
98102
}
103+
return new SequenceInputStream(streams.elements());
99104
}
100105

101106
/* @Override */

src/main/java/com/ning/http/client/providers/apache/ApacheResponseBodyPart.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,9 @@
1515
import com.ning.http.client.AsyncHttpProvider;
1616
import com.ning.http.client.HttpResponseBodyPart;
1717

18+
import java.io.ByteArrayInputStream;
1819
import java.io.IOException;
20+
import java.io.InputStream;
1921
import java.io.OutputStream;
2022
import java.net.URI;
2123
import java.nio.ByteBuffer;
@@ -40,10 +42,21 @@ public ApacheResponseBodyPart(URI uri, byte[] chunk, AsyncHttpProvider provider,
4042
*
4143
* @return the response body's part bytes received.
4244
*/
45+
@Override
4346
public byte[] getBodyPartBytes() {
4447
return chunk;
4548
}
4649

50+
@Override
51+
public InputStream readBodyPartBytes() {
52+
return new ByteArrayInputStream(chunk);
53+
}
54+
55+
@Override
56+
public int length() {
57+
return chunk.length;
58+
}
59+
4760
@Override
4861
public int writeTo(OutputStream outputStream) throws IOException {
4962
outputStream.write(chunk);

src/main/java/com/ning/http/client/providers/grizzly/GrizzlyAsyncHttpProvider.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,7 @@
142142
* @author The Grizzly Team
143143
* @since 1.7.0
144144
*/
145+
@SuppressWarnings("rawtypes")
145146
public class GrizzlyAsyncHttpProvider implements AsyncHttpProvider {
146147

147148
private final static Logger LOGGER = LoggerFactory.getLogger(GrizzlyAsyncHttpProvider.class);
@@ -270,7 +271,7 @@ public void close() {
270271
*/
271272
public Response prepareResponse(HttpResponseStatus status,
272273
HttpResponseHeaders headers,
273-
Collection<HttpResponseBodyPart> bodyParts) {
274+
List<HttpResponseBodyPart> bodyParts) {
274275

275276
return new GrizzlyResponse(status, headers, bodyParts);
276277

@@ -469,7 +470,6 @@ private void doDefaultTransportConfig() {
469470
}
470471
}
471472

472-
473473
private <T> CompletionHandler<WriteResult> createWriteCompletionHandler(final GrizzlyResponseFuture<T> future) {
474474
return new CompletionHandler<WriteResult>() {
475475

src/main/java/com/ning/http/client/providers/grizzly/GrizzlyResponse.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ public class GrizzlyResponse implements Response {
4949

5050
private final HttpResponseStatus status;
5151
private final HttpResponseHeaders headers;
52-
private final Collection<HttpResponseBodyPart> bodyParts;
52+
private final List<HttpResponseBodyPart> bodyParts;
5353
private final Buffer responseBody;
5454

5555
private List<Cookie> cookies;
@@ -60,7 +60,7 @@ public class GrizzlyResponse implements Response {
6060

6161
public GrizzlyResponse(final HttpResponseStatus status,
6262
final HttpResponseHeaders headers,
63-
final Collection<HttpResponseBodyPart> bodyParts) {
63+
final List<HttpResponseBodyPart> bodyParts) {
6464

6565
this.status = status;
6666
this.headers = headers;
@@ -170,7 +170,7 @@ public String getResponseBody() throws IOException {
170170
* {@inheritDoc}
171171
*/
172172
public byte[] getResponseBodyAsBytes() throws IOException {
173-
173+
// !!! TODO: wrong, very wasteful
174174
return getResponseBody().getBytes(Charsets.DEFAULT_CHARACTER_ENCODING);
175175

176176
}
@@ -191,7 +191,7 @@ public URI getUri() throws MalformedURLException {
191191
*/
192192
public String getContentType() {
193193

194-
return headers.getHeaders().getFirstValue("Content-Type");
194+
return getHeader("Content-Type");
195195

196196
}
197197

@@ -328,7 +328,7 @@ private Charset getCharset(final String charset) {
328328
}
329329

330330

331-
private boolean between(final int value,
331+
private static boolean between(final int value,
332332
final int lowerBound,
333333
final int upperBound) {
334334

src/main/java/com/ning/http/client/providers/grizzly/GrizzlyResponseBodyPart.java

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,9 @@
2020
import org.glassfish.grizzly.Connection;
2121
import org.glassfish.grizzly.http.HttpContent;
2222

23+
import java.io.ByteArrayInputStream;
2324
import java.io.IOException;
25+
import java.io.InputStream;
2426
import java.io.OutputStream;
2527
import java.net.URI;
2628
import java.nio.ByteBuffer;
@@ -38,7 +40,7 @@
3840
public class GrizzlyResponseBodyPart extends HttpResponseBodyPart {
3941

4042
private final HttpContent content;
41-
private final Connection connection;
43+
private final Connection<?> connection;
4244
private final AtomicReference<byte[]> contentBytes =
4345
new AtomicReference<byte[]>();
4446

@@ -48,7 +50,7 @@ public class GrizzlyResponseBodyPart extends HttpResponseBodyPart {
4850

4951
public GrizzlyResponseBodyPart(final HttpContent content,
5052
final URI uri,
51-
final Connection connection,
53+
final Connection<?> connection,
5254
final AsyncHttpProvider provider) {
5355
super(uri, provider);
5456
this.content = content;
@@ -65,7 +67,6 @@ public GrizzlyResponseBodyPart(final HttpContent content,
6567
*/
6668
@Override
6769
public byte[] getBodyPartBytes() {
68-
6970
byte[] bytes = contentBytes.get();
7071
if (bytes != null) {
7172
return bytes;
@@ -81,7 +82,17 @@ public byte[] getBodyPartBytes() {
8182

8283
}
8384

85+
@Override
86+
public InputStream readBodyPartBytes() {
87+
return new ByteArrayInputStream(getBodyPartBytes());
88+
}
8489

90+
@Override
91+
public int length() {
92+
// this is ugly but...
93+
return getBodyPartBytes().length;
94+
}
95+
8596
/**
8697
* {@inheritDoc}
8798
*/

0 commit comments

Comments
 (0)