Skip to content

Commit d707642

Browse files
committed
Let request take a ByteBuffer, close AsyncHttpClient#913
1 parent 6f96302 commit d707642

File tree

4 files changed

+39
-11
lines changed

4 files changed

+39
-11
lines changed

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import java.io.File;
2020
import java.io.InputStream;
2121
import java.net.InetAddress;
22+
import java.nio.ByteBuffer;
2223
import java.nio.charset.Charset;
2324
import java.util.Collection;
2425
import java.util.List;
@@ -96,6 +97,13 @@ public interface Request {
9697
*/
9798
String getStringData();
9899

100+
/**
101+
* Return the current request's body as a ByteBuffer
102+
*
103+
* @return a ByteBuffer
104+
*/
105+
ByteBuffer getByteBufferData();
106+
99107
/**
100108
* Return the current request's body as an InputStream
101109
*

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

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,14 @@
1515
*/
1616
package org.asynchttpclient;
1717

18+
import static org.asynchttpclient.util.AsyncHttpProviderUtils.parseCharset;
19+
import static org.asynchttpclient.util.AsyncHttpProviderUtils.validateSupportedScheme;
1820
import static org.asynchttpclient.util.MiscUtils.isNonEmpty;
19-
import static org.asynchttpclient.util.AsyncHttpProviderUtils.*;
2021

2122
import java.io.File;
2223
import java.io.InputStream;
2324
import java.net.InetAddress;
25+
import java.nio.ByteBuffer;
2426
import java.nio.charset.Charset;
2527
import java.util.ArrayList;
2628
import java.util.Collection;
@@ -59,6 +61,7 @@ private static final class RequestImpl implements Request {
5961
private byte[] byteData;
6062
private List<byte[]> compositeByteData;
6163
private String stringData;
64+
private ByteBuffer byteBufferData;
6265
private InputStream streamData;
6366
private BodyGenerator bodyGenerator;
6467
private List<Param> formParams;
@@ -90,6 +93,7 @@ public RequestImpl(Request prototype) {
9093
this.byteData = prototype.getByteData();
9194
this.compositeByteData = prototype.getCompositeByteData();
9295
this.stringData = prototype.getStringData();
96+
this.byteBufferData = prototype.getByteBufferData();
9397
this.streamData = prototype.getStreamData();
9498
this.bodyGenerator = prototype.getBodyGenerator();
9599
this.formParams = prototype.getFormParams() == null ? null : new ArrayList<>(prototype.getFormParams());
@@ -158,6 +162,11 @@ public String getStringData() {
158162
return stringData;
159163
}
160164

165+
@Override
166+
public ByteBuffer getByteBufferData() {
167+
return byteBufferData;
168+
}
169+
161170
@Override
162171
public InputStream getStreamData() {
163172
return streamData;
@@ -414,6 +423,7 @@ public void resetFormParams() {
414423
public void resetNonMultipartData() {
415424
request.byteData = null;
416425
request.compositeByteData = null;
426+
request.byteBufferData = null;
417427
request.stringData = null;
418428
request.streamData = null;
419429
request.bodyGenerator = null;
@@ -429,34 +439,38 @@ public T setBody(File file) {
429439
return derived.cast(this);
430440
}
431441

432-
public T setBody(byte[] data) {
442+
private void resetBody() {
433443
resetFormParams();
434444
resetNonMultipartData();
435445
resetMultipartData();
446+
}
447+
448+
public T setBody(byte[] data) {
449+
resetBody();
436450
request.byteData = data;
437451
return derived.cast(this);
438452
}
439453

440454
public T setBody(List<byte[]> data) {
441-
resetFormParams();
442-
resetNonMultipartData();
443-
resetMultipartData();
455+
resetBody();
444456
request.compositeByteData = data;
445457
return derived.cast(this);
446458
}
447459

448460
public T setBody(String data) {
449-
resetFormParams();
450-
resetNonMultipartData();
451-
resetMultipartData();
461+
resetBody();
452462
request.stringData = data;
453463
return derived.cast(this);
454464
}
455465

466+
public T setBody(ByteBuffer data) {
467+
resetBody();
468+
request.byteBufferData = data;
469+
return derived.cast(this);
470+
}
471+
456472
public T setBody(InputStream stream) {
457-
resetFormParams();
458-
resetNonMultipartData();
459-
resetMultipartData();
473+
resetBody();
460474
request.streamData = stream;
461475
return derived.cast(this);
462476
}

providers/netty3/src/main/java/org/asynchttpclient/netty/request/NettyRequestFactory.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,9 @@ else if (request.getCompositeByteData() != null)
8080
else if (request.getStringData() != null)
8181
nettyBody = new NettyByteBufferBody(StringUtils.charSequence2ByteBuffer(request.getStringData(), bodyCharset));
8282

83+
else if (request.getByteBufferData() != null)
84+
nettyBody = new NettyByteBufferBody(request.getByteBufferData());
85+
8386
else if (request.getStreamData() != null)
8487
nettyBody = new NettyInputStreamBody(request.getStreamData(), config);
8588

providers/netty4/src/main/java/org/asynchttpclient/netty/request/NettyRequestFactory.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,9 @@ else if (request.getCompositeByteData() != null)
8181
else if (request.getStringData() != null)
8282
nettyBody = new NettyByteBufferBody(StringUtils.charSequence2ByteBuffer(request.getStringData(), bodyCharset));
8383

84+
else if (request.getByteBufferData() != null)
85+
nettyBody = new NettyByteBufferBody(request.getByteBufferData());
86+
8487
else if (request.getStreamData() != null)
8588
nettyBody = new NettyInputStreamBody(request.getStreamData(), config);
8689

0 commit comments

Comments
 (0)