Upgrade to HtmlUnit 2.25 and Jackson 2.9 PR1
Includes Log4J 2.8.1 and Selenium 3.2 as well. Issue: SPR-15319
This commit is contained in:
		
							parent
							
								
									47c4cf7abf
								
							
						
					
					
						commit
						e61e8d5062
					
				
							
								
								
									
										14
									
								
								build.gradle
								
								
								
								
							
							
						
						
									
										14
									
								
								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")
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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}.
 | 
			
		||||
 *
 | 
			
		||||
 * <p>By default the first path segment of the URL is used as the contextPath.
 | 
			
		||||
 * <p>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<String, MockHttpSession> 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);
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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.<NameValuePair> 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);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue