diff options
author | Bjørn Christian Seime <bjorncs@yahoo-inc.com> | 2017-04-21 13:37:41 +0200 |
---|---|---|
committer | Bjørn Christian Seime <bjorncs@yahoo-inc.com> | 2017-04-24 22:00:35 +0200 |
commit | 086bac8f8df7f63a727ee0b7541f5d0cd09dc9a9 (patch) | |
tree | 5698466ab974a95f0acd0c4626f4c92a7c9cc333 /jdisc_http_service | |
parent | d646299293525c074f318eb57aa8c948204d558e (diff) |
Remove some netty usage in jdisc_http_service
Diffstat (limited to 'jdisc_http_service')
-rw-r--r-- | jdisc_http_service/src/main/java/com/yahoo/jdisc/http/HttpRequest.java | 20 | ||||
-rw-r--r-- | jdisc_http_service/src/test/java/com/yahoo/jdisc/http/HttpRequestTestCase.java | 36 |
2 files changed, 17 insertions, 39 deletions
diff --git a/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/HttpRequest.java b/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/HttpRequest.java index ff80a8a845d..6c4759915b2 100644 --- a/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/HttpRequest.java +++ b/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/HttpRequest.java @@ -9,12 +9,14 @@ import com.yahoo.jdisc.handler.RequestHandler; import com.yahoo.jdisc.handler.ResponseHandler; import com.yahoo.jdisc.http.servlet.ServletOrJdiscHttpRequest; import com.yahoo.jdisc.service.CurrentContainer; -import org.jboss.netty.handler.codec.http.QueryStringDecoder; +import org.eclipse.jetty.http.HttpURI; +import org.eclipse.jetty.util.MultiMap; import java.net.InetAddress; import java.net.InetSocketAddress; import java.net.SocketAddress; import java.net.URI; +import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.LinkedList; @@ -84,7 +86,7 @@ public class HttpRequest extends Request implements ServletOrJdiscHttpRequest { this.method = method; this.version = version; this.remoteAddress = remoteAddress; - this.parameters.putAll(new QueryStringDecoder(uri.toString(), true).getParameters()); + this.parameters.putAll(getUriQueryParameters(uri)); if (connectedAtMillis != null) { this.connectedAt = connectedAtMillis; } else { @@ -102,7 +104,7 @@ public class HttpRequest extends Request implements ServletOrJdiscHttpRequest { this.method = method; this.version = version; this.remoteAddress = null; - this.parameters.putAll(new QueryStringDecoder(uri.toString(), true).getParameters()); + this.parameters.putAll(getUriQueryParameters(uri)); this.connectedAt = creationTime(TimeUnit.MILLISECONDS); } catch (RuntimeException e) { release(); @@ -110,6 +112,18 @@ public class HttpRequest extends Request implements ServletOrJdiscHttpRequest { } } + private static Map<String, List<String>> getUriQueryParameters(URI uri) { + MultiMap<String> queryParameters = new MultiMap<>(); + new HttpURI(uri).decodeQueryTo(queryParameters); + + // Do a deep copy so we do not leak Jetty classes outside + Map<String, List<String>> deepCopiedQueryParameters = new HashMap<>(); + for (Map.Entry<String, List<String>> entry : queryParameters.entrySet()) { + deepCopiedQueryParameters.put(entry.getKey(), new ArrayList<>(entry.getValue())); + } + return deepCopiedQueryParameters; + } + public Method getMethod() { return method; } diff --git a/jdisc_http_service/src/test/java/com/yahoo/jdisc/http/HttpRequestTestCase.java b/jdisc_http_service/src/test/java/com/yahoo/jdisc/http/HttpRequestTestCase.java index 8f26d9c38b0..53291c850c2 100644 --- a/jdisc_http_service/src/test/java/com/yahoo/jdisc/http/HttpRequestTestCase.java +++ b/jdisc_http_service/src/test/java/com/yahoo/jdisc/http/HttpRequestTestCase.java @@ -4,9 +4,6 @@ package com.yahoo.jdisc.http; import com.yahoo.jdisc.Container; import com.yahoo.jdisc.Request; import com.yahoo.jdisc.service.CurrentContainer; -import org.jboss.netty.handler.codec.http.HttpHeaders; -import org.jboss.netty.handler.codec.http.HttpMethod; -import org.jboss.netty.handler.codec.http.HttpVersion; import org.testng.annotations.Test; import java.net.InetSocketAddress; @@ -30,27 +27,6 @@ import static org.testng.AssertJUnit.assertTrue; public class HttpRequestTestCase { @Test - public void requireThatMethodIsCompatibleWithNetty() { - assertMethod(HttpRequest.Method.OPTIONS, HttpMethod.OPTIONS); - assertMethod(HttpRequest.Method.GET, HttpMethod.GET); - assertMethod(HttpRequest.Method.HEAD, HttpMethod.HEAD); - assertMethod(HttpRequest.Method.POST, HttpMethod.POST); - assertMethod(HttpRequest.Method.PUT, HttpMethod.PUT); - assertMethod(HttpRequest.Method.PATCH, HttpMethod.PATCH); - assertMethod(HttpRequest.Method.DELETE, HttpMethod.DELETE); - assertMethod(HttpRequest.Method.TRACE, HttpMethod.TRACE); - assertMethod(HttpRequest.Method.CONNECT, HttpMethod.CONNECT); - assertEquals(9, HttpRequest.Method.values().length); - } - - @Test - public void requireThatVersionIsCompatibleWithNetty() { - assertVersion(HttpRequest.Version.HTTP_1_0, HttpVersion.HTTP_1_0); - assertVersion(HttpRequest.Version.HTTP_1_1, HttpVersion.HTTP_1_1); - assertEquals(2, HttpRequest.Version.values().length); - } - - @Test public void requireThatSimpleServerConstructorsUseReasonableDefaults() { final URI uri = URI.create("http://localhost/"); HttpRequest request = HttpRequest.newServerRequest(mockContainer(), uri); @@ -214,18 +190,6 @@ public class HttpRequestTestCase { assertEquals(cookies, request.decodeCookieHeader()); } - private static void assertMethod(final HttpRequest.Method discMethod, final HttpMethod nettyMethod) { - assertEquals(discMethod, HttpRequest.Method.valueOf(nettyMethod.getName())); - assertEquals(discMethod, HttpRequest.Method.valueOf(nettyMethod.toString())); - assertEquals(nettyMethod, HttpMethod.valueOf(discMethod.toString())); - } - - private static void assertVersion(final HttpRequest.Version discVersion, final HttpVersion nettyVersion) { - assertEquals(discVersion, HttpRequest.Version.fromString(nettyVersion.getText())); - assertEquals(discVersion, HttpRequest.Version.fromString(nettyVersion.toString())); - assertEquals(nettyVersion, HttpVersion.valueOf(discVersion.toString())); - } - private static HttpRequest newRequest(final HttpRequest.Version version) throws Exception { return HttpRequest.newServerRequest( mockContainer(), |