1414import java .util .concurrent .Future ;
1515
1616import static com .github .scribejava .core .model .AbstractRequest .DEFAULT_CONTENT_TYPE ;
17+ import java .io .File ;
1718import org .asynchttpclient .BoundRequestBuilder ;
1819
1920public class AhcHttpClient implements HttpClient {
@@ -35,8 +36,31 @@ public void close() throws IOException {
3536
3637 @ Override
3738 public <T > Future <T > executeAsync (String userAgent , Map <String , String > headers , Verb httpVerb , String completeUrl ,
38- String bodyContents , OAuthAsyncRequestCallback <T > callback ,
39- OAuthRequestAsync .ResponseConverter <T > converter ) {
39+ byte [] bodyContents , OAuthAsyncRequestCallback <T > callback ,
40+ OAuthRequestAsync .ResponseConverter <T > converter ) {
41+ return doExecuteAsync (userAgent , headers , httpVerb , completeUrl , new ByteArrayBodySetter (bodyContents ),
42+ callback , converter );
43+ }
44+
45+ @ Override
46+ public <T > Future <T > executeAsync (String userAgent , Map <String , String > headers , Verb httpVerb , String completeUrl ,
47+ String bodyContents , OAuthAsyncRequestCallback <T > callback ,
48+ OAuthRequestAsync .ResponseConverter <T > converter ) {
49+ return doExecuteAsync (userAgent , headers , httpVerb , completeUrl , new StringBodySetter (bodyContents ), callback ,
50+ converter );
51+ }
52+
53+ @ Override
54+ public <T > Future <T > executeAsync (String userAgent , Map <String , String > headers , Verb httpVerb , String completeUrl ,
55+ File bodyContents , OAuthAsyncRequestCallback <T > callback ,
56+ OAuthRequestAsync .ResponseConverter <T > converter ) {
57+ return doExecuteAsync (userAgent , headers , httpVerb , completeUrl , new FileBodySetter (bodyContents ), callback ,
58+ converter );
59+ }
60+
61+ private <T > Future <T > doExecuteAsync (String userAgent , Map <String , String > headers , Verb httpVerb ,
62+ String completeUrl , BodySetter bodySetter , OAuthAsyncRequestCallback <T > callback ,
63+ OAuthRequestAsync .ResponseConverter <T > converter ) {
4064 final BoundRequestBuilder boundRequestBuilder ;
4165 switch (httpVerb ) {
4266 case GET :
@@ -47,7 +71,7 @@ public <T> Future<T> executeAsync(String userAgent, Map<String, String> headers,
4771 if (!headers .containsKey (AbstractRequest .CONTENT_TYPE )) {
4872 requestBuilder = requestBuilder .addHeader (AbstractRequest .CONTENT_TYPE , DEFAULT_CONTENT_TYPE );
4973 }
50- boundRequestBuilder = requestBuilder .setBody (bodyContents );
74+ boundRequestBuilder = bodySetter .setBody (requestBuilder );
5175 break ;
5276 default :
5377 throw new IllegalArgumentException ("message build error: unknown verb type" );
@@ -64,4 +88,51 @@ public <T> Future<T> executeAsync(String userAgent, Map<String, String> headers,
6488 .execute (new OAuthAsyncCompletionHandler <>(
6589 callback , converter ));
6690 }
91+
92+ private interface BodySetter {
93+
94+ BoundRequestBuilder setBody (BoundRequestBuilder requestBuilder );
95+ }
96+
97+ private static class ByteArrayBodySetter implements BodySetter {
98+
99+ private final byte [] bodyContents ;
100+
101+ private ByteArrayBodySetter (byte [] bodyContents ) {
102+ this .bodyContents = bodyContents ;
103+ }
104+
105+ @ Override
106+ public BoundRequestBuilder setBody (BoundRequestBuilder requestBuilder ) {
107+ return requestBuilder .setBody (bodyContents );
108+ }
109+ }
110+
111+ private static class StringBodySetter implements BodySetter {
112+
113+ private final String bodyContents ;
114+
115+ private StringBodySetter (String bodyContents ) {
116+ this .bodyContents = bodyContents ;
117+ }
118+
119+ @ Override
120+ public BoundRequestBuilder setBody (BoundRequestBuilder requestBuilder ) {
121+ return requestBuilder .setBody (bodyContents );
122+ }
123+ }
124+
125+ private static class FileBodySetter implements BodySetter {
126+
127+ private final File bodyContents ;
128+
129+ private FileBodySetter (File bodyContents ) {
130+ this .bodyContents = bodyContents ;
131+ }
132+
133+ @ Override
134+ public BoundRequestBuilder setBody (BoundRequestBuilder requestBuilder ) {
135+ return requestBuilder .setBody (bodyContents );
136+ }
137+ }
67138}
0 commit comments