summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjørn Christian Seime <bjorn.christian@seime.no>2017-04-25 15:36:16 +0200
committerGitHub <noreply@github.com>2017-04-25 15:36:16 +0200
commit575f2d7572ac68f9dfc6c6e0d4ea4240c3aac2e8 (patch)
treed8301e44ea340fdc8ab8f19be8f9c44b8cce883c
parent1db9d2d06e8b7ea59b48ffe2f87f1e176c807806 (diff)
parentbabbb6761aa7b923fb6e59fb045a02353e5c4f37 (diff)
Merge pull request #2269 from yahoo/bjorncs/upgrade-netty
Bjorncs/upgrade netty
-rw-r--r--application/src/main/java/com/yahoo/application/Application.java5
-rw-r--r--container-dev/pom.xml4
-rw-r--r--jdisc_http_service/src/main/java/com/yahoo/jdisc/http/Cookie.java13
-rw-r--r--jdisc_http_service/src/main/java/com/yahoo/jdisc/http/HttpRequest.java20
-rw-r--r--jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/JettyHttpServer.java4
-rw-r--r--jdisc_http_service/src/test/java/com/yahoo/jdisc/http/CookieTestCase.java27
-rw-r--r--jdisc_http_service/src/test/java/com/yahoo/jdisc/http/HttpRequestTestCase.java36
-rw-r--r--jdisc_http_service/src/test/java/com/yahoo/jdisc/http/server/jetty/HttpServerTest.java12
-rw-r--r--pom.xml7
9 files changed, 48 insertions, 80 deletions
diff --git a/application/src/main/java/com/yahoo/application/Application.java b/application/src/main/java/com/yahoo/application/Application.java
index cfcce72487b..5b91c8ff89c 100644
--- a/application/src/main/java/com/yahoo/application/Application.java
+++ b/application/src/main/java/com/yahoo/application/Application.java
@@ -20,7 +20,6 @@ import com.yahoo.search.rendering.Renderer;
import com.yahoo.text.StringUtilities;
import com.yahoo.text.Utf8;
import com.yahoo.vespa.model.VespaModel;
-import org.jboss.netty.channel.ChannelException;
import org.xml.sax.SAXException;
import java.io.File;
@@ -316,7 +315,7 @@ public final class Application implements AutoCloseable {
break;
} catch (Error e) { // the container thinks this is really serious, in this case is it not in the cause is a BindException
// catch bind error and reset container
- if (e.getCause() != null && e.getCause() instanceof ChannelException && e.getCause().getCause() != null && e.getCause().getCause() instanceof BindException) {
+ if (e.getCause() != null && e.getCause().getCause() != null && e.getCause().getCause() instanceof BindException) {
exception = (Exception) e.getCause().getCause();
com.yahoo.container.Container.resetInstance(); // this is needed to be able to recreate the container from config again
} else {
@@ -667,4 +666,4 @@ public final class Application implements AutoCloseable {
}
}
}
-} \ No newline at end of file
+}
diff --git a/container-dev/pom.xml b/container-dev/pom.xml
index c180780faf9..6d1833319dc 100644
--- a/container-dev/pom.xml
+++ b/container-dev/pom.xml
@@ -57,6 +57,10 @@
<artifactId>javax.servlet-api</artifactId>
</dependency>
<dependency>
+ <groupId>org.eclipse.jetty</groupId>
+ <artifactId>jetty-util</artifactId>
+ </dependency>
+ <dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
<classifier>no_aop</classifier>
diff --git a/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/Cookie.java b/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/Cookie.java
index 874bf35021b..8dcf61911dd 100644
--- a/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/Cookie.java
+++ b/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/Cookie.java
@@ -1,10 +1,6 @@
// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.jdisc.http;
-import org.jboss.netty.handler.codec.http.CookieDecoder;
-import org.jboss.netty.handler.codec.http.CookieEncoder;
-import org.jboss.netty.handler.codec.http.DefaultCookie;
-
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
@@ -14,6 +10,7 @@ import java.util.concurrent.TimeUnit;
/**
* @author <a href="mailto:einarmr@yahoo-inc.com">Einar M R Rosenvinge</a>
*/
+@SuppressWarnings("deprecation")
public class Cookie {
private final Set<Integer> ports = new HashSet<>();
@@ -240,10 +237,11 @@ public class Cookie {
}
private static String encodeCookies(Iterable<? extends Cookie> cookies, boolean server) {
- CookieEncoder encoder = new org.jboss.netty.handler.codec.http.CookieEncoder(server);
+ org.jboss.netty.handler.codec.http.CookieEncoder encoder =
+ new org.jboss.netty.handler.codec.http.CookieEncoder(server);
for (Cookie cookie : cookies) {
org.jboss.netty.handler.codec.http.Cookie nettyCookie =
- new DefaultCookie(String.valueOf(cookie.getName()), String.valueOf(cookie.getValue()));
+ new org.jboss.netty.handler.codec.http.DefaultCookie(String.valueOf(cookie.getName()), String.valueOf(cookie.getValue()));
nettyCookie.setComment(cookie.getComment());
nettyCookie.setCommentUrl(cookie.getCommentUrl());
nettyCookie.setDiscard(cookie.isDiscard());
@@ -260,7 +258,8 @@ public class Cookie {
}
private static List<Cookie> decodeCookies(String str) {
- CookieDecoder decoder = new CookieDecoder();
+ org.jboss.netty.handler.codec.http.CookieDecoder decoder =
+ new org.jboss.netty.handler.codec.http.CookieDecoder();
List<Cookie> ret = new LinkedList<>();
for (org.jboss.netty.handler.codec.http.Cookie nettyCookie : decoder.decode(str)) {
Cookie cookie = new Cookie();
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/main/java/com/yahoo/jdisc/http/server/jetty/JettyHttpServer.java b/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/JettyHttpServer.java
index 300cf13bfa6..837f21519f2 100644
--- a/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/JettyHttpServer.java
+++ b/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/JettyHttpServer.java
@@ -70,7 +70,6 @@ public class JettyHttpServer extends AbstractServerProvider {
String NAME_DIMENSION = "serverName";
String PORT_DIMENSION = "serverPort";
- String NUM_ACTIVE_REQUESTS = "serverNumActiveRequests";
String NUM_OPEN_CONNECTIONS = "serverNumOpenConnections";
String NUM_CONNECTIONS_OPEN_MAX = "serverConnectionsOpenMax";
String CONNECTION_DURATION_MAX = "serverConnectionDurationMax";
@@ -83,8 +82,6 @@ public class JettyHttpServer extends AbstractServerProvider {
String MANHATTAN_NUM_BYTES_SENT = "http.out.bytes";
String NUM_CONNECTIONS = "serverNumConnections";
- String NUM_CONNECTIONS_IDLE = "serverNumConnectionsIdle";
- String NUM_UNEXPECTED_DISCONNECTS = "serverNumUnexpectedDisconnects";
/* For historical reasons, these are all aliases for the same metric. 'jdisc.http' should ideally be the only one. */
String JDISC_HTTP_REQUESTS = "jdisc.http.requests";
@@ -96,7 +93,6 @@ public class JettyHttpServer extends AbstractServerProvider {
String NUM_SUCCESSFUL_WRITES = "serverNumSuccessfulResponseWrites";
String NUM_FAILED_WRITES = "serverNumFailedResponseWrites";
- String NETWORK_LATENCY = "serverNetworkLatency";
String TOTAL_SUCCESSFUL_LATENCY = "serverTotalSuccessfulResponseLatency";
String MANHATTAN_TOTAL_SUCCESSFUL_LATENCY = "http.latency";
String TOTAL_FAILED_LATENCY = "serverTotalFailedResponseLatency";
diff --git a/jdisc_http_service/src/test/java/com/yahoo/jdisc/http/CookieTestCase.java b/jdisc_http_service/src/test/java/com/yahoo/jdisc/http/CookieTestCase.java
index de2b0d453e6..eabec6cd9e9 100644
--- a/jdisc_http_service/src/test/java/com/yahoo/jdisc/http/CookieTestCase.java
+++ b/jdisc_http_service/src/test/java/com/yahoo/jdisc/http/CookieTestCase.java
@@ -1,8 +1,6 @@
// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.jdisc.http;
-import org.jboss.netty.handler.codec.http.CookieDecoder;
-import org.jboss.netty.handler.codec.http.DefaultCookie;
import org.testng.annotations.Test;
import java.util.Arrays;
@@ -23,12 +21,13 @@ import static org.testng.AssertJUnit.fail;
/**
* @author <a href="mailto:simon@yahoo-inc.com">Simon Thoresen Hult</a>
*/
+@SuppressWarnings("deprecation")
public class CookieTestCase {
@Test
public void requireThatDefaultValuesAreSane() {
- assertCookie(new DefaultCookie("foo", "bar"), new Cookie().setName("foo").setValue("bar"));
- assertCookie(new DefaultCookie("foo", "bar"), new Cookie("foo", "bar"));
+ assertCookie(new org.jboss.netty.handler.codec.http.DefaultCookie("foo", "bar"), new Cookie().setName("foo").setValue("bar"));
+ assertCookie(new org.jboss.netty.handler.codec.http.DefaultCookie("foo", "bar"), new Cookie("foo", "bar"));
}
@Test
@@ -134,20 +133,17 @@ public class CookieTestCase {
@Test
public void requireThatCookieCanBeEncoded() {
assertEncodeCookie(
- Collections.singletonList("$Version=1; foo.name=foo.value; $Path=path; $Domain=domain; $Port=\"69\""),
+ Collections.singletonList("foo.name=foo.value"),
Collections.singletonList(newCookie("foo")));
assertEncodeCookie(
- Arrays.asList("$Version=1; bar.name=bar.value; $Path=path; $Domain=domain; $Port=\"69\"",
- "$Version=1; foo.name=foo.value; $Path=path; $Domain=domain; $Port=\"69\""),
+ Collections.singletonList("bar.name=bar.value; foo.name=foo.value"),
Arrays.asList(newCookie("foo"), newCookie("bar")));
}
@Test
public void requireThatSetCookieCanBeEncoded() {
assertEncodeSetCookie(
- Collections.singletonList("foo.name=foo.value; Max-Age=0; Path=path; Domain=domain; Secure; " +
- "HTTPOnly; Comment=comment; Version=1; CommentURL=\"commentUrl\"; " +
- "Port=\"69\"; Discard"),
+ Collections.singletonList("foo.name=foo.value; Path=path; Domain=domain; Secure; HTTPOnly"),
Collections.singletonList(newCookie("foo")));
}
@@ -214,7 +210,7 @@ public class CookieTestCase {
@Test
public void requireThatCookieDecoderWorksForGenericValidCookies() {
- new CookieDecoder().decode("Y=v=1&n=8es5opih9ljtk&l=og0_iedeh0qqvqqr/o&p=m2g2rs6012000000&r=pv&lg=en-US&intl=" +
+ new org.jboss.netty.handler.codec.http.CookieDecoder().decode("Y=v=1&n=8es5opih9ljtk&l=og0_iedeh0qqvqqr/o&p=m2g2rs6012000000&r=pv&lg=en-US&intl=" +
"us&np=1; T=z=h.nzPBhSP4PBVd5JqacVnIbNjU1NAY2TjYzNzVOTjYzNzM0Mj&a=YAE&sk=DAALShmNQ" +
"vhoZV&ks=EAABsibvMK6ejwn0uUoS4rC9w--~E&d=c2wBTVRJeU13RXhPVEUwTURJNU9URTBNRFF6TlRJ" +
"NU5nLS0BYQFZQUUBZwE1VkNHT0w3VUVDTklJVEdRR1FXT0pOSkhEQQFzY2lkAWNOUnZIbEc3ZHZoVHlWZ" +
@@ -223,7 +219,7 @@ public class CookieTestCase {
@Test
public void requireThatCookieDecoderWorksForYInvalidCookies() {
- new CookieDecoder().decode("Y=v=1&n=77nkr5t7o4nqn&l=og0_iedeh0qqvqqr/o&p=m2g2rs6012000000&r=pv&lg=en-US&intl=" +
+ new org.jboss.netty.handler.codec.http.CookieDecoder().decode("Y=v=1&n=77nkr5t7o4nqn&l=og0_iedeh0qqvqqr/o&p=m2g2rs6012000000&r=pv&lg=en-US&intl=" +
"us&np=1; T=z=05nzPB0NP4PBN/n0gwc1AWGNjU1NAY2TjYzNzVOTjYzNzM0Mj&a=QAE&sk=DAA4R2svo" +
"osjIa&ks=EAAj3nBQFkN4ZmuhqFxJdNoaQ--~E&d=c2wBTVRJeU13RXhPVEUwTURJNU9URTBNRFF6TlRJ" +
"NU5nLS0BYQFRQUUBZwE1VkNHT0w3VUVDTklJVEdRR1FXT0pOSkhEQQFzY2lkAUpPalRXOEVsUDZrR3RHT" +
@@ -232,7 +228,7 @@ public class CookieTestCase {
@Test
public void requireThatCookieDecoderWorksForYValidCookies() {
- new CookieDecoder().decode("Y=v=1&n=3767k6te5aj2s&l=1v4u3001uw2ys00q0rw0qrw34q0x5s3u/o&p=030vvit012000000&iz=" +
+ new org.jboss.netty.handler.codec.http.CookieDecoder().decode("Y=v=1&n=3767k6te5aj2s&l=1v4u3001uw2ys00q0rw0qrw34q0x5s3u/o&p=030vvit012000000&iz=" +
"&r=pu&lg=en-US,it-IT,it&intl=it&np=1; T=z=m38yPBmLk3PBWvehTPBhBHYNU5OBjQ3NE5ONU5P" +
"NDY0NzU0M0&a=IAE&sk=DAAAx5URYgbhQ6&ks=EAA4rTgdlAGeMQmdYeM_VehGg--~E&d=c2wBTWprNUF" +
"UTXdNems1TWprNE16RXpNREl6TkRneAFhAUlBRQFnAUVJSlNMSzVRM1pWNVNLQVBNRkszQTRaWDZBAXNj" +
@@ -242,7 +238,7 @@ public class CookieTestCase {
@Test
public void requireThatCookieDecoderWorksForGenericInvalidCookies() {
- new CookieDecoder().decode("Y=v=1&n=e92s5cq8qbs6h&l=3kdb0f.3@i126be10b.d4j/o&p=m1f2qgmb13000107&r=g5&lg=en-US" +
+ new org.jboss.netty.handler.codec.http.CookieDecoder().decode("Y=v=1&n=e92s5cq8qbs6h&l=3kdb0f.3@i126be10b.d4j/o&p=m1f2qgmb13000107&r=g5&lg=en-US" +
"&intl=us; T=z=TXp3OBTrQ8OBFMcj3GBpFSyNk83TgY2MjMwN04zMDMw&a=YAE&sk=DAAVfaNwLeISrX" +
"&ks=EAAOeNNgY8c5hV8YzPYmnrW7w--~E&d=c2wBTVRnd09RRXhOVFEzTURrME56UTMBYQFZQUUBZwFMQ" +
"U5NT0Q2UjY2Q0I1STY0R0tKSUdVQVlRRQFvawFaVzAtAXRpcAFMTlRUdkMBenoBVFhwM09CQTdF&af=QU" +
@@ -282,7 +278,7 @@ public class CookieTestCase {
}
}
- private static void assertCookie(final DefaultCookie expected, final Cookie actual) {
+ private static void assertCookie(final org.jboss.netty.handler.codec.http.DefaultCookie expected, final Cookie actual) {
assertEquals(expected.getName(), actual.getName());
assertEquals(expected.getValue(), actual.getValue());
assertEquals(expected.getDomain(), actual.getDomain());
@@ -304,7 +300,6 @@ public class CookieTestCase {
cookie.setPath("path");
cookie.setComment("comment");
cookie.setCommentUrl("commentUrl");
- cookie.setMaxAge(69, TimeUnit.MILLISECONDS);
cookie.setVersion(2);
cookie.setSecure(true);
cookie.setHttpOnly(true);
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(),
diff --git a/jdisc_http_service/src/test/java/com/yahoo/jdisc/http/server/jetty/HttpServerTest.java b/jdisc_http_service/src/test/java/com/yahoo/jdisc/http/server/jetty/HttpServerTest.java
index 1fb1f3658ee..6416d11f523 100644
--- a/jdisc_http_service/src/test/java/com/yahoo/jdisc/http/server/jetty/HttpServerTest.java
+++ b/jdisc_http_service/src/test/java/com/yahoo/jdisc/http/server/jetty/HttpServerTest.java
@@ -353,21 +353,13 @@ public class HttpServerTest {
.setDiscard(true)
.setDomain(".localhost")
.setHttpOnly(true)
- .setMaxAge(5000, TimeUnit.SECONDS)
.setPath("/foopath")
.setSecure(true)
.setVersion(2)));
driver.client().get("/status.html")
.expectStatusCode(is(OK))
- .expectHeader("Set-Cookie", is("foo=bar; " +
- "Max-Age=5000; " +
- "Path=\"/foopath\"; " +
- "Domain=.localhost; " +
- "Secure; HTTPOnly; " +
- "Comment=\"comment yeah\"; " +
- "Version=1; " +
- "CommentURL=\"http://comment.yes/\"; " +
- "Discard"));
+ .expectHeader("Set-Cookie",
+ is("foo=bar; Path=/foopath; Domain=.localhost; Secure; HTTPOnly"));
assertThat(driver.close(), is(true));
}
diff --git a/pom.xml b/pom.xml
index f043c9e5f86..e7ba08b147d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -732,7 +732,7 @@
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty</artifactId>
- <version>3.6.10.Final</version>
+ <version>3.10.6.Final</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
@@ -882,6 +882,11 @@
<version>${jetty.version}</version>
</dependency>
<dependency>
+ <groupId>org.eclipse.jetty</groupId>
+ <artifactId>jetty-util</artifactId>
+ <version>${jetty.version}</version>
+ </dependency>
+ <dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-all</artifactId>
<version>1.3</version>