diff --git a/build.gradle b/build.gradle
index 74890fbe0db..4c445a34241 100644
--- a/build.gradle
+++ b/build.gradle
@@ -55,7 +55,7 @@ configure(allprojects) { project ->
 	ext.httpasyncVersion       = "4.1.3"
 	ext.httpclientVersion      = "4.5.3"
 	ext.interceptorApiVersion  = "1.2"
-	ext.jackson2Version        = "2.8.7"
+	ext.jackson2Version        = "2.9.0.pr1"
 	ext.javamailVersion        = "1.5.6"
 	ext.jaxbVersion            = "2.2.11"
 	ext.jaxwsVersion           = "2.2.11"
@@ -71,9 +71,8 @@ configure(allprojects) { project ->
 	ext.junitJupiterVersion    = '5.0.0-M3'
 	ext.junitPlatformVersion   = '1.0.0-M3'
 	ext.kotlinVersion          = "1.1.0"  // also change kotlin-gradle-plugin version when upgrading
-	ext.log4jVersion           = '2.8'
+	ext.log4jVersion           = '2.8.1'
 	ext.nettyVersion           = "4.1.8.Final"
-	ext.okhttpVersion          = "2.7.5"
 	ext.okhttp3Version         = "3.6.0"
 	ext.poiVersion             = "3.15"
 	ext.protobufVersion        = "3.1.0"
@@ -763,7 +762,6 @@ project("spring-web") {
 		optional("org.apache.httpcomponents:httpclient:${httpclientVersion}")
 		optional("org.apache.httpcomponents:httpasyncclient:${httpasyncVersion}")
 		optional("io.netty:netty-all:${nettyVersion}")
-		optional("com.squareup.okhttp:okhttp:${okhttpVersion}")
 		optional("com.squareup.okhttp3:okhttp:${okhttp3Version}")
 		optional("com.fasterxml.jackson.core:jackson-databind:${jackson2Version}")
 		optional("com.fasterxml.jackson.dataformat:jackson-dataformat-xml:${jackson2Version}")
@@ -972,7 +970,7 @@ project("spring-webmvc") {
 		testCompile("org.hibernate:hibernate-validator:${hibval5Version}")
 		testCompile("org.apache.httpcomponents:httpclient:${httpclientVersion}")
 		testCompile("commons-fileupload:commons-fileupload:${fileuploadVersion}")
-		testCompile("commons-io:commons-io:1.3")
+		testCompile("commons-io:commons-io:2.5")
 		testCompile("joda-time:joda-time:${jodaVersion}")
 		testCompile("org.slf4j:slf4j-jcl:${slf4jVersion}")
 		testCompile("org.mozilla:rhino:1.7.7.1")
@@ -1074,9 +1072,9 @@ project("spring-test") {
 		optional("org.codehaus.groovy:groovy-all:${groovyVersion}")
 		optional("org.hamcrest:hamcrest-core:${hamcrestVersion}")
 		optional("org.xmlunit:xmlunit-matchers:${xmlunitVersion}")
-		optional("net.sourceforge.htmlunit:htmlunit:2.24")
-		optional("org.seleniumhq.selenium:htmlunit-driver:2.24")
-		optional("org.seleniumhq.selenium:selenium-java:3.1.0") {
+		optional("net.sourceforge.htmlunit:htmlunit:2.25")
+		optional("org.seleniumhq.selenium:htmlunit-driver:2.25")
+		optional("org.seleniumhq.selenium:selenium-java:3.2.0") {
 			exclude group: "io.netty", module: "netty"
 		}
 		optional("org.skyscreamer:jsonassert:1.4.0")
diff --git a/spring-test/src/main/java/org/springframework/test/web/servlet/htmlunit/HtmlUnitRequestBuilder.java b/spring-test/src/main/java/org/springframework/test/web/servlet/htmlunit/HtmlUnitRequestBuilder.java
index 390d593f02e..3b97cd92ec7 100644
--- a/spring-test/src/main/java/org/springframework/test/web/servlet/htmlunit/HtmlUnitRequestBuilder.java
+++ b/spring-test/src/main/java/org/springframework/test/web/servlet/htmlunit/HtmlUnitRequestBuilder.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 the original author or authors.
+ * Copyright 2002-2017 the original author or authors.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -19,6 +19,8 @@ package org.springframework.test.web.servlet.htmlunit;
 import java.io.UnsupportedEncodingException;
 import java.net.URL;
 import java.net.URLDecoder;
+import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.Enumeration;
 import java.util.List;
@@ -59,7 +61,7 @@ import org.springframework.web.util.UriComponentsBuilder;
  * Internal class used to transform a {@link WebRequest} into a
  * {@link MockHttpServletRequest} using Spring MVC Test's {@link RequestBuilder}.
  *
- * 
By default the first path segment of the URL is used as the contextPath.
+ * 
By default the first path segment of the URL is used as the context path.
  * To override this default see {@link #setContextPath(String)}.
  *
  * @author Rob Winch
@@ -71,6 +73,7 @@ final class HtmlUnitRequestBuilder implements RequestBuilder, Mergeable {
 
 	private static final Pattern LOCALE_PATTERN = Pattern.compile("^\\s*(\\w{2})(?:-(\\w{2}))?(?:;q=(\\d+\\.\\d+))?$");
 
+
 	private final Map sessions;
 
 	private final WebClient webClient;
@@ -98,23 +101,23 @@ final class HtmlUnitRequestBuilder implements RequestBuilder, Mergeable {
 		Assert.notNull(sessions, "Sessions Map must not be null");
 		Assert.notNull(webClient, "WebClient must not be null");
 		Assert.notNull(webRequest, "WebRequest must not be null");
-
 		this.sessions = sessions;
 		this.webClient = webClient;
 		this.webRequest = webRequest;
 	}
 
+
 	public MockHttpServletRequest buildRequest(ServletContext servletContext) {
-		String charset = getCharset();
+		Charset charset = getCharset();
 		String httpMethod = this.webRequest.getHttpMethod().name();
 		UriComponents uriComponents = uriComponents();
 
 		MockHttpServletRequest request = new HtmlUnitMockHttpServletRequest(
 				servletContext, httpMethod, uriComponents.getPath());
 		parent(request, this.parentBuilder);
-		request.setServerName(uriComponents.getHost()); // needs to be first for additional headers
+		request.setServerName(uriComponents.getHost());  // needs to be first for additional headers
 		authType(request);
-		request.setCharacterEncoding(charset);
+		request.setCharacterEncoding(charset.name());
 		content(request, charset);
 		contextPath(request, uriComponents);
 		contentType(request);
@@ -132,6 +135,11 @@ final class HtmlUnitRequestBuilder implements RequestBuilder, Mergeable {
 		return postProcess(request);
 	}
 
+	private Charset getCharset() {
+		Charset charset = this.webRequest.getCharset();
+		return (charset != null ? charset : StandardCharsets.ISO_8859_1);
+	}
+
 	private MockHttpServletRequest postProcess(MockHttpServletRequest request) {
 		if (this.parentPostProcessor != null) {
 			request = this.parentPostProcessor.postProcessRequest(request);
@@ -220,17 +228,12 @@ final class HtmlUnitRequestBuilder implements RequestBuilder, Mergeable {
 		}
 	}
 
-	private void content(MockHttpServletRequest request, String charset) {
+	private void content(MockHttpServletRequest request, Charset charset) {
 		String requestBody = this.webRequest.getRequestBody();
 		if (requestBody == null) {
 			return;
 		}
-		try {
-			request.setContent(requestBody.getBytes(charset));
-		}
-		catch (UnsupportedEncodingException ex) {
-			throw new IllegalStateException(ex);
-		}
+		request.setContent(requestBody.getBytes(charset));
 	}
 
 	private void contentType(MockHttpServletRequest request) {
@@ -301,14 +304,6 @@ final class HtmlUnitRequestBuilder implements RequestBuilder, Mergeable {
 		}
 	}
 
-	private String getCharset() {
-		String charset = this.webRequest.getCharset();
-		if (charset == null) {
-			return "ISO-8859-1";
-		}
-		return charset;
-	}
-
 	private String header(String headerName) {
 		return this.webRequest.getAdditionalHeaders().get(headerName);
 	}
diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/htmlunit/DelegatingWebConnectionTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/htmlunit/DelegatingWebConnectionTests.java
index 1502944941e..261e8d560c2 100644
--- a/spring-test/src/test/java/org/springframework/test/web/servlet/htmlunit/DelegatingWebConnectionTests.java
+++ b/spring-test/src/test/java/org/springframework/test/web/servlet/htmlunit/DelegatingWebConnectionTests.java
@@ -56,6 +56,13 @@ import static org.mockito.Mockito.*;
 @RunWith(MockitoJUnitRunner.class)
 public class DelegatingWebConnectionTests {
 
+	private DelegatingWebConnection webConnection;
+
+	private WebRequest request;
+
+	private WebResponse expectedResponse;
+
+
 	@Mock
 	private WebRequestMatcher matcher1;
 
@@ -72,15 +79,8 @@ public class DelegatingWebConnectionTests {
 	private WebConnection connection2;
 
 
-	private DelegatingWebConnection webConnection;
-
-	private WebRequest request;
-
-	private WebResponse expectedResponse;
-
-
 	@Before
-	public void setUp() throws Exception {
+	public void setup() throws Exception {
 		request = new WebRequest(new URL("http://localhost/"));
 		WebResponseData data = new WebResponseData("".getBytes("UTF-8"), 200, "", Collections. emptyList());
 		expectedResponse = new WebResponse(data, request, 100L);
@@ -88,6 +88,7 @@ public class DelegatingWebConnectionTests {
 				new DelegateWebConnection(matcher1, connection1), new DelegateWebConnection(matcher2, connection2));
 	}
 
+
 	@Test
 	public void getResponseDefault() throws Exception {
 		when(defaultConnection.getResponse(request)).thenReturn(expectedResponse);
diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/htmlunit/HtmlUnitRequestBuilderTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/htmlunit/HtmlUnitRequestBuilderTests.java
index f3505e9f40e..94702c4329f 100644
--- a/spring-test/src/test/java/org/springframework/test/web/servlet/htmlunit/HtmlUnitRequestBuilderTests.java
+++ b/spring-test/src/test/java/org/springframework/test/web/servlet/htmlunit/HtmlUnitRequestBuilderTests.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 the original author or authors.
+ * Copyright 2002-2017 the original author or authors.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -18,6 +18,7 @@ package org.springframework.test.web.servlet.htmlunit;
 
 import java.net.MalformedURLException;
 import java.net.URL;
+import java.nio.charset.StandardCharsets;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
@@ -28,9 +29,12 @@ import javax.servlet.http.Cookie;
 import javax.servlet.http.HttpSession;
 
 import com.gargoylesoftware.htmlunit.FormEncodingType;
+import com.gargoylesoftware.htmlunit.HttpMethod;
+import com.gargoylesoftware.htmlunit.WebClient;
+import com.gargoylesoftware.htmlunit.WebRequest;
+import com.gargoylesoftware.htmlunit.util.NameValuePair;
 import org.apache.commons.io.IOUtils;
 import org.apache.http.auth.UsernamePasswordCredentials;
-
 import org.junit.Before;
 import org.junit.Test;
 
@@ -41,15 +45,10 @@ import org.springframework.test.util.ReflectionTestUtils;
 import org.springframework.test.web.servlet.MockMvc;
 import org.springframework.test.web.servlet.setup.MockMvcBuilders;
 
-import com.gargoylesoftware.htmlunit.HttpMethod;
-import com.gargoylesoftware.htmlunit.WebClient;
-import com.gargoylesoftware.htmlunit.WebRequest;
-import com.gargoylesoftware.htmlunit.util.NameValuePair;
-
-import static java.util.Arrays.asList;
+import static java.util.Arrays.*;
 import static org.hamcrest.Matchers.*;
-import static org.junit.Assert.assertThat;
-import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
+import static org.junit.Assert.*;
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
 
 /**
  * Unit tests for {@link HtmlUnitRequestBuilder}.
@@ -72,12 +71,13 @@ public class HtmlUnitRequestBuilderTests {
 
 
 	@Before
-	public void setUp() throws Exception {
+	public void setup() throws Exception {
 		webRequest = new WebRequest(new URL("http://example.com:80/test/this/here"));
 		webRequest.setHttpMethod(HttpMethod.GET);
 		requestBuilder = new HtmlUnitRequestBuilder(sessions, webClient, webRequest);
 	}
 
+
 	// --- constructor
 
 	@Test(expected = IllegalArgumentException.class)
@@ -95,6 +95,7 @@ public class HtmlUnitRequestBuilderTests {
 		new HtmlUnitRequestBuilder(sessions, webClient, null);
 	}
 
+
 	// --- buildRequest
 
 	@Test
@@ -114,12 +115,11 @@ public class HtmlUnitRequestBuilderTests {
 
 	@Test
 	public void buildRequestCharacterEncoding() {
-		String charset = "UTF-8";
-		webRequest.setCharset(charset);
+		webRequest.setCharset(StandardCharsets.UTF_8);
 
 		MockHttpServletRequest actualRequest = requestBuilder.buildRequest(servletContext);
 
-		assertThat(actualRequest.getCharacterEncoding(), equalTo(charset));
+		assertThat(actualRequest.getCharacterEncoding(), equalTo("UTF-8"));
 	}
 
 	@Test
@@ -151,7 +151,7 @@ public class HtmlUnitRequestBuilderTests {
 		assertThat(actualRequest.getHeader("Content-Type"), equalTo(contentType));
 	}
 
-	@Test // SPR-14916
+	@Test  // SPR-14916
 	public void buildRequestContentTypeWithFormSubmission() {
 		webRequest.setEncodingType(FormEncodingType.URL_ENCODED);
 
diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/htmlunit/MockWebResponseBuilderTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/htmlunit/MockWebResponseBuilderTests.java
index 29c83115c43..33ab3dd207c 100644
--- a/spring-test/src/test/java/org/springframework/test/web/servlet/htmlunit/MockWebResponseBuilderTests.java
+++ b/spring-test/src/test/java/org/springframework/test/web/servlet/htmlunit/MockWebResponseBuilderTests.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2016 the original author or authors.
+ * Copyright 2002-2017 the original author or authors.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -17,6 +17,7 @@
 package org.springframework.test.web.servlet.htmlunit;
 
 import java.net.URL;
+import java.nio.charset.StandardCharsets;
 import java.util.List;
 import javax.servlet.http.Cookie;
 
@@ -47,7 +48,7 @@ public class MockWebResponseBuilderTests {
 
 
 	@Before
-	public void setUp() throws Exception {
+	public void setup() throws Exception {
 		this.webRequest = new WebRequest(new URL("http://example.com:80/test/this/here"));
 		this.responseBuilder = new MockWebResponseBuilder(System.currentTimeMillis(), this.webRequest, this.response);
 	}
@@ -81,7 +82,7 @@ public class MockWebResponseBuilderTests {
 		this.response.addHeader("Content-Type", "text/html; charset=UTF-8");
 		WebResponse webResponse = this.responseBuilder.build();
 
-		assertThat(webResponse.getContentCharset(), equalTo("UTF-8"));
+		assertThat(webResponse.getContentCharset(), equalTo(StandardCharsets.UTF_8));
 	}
 
 	@Test