X Tutup
Skip to content

Commit 5e560cc

Browse files
committed
fixes and refactorings to OkHttp support
1 parent d4e9733 commit 5e560cc

File tree

11 files changed

+222
-182
lines changed

11 files changed

+222
-182
lines changed

README.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,12 @@ Hit ScribeJava as hard and with many threads as you like.
2727

2828
### Async and other HTTP clients
2929

30-
You can use ning async http client 1.9.x or asynchttpclient 2.x out-of-box, just add maven modules scribejava-httpclient-ning or scribejava-httpclient-ahc to your pom
30+
ScribeJava support out-of-box several HTTP clients:
31+
* ning async http client 1.9.x (maven module scribejava-httpclient-ning)
32+
* asynchttpclient 2.x (maven module scribejava-httpclient-ahc)
33+
* OkHttp (maven module scribejava-httpclient-okhttp)
34+
35+
just add corresponding maven modules to your pom
3136

3237
### Supports all major 1.0a and 2.0 OAuth APIs out-of-the-box
3338

changelog

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
You don't need OAuthService to create OAuthRequest anymore. Async request should be sent via OAuthService method.
44
* add support for byte[] and File (async only) payload in OAuth Requests (thanks to https://github.com/keijohyttinen)
55
* add support for HTTP verbs (thanks to https://github.com/keijohyttinen)
6+
* add OkHttp http client support (thanks to https://github.com/arcao)
67

78
[3.3.0]
89
* update Facebook v2.6 -> v2.8

scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GitHubAsyncOkHttpExample.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import com.github.scribejava.core.model.Response;
88
import com.github.scribejava.core.model.Verb;
99
import com.github.scribejava.core.oauth.OAuth20Service;
10-
import com.github.scribejava.httpclient.okhttp.OkHttpHttpClient;
10+
import com.github.scribejava.httpclient.okhttp.OkHttpHttpClientConfig;
1111
import okhttp3.OkHttpClient;
1212

1313
import java.io.IOException;
@@ -28,12 +28,13 @@ public static void main(String... args) throws IOException, ExecutionException,
2828
final String clientId = "your client id";
2929
final String clientSecret = "your client secret";
3030
final String secretState = "secret" + new Random().nextInt(999_999);
31+
final OkHttpClient.Builder okHttpBuilder = new OkHttpClient.Builder();
3132
final OAuth20Service service = new ServiceBuilder()
3233
.apiKey(clientId)
3334
.apiSecret(clientSecret)
3435
.state(secretState)
3536
.callback("http://www.example.com/oauth_callback/")
36-
.httpClient(new OkHttpHttpClient(new OkHttpClient()))
37+
.httpClientConfig(new OkHttpHttpClientConfig(okHttpBuilder))
3738
.build(GitHubApi.instance());
3839
final Scanner in = new Scanner(System.in, "UTF-8");
3940

@@ -73,15 +74,16 @@ public static void main(String... args) throws IOException, ExecutionException,
7374

7475
// Now let's go and ask for a protected resource!
7576
System.out.println("Now we're going to access a protected resource...");
76-
final OAuthRequestAsync request = new OAuthRequestAsync(Verb.GET, PROTECTED_RESOURCE_URL, service);
77+
final OAuthRequestAsync request = new OAuthRequestAsync(Verb.GET, PROTECTED_RESOURCE_URL);
7778
service.signRequest(accessToken, request);
78-
final Response response = request.sendAsync(null).get();
79+
final Response response = service.execute(request, null).get();
7980
System.out.println("Got it! Lets see what we found...");
8081
System.out.println();
8182
System.out.println(response.getCode());
8283
System.out.println(response.getBody());
8384

8485
System.out.println();
8586
System.out.println("Thats it man! Go and build something awesome with ScribeJava! :)");
87+
service.closeAsyncClient();
8688
}
8789
}

scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExternalHttpExample.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public static void main(String... args) throws IOException, InterruptedException
3030
final String clientSecret = "your client secret";
3131
ScribeJavaConfig.setForceTypeOfHttpRequests(ForceTypeOfHttpRequest.FORCE_ASYNC_ONLY_HTTP_REQUESTS);
3232

33-
//create any http cleint externally
33+
//create any http client externally
3434
final DefaultAsyncHttpClientConfig httpClientConfig = new DefaultAsyncHttpClientConfig.Builder()
3535
.setMaxConnections(5)
3636
.setRequestTimeout(10_000)

scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/AhcHttpClient.java

Lines changed: 27 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -38,28 +38,28 @@ public void close() throws IOException {
3838
public <T> Future<T> executeAsync(String userAgent, Map<String, String> headers, Verb httpVerb, String completeUrl,
3939
byte[] bodyContents, OAuthAsyncRequestCallback<T> callback,
4040
OAuthRequestAsync.ResponseConverter<T> converter) {
41-
return doExecuteAsync(userAgent, headers, httpVerb, completeUrl, new ByteArrayBodySetter(bodyContents),
42-
callback, converter);
41+
return doExecuteAsync(userAgent, headers, httpVerb, completeUrl, BodySetter.BYTE_ARRAY, bodyContents, callback,
42+
converter);
4343
}
4444

4545
@Override
4646
public <T> Future<T> executeAsync(String userAgent, Map<String, String> headers, Verb httpVerb, String completeUrl,
4747
String bodyContents, OAuthAsyncRequestCallback<T> callback,
4848
OAuthRequestAsync.ResponseConverter<T> converter) {
49-
return doExecuteAsync(userAgent, headers, httpVerb, completeUrl, new StringBodySetter(bodyContents), callback,
49+
return doExecuteAsync(userAgent, headers, httpVerb, completeUrl, BodySetter.STRING, bodyContents, callback,
5050
converter);
5151
}
5252

5353
@Override
5454
public <T> Future<T> executeAsync(String userAgent, Map<String, String> headers, Verb httpVerb, String completeUrl,
5555
File bodyContents, OAuthAsyncRequestCallback<T> callback,
5656
OAuthRequestAsync.ResponseConverter<T> converter) {
57-
return doExecuteAsync(userAgent, headers, httpVerb, completeUrl, new FileBodySetter(bodyContents), callback,
57+
return doExecuteAsync(userAgent, headers, httpVerb, completeUrl, BodySetter.FILE, bodyContents, callback,
5858
converter);
5959
}
6060

6161
private <T> Future<T> doExecuteAsync(String userAgent, Map<String, String> headers, Verb httpVerb,
62-
String completeUrl, BodySetter bodySetter, OAuthAsyncRequestCallback<T> callback,
62+
String completeUrl, BodySetter bodySetter, Object bodyContents, OAuthAsyncRequestCallback<T> callback,
6363
OAuthRequestAsync.ResponseConverter<T> converter) {
6464
BoundRequestBuilder boundRequestBuilder;
6565
switch (httpVerb) {
@@ -83,7 +83,7 @@ private <T> Future<T> doExecuteAsync(String userAgent, Map<String, String> heade
8383
if (!headers.containsKey(AbstractRequest.CONTENT_TYPE)) {
8484
boundRequestBuilder = boundRequestBuilder.addHeader(AbstractRequest.CONTENT_TYPE, DEFAULT_CONTENT_TYPE);
8585
}
86-
boundRequestBuilder = bodySetter.setBody(boundRequestBuilder);
86+
boundRequestBuilder = bodySetter.setBody(boundRequestBuilder, bodyContents);
8787
}
8888

8989
for (Map.Entry<String, String> header : headers.entrySet()) {
@@ -93,55 +93,29 @@ private <T> Future<T> doExecuteAsync(String userAgent, Map<String, String> heade
9393
boundRequestBuilder.setHeader(OAuthConstants.USER_AGENT_HEADER_NAME, userAgent);
9494
}
9595

96-
return boundRequestBuilder
97-
.execute(new OAuthAsyncCompletionHandler<>(
98-
callback, converter));
99-
}
100-
101-
private interface BodySetter {
102-
103-
BoundRequestBuilder setBody(BoundRequestBuilder requestBuilder);
96+
return boundRequestBuilder.execute(new OAuthAsyncCompletionHandler<>(callback, converter));
10497
}
10598

106-
private static class ByteArrayBodySetter implements BodySetter {
107-
108-
private final byte[] bodyContents;
109-
110-
private ByteArrayBodySetter(byte[] bodyContents) {
111-
this.bodyContents = bodyContents;
112-
}
113-
114-
@Override
115-
public BoundRequestBuilder setBody(BoundRequestBuilder requestBuilder) {
116-
return requestBuilder.setBody(bodyContents);
117-
}
118-
}
119-
120-
private static class StringBodySetter implements BodySetter {
121-
122-
private final String bodyContents;
123-
124-
private StringBodySetter(String bodyContents) {
125-
this.bodyContents = bodyContents;
126-
}
127-
128-
@Override
129-
public BoundRequestBuilder setBody(BoundRequestBuilder requestBuilder) {
130-
return requestBuilder.setBody(bodyContents);
131-
}
132-
}
133-
134-
private static class FileBodySetter implements BodySetter {
135-
136-
private final File bodyContents;
137-
138-
private FileBodySetter(File bodyContents) {
139-
this.bodyContents = bodyContents;
140-
}
99+
private enum BodySetter {
100+
BYTE_ARRAY {
101+
@Override
102+
BoundRequestBuilder setBody(BoundRequestBuilder requestBuilder, Object bodyContents) {
103+
return requestBuilder.setBody((byte[]) bodyContents);
104+
}
105+
},
106+
STRING {
107+
@Override
108+
BoundRequestBuilder setBody(BoundRequestBuilder requestBuilder, Object bodyContents) {
109+
return requestBuilder.setBody((String) bodyContents);
110+
}
111+
},
112+
FILE {
113+
@Override
114+
BoundRequestBuilder setBody(BoundRequestBuilder requestBuilder, Object bodyContents) {
115+
return requestBuilder.setBody((File) bodyContents);
116+
}
117+
};
141118

142-
@Override
143-
public BoundRequestBuilder setBody(BoundRequestBuilder requestBuilder) {
144-
return requestBuilder.setBody(bodyContents);
145-
}
119+
abstract BoundRequestBuilder setBody(BoundRequestBuilder requestBuilder, Object bodyContents);
146120
}
147121
}

scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning/NingHttpClient.java

Lines changed: 31 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -38,16 +38,16 @@ public <T> Future<T> executeAsync(String userAgent, Map<String, String> headers,
3838
byte[] bodyContents, OAuthAsyncRequestCallback<T> callback,
3939
OAuthRequestAsync.ResponseConverter<T> converter) {
4040

41-
return doExecuteAsync(userAgent, headers, httpVerb, completeUrl, new ByteArrayBodySetter(bodyContents),
42-
callback, converter);
41+
return doExecuteAsync(userAgent, headers, httpVerb, completeUrl, BodySetter.BYTE_ARRAY, bodyContents, callback,
42+
converter);
4343
}
4444

4545
@Override
4646
public <T> Future<T> executeAsync(String userAgent, Map<String, String> headers, Verb httpVerb, String completeUrl,
4747
String bodyContents, OAuthAsyncRequestCallback<T> callback,
4848
OAuthRequestAsync.ResponseConverter<T> converter) {
4949

50-
return doExecuteAsync(userAgent, headers, httpVerb, completeUrl, new StringBodySetter(bodyContents), callback,
50+
return doExecuteAsync(userAgent, headers, httpVerb, completeUrl, BodySetter.STRING, bodyContents, callback,
5151
converter);
5252
}
5353

@@ -56,12 +56,12 @@ public <T> Future<T> executeAsync(String userAgent, Map<String, String> headers,
5656
File bodyContents, OAuthAsyncRequestCallback<T> callback,
5757
OAuthRequestAsync.ResponseConverter<T> converter) {
5858

59-
return doExecuteAsync(userAgent, headers, httpVerb, completeUrl, new FileBodySetter(bodyContents), callback,
59+
return doExecuteAsync(userAgent, headers, httpVerb, completeUrl, BodySetter.FILE, bodyContents, callback,
6060
converter);
6161
}
6262

6363
private <T> Future<T> doExecuteAsync(String userAgent, Map<String, String> headers, Verb httpVerb,
64-
String completeUrl, BodySetter bodySetter, OAuthAsyncRequestCallback<T> callback,
64+
String completeUrl, BodySetter bodySetter, Object bodyContents, OAuthAsyncRequestCallback<T> callback,
6565
OAuthRequestAsync.ResponseConverter<T> converter) {
6666
AsyncHttpClient.BoundRequestBuilder boundRequestBuilder;
6767
switch (httpVerb) {
@@ -85,7 +85,7 @@ private <T> Future<T> doExecuteAsync(String userAgent, Map<String, String> heade
8585
if (!headers.containsKey(AbstractRequest.CONTENT_TYPE)) {
8686
boundRequestBuilder = boundRequestBuilder.addHeader(AbstractRequest.CONTENT_TYPE, DEFAULT_CONTENT_TYPE);
8787
}
88-
boundRequestBuilder = bodySetter.setBody(boundRequestBuilder);
88+
boundRequestBuilder = bodySetter.setBody(boundRequestBuilder, bodyContents);
8989
}
9090

9191
for (Map.Entry<String, String> header : headers.entrySet()) {
@@ -95,55 +95,33 @@ private <T> Future<T> doExecuteAsync(String userAgent, Map<String, String> heade
9595
boundRequestBuilder.setHeader(OAuthConstants.USER_AGENT_HEADER_NAME, userAgent);
9696
}
9797

98-
return boundRequestBuilder
99-
.execute(new OAuthAsyncCompletionHandler<>(
100-
callback, converter));
101-
}
102-
103-
private interface BodySetter {
104-
105-
AsyncHttpClient.BoundRequestBuilder setBody(AsyncHttpClient.BoundRequestBuilder requestBuilder);
98+
return boundRequestBuilder.execute(new OAuthAsyncCompletionHandler<>(callback, converter));
10699
}
107100

108-
private static class ByteArrayBodySetter implements BodySetter {
109-
110-
private final byte[] bodyContents;
111-
112-
private ByteArrayBodySetter(byte[] bodyContents) {
113-
this.bodyContents = bodyContents;
114-
}
115-
116-
@Override
117-
public AsyncHttpClient.BoundRequestBuilder setBody(AsyncHttpClient.BoundRequestBuilder requestBuilder) {
118-
return requestBuilder.setBody(bodyContents);
119-
}
120-
}
121-
122-
private static class StringBodySetter implements BodySetter {
123-
124-
private final String bodyContents;
125-
126-
private StringBodySetter(String bodyContents) {
127-
this.bodyContents = bodyContents;
128-
}
129-
130-
@Override
131-
public AsyncHttpClient.BoundRequestBuilder setBody(AsyncHttpClient.BoundRequestBuilder requestBuilder) {
132-
return requestBuilder.setBody(bodyContents);
133-
}
134-
}
135-
136-
private static class FileBodySetter implements BodySetter {
137-
138-
private final File bodyContents;
139-
140-
private FileBodySetter(File bodyContents) {
141-
this.bodyContents = bodyContents;
142-
}
101+
private enum BodySetter {
102+
BYTE_ARRAY {
103+
@Override
104+
AsyncHttpClient.BoundRequestBuilder setBody(AsyncHttpClient.BoundRequestBuilder requestBuilder,
105+
Object bodyContents) {
106+
return requestBuilder.setBody((byte[]) bodyContents);
107+
}
108+
},
109+
STRING {
110+
@Override
111+
AsyncHttpClient.BoundRequestBuilder setBody(AsyncHttpClient.BoundRequestBuilder requestBuilder,
112+
Object bodyContents) {
113+
return requestBuilder.setBody((String) bodyContents);
114+
}
115+
},
116+
FILE {
117+
@Override
118+
AsyncHttpClient.BoundRequestBuilder setBody(AsyncHttpClient.BoundRequestBuilder requestBuilder,
119+
Object bodyContents) {
120+
return requestBuilder.setBody((File) bodyContents);
121+
}
122+
};
143123

144-
@Override
145-
public AsyncHttpClient.BoundRequestBuilder setBody(AsyncHttpClient.BoundRequestBuilder requestBuilder) {
146-
return requestBuilder.setBody(bodyContents);
147-
}
124+
abstract AsyncHttpClient.BoundRequestBuilder setBody(AsyncHttpClient.BoundRequestBuilder requestBuilder,
125+
Object bodyContents);
148126
}
149127
}

0 commit comments

Comments
 (0)
X Tutup