diff --git a/README.md b/README.md
index 2e3c85c54161613e0b6cd2c641cc18b062822e48..cf71ab81e18fb7333191e24251ae7fafa57a5e60 100644
--- a/README.md
+++ b/README.md
@@ -11,7 +11,7 @@ To utilize the GitLab API for Java in your project, simply add the following dep
```java
dependencies {
...
- compile group: 'org.gitlab4j', name: 'gitlab4j-api', version: '4.8.1'
+ compile group: 'org.gitlab4j', name: 'gitlab4j-api', version: '4.8.2'
}
```
@@ -20,7 +20,7 @@ dependencies {
org.gitlab4j
gitlab4j-api
- 4.8.1
+ 4.8.2
```
@@ -68,7 +68,20 @@ gitLabApi.sudo("johndoe")
// To turn off sudo mode
gitLabApi.unsudo();
```
-
+---
+## Connecting Through a Proxy Server
+As of GitLab4J-API 4.8.2 support has been added for connecting to the GitLab server using an HTTP proxy server:
+```java
+// Log in to the GitLab server using a proxy server (with basic auth on proxy)
+Map proxyConfiguration = ProxyClientConfig.createProxyClientConfig("http://your-proxy-server", "proxy-username", "proxy-password");
+GitLabApi gitLabApi = new GitLabApi("http://your.gitlab.server.com", "YOUR_PRIVATE_TOKEN", null, proxyConfiguration);
+```
+```java
+// Log in to the GitLab server using a proxy server (no auth on proxy)
+Map proxyConfiguration = ProxyClientConfig.createProxyClientConfig("http://your-proxy-server");
+GitLabApi gitLabApi = new GitLabApi("http://your.gitlab.server.com", "YOUR_PRIVATE_TOKEN", null, proxyConfiguration);
+```
+*NOTE: See the Javadoc on the GitLabApi class for a complete list of methods accepting the proxy configuration (clientConfiguration parameter)*
---
## GitLab API V3 and V4 Support
As of GitLab4J-API 4.2.0 support has been added for GitLab API V4. If your application requires GitLab API V3,
diff --git a/pom.xml b/pom.xml
index a8062bc292932867c4a002c2db753e6bd45513d5..a715c66be3ca1b19f0d43c9df927f49ddd9d8daf 100644
--- a/pom.xml
+++ b/pom.xml
@@ -222,6 +222,11 @@
jersey-client
${jersey.version}
+
+ org.glassfish.jersey.connectors
+ jersey-apache-connector
+ ${jersey.version}
+
javax.servlet
javax.servlet-api
diff --git a/src/main/java/org/gitlab4j/api/GitLabApiClient.java b/src/main/java/org/gitlab4j/api/GitLabApiClient.java
index fd82db1f3aabeae3d3d18407a6237e9de7fc8f37..5e4a493505cffd0ba48b6675be7136c9e0b628c3 100755
--- a/src/main/java/org/gitlab4j/api/GitLabApiClient.java
+++ b/src/main/java/org/gitlab4j/api/GitLabApiClient.java
@@ -29,6 +29,7 @@ import javax.ws.rs.core.Response;
import org.gitlab4j.api.Constants.TokenType;
import org.gitlab4j.api.GitLabApi.ApiVersion;
import org.gitlab4j.api.utils.JacksonJson;
+import org.glassfish.jersey.apache.connector.ApacheConnectorProvider;
import org.glassfish.jersey.client.ClientConfig;
import org.glassfish.jersey.client.ClientProperties;
@@ -211,6 +212,11 @@ public class GitLabApiClient {
clientConfig = new ClientConfig();
if (clientConfigProperties != null) {
+
+ if (clientConfigProperties.containsKey(ClientProperties.PROXY_URI)) {
+ clientConfig.connectorProvider(new ApacheConnectorProvider());
+ }
+
for (Map.Entry propertyEntry : clientConfigProperties.entrySet()) {
clientConfig.property(propertyEntry.getKey(), propertyEntry.getValue());
}
diff --git a/src/test/java/org/gitlab4j/api/TestGitLabApi.java b/src/test/java/org/gitlab4j/api/TestGitLabApi.java
index 8a782e1edaf1ee99493c41e695fa551176e47541..382ba9fa3cf705947c2ece7d9191f06f688dfdc3 100644
--- a/src/test/java/org/gitlab4j/api/TestGitLabApi.java
+++ b/src/test/java/org/gitlab4j/api/TestGitLabApi.java
@@ -3,7 +3,8 @@ package org.gitlab4j.api;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assume.assumeTrue;
-import org.gitlab4j.api.GitLabApi.ApiVersion;
+import java.util.Map;
+
import org.gitlab4j.api.models.Version;
import org.junit.Before;
import org.junit.BeforeClass;
@@ -23,9 +24,15 @@ public class TestGitLabApi {
// The following needs to be set to your test repository
private static final String TEST_HOST_URL;
private static final String TEST_PRIVATE_TOKEN;
+ private static final String TEST_PROXY_URI;
+ private static final String TEST_PROXY_USERNAME;
+ private static final String TEST_PROXY_PASSWORD;
static {
TEST_HOST_URL = TestUtils.getProperty("TEST_HOST_URL");
TEST_PRIVATE_TOKEN = TestUtils.getProperty("TEST_PRIVATE_TOKEN");
+ TEST_PROXY_URI = TestUtils.getProperty("TEST_PROXY_URI");
+ TEST_PROXY_USERNAME = TestUtils.getProperty("TEST_PROXY_USERNAME");
+ TEST_PROXY_PASSWORD = TestUtils.getProperty("TEST_PROXY_PASSWORD");
}
private static GitLabApi gitLabApi;
@@ -47,7 +54,7 @@ public class TestGitLabApi {
}
if (problems.isEmpty()) {
- gitLabApi = new GitLabApi(ApiVersion.V4, TEST_HOST_URL, TEST_PRIVATE_TOKEN);
+ gitLabApi = new GitLabApi(TEST_HOST_URL, TEST_PRIVATE_TOKEN);
} else {
System.err.print(problems);
}
@@ -66,4 +73,19 @@ public class TestGitLabApi {
assertNotNull(version.getVersion());
assertNotNull(version.getRevision());
}
+
+ @Test
+ public void testProxyConnection() throws GitLabApiException {
+ assumeTrue(TEST_PROXY_URI != null && TEST_PROXY_USERNAME != null && TEST_PROXY_PASSWORD != null);
+
+ // Setup a GitLabApi instance to use a proxy
+ Map clientConfig = ProxyClientConfig.createProxyClientConfig(TEST_PROXY_URI, TEST_PROXY_USERNAME, TEST_PROXY_PASSWORD);
+ GitLabApi gitLabApi = new GitLabApi(TEST_HOST_URL, TEST_PRIVATE_TOKEN, null, clientConfig);
+
+ Version version = gitLabApi.getVersion();
+ assertNotNull(version);
+ System.out.format("version=%s, revision=%s%n", version.getVersion(), version.getRevision());
+ assertNotNull(version.getVersion());
+ assertNotNull(version.getRevision());
+ }
}