Skip to content

Commit c9464fa

Browse files
author
Julien Herr
committed
Fix #683 - Extract HTTP client logic into providers
1 parent fd63209 commit c9464fa

File tree

23 files changed

+378
-184
lines changed

23 files changed

+378
-184
lines changed

pom.xml

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
<modules>
1818
<module>scribejava-core</module>
1919
<module>scribejava-apis</module>
20+
<module>scribejava-httpclient-ahc</module>
21+
<module>scribejava-httpclient-ning</module>
2022
</modules>
2123

2224
<licenses>
@@ -92,18 +94,6 @@
9294
<scope>compile</scope>
9395
<optional>true</optional>
9496
</dependency>
95-
<dependency>
96-
<groupId>com.ning</groupId>
97-
<artifactId>async-http-client</artifactId>
98-
<version>1.9.38</version>
99-
<scope>provided</scope>
100-
</dependency>
101-
<dependency>
102-
<groupId>org.asynchttpclient</groupId>
103-
<artifactId>async-http-client</artifactId>
104-
<version>2.0.9</version>
105-
<scope>provided</scope>
106-
</dependency>
10797
</dependencies>
10898
<build>
10999
<pluginManagement>

scribejava-apis/pom.xml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,18 @@
2020
<artifactId>scribejava-core</artifactId>
2121
<version>${project.version}</version>
2222
</dependency>
23+
<dependency>
24+
<groupId>com.github.scribejava</groupId>
25+
<artifactId>scribejava-ahc</artifactId>
26+
<version>${project.version}</version>
27+
<scope>test</scope>
28+
</dependency>
29+
<dependency>
30+
<groupId>com.github.scribejava</groupId>
31+
<artifactId>scribejava-ning</artifactId>
32+
<version>${project.version}</version>
33+
<scope>test</scope>
34+
</dependency>
2335
</dependencies>
2436

2537
<build>

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.github.scribejava.apis.examples;
22

3+
import com.github.scribejava.httpclient.ning.NingHttpClientConfig;
34
import com.ning.http.client.AsyncHttpClientConfig;
45
import java.util.Random;
56
import java.util.Scanner;
@@ -26,20 +27,20 @@ public static void main(String... args) throws InterruptedException, ExecutionEx
2627
final String clientSecret = "your client secret";
2728
final String secretState = "secret" + new Random().nextInt(999_999);
2829
ScribeJavaConfig.setForceTypeOfHttpRequests(ForceTypeOfHttpRequest.FORCE_ASYNC_ONLY_HTTP_REQUESTS);
29-
final AsyncHttpClientConfig clientConfig = new AsyncHttpClientConfig.Builder()
30+
final NingHttpClientConfig clientConfig = new NingHttpClientConfig(new AsyncHttpClientConfig.Builder()
3031
.setMaxConnections(5)
3132
.setRequestTimeout(10_000)
3233
.setAllowPoolingConnections(false)
3334
.setPooledConnectionIdleTimeout(1_000)
3435
.setReadTimeout(1_000)
35-
.build();
36+
.build());
3637

3738
final OAuth20Service service = new ServiceBuilder()
3839
.apiKey(clientId)
3940
.apiSecret(clientSecret)
4041
.state(secretState)
4142
.callback("http://www.example.com/oauth_callback/")
42-
.asyncNingHttpClientConfig(clientConfig)
43+
.httpClientConfig(clientConfig)
4344
.build(FacebookApi.instance());
4445

4546
final Scanner in = new Scanner(System.in, "UTF-8");

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

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@
33
import java.util.Random;
44
import java.util.Scanner;
55
import com.github.scribejava.apis.GoogleApi20;
6+
import com.github.scribejava.httpclient.ahc.AhcHttpClientConfig;
67
import com.github.scribejava.core.builder.ServiceBuilder;
78
import com.github.scribejava.core.model.ForceTypeOfHttpRequest;
9+
import com.github.scribejava.core.model.HttpClient;
810
import com.github.scribejava.core.model.OAuth2AccessToken;
911
import com.github.scribejava.core.model.OAuthRequestAsync;
1012
import com.github.scribejava.core.model.Response;
@@ -15,7 +17,6 @@
1517
import java.util.HashMap;
1618
import java.util.Map;
1719
import java.util.concurrent.ExecutionException;
18-
import org.asynchttpclient.AsyncHttpClientConfig;
1920
import org.asynchttpclient.DefaultAsyncHttpClientConfig;
2021

2122
public abstract class Google20AsyncAHCExample {
@@ -29,20 +30,20 @@ public static void main(String... args) throws InterruptedException, ExecutionEx
2930
final String clientSecret = "your client secret";
3031
final String secretState = "secret" + new Random().nextInt(999_999);
3132
ScribeJavaConfig.setForceTypeOfHttpRequests(ForceTypeOfHttpRequest.FORCE_ASYNC_ONLY_HTTP_REQUESTS);
32-
final AsyncHttpClientConfig clientConfig = new DefaultAsyncHttpClientConfig.Builder()
33+
final HttpClient.Config clientConfig = new AhcHttpClientConfig(new DefaultAsyncHttpClientConfig.Builder()
3334
.setMaxConnections(5)
3435
.setRequestTimeout(10_000)
3536
.setPooledConnectionIdleTimeout(1_000)
3637
.setReadTimeout(1_000)
37-
.build();
38+
.build());
3839

3940
final OAuth20Service service = new ServiceBuilder()
4041
.apiKey(clientId)
4142
.apiSecret(clientSecret)
4243
.scope("profile") // replace with desired scope
4344
.state(secretState)
4445
.callback("http://example.com/callback")
45-
.asyncAHCHttpClientConfig(clientConfig)
46+
.httpClientConfig(clientConfig)
4647
.build(GoogleApi20.instance());
4748
final Scanner in = new Scanner(System.in, "UTF-8");
4849

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.github.scribejava.apis.examples;
22

3+
import com.github.scribejava.httpclient.ning.NingHttpClientConfig;
34
import com.ning.http.client.AsyncHttpClientConfig;
45
import java.util.Scanner;
56
import java.util.concurrent.ExecutionException;
@@ -23,19 +24,19 @@ public static void main(String... args) throws InterruptedException, ExecutionEx
2324
final String clientId = "your client id";
2425
final String clientSecret = "your client secret";
2526

26-
final AsyncHttpClientConfig clientConfig = new AsyncHttpClientConfig.Builder()
27+
final NingHttpClientConfig clientConfig = new NingHttpClientConfig(new AsyncHttpClientConfig.Builder()
2728
.setMaxConnections(5)
2829
.setRequestTimeout(10_000)
2930
.setAllowPoolingConnections(false)
3031
.setPooledConnectionIdleTimeout(1_000)
3132
.setReadTimeout(10_000)
32-
.build();
33+
.build());
3334

3435
final OAuth20Service service = new ServiceBuilder()
3536
.apiKey(clientId)
3637
.apiSecret(clientSecret)
3738
.callback("http://www.example.com/oauth_callback/")
38-
.asyncNingHttpClientConfig(clientConfig)
39+
.httpClientConfig(clientConfig)
3940
.build(MailruApi.instance());
4041

4142
final Scanner in = new Scanner(System.in, "UTF-8");

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
import com.github.scribejava.apis.SalesforceApi;
1111
import com.github.scribejava.apis.salesforce.SalesforceToken;
12+
import com.github.scribejava.httpclient.ning.NingHttpClientConfig;
1213
import com.github.scribejava.core.builder.ServiceBuilder;
1314
import com.github.scribejava.core.model.ForceTypeOfHttpRequest;
1415
import com.github.scribejava.core.model.OAuthRequestAsync;
@@ -32,20 +33,20 @@ public static void main(String... args) throws InterruptedException, ExecutionEx
3233
final String clientSecret = "your client secret";
3334

3435
ScribeJavaConfig.setForceTypeOfHttpRequests(ForceTypeOfHttpRequest.FORCE_ASYNC_ONLY_HTTP_REQUESTS);
35-
final AsyncHttpClientConfig clientConfig = new AsyncHttpClientConfig.Builder()
36+
final NingHttpClientConfig clientConfig = new NingHttpClientConfig(new AsyncHttpClientConfig.Builder()
3637
.setMaxConnections(5)
3738
.setRequestTimeout(10_000)
3839
.setAllowPoolingConnections(false)
3940
.setPooledConnectionIdleTimeout(1_000)
4041
.setReadTimeout(10_000)
41-
.build();
42+
.build());
4243

4344
//IT's important! Salesforce upper require TLS v1.1 or 1.2
4445
SalesforceApi.initTLSv11orUpper();
4546
final OAuth20Service service = new ServiceBuilder()
4647
.apiKey(clientId)
4748
.apiSecret(clientSecret)
48-
.asyncNingHttpClientConfig(clientConfig)
49+
.httpClientConfig(clientConfig)
4950
.callback("https://www.example.com/callback")
5051
.build(SalesforceApi.instance());
5152

scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilder.java

Lines changed: 9 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
package com.github.scribejava.core.builder;
22

33
import com.github.scribejava.core.builder.api.BaseApi;
4+
import com.github.scribejava.core.model.HttpClient;
45
import com.github.scribejava.core.model.OAuthConfig;
5-
import java.io.OutputStream;
66
import com.github.scribejava.core.model.OAuthConstants;
77
import com.github.scribejava.core.model.SignatureType;
88
import com.github.scribejava.core.oauth.OAuthService;
99
import com.github.scribejava.core.utils.Preconditions;
1010

11+
import java.io.OutputStream;
12+
1113
/**
1214
* Implementation of the Builder pattern, with a fluent interface that creates a {@link OAuthService}
1315
*/
@@ -27,12 +29,8 @@ public class ServiceBuilder {
2729
private Integer connectTimeout;
2830
private Integer readTimeout;
2931

30-
//async version only
31-
//ning 1.9
32-
private com.ning.http.client.AsyncHttpClientConfig ningAsyncHttpClientConfig;
33-
private String ningAsyncHttpProviderClassName;
34-
//AHC 2.0
35-
private org.asynchttpclient.AsyncHttpClientConfig ahcAsyncHttpClientConfig;
32+
//not-default httpclient only
33+
private HttpClient.Config httpClientConfig;
3634

3735
public ServiceBuilder() {
3836
callback = OAuthConstants.OUT_OF_BAND;
@@ -135,24 +133,9 @@ public ServiceBuilder readTimeout(Integer readTimeout) {
135133
return this;
136134
}
137135

138-
public ServiceBuilder asyncNingHttpClientConfig(com.ning.http.client.AsyncHttpClientConfig asyncHttpClientConfig) {
139-
Preconditions.checkNotNull(asyncHttpClientConfig, "asyncHttpClientConfig can't be null");
140-
ningAsyncHttpClientConfig = asyncHttpClientConfig;
141-
ahcAsyncHttpClientConfig = null;
142-
return this;
143-
}
144-
145-
public ServiceBuilder asyncNingHttpProviderClassName(String asyncHttpProviderClassName) {
146-
this.ningAsyncHttpProviderClassName = asyncHttpProviderClassName;
147-
ahcAsyncHttpClientConfig = null;
148-
return this;
149-
}
150-
151-
public ServiceBuilder asyncAHCHttpClientConfig(org.asynchttpclient.AsyncHttpClientConfig asyncHttpClientConfig) {
152-
Preconditions.checkNotNull(asyncHttpClientConfig, "asyncHttpClientConfig can't be null");
153-
ahcAsyncHttpClientConfig = asyncHttpClientConfig;
154-
ningAsyncHttpClientConfig = null;
155-
ningAsyncHttpProviderClassName = null;
136+
public ServiceBuilder httpClientConfig(HttpClient.Config httpClientConfig) {
137+
Preconditions.checkNotNull(httpClientConfig, "httpClientConfig can't be null");
138+
this.httpClientConfig = httpClientConfig;
156139
return this;
157140
}
158141

@@ -173,8 +156,7 @@ public void checkPreconditions() {
173156
private OAuthConfig createConfig() {
174157
checkPreconditions();
175158
return new OAuthConfig(apiKey, apiSecret, callback, signatureType, scope, debugStream, state, responseType,
176-
userAgent, connectTimeout, readTimeout, ningAsyncHttpClientConfig, ningAsyncHttpProviderClassName,
177-
ahcAsyncHttpClientConfig);
159+
userAgent, connectTimeout, readTimeout, httpClientConfig);
178160
}
179161

180162
/**
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package com.github.scribejava.core.httpclient;
2+
3+
import com.github.scribejava.core.model.HttpClient;
4+
5+
public interface HttpClientProvider {
6+
7+
HttpClient createClient(HttpClient.Config httpClientConfig);
8+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.github.scribejava.core.model;
2+
3+
import java.io.IOException;
4+
import java.util.Map;
5+
import java.util.concurrent.Future;
6+
7+
public interface HttpClient {
8+
void close() throws IOException;
9+
10+
<T> Future<T> executeAsync(String userAgent, Map<String, String> headers, Verb httpVerb, String completeUrl,
11+
String bodyContents, OAuthAsyncRequestCallback<T> callback,
12+
OAuthRequestAsync.ResponseConverter<T> converter);
13+
14+
interface Config {
15+
}
16+
}

scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConfig.java

Lines changed: 6 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -23,20 +23,15 @@ public class OAuthConfig {
2323
private final Integer readTimeout;
2424

2525
//async version only
26-
//ning 1.9
27-
private com.ning.http.client.AsyncHttpClientConfig ningAsyncHttpClientConfig;
28-
private String ningAsyncHttpProviderClassName;
29-
//AHC 2.0
30-
private org.asynchttpclient.AsyncHttpClientConfig ahcAsyncHttpClientConfig;
26+
private HttpClient.Config httpClientConfig;
3127

3228
public OAuthConfig(String key, String secret) {
33-
this(key, secret, null, null, null, null, null, null, null, null, null, null, null, null);
29+
this(key, secret, null, null, null, null, null, null, null, null, null, null);
3430
}
3531

3632
public OAuthConfig(String apiKey, String apiSecret, String callback, SignatureType signatureType, String scope,
3733
OutputStream debugStream, String state, String responseType, String userAgent, Integer connectTimeout,
38-
Integer readTimeout, com.ning.http.client.AsyncHttpClientConfig ningAsyncHttpClientConfig,
39-
String ningAsyncHttpProviderClassName, org.asynchttpclient.AsyncHttpClientConfig ahcAsyncHttpClientConfig) {
34+
Integer readTimeout, HttpClient.Config httpClientConfig) {
4035
this.apiKey = apiKey;
4136
this.apiSecret = apiSecret;
4237
this.callback = callback;
@@ -48,9 +43,7 @@ public OAuthConfig(String apiKey, String apiSecret, String callback, SignatureTy
4843
this.userAgent = userAgent;
4944
this.connectTimeout = connectTimeout;
5045
this.readTimeout = readTimeout;
51-
this.ningAsyncHttpClientConfig = ningAsyncHttpClientConfig;
52-
this.ningAsyncHttpProviderClassName = ningAsyncHttpProviderClassName;
53-
this.ahcAsyncHttpClientConfig = ahcAsyncHttpClientConfig;
46+
this.httpClientConfig = httpClientConfig;
5447
}
5548

5649
public String getApiKey() {
@@ -104,15 +97,7 @@ public Integer getReadTimeout() {
10497
return readTimeout;
10598
}
10699

107-
public com.ning.http.client.AsyncHttpClientConfig getNingAsyncHttpClientConfig() {
108-
return ningAsyncHttpClientConfig;
109-
}
110-
111-
public String getNingAsyncHttpProviderClassName() {
112-
return ningAsyncHttpProviderClassName;
113-
}
114-
115-
public org.asynchttpclient.AsyncHttpClientConfig getAhcAsyncHttpClientConfig() {
116-
return ahcAsyncHttpClientConfig;
100+
public HttpClient.Config getHttpClientConfig() {
101+
return httpClientConfig;
117102
}
118103
}

0 commit comments

Comments
 (0)