diff --git a/spring-oxm/src/main/java/org/springframework/oxm/jibx/JibxMarshaller.java b/spring-oxm/src/main/java/org/springframework/oxm/jibx/JibxMarshaller.java index 860d79125ea..ebbf583b45c 100644 --- a/spring-oxm/src/main/java/org/springframework/oxm/jibx/JibxMarshaller.java +++ b/spring-oxm/src/main/java/org/springframework/oxm/jibx/JibxMarshaller.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2014 the original author or authors. + * Copyright 2002-2015 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. @@ -236,7 +236,7 @@ public class JibxMarshaller extends AbstractMarshaller implements InitializingBe @Override public boolean supports(Class clazz) { - Assert.notNull(clazz, "'clazz' must not be null"); + Assert.notNull(clazz, "Class must not be null"); if (this.targetClass != null) { return this.targetClass.equals(clazz); } diff --git a/spring-test/src/main/java/org/springframework/test/web/client/MockMvcClientHttpRequestFactory.java b/spring-test/src/main/java/org/springframework/test/web/client/MockMvcClientHttpRequestFactory.java index f0221f59c4c..7c7b6115edd 100644 --- a/spring-test/src/main/java/org/springframework/test/web/client/MockMvcClientHttpRequestFactory.java +++ b/spring-test/src/main/java/org/springframework/test/web/client/MockMvcClientHttpRequestFactory.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2015 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. @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package org.springframework.test.web.client; import java.io.IOException; @@ -52,7 +53,6 @@ public class MockMvcClientHttpRequestFactory implements ClientHttpRequestFactory @Override public ClientHttpRequest createRequest(final URI uri, final HttpMethod httpMethod) throws IOException { return new MockClientHttpRequest(httpMethod, uri) { - @Override public ClientHttpResponse executeInternal() throws IOException { try { diff --git a/spring-test/src/main/java/org/springframework/test/web/client/RequestMatcher.java b/spring-test/src/main/java/org/springframework/test/web/client/RequestMatcher.java index e59d48b5f26..bc169f4881c 100644 --- a/spring-test/src/main/java/org/springframework/test/web/client/RequestMatcher.java +++ b/spring-test/src/main/java/org/springframework/test/web/client/RequestMatcher.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2015 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. @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package org.springframework.test.web.client; import java.io.IOException; @@ -29,7 +30,6 @@ public interface RequestMatcher { /** * Match the given request against some expectations. - * * @param request the request to make assertions on * @throws IOException in case of I/O errors * @throws AssertionError if expectations are not met diff --git a/spring-test/src/main/java/org/springframework/test/web/client/RequestMatcherClientHttpRequest.java b/spring-test/src/main/java/org/springframework/test/web/client/RequestMatcherClientHttpRequest.java index 62fe91c25d4..1a01328bdd3 100644 --- a/spring-test/src/main/java/org/springframework/test/web/client/RequestMatcherClientHttpRequest.java +++ b/spring-test/src/main/java/org/springframework/test/web/client/RequestMatcherClientHttpRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2014 the original author or authors. + * Copyright 2002-2015 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. @@ -46,6 +46,7 @@ class RequestMatcherClientHttpRequest extends MockAsyncClientHttpRequest impleme this.requestMatchers.add(requestMatcher); } + @Override public ResponseActions andExpect(RequestMatcher requestMatcher) { Assert.notNull(requestMatcher, "RequestMatcher is required"); @@ -61,22 +62,19 @@ class RequestMatcherClientHttpRequest extends MockAsyncClientHttpRequest impleme @Override public ClientHttpResponse executeInternal() throws IOException { - if (this.requestMatchers.isEmpty()) { throw new AssertionError("No request expectations to execute"); } if (this.responseCreator == null) { - throw new AssertionError("No ResponseCreator was set up. Add it after request expectations, " - + "e.g. MockRestServiceServer.expect(requestTo(\"/foo\")).andRespond(withSuccess())"); + throw new AssertionError("No ResponseCreator was set up. Add it after request expectations, " + + "e.g. MockRestServiceServer.expect(requestTo(\"/foo\")).andRespond(withSuccess())"); } for (RequestMatcher requestMatcher : this.requestMatchers) { requestMatcher.match(this); } - setResponse(this.responseCreator.createResponse(this)); - return super.executeInternal(); } diff --git a/spring-test/src/main/java/org/springframework/test/web/client/ResponseActions.java b/spring-test/src/main/java/org/springframework/test/web/client/ResponseActions.java index 500e1574b19..440202fb01a 100644 --- a/spring-test/src/main/java/org/springframework/test/web/client/ResponseActions.java +++ b/spring-test/src/main/java/org/springframework/test/web/client/ResponseActions.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2015 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. @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package org.springframework.test.web.client; /** diff --git a/spring-test/src/main/java/org/springframework/test/web/client/ResponseCreator.java b/spring-test/src/main/java/org/springframework/test/web/client/ResponseCreator.java index 6fc61586524..d7703bc95a5 100644 --- a/spring-test/src/main/java/org/springframework/test/web/client/ResponseCreator.java +++ b/spring-test/src/main/java/org/springframework/test/web/client/ResponseCreator.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2015 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. @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package org.springframework.test.web.client; import java.io.IOException; diff --git a/spring-web/src/main/java/org/springframework/http/HttpHeaders.java b/spring-web/src/main/java/org/springframework/http/HttpHeaders.java index 5f55ae03736..6eb106d494d 100644 --- a/spring-web/src/main/java/org/springframework/http/HttpHeaders.java +++ b/spring-web/src/main/java/org/springframework/http/HttpHeaders.java @@ -448,12 +448,12 @@ public class HttpHeaders implements MultiValueMap, Serializable public Set getAllow() { String value = getFirst(ALLOW); if (!StringUtils.isEmpty(value)) { - List allowedMethod = new ArrayList(5); + List result = new LinkedList(); String[] tokens = value.split(",\\s*"); for (String token : tokens) { - allowedMethod.add(HttpMethod.valueOf(token)); + result.add(HttpMethod.valueOf(token)); } - return EnumSet.copyOf(allowedMethod); + return EnumSet.copyOf(result); } else { return EnumSet.noneOf(HttpMethod.class); @@ -468,7 +468,7 @@ public class HttpHeaders implements MultiValueMap, Serializable } /** - * Returns the value of the {@code Cache-Control} header. + * Return the value of the {@code Cache-Control} header. */ public String getCacheControl() { return getFirst(CACHE_CONTROL); @@ -489,7 +489,7 @@ public class HttpHeaders implements MultiValueMap, Serializable } /** - * Returns the value of the {@code Connection} header. + * Return the value of the {@code Connection} header. */ public List getConnection() { return getFirstValueAsList(CONNECTION); @@ -763,7 +763,7 @@ public class HttpHeaders implements MultiValueMap, Serializable } /** - * Returns the value of the {@code Upgrade} header. + * Return the value of the {@code Upgrade} header. */ public String getUpgrade() { return getFirst(UPGRADE); diff --git a/spring-web/src/main/java/org/springframework/http/HttpMethod.java b/spring-web/src/main/java/org/springframework/http/HttpMethod.java index f006c703ccf..2f1bcd2b50a 100644 --- a/spring-web/src/main/java/org/springframework/http/HttpMethod.java +++ b/spring-web/src/main/java/org/springframework/http/HttpMethod.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2015 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. @@ -26,6 +26,6 @@ package org.springframework.http; */ public enum HttpMethod { - GET, POST, HEAD, OPTIONS, PUT, PATCH, DELETE, TRACE + GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE; } diff --git a/spring-web/src/main/java/org/springframework/http/client/AbstractClientHttpRequestFactoryWrapper.java b/spring-web/src/main/java/org/springframework/http/client/AbstractClientHttpRequestFactoryWrapper.java index 4022c4dc731..c8204ab45a1 100644 --- a/spring-web/src/main/java/org/springframework/http/client/AbstractClientHttpRequestFactoryWrapper.java +++ b/spring-web/src/main/java/org/springframework/http/client/AbstractClientHttpRequestFactoryWrapper.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2015 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. @@ -23,7 +23,8 @@ import org.springframework.http.HttpMethod; import org.springframework.util.Assert; /** - * Abstract base class for {@link ClientHttpRequestFactory} implementations that decorate another request factory. + * Abstract base class for {@link ClientHttpRequestFactory} implementations + * that decorate another request factory. * * @author Arjen Poutsma * @since 3.1 @@ -34,11 +35,11 @@ public abstract class AbstractClientHttpRequestFactoryWrapper implements ClientH /** - * Creates a {@code AbstractClientHttpRequestFactoryWrapper} wrapping the given request factory. + * Create a {@code AbstractClientHttpRequestFactoryWrapper} wrapping the given request factory. * @param requestFactory the request factory to be wrapped */ protected AbstractClientHttpRequestFactoryWrapper(ClientHttpRequestFactory requestFactory) { - Assert.notNull(requestFactory, "'requestFactory' must not be null"); + Assert.notNull(requestFactory, "ClientHttpRequestFactory must not be null"); this.requestFactory = requestFactory; } @@ -50,12 +51,12 @@ public abstract class AbstractClientHttpRequestFactoryWrapper implements ClientH */ @Override public final ClientHttpRequest createRequest(URI uri, HttpMethod httpMethod) throws IOException { - return createRequest(uri, httpMethod, requestFactory); + return createRequest(uri, httpMethod, this.requestFactory); } /** - * Create a new {@link ClientHttpRequest} for the specified URI and HTTP method by using the - * passed-on request factory. + * Create a new {@link ClientHttpRequest} for the specified URI and HTTP method + * by using the passed-on request factory. *

Called from {@link #createRequest(URI, HttpMethod)}. * @param uri the URI to create a request for * @param httpMethod the HTTP method to execute diff --git a/spring-web/src/main/java/org/springframework/http/client/HttpComponentsClientHttpRequestFactory.java b/spring-web/src/main/java/org/springframework/http/client/HttpComponentsClientHttpRequestFactory.java index fbfbcb1138b..a318259b402 100644 --- a/spring-web/src/main/java/org/springframework/http/client/HttpComponentsClientHttpRequestFactory.java +++ b/spring-web/src/main/java/org/springframework/http/client/HttpComponentsClientHttpRequestFactory.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2014 the original author or authors. + * Copyright 2002-2015 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. @@ -114,8 +114,7 @@ public class HttpComponentsClientHttpRequestFactory implements ClientHttpRequest */ public void setConnectTimeout(int timeout) { Assert.isTrue(timeout >= 0, "Timeout must be a non-negative value"); - this.requestConfig = cloneRequestConfig() - .setConnectTimeout(timeout).build(); + this.requestConfig = cloneRequestConfig().setConnectTimeout(timeout).build(); setLegacyConnectionTimeout(getHttpClient(), timeout); } @@ -136,8 +135,7 @@ public class HttpComponentsClientHttpRequestFactory implements ClientHttpRequest @SuppressWarnings("deprecation") private void setLegacyConnectionTimeout(HttpClient client, int timeout) { if (org.apache.http.impl.client.AbstractHttpClient.class.isInstance(client)) { - client.getParams().setIntParameter( - org.apache.http.params.CoreConnectionPNames.CONNECTION_TIMEOUT, timeout); + client.getParams().setIntParameter(org.apache.http.params.CoreConnectionPNames.CONNECTION_TIMEOUT, timeout); } } @@ -151,8 +149,7 @@ public class HttpComponentsClientHttpRequestFactory implements ClientHttpRequest * @see RequestConfig#getConnectionRequestTimeout() */ public void setConnectionRequestTimeout(int connectionRequestTimeout) { - this.requestConfig = cloneRequestConfig() - .setConnectionRequestTimeout(connectionRequestTimeout).build(); + this.requestConfig = cloneRequestConfig().setConnectionRequestTimeout(connectionRequestTimeout).build(); } /** @@ -165,8 +162,7 @@ public class HttpComponentsClientHttpRequestFactory implements ClientHttpRequest */ public void setReadTimeout(int timeout) { Assert.isTrue(timeout >= 0, "Timeout must be a non-negative value"); - this.requestConfig = cloneRequestConfig() - .setSocketTimeout(timeout).build(); + this.requestConfig = cloneRequestConfig().setSocketTimeout(timeout).build(); setLegacySocketTimeout(getHttpClient(), timeout); } @@ -180,15 +176,10 @@ public class HttpComponentsClientHttpRequestFactory implements ClientHttpRequest @SuppressWarnings("deprecation") private void setLegacySocketTimeout(HttpClient client, int timeout) { if (org.apache.http.impl.client.AbstractHttpClient.class.isInstance(client)) { - client.getParams().setIntParameter( - org.apache.http.params.CoreConnectionPNames.SO_TIMEOUT, timeout); + client.getParams().setIntParameter(org.apache.http.params.CoreConnectionPNames.SO_TIMEOUT, timeout); } } - private RequestConfig.Builder cloneRequestConfig() { - return this.requestConfig != null ? RequestConfig.copy(this.requestConfig) : RequestConfig.custom(); - } - /** * Indicates whether this request factory should buffer the request body internally. *

Default is {@code true}. When sending large amounts of data via POST or PUT, it is @@ -209,6 +200,7 @@ public class HttpComponentsClientHttpRequestFactory implements ClientHttpRequest if (context == null) { context = HttpClientContext.create(); } + // Request configuration not set in the context if (context.getAttribute(HttpClientContext.REQUEST_CONFIG) == null) { // Use request configuration given by the user, when available @@ -223,6 +215,7 @@ public class HttpComponentsClientHttpRequestFactory implements ClientHttpRequest context.setAttribute(HttpClientContext.REQUEST_CONFIG, config); } } + if (this.bufferRequestBody) { return new HttpComponentsClientHttpRequest(client, httpRequest, context); } @@ -231,6 +224,11 @@ public class HttpComponentsClientHttpRequestFactory implements ClientHttpRequest } } + + private RequestConfig.Builder cloneRequestConfig() { + return (this.requestConfig != null ? RequestConfig.copy(this.requestConfig) : RequestConfig.custom()); + } + /** * Create a Commons HttpMethodBase object for the given HTTP method and URI specification. * @param httpMethod the HTTP method @@ -241,20 +239,20 @@ public class HttpComponentsClientHttpRequestFactory implements ClientHttpRequest switch (httpMethod) { case GET: return new HttpGet(uri); - case DELETE: - return new HttpDelete(uri); case HEAD: return new HttpHead(uri); - case OPTIONS: - return new HttpOptions(uri); case POST: return new HttpPost(uri); case PUT: return new HttpPut(uri); - case TRACE: - return new HttpTrace(uri); case PATCH: return new HttpPatch(uri); + case DELETE: + return new HttpDelete(uri); + case OPTIONS: + return new HttpOptions(uri); + case TRACE: + return new HttpTrace(uri); default: throw new IllegalArgumentException("Invalid HTTP method: " + httpMethod); } @@ -312,4 +310,5 @@ public class HttpComponentsClientHttpRequestFactory implements ClientHttpRequest return "DELETE"; } } + } diff --git a/spring-web/src/main/java/org/springframework/http/client/InterceptingClientHttpRequest.java b/spring-web/src/main/java/org/springframework/http/client/InterceptingClientHttpRequest.java index b02658a62fd..9a33b31a0c7 100644 --- a/spring-web/src/main/java/org/springframework/http/client/InterceptingClientHttpRequest.java +++ b/spring-web/src/main/java/org/springframework/http/client/InterceptingClientHttpRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2013 the original author or authors. + * Copyright 2002-2015 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. @@ -42,52 +42,51 @@ class InterceptingClientHttpRequest extends AbstractBufferingClientHttpRequest { private URI uri; + protected InterceptingClientHttpRequest(ClientHttpRequestFactory requestFactory, - List interceptors, - URI uri, - HttpMethod method) { + List interceptors, URI uri, HttpMethod method) { + this.requestFactory = requestFactory; this.interceptors = interceptors; this.method = method; this.uri = uri; } + @Override public HttpMethod getMethod() { - return method; + return this.method; } @Override public URI getURI() { - return uri; + return this.uri; } @Override protected final ClientHttpResponse executeInternal(HttpHeaders headers, byte[] bufferedOutput) throws IOException { - RequestExecution requestExecution = new RequestExecution(); - + InterceptingRequestExecution requestExecution = new InterceptingRequestExecution(); return requestExecution.execute(this, bufferedOutput); } - private class RequestExecution implements ClientHttpRequestExecution { + + private class InterceptingRequestExecution implements ClientHttpRequestExecution { private final Iterator iterator; - private RequestExecution() { + public InterceptingRequestExecution() { this.iterator = interceptors.iterator(); } @Override public ClientHttpResponse execute(HttpRequest request, byte[] body) throws IOException { - if (iterator.hasNext()) { - ClientHttpRequestInterceptor nextInterceptor = iterator.next(); + if (this.iterator.hasNext()) { + ClientHttpRequestInterceptor nextInterceptor = this.iterator.next(); return nextInterceptor.intercept(request, body, this); } else { ClientHttpRequest delegate = requestFactory.createRequest(request.getURI(), request.getMethod()); - delegate.getHeaders().putAll(request.getHeaders()); - if (body.length > 0) { StreamUtils.copy(body, delegate.getBody()); } diff --git a/spring-web/src/main/java/org/springframework/http/client/InterceptingClientHttpRequestFactory.java b/spring-web/src/main/java/org/springframework/http/client/InterceptingClientHttpRequestFactory.java index 6e797c2bb14..aadab069511 100644 --- a/spring-web/src/main/java/org/springframework/http/client/InterceptingClientHttpRequestFactory.java +++ b/spring-web/src/main/java/org/springframework/http/client/InterceptingClientHttpRequestFactory.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2011 the original author or authors. + * Copyright 2002-2015 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. @@ -32,20 +32,22 @@ public class InterceptingClientHttpRequestFactory extends AbstractClientHttpRequ private final List interceptors; + /** - * Creates a new instance of the {@code InterceptingClientHttpRequestFactory} with the given parameters. - * + * Create a new instance of the {@code InterceptingClientHttpRequestFactory} with the given parameters. * @param requestFactory the request factory to wrap - * @param interceptors the interceptors that are to be applied. Can be {@code null}. + * @param interceptors the interceptors that are to be applied (can be {@code null}) */ public InterceptingClientHttpRequestFactory(ClientHttpRequestFactory requestFactory, List interceptors) { + super(requestFactory); - this.interceptors = interceptors != null ? interceptors : Collections.emptyList(); + this.interceptors = (interceptors != null ? interceptors : Collections.emptyList()); } @Override protected ClientHttpRequest createRequest(URI uri, HttpMethod httpMethod, ClientHttpRequestFactory requestFactory) { - return new InterceptingClientHttpRequest(requestFactory, interceptors, uri, httpMethod); + return new InterceptingClientHttpRequest(requestFactory, this.interceptors, uri, httpMethod); } + } diff --git a/spring-web/src/main/java/org/springframework/http/client/SimpleClientHttpRequestFactory.java b/spring-web/src/main/java/org/springframework/http/client/SimpleClientHttpRequestFactory.java index e2dcb02563e..076e7b37edf 100644 --- a/spring-web/src/main/java/org/springframework/http/client/SimpleClientHttpRequestFactory.java +++ b/spring-web/src/main/java/org/springframework/http/client/SimpleClientHttpRequestFactory.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2014 the original author or authors. + * Copyright 2002-2015 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. @@ -136,6 +136,7 @@ public class SimpleClientHttpRequestFactory implements ClientHttpRequestFactory, public ClientHttpRequest createRequest(URI uri, HttpMethod httpMethod) throws IOException { HttpURLConnection connection = openConnection(uri.toURL(), this.proxy); prepareConnection(connection, httpMethod.name()); + if (this.bufferRequestBody) { return new SimpleBufferingClientHttpRequest(connection, this.outputStreaming); } @@ -146,20 +147,23 @@ public class SimpleClientHttpRequestFactory implements ClientHttpRequestFactory, /** * {@inheritDoc} - *

Setting the {@link #setTaskExecutor(org.springframework.core.task.AsyncListenableTaskExecutor) taskExecutor} property - * is required before calling this method. + *

Setting the {@link #setTaskExecutor taskExecutor} property is required before calling this method. */ @Override public AsyncClientHttpRequest createAsyncRequest(URI uri, HttpMethod httpMethod) throws IOException { - Assert.state(this.taskExecutor != null, "Asynchronous execution requires an AsyncTaskExecutor to be set"); + Assert.state(this.taskExecutor != null, + "Asynchronous execution requires an AsyncTaskExecutor to be set"); + HttpURLConnection connection = openConnection(uri.toURL(), this.proxy); prepareConnection(connection, httpMethod.name()); + if (this.bufferRequestBody) { - return new SimpleBufferingAsyncClientHttpRequest(connection, this.outputStreaming, this.taskExecutor); + return new SimpleBufferingAsyncClientHttpRequest( + connection, this.outputStreaming, this.taskExecutor); } else { - return new SimpleStreamingAsyncClientHttpRequest(connection, this.chunkSize, - this.outputStreaming, this.taskExecutor); + return new SimpleStreamingAsyncClientHttpRequest( + connection, this.chunkSize, this.outputStreaming, this.taskExecutor); } } @@ -192,20 +196,24 @@ public class SimpleClientHttpRequestFactory implements ClientHttpRequestFactory, if (this.readTimeout >= 0) { connection.setReadTimeout(this.readTimeout); } + connection.setDoInput(true); + if ("GET".equals(httpMethod)) { connection.setInstanceFollowRedirects(true); } else { connection.setInstanceFollowRedirects(false); } - if ("PUT".equals(httpMethod) || "POST".equals(httpMethod) || + + if ("POST".equals(httpMethod) || "PUT".equals(httpMethod) || "PATCH".equals(httpMethod) || "DELETE".equals(httpMethod)) { connection.setDoOutput(true); } else { connection.setDoOutput(false); } + connection.setRequestMethod(httpMethod); } diff --git a/spring-web/src/main/java/org/springframework/http/client/support/HttpRequestWrapper.java b/spring-web/src/main/java/org/springframework/http/client/support/HttpRequestWrapper.java index d66476d9141..c17f3671d1c 100644 --- a/spring-web/src/main/java/org/springframework/http/client/support/HttpRequestWrapper.java +++ b/spring-web/src/main/java/org/springframework/http/client/support/HttpRequestWrapper.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2015 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. @@ -24,8 +24,10 @@ import org.springframework.http.HttpRequest; import org.springframework.util.Assert; /** - * Provides a convenient implementation of the {@link HttpRequest} interface that can be overridden to adapt the - * request. Methods default to calling through to the wrapped request object. + * Provides a convenient implementation of the {@link HttpRequest} interface + * that can be overridden to adapt the request. + * + *

These methods default to calling through to the wrapped request object. * * @author Arjen Poutsma * @since 3.1 @@ -36,24 +38,24 @@ public class HttpRequestWrapper implements HttpRequest { /** - * Creates a new {@code HttpRequest} wrapping the given request object. - * + * Create a new {@code HttpRequest} wrapping the given request object. * @param request the request object to be wrapped */ public HttpRequestWrapper(HttpRequest request) { - Assert.notNull(request, "'request' must not be null"); + Assert.notNull(request, "HttpRequest must not be null"); this.request = request; } + /** - * Returns the wrapped request. + * Return the wrapped request. */ public HttpRequest getRequest() { - return request; + return this.request; } /** - * Returns the method of the wrapped request. + * Return the method of the wrapped request. */ @Override public HttpMethod getMethod() { @@ -61,7 +63,7 @@ public class HttpRequestWrapper implements HttpRequest { } /** - * Returns the URI of the wrapped request. + * Return the URI of the wrapped request. */ @Override public URI getURI() { @@ -69,7 +71,7 @@ public class HttpRequestWrapper implements HttpRequest { } /** - * Returns the headers of the wrapped request. + * Return the headers of the wrapped request. */ @Override public HttpHeaders getHeaders() { diff --git a/spring-web/src/main/java/org/springframework/http/server/ServletServerHttpRequest.java b/spring-web/src/main/java/org/springframework/http/server/ServletServerHttpRequest.java index 489dfa294f5..4a5125a8493 100644 --- a/spring-web/src/main/java/org/springframework/http/server/ServletServerHttpRequest.java +++ b/spring-web/src/main/java/org/springframework/http/server/ServletServerHttpRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2014 the original author or authors. + * Copyright 2002-2015 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. @@ -166,18 +166,30 @@ public class ServletServerHttpRequest implements ServerHttpRequest { } } - private boolean isFormPost(HttpServletRequest request) { - return (request.getContentType() != null && request.getContentType().contains(FORM_CONTENT_TYPE) && + @Override + public ServerHttpAsyncRequestControl getAsyncRequestControl(ServerHttpResponse response) { + if (this.asyncRequestControl == null) { + Assert.isInstanceOf(ServletServerHttpResponse.class, response); + ServletServerHttpResponse servletServerResponse = (ServletServerHttpResponse) response; + this.asyncRequestControl = new ServletServerHttpAsyncRequestControl(this, servletServerResponse); + } + return this.asyncRequestControl; + } + + + private static boolean isFormPost(HttpServletRequest request) { + String contentType = request.getContentType(); + return (contentType != null && contentType.contains(FORM_CONTENT_TYPE) && METHOD_POST.equalsIgnoreCase(request.getMethod())); } /** * Use {@link javax.servlet.ServletRequest#getParameterMap()} to reconstruct the * body of a form 'POST' providing a predictable outcome as opposed to reading - * from the body, which can fail if any other code has used ServletRequest - * to access a parameter thus causing the input stream to be "consumed". + * from the body, which can fail if any other code has used the ServletRequest + * to access a parameter, thus causing the input stream to be "consumed". */ - private InputStream getBodyFromServletRequestParameters(HttpServletRequest request) throws IOException { + private static InputStream getBodyFromServletRequestParameters(HttpServletRequest request) throws IOException { ByteArrayOutputStream bos = new ByteArrayOutputStream(1024); Writer writer = new OutputStreamWriter(bos, FORM_CHARSET); @@ -205,14 +217,4 @@ public class ServletServerHttpRequest implements ServerHttpRequest { return new ByteArrayInputStream(bos.toByteArray()); } - @Override - public ServerHttpAsyncRequestControl getAsyncRequestControl(ServerHttpResponse response) { - if (this.asyncRequestControl == null) { - Assert.isInstanceOf(ServletServerHttpResponse.class, response); - ServletServerHttpResponse servletServerResponse = (ServletServerHttpResponse) response; - this.asyncRequestControl = new ServletServerHttpAsyncRequestControl(this, servletServerResponse); - } - return this.asyncRequestControl; - } - } diff --git a/spring-web/src/main/java/org/springframework/web/bind/annotation/RequestMethod.java b/spring-web/src/main/java/org/springframework/web/bind/annotation/RequestMethod.java index 814687ca65d..80bd4b1c017 100644 --- a/spring-web/src/main/java/org/springframework/web/bind/annotation/RequestMethod.java +++ b/spring-web/src/main/java/org/springframework/web/bind/annotation/RequestMethod.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2015 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,16 +17,14 @@ package org.springframework.web.bind.annotation; /** - * Java 5 enumeration of HTTP request methods. Intended for use - * with the {@link RequestMapping#method()} attribute of the - * {@link RequestMapping} annotation. + * Java 5 enumeration of HTTP request methods. Intended for use with the + * {@link RequestMapping#method()} attribute of the {@link RequestMapping} annotation. * *

Note that, by default, {@link org.springframework.web.servlet.DispatcherServlet} * supports GET, HEAD, POST, PUT, PATCH and DELETE only. DispatcherServlet will - * process TRACE and OPTIONS with the default HttpServlet behavior unless - * explicitly told to dispatch those request types as well: Check out - * the "dispatchOptionsRequest" and "dispatchTraceRequest" properties, - * switching them to "true" if necessary. + * process TRACE and OPTIONS with the default HttpServlet behavior unless explicitly + * told to dispatch those request types as well: Check out the "dispatchOptionsRequest" + * and "dispatchTraceRequest" properties, switching them to "true" if necessary. * * @author Juergen Hoeller * @since 2.5 diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/DispatcherServlet.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/DispatcherServlet.java index 32b429483ab..97c1f4f461f 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/DispatcherServlet.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/DispatcherServlet.java @@ -1137,9 +1137,8 @@ public class DispatcherServlet extends FrameworkServlet { "] in DispatcherServlet with name '" + getServletName() + "'"); } if (this.throwExceptionIfNoHandlerFound) { - ServletServerHttpRequest sshr = new ServletServerHttpRequest(request); - throw new NoHandlerFoundException( - sshr.getMethod().name(), sshr.getServletRequest().getRequestURI(), sshr.getHeaders()); + throw new NoHandlerFoundException(request.getMethod(), getRequestUri(request), + new ServletServerHttpRequest(request).getHeaders()); } else { response.sendError(HttpServletResponse.SC_NOT_FOUND); diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/FrameworkServlet.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/FrameworkServlet.java index 610ecdf8605..c68d06b96c5 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/FrameworkServlet.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/FrameworkServlet.java @@ -828,15 +828,13 @@ public abstract class FrameworkServlet extends HttpServletBean implements Applic /** - * Override the parent class implementation in order to intercept PATCH - * requests. + * Override the parent class implementation in order to intercept PATCH requests. */ @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - String method = request.getMethod(); - if (method.equalsIgnoreCase(RequestMethod.PATCH.name())) { + if (RequestMethod.PATCH.name().equalsIgnoreCase(request.getMethod())) { processRequest(request, response); } else { diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/condition/AbstractMediaTypeExpression.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/condition/AbstractMediaTypeExpression.java index 9203d7523ba..532f6fbc039 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/condition/AbstractMediaTypeExpression.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/condition/AbstractMediaTypeExpression.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2015 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. @@ -41,36 +41,39 @@ abstract class AbstractMediaTypeExpression implements Comparable