From e61e8d5062de28dee0c57707a1f478f2ce96aa53 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Mon, 6 Mar 2017 17:54:28 +0100 Subject: [PATCH] Upgrade to HtmlUnit 2.25 and Jackson 2.9 PR1 Includes Log4J 2.8.1 and Selenium 3.2 as well. Issue: SPR-15319 --- build.gradle | 14 +++---- .../htmlunit/HtmlUnitRequestBuilder.java | 37 ++++++++----------- .../DelegatingWebConnectionTests.java | 17 +++++---- .../htmlunit/HtmlUnitRequestBuilderTests.java | 30 +++++++-------- .../htmlunit/MockWebResponseBuilderTests.java | 7 ++-- 5 files changed, 50 insertions(+), 55 deletions(-) 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