Polish HtmlUnitRequestBuilder
This commit is contained in:
parent
93c07e76bc
commit
f3da7b810b
|
|
@ -42,6 +42,7 @@ import org.springframework.test.web.servlet.RequestBuilder;
|
|||
import org.springframework.test.web.servlet.SmartRequestBuilder;
|
||||
import org.springframework.test.web.servlet.request.RequestPostProcessor;
|
||||
import org.springframework.util.Assert;
|
||||
import org.springframework.util.ObjectUtils;
|
||||
import org.springframework.web.util.UriComponents;
|
||||
import org.springframework.web.util.UriComponentsBuilder;
|
||||
|
||||
|
|
@ -104,27 +105,27 @@ final class HtmlUnitRequestBuilder implements RequestBuilder, Mergeable {
|
|||
String httpMethod = this.webRequest.getHttpMethod().name();
|
||||
UriComponents uriComponents = uriComponents();
|
||||
|
||||
MockHttpServletRequest result = new HtmlUnitMockHttpServletRequest(servletContext, httpMethod,
|
||||
MockHttpServletRequest request = new HtmlUnitMockHttpServletRequest(servletContext, httpMethod,
|
||||
uriComponents.getPath());
|
||||
parent(result, this.parentBuilder);
|
||||
result.setServerName(uriComponents.getHost()); // needs to be first for additional headers
|
||||
authType(result);
|
||||
result.setCharacterEncoding(charset);
|
||||
content(result, charset);
|
||||
contextPath(result, uriComponents);
|
||||
contentType(result);
|
||||
cookies(result);
|
||||
headers(result);
|
||||
locales(result);
|
||||
servletPath(uriComponents, result);
|
||||
params(result, uriComponents);
|
||||
ports(uriComponents, result);
|
||||
result.setProtocol("HTTP/1.1");
|
||||
result.setQueryString(uriComponents.getQuery());
|
||||
result.setScheme(uriComponents.getScheme());
|
||||
pathInfo(uriComponents,result);
|
||||
parent(request, this.parentBuilder);
|
||||
request.setServerName(uriComponents.getHost()); // needs to be first for additional headers
|
||||
authType(request);
|
||||
request.setCharacterEncoding(charset);
|
||||
content(request, charset);
|
||||
contextPath(request, uriComponents);
|
||||
contentType(request);
|
||||
cookies(request);
|
||||
headers(request);
|
||||
locales(request);
|
||||
servletPath(uriComponents, request);
|
||||
params(request, uriComponents);
|
||||
ports(uriComponents, request);
|
||||
request.setProtocol("HTTP/1.1");
|
||||
request.setQueryString(uriComponents.getQuery());
|
||||
request.setScheme(uriComponents.getScheme());
|
||||
pathInfo(uriComponents,request);
|
||||
|
||||
return postProcess(result);
|
||||
return postProcess(request);
|
||||
}
|
||||
|
||||
private MockHttpServletRequest postProcess(MockHttpServletRequest request) {
|
||||
|
|
@ -137,12 +138,12 @@ final class HtmlUnitRequestBuilder implements RequestBuilder, Mergeable {
|
|||
return request;
|
||||
}
|
||||
|
||||
private void parent(MockHttpServletRequest result, RequestBuilder parent) {
|
||||
private void parent(MockHttpServletRequest request, RequestBuilder parent) {
|
||||
if (parent == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
MockHttpServletRequest parentRequest = parent.buildRequest(result.getServletContext());
|
||||
MockHttpServletRequest parentRequest = parent.buildRequest(request.getServletContext());
|
||||
|
||||
// session
|
||||
HttpSession parentSession = parentRequest.getSession(false);
|
||||
|
|
@ -151,7 +152,7 @@ final class HtmlUnitRequestBuilder implements RequestBuilder, Mergeable {
|
|||
while (attrNames.hasMoreElements()) {
|
||||
String attrName = attrNames.nextElement();
|
||||
Object attrValue = parentSession.getAttribute(attrName);
|
||||
result.getSession().setAttribute(attrName, attrValue);
|
||||
request.getSession().setAttribute(attrName, attrValue);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -162,7 +163,7 @@ final class HtmlUnitRequestBuilder implements RequestBuilder, Mergeable {
|
|||
Enumeration<String> attrValues = parentRequest.getHeaders(attrName);
|
||||
while (attrValues.hasMoreElements()) {
|
||||
String attrValue = attrValues.nextElement();
|
||||
result.addHeader(attrName, attrValue);
|
||||
request.addHeader(attrName, attrValue);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -171,20 +172,20 @@ final class HtmlUnitRequestBuilder implements RequestBuilder, Mergeable {
|
|||
for (Map.Entry<String, String[]> parentParam : parentParams.entrySet()) {
|
||||
String paramName = parentParam.getKey();
|
||||
String[] paramValues = parentParam.getValue();
|
||||
result.addParameter(paramName, paramValues);
|
||||
request.addParameter(paramName, paramValues);
|
||||
}
|
||||
|
||||
// cookie
|
||||
Cookie[] parentCookies = parentRequest.getCookies();
|
||||
if (parentCookies != null) {
|
||||
result.setCookies(parentCookies);
|
||||
if (!ObjectUtils.isEmpty(parentCookies)) {
|
||||
request.setCookies(parentCookies);
|
||||
}
|
||||
|
||||
// request attribute
|
||||
Enumeration<String> parentAttrNames = parentRequest.getAttributeNames();
|
||||
while (parentAttrNames.hasMoreElements()) {
|
||||
String parentAttrName = parentAttrNames.nextElement();
|
||||
result.setAttribute(parentAttrName, parentRequest.getAttribute(parentAttrName));
|
||||
request.setAttribute(parentAttrName, parentRequest.getAttribute(parentAttrName));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -214,32 +215,32 @@ final class HtmlUnitRequestBuilder implements RequestBuilder, Mergeable {
|
|||
}
|
||||
}
|
||||
|
||||
private void content(MockHttpServletRequest result, String charset) {
|
||||
private void content(MockHttpServletRequest request, String charset) {
|
||||
String requestBody = this.webRequest.getRequestBody();
|
||||
if (requestBody == null) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
result.setContent(requestBody.getBytes(charset));
|
||||
request.setContent(requestBody.getBytes(charset));
|
||||
}
|
||||
catch (UnsupportedEncodingException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
private void contentType(MockHttpServletRequest result) {
|
||||
private void contentType(MockHttpServletRequest request) {
|
||||
String contentType = header("Content-Type");
|
||||
result.setContentType(contentType == null ? MediaType.ALL_VALUE.toString() : contentType);
|
||||
request.setContentType(contentType == null ? MediaType.ALL_VALUE.toString() : contentType);
|
||||
}
|
||||
|
||||
private void contextPath(MockHttpServletRequest result, UriComponents uriComponents) {
|
||||
private void contextPath(MockHttpServletRequest request, UriComponents uriComponents) {
|
||||
if (this.contextPath == null) {
|
||||
List<String> pathSegments = uriComponents.getPathSegments();
|
||||
if (pathSegments.isEmpty()) {
|
||||
result.setContextPath("");
|
||||
request.setContextPath("");
|
||||
}
|
||||
else {
|
||||
result.setContextPath("/" + pathSegments.get(0));
|
||||
request.setContextPath("/" + pathSegments.get(0));
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
|
@ -247,14 +248,14 @@ final class HtmlUnitRequestBuilder implements RequestBuilder, Mergeable {
|
|||
throw new IllegalArgumentException(uriComponents.getPath() + " should start with contextPath "
|
||||
+ this.contextPath);
|
||||
}
|
||||
result.setContextPath(this.contextPath);
|
||||
request.setContextPath(this.contextPath);
|
||||
}
|
||||
}
|
||||
|
||||
private void cookies(MockHttpServletRequest result) {
|
||||
String cookieHeaderValue = header("Cookie");
|
||||
Cookie[] parentCookies = result.getCookies();
|
||||
private void cookies(MockHttpServletRequest request) {
|
||||
List<Cookie> cookies = new ArrayList<Cookie>();
|
||||
|
||||
String cookieHeaderValue = header("Cookie");
|
||||
if (cookieHeaderValue != null) {
|
||||
StringTokenizer tokens = new StringTokenizer(cookieHeaderValue, "=;");
|
||||
while (tokens.hasMoreTokens()) {
|
||||
|
|
@ -264,29 +265,32 @@ final class HtmlUnitRequestBuilder implements RequestBuilder, Mergeable {
|
|||
+ "'. Full cookie was " + cookieHeaderValue);
|
||||
}
|
||||
String cookieValue = tokens.nextToken().trim();
|
||||
processCookie(result, cookies, new Cookie(cookieName, cookieValue));
|
||||
processCookie(request, cookies, new Cookie(cookieName, cookieValue));
|
||||
}
|
||||
}
|
||||
|
||||
Set<com.gargoylesoftware.htmlunit.util.Cookie> managedCookies = this.webClient.getCookies(this.webRequest.getUrl());
|
||||
for (com.gargoylesoftware.htmlunit.util.Cookie cookie : managedCookies) {
|
||||
processCookie(result, cookies, new Cookie(cookie.getName(), cookie.getValue()));
|
||||
processCookie(request, cookies, new Cookie(cookie.getName(), cookie.getValue()));
|
||||
}
|
||||
|
||||
Cookie[] parentCookies = request.getCookies();
|
||||
if (parentCookies != null) {
|
||||
for (Cookie cookie : parentCookies) {
|
||||
cookies.add(cookie);
|
||||
}
|
||||
}
|
||||
if (!cookies.isEmpty()) {
|
||||
result.setCookies(cookies.toArray(new Cookie[0]));
|
||||
|
||||
if (!ObjectUtils.isEmpty(cookies)) {
|
||||
request.setCookies(cookies.toArray(new Cookie[cookies.size()]));
|
||||
}
|
||||
}
|
||||
|
||||
private void processCookie(MockHttpServletRequest result, List<Cookie> cookies, Cookie cookie) {
|
||||
private void processCookie(MockHttpServletRequest request, List<Cookie> cookies, Cookie cookie) {
|
||||
cookies.add(cookie);
|
||||
if ("JSESSIONID".equals(cookie.getName())) {
|
||||
result.setRequestedSessionId(cookie.getValue());
|
||||
result.setSession(httpSession(result, cookie.getValue()));
|
||||
request.setRequestedSessionId(cookie.getValue());
|
||||
request.setSession(httpSession(request, cookie.getValue()));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -302,9 +306,9 @@ final class HtmlUnitRequestBuilder implements RequestBuilder, Mergeable {
|
|||
return this.webRequest.getAdditionalHeaders().get(headerName);
|
||||
}
|
||||
|
||||
private void headers(MockHttpServletRequest result) {
|
||||
private void headers(MockHttpServletRequest request) {
|
||||
for (Entry<String, String> header : this.webRequest.getAdditionalHeaders().entrySet()) {
|
||||
result.addHeader(header.getKey(), header.getValue());
|
||||
request.addHeader(header.getKey(), header.getValue());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -340,25 +344,25 @@ final class HtmlUnitRequestBuilder implements RequestBuilder, Mergeable {
|
|||
request.getContextPath() + "/", null, request.isSecure(), true);
|
||||
}
|
||||
|
||||
private void locales(MockHttpServletRequest result) {
|
||||
private void locales(MockHttpServletRequest request) {
|
||||
String locale = header("Accept-Language");
|
||||
if (locale == null) {
|
||||
result.addPreferredLocale(Locale.getDefault());
|
||||
request.addPreferredLocale(Locale.getDefault());
|
||||
}
|
||||
else {
|
||||
String[] locales = locale.split(", ");
|
||||
for (int i = locales.length - 1; i >= 0; i--) {
|
||||
result.addPreferredLocale(parseLocale(locales[i]));
|
||||
request.addPreferredLocale(parseLocale(locales[i]));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void params(MockHttpServletRequest result, UriComponents uriComponents) {
|
||||
private void params(MockHttpServletRequest request, UriComponents uriComponents) {
|
||||
for (Entry<String, List<String>> values : uriComponents.getQueryParams().entrySet()) {
|
||||
String name = values.getKey();
|
||||
for (String value : values.getValue()) {
|
||||
try {
|
||||
result.addParameter(name, URLDecoder.decode(value, "UTF-8"));
|
||||
request.addParameter(name, URLDecoder.decode(value, "UTF-8"));
|
||||
}
|
||||
catch (UnsupportedEncodingException e) {
|
||||
throw new RuntimeException(e);
|
||||
|
|
@ -366,7 +370,7 @@ final class HtmlUnitRequestBuilder implements RequestBuilder, Mergeable {
|
|||
}
|
||||
}
|
||||
for (NameValuePair param : this.webRequest.getRequestParameters()) {
|
||||
result.addParameter(param.getName(), param.getValue());
|
||||
request.addParameter(param.getName(), param.getValue());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -387,35 +391,35 @@ final class HtmlUnitRequestBuilder implements RequestBuilder, Mergeable {
|
|||
return new Locale(language, country, qualifier);
|
||||
}
|
||||
|
||||
private void pathInfo(UriComponents uriComponents, MockHttpServletRequest result) {
|
||||
result.setPathInfo(null);
|
||||
private void pathInfo(UriComponents uriComponents, MockHttpServletRequest request) {
|
||||
request.setPathInfo(null);
|
||||
}
|
||||
|
||||
private void servletPath(MockHttpServletRequest result, String requestPath) {
|
||||
String servletPath = requestPath.substring(result.getContextPath().length());
|
||||
private void servletPath(MockHttpServletRequest request, String requestPath) {
|
||||
String servletPath = requestPath.substring(request.getContextPath().length());
|
||||
if ("".equals(servletPath)) {
|
||||
servletPath = null;
|
||||
}
|
||||
result.setServletPath(servletPath);
|
||||
request.setServletPath(servletPath);
|
||||
}
|
||||
|
||||
private void servletPath(UriComponents uriComponents, MockHttpServletRequest result) {
|
||||
if ("".equals(result.getPathInfo())) {
|
||||
result.setPathInfo(null);
|
||||
private void servletPath(UriComponents uriComponents, MockHttpServletRequest request) {
|
||||
if ("".equals(request.getPathInfo())) {
|
||||
request.setPathInfo(null);
|
||||
}
|
||||
servletPath(result, uriComponents.getPath());
|
||||
servletPath(request, uriComponents.getPath());
|
||||
}
|
||||
|
||||
private void ports(UriComponents uriComponents, MockHttpServletRequest result) {
|
||||
private void ports(UriComponents uriComponents, MockHttpServletRequest request) {
|
||||
int serverPort = uriComponents.getPort();
|
||||
result.setServerPort(serverPort);
|
||||
request.setServerPort(serverPort);
|
||||
if (serverPort == -1) {
|
||||
int portConnection = this.webRequest.getUrl().getDefaultPort();
|
||||
result.setLocalPort(serverPort);
|
||||
result.setRemotePort(portConnection);
|
||||
request.setLocalPort(serverPort);
|
||||
request.setRemotePort(portConnection);
|
||||
}
|
||||
else {
|
||||
result.setRemotePort(serverPort);
|
||||
request.setRemotePort(serverPort);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -457,8 +461,8 @@ final class HtmlUnitRequestBuilder implements RequestBuilder, Mergeable {
|
|||
}
|
||||
|
||||
public HttpSession getSession(boolean create) {
|
||||
HttpSession result = super.getSession(false);
|
||||
if (result == null && create) {
|
||||
HttpSession session = super.getSession(false);
|
||||
if (session == null && create) {
|
||||
HtmlUnitMockHttpSession newSession = new HtmlUnitMockHttpSession(this);
|
||||
setSession(newSession);
|
||||
newSession.setNew(true);
|
||||
|
|
@ -467,9 +471,9 @@ final class HtmlUnitRequestBuilder implements RequestBuilder, Mergeable {
|
|||
HtmlUnitRequestBuilder.this.sessions.put(sessionid, newSession);
|
||||
}
|
||||
addSessionCookie(this, sessionid);
|
||||
result = newSession;
|
||||
session = newSession;
|
||||
}
|
||||
return result;
|
||||
return session;
|
||||
}
|
||||
|
||||
public HttpSession getSession() {
|
||||
|
|
|
|||
Loading…
Reference in New Issue