diff --git a/services/git-bridge/pom.xml b/services/git-bridge/pom.xml index 74eaefe50d..07db011f45 100644 --- a/services/git-bridge/pom.xml +++ b/services/git-bridge/pom.xml @@ -12,20 +12,18 @@ - maven-compiler-plugin - 3.7.0 + 3.2 1.8 1.8 - maven-assembly-plugin - 3.1.0 + 2.5.2 package @@ -48,141 +46,123 @@ - junit junit 4.12 test - org.jmock jmock-junit4 - 2.8.4 + 2.8.2 test - org.eclipse.jetty jetty-servlet - 9.4.8.v20171121 + 9.3.9.v20160517 - org.eclipse.jetty jetty-server - 9.4.8.v20171121 + 9.3.9.v20160517 - com.google.code.gson gson - 2.8.2 + 2.6.2 - - org.asynchttpclient + com.ning async-http-client - 2.3.0 + 1.9.38 - org.eclipse.jgit org.eclipse.jgit - 4.10.0.201712302008-r + 4.4.1.201607150455-r - org.eclipse.jgit org.eclipse.jgit.http.server - 4.10.0.201712302008-r + 4.4.1.201607150455-r - org.xerial sqlite-jdbc - 3.21.0.1 + 3.8.11.2 - joda-time joda-time - 2.9.9 + 2.9.4 - com.google.oauth-client google-oauth-client - 1.23.0 + 1.22.0 - com.google.http-client google-http-client - 1.23.0 + 1.22.0 - com.google.http-client google-http-client-gson - 1.23.0 + 1.22.0 - - org.apache.commons - commons-lang3 - 3.7 + commons-lang + commons-lang + 2.6 - ch.qos.logback logback-classic - 1.2.3 + 1.1.7 - com.google.guava guava - 24.0-jre + 19.0 - org.mock-server mockserver-netty - 5.3.0 + 3.10.4 test org.mockito mockito-core - 2.13.0 - test + 1.10.19 com.amazonaws aws-java-sdk - 1.11.274 + 1.11.28 org.apache.httpcomponents httpclient - 4.5.5 + 4.5.2 commons-io commons-io - 2.6 + 2.5 org.apache.commons commons-compress - 1.15 + 1.12 diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/resource/UrlResourceCache.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/resource/UrlResourceCache.java index e3c7911b6e..9a2c72a548 100644 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/resource/UrlResourceCache.java +++ b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/resource/UrlResourceCache.java @@ -1,6 +1,6 @@ package uk.ac.ic.wlgitbridge.bridge.resource; -import static org.asynchttpclient.Dsl.*; +import com.ning.http.client.AsyncHttpClient; import uk.ac.ic.wlgitbridge.bridge.db.DBStore; import uk.ac.ic.wlgitbridge.data.filestore.RawFile; import uk.ac.ic.wlgitbridge.data.filestore.RepositoryFile; @@ -31,7 +31,7 @@ public class UrlResourceCache implements ResourceCache { } public UrlResourceCache(DBStore dbStore) { - this(dbStore, new NingHttpClient(asyncHttpClient())); + this(dbStore, new NingHttpClient(new AsyncHttpClient())); } @Override @@ -82,7 +82,8 @@ public class UrlResourceCache implements ResourceCache { Log.info("GET -> " + url); try { contents = http.get(url, hs -> { - List contentLengths = hs.getAll("Content-Length"); + List contentLengths + = hs.getHeaders().get("Content-Length"); if (!maxFileSize.isPresent()) { return true; } diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/swap/store/S3SwapStore.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/swap/store/S3SwapStore.java index 44d823aa8c..ed1e379a7b 100644 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/swap/store/S3SwapStore.java +++ b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/swap/store/S3SwapStore.java @@ -1,9 +1,8 @@ package uk.ac.ic.wlgitbridge.bridge.swap.store; -import com.amazonaws.auth.AWSStaticCredentialsProvider; import com.amazonaws.auth.BasicAWSCredentials; import com.amazonaws.services.s3.AmazonS3; -import com.amazonaws.services.s3.AmazonS3ClientBuilder; +import com.amazonaws.services.s3.AmazonS3Client; import com.amazonaws.services.s3.model.*; import java.io.InputStream; @@ -30,7 +29,7 @@ public class S3SwapStore implements SwapStore { String secret, String bucketName ) { - s3 = AmazonS3ClientBuilder.standard().withCredentials(new AWSStaticCredentialsProvider(new BasicAWSCredentials(accessKey, secret))).build(); + s3 = new AmazonS3Client(new BasicAWSCredentials(accessKey, secret)); this.bucketName = bucketName; } diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/io/http/ning/NingHttpClient.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/io/http/ning/NingHttpClient.java index 41c4bc73f3..b9f3d215ff 100644 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/io/http/ning/NingHttpClient.java +++ b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/io/http/ning/NingHttpClient.java @@ -1,7 +1,6 @@ package uk.ac.ic.wlgitbridge.io.http.ning; -import io.netty.handler.codec.http.HttpHeaders; -import org.asynchttpclient.*; +import com.ning.http.client.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import uk.ac.ic.wlgitbridge.util.FunctionT; @@ -24,7 +23,7 @@ public class NingHttpClient implements NingHttpClientFacade { @Override public byte[] get( String url, - FunctionT handler + FunctionT handler ) throws ExecutionException { try { return http @@ -34,19 +33,19 @@ public class NingHttpClient implements NingHttpClientFacade { ByteArrayOutputStream bytes = new ByteArrayOutputStream(); @Override - public State onHeadersReceived( - HttpHeaders headers + public STATE onHeadersReceived( + HttpResponseHeaders headers ) throws E { return handler.apply(headers) - ? State.CONTINUE : State.ABORT; + ? STATE.CONTINUE : STATE.ABORT; } @Override - public State onBodyPartReceived( + public STATE onBodyPartReceived( HttpResponseBodyPart content ) throws IOException { bytes.write(content.getBodyPartBytes()); - return State.CONTINUE; + return STATE.CONTINUE; } @Override diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/io/http/ning/NingHttpClientFacade.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/io/http/ning/NingHttpClientFacade.java index 2d1e0b3744..f0bf4c3770 100644 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/io/http/ning/NingHttpClientFacade.java +++ b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/io/http/ning/NingHttpClientFacade.java @@ -1,6 +1,6 @@ package uk.ac.ic.wlgitbridge.io.http.ning; -import io.netty.handler.codec.http.HttpHeaders; +import com.ning.http.client.HttpResponseHeaders; import uk.ac.ic.wlgitbridge.util.FunctionT; import java.util.concurrent.ExecutionException; @@ -16,7 +16,7 @@ public interface NingHttpClientFacade { */ byte[] get( String url, - FunctionT handler + FunctionT handler ) throws ExecutionException; } diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/io/http/ning/NingHttpHeaders.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/io/http/ning/NingHttpHeaders.java new file mode 100644 index 0000000000..69093f37c4 --- /dev/null +++ b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/io/http/ning/NingHttpHeaders.java @@ -0,0 +1,46 @@ +package uk.ac.ic.wlgitbridge.io.http.ning; + +import com.ning.http.client.FluentCaseInsensitiveStringsMap; +import com.ning.http.client.HttpResponseHeaders; + +import java.util.*; + +public class NingHttpHeaders extends HttpResponseHeaders { + + private final FluentCaseInsensitiveStringsMap map; + + private NingHttpHeaders(FluentCaseInsensitiveStringsMap map) { + this.map = map; + } + + public static NingHttpHeadersBuilder builder() { + return new NingHttpHeadersBuilder(); + } + + @Override + public FluentCaseInsensitiveStringsMap getHeaders() { + return map; + } + + public static class NingHttpHeadersBuilder { + + private final Map> map; + + private NingHttpHeadersBuilder() { + map = new HashMap<>(); + } + + public NingHttpHeadersBuilder addHeader(String key, String... values) { + map.computeIfAbsent(key, __ -> new ArrayList<>()) + .addAll(Arrays.asList(values)); + return this; + } + + public NingHttpHeaders build() { + return new NingHttpHeaders( + new FluentCaseInsensitiveStringsMap(map)); + } + + } + +} diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/snapshot/base/Request.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/snapshot/base/Request.java index 34fabb794e..9316eb667b 100644 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/snapshot/base/Request.java +++ b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/snapshot/base/Request.java @@ -3,8 +3,7 @@ package uk.ac.ic.wlgitbridge.snapshot.base; import com.google.api.client.http.*; import com.google.gson.JsonElement; import com.google.gson.JsonObject; -import org.asynchttpclient.AsyncHttpClient; -import static org.asynchttpclient.Dsl.*; +import com.ning.http.client.AsyncHttpClient; import uk.ac.ic.wlgitbridge.snapshot.exception.FailedConnectionException; import uk.ac.ic.wlgitbridge.util.Instance; import uk.ac.ic.wlgitbridge.util.Log; @@ -18,7 +17,7 @@ import java.util.concurrent.*; */ public abstract class Request { - public static final AsyncHttpClient httpClient = asyncHttpClient(); + public static final AsyncHttpClient httpClient = new AsyncHttpClient(); private static final Executor executor = Executors.newCachedThreadPool(); diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/snapshot/servermock/server/PostbackThread.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/snapshot/servermock/server/PostbackThread.java index c3559552ed..a20bfd6ecf 100644 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/snapshot/servermock/server/PostbackThread.java +++ b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/snapshot/servermock/server/PostbackThread.java @@ -2,7 +2,7 @@ package uk.ac.ic.wlgitbridge.snapshot.servermock.server; import com.google.gson.Gson; import com.google.gson.JsonObject; -import static org.asynchttpclient.Dsl.*; +import com.ning.http.client.AsyncHttpClient; import uk.ac.ic.wlgitbridge.util.Log; import java.io.IOException; @@ -30,9 +30,17 @@ public class PostbackThread extends Thread { @Override public void run() { try { - asyncHttpClient().preparePost( + new AsyncHttpClient().preparePost( url ).setBody(postback).execute().get().getResponseBody(); + } catch (IOException e) { + Log.warn( + "IOException on postback, url: " + + url + + ", postback: " + + postback, + e + ); } catch (InterruptedException e) { Log.warn( "Interrupted on postback, url: " + diff --git a/services/git-bridge/src/test/java/uk/ac/ic/wlgitbridge/application/WLGitBridgeIntegrationTest.java b/services/git-bridge/src/test/java/uk/ac/ic/wlgitbridge/application/WLGitBridgeIntegrationTest.java index dba7989362..cd103fca5b 100644 --- a/services/git-bridge/src/test/java/uk/ac/ic/wlgitbridge/application/WLGitBridgeIntegrationTest.java +++ b/services/git-bridge/src/test/java/uk/ac/ic/wlgitbridge/application/WLGitBridgeIntegrationTest.java @@ -1,9 +1,9 @@ package uk.ac.ic.wlgitbridge.application; +import com.ning.http.client.AsyncHttpClient; +import com.ning.http.client.Response; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; -import static org.asynchttpclient.Dsl.*; -import org.asynchttpclient.*; import org.eclipse.jgit.api.errors.GitAPIException; import org.junit.Before; import org.junit.Rule; @@ -613,22 +613,22 @@ public class WLGitBridgeIntegrationTest { // With no key, we should get a 404. String url = "http://127.0.0.1:" + gitBridgePort + "/api/testproj/push.tex"; - Response response = asyncHttpClient().prepareGet(url).execute().get(); + Response response = new AsyncHttpClient().prepareGet(url).execute().get(); assertEquals(404, response.getStatusCode()); // With an invalid project and no key, we should get a 404. url = "http://127.0.0.1:" + gitBridgePort + "/api/notavalidproject/push.tex"; - response = asyncHttpClient().prepareGet(url).execute().get(); + response = new AsyncHttpClient().prepareGet(url).execute().get(); assertEquals(404, response.getStatusCode()); // With a bad key for a valid project, we should get a 404. url = "http://127.0.0.1:" + gitBridgePort + "/api/testproj/push.tex?key=notavalidkey"; - response = asyncHttpClient().prepareGet(url).execute().get(); + response = new AsyncHttpClient().prepareGet(url).execute().get(); assertEquals(404, response.getStatusCode()); // With a bad key for an invalid project, we should get a 404. url = "http://127.0.0.1:" + gitBridgePort + "/api/notavalidproject/push.tex?key=notavalidkey"; - response = asyncHttpClient().prepareGet(url).execute().get(); + response = new AsyncHttpClient().prepareGet(url).execute().get(); assertEquals(404, response.getStatusCode()); wlgb.stop(); @@ -719,14 +719,14 @@ public class WLGitBridgeIntegrationTest { // With an invalid project and no key, we should get a 404, // which is rendered by our custom error handler. String url = "http://127.0.0.1:" + gitBridgePort + "/api/notavalidproject/main.tex"; - Response response = asyncHttpClient().prepareGet(url).execute().get(); + Response response = new AsyncHttpClient().prepareGet(url).execute().get(); assertEquals(404, response.getStatusCode()); assertEquals("{\"message\":\"HTTP error 404\"}", response.getResponseBody()); // With an unsupported URL outside the api, we should get a 500, // which is rendered by our custom error handler. url = "http://127.0.0.1:" + gitBridgePort + "/foo"; - response = asyncHttpClient().prepareGet(url).execute().get(); + response = new AsyncHttpClient().prepareGet(url).execute().get(); assertEquals(500, response.getStatusCode()); assertEquals("{\"message\":\"HTTP error 500\"}", response.getResponseBody()); diff --git a/services/git-bridge/src/test/java/uk/ac/ic/wlgitbridge/bridge/resource/UrlResourceCacheTest.java b/services/git-bridge/src/test/java/uk/ac/ic/wlgitbridge/bridge/resource/UrlResourceCacheTest.java index e6a93d8a30..c58165c3ea 100644 --- a/services/git-bridge/src/test/java/uk/ac/ic/wlgitbridge/bridge/resource/UrlResourceCacheTest.java +++ b/services/git-bridge/src/test/java/uk/ac/ic/wlgitbridge/bridge/resource/UrlResourceCacheTest.java @@ -1,12 +1,12 @@ package uk.ac.ic.wlgitbridge.bridge.resource; -import io.netty.handler.codec.http.HttpHeaders; -import io.netty.handler.codec.http.DefaultHttpHeaders; +import com.ning.http.client.HttpResponseHeaders; import org.junit.Test; import uk.ac.ic.wlgitbridge.bridge.db.noop.NoopDbStore; import uk.ac.ic.wlgitbridge.bridge.util.CastUtil; import uk.ac.ic.wlgitbridge.git.exception.SizeLimitExceededException; import uk.ac.ic.wlgitbridge.io.http.ning.NingHttpClientFacade; +import uk.ac.ic.wlgitbridge.io.http.ning.NingHttpHeaders; import uk.ac.ic.wlgitbridge.util.FunctionT; import java.io.IOException; @@ -31,8 +31,11 @@ public class UrlResourceCacheTest { private final UrlResourceCache cache = new UrlResourceCache(new NoopDbStore(), http); - private static HttpHeaders withContentLength(long cl) { - return new DefaultHttpHeaders().add("Content-Length", String.valueOf(cl)); + private static HttpResponseHeaders withContentLength(long cl) { + return NingHttpHeaders + .builder() + .addHeader("Content-Length", String.valueOf(cl)) + .build(); } private void respondWithContentLength(long cl, long actual) @@ -41,7 +44,7 @@ public class UrlResourceCacheTest { Object[] args = invoc.getArguments(); //noinspection unchecked ((FunctionT< - HttpHeaders, Boolean, SizeLimitExceededException + HttpResponseHeaders, Boolean, SizeLimitExceededException >) args[1]).apply(withContentLength(cl)); return new byte[CastUtil.assumeInt(actual)]; });