From 52fdfd59abf2c38c8274fa9acbe359b2e49df29a Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Tue, 8 Sep 2015 18:11:30 +0200 Subject: [PATCH] Polishing --- .../test/util/XpathExpectationsHelper.java | 9 +++--- .../client/HttpMessageConverterExtractor.java | 29 +++++++++---------- .../config/ResourcesBeanDefinitionParser.java | 2 +- .../annotation/ResourceChainRegistration.java | 3 +- .../resource/CachingResourceResolver.java | 4 +-- .../resource/PathResourceResolver.java | 7 ++++- .../resource/ResourceHttpRequestHandler.java | 2 +- .../servlet/resource/ResourceUrlProvider.java | 3 +- .../resource/VersionResourceResolver.java | 3 +- .../resource/WebJarsResourceResolver.java | 21 +++++--------- .../web/servlet/tags/UrlTag.java | 4 ++- 11 files changed, 44 insertions(+), 43 deletions(-) diff --git a/spring-test/src/main/java/org/springframework/test/util/XpathExpectationsHelper.java b/spring-test/src/main/java/org/springframework/test/util/XpathExpectationsHelper.java index c686cd0d82..5ff0227b76 100644 --- a/spring-test/src/main/java/org/springframework/test/util/XpathExpectationsHelper.java +++ b/spring-test/src/main/java/org/springframework/test/util/XpathExpectationsHelper.java @@ -16,13 +16,9 @@ package org.springframework.test.util; -import static org.hamcrest.MatcherAssert.*; -import static org.springframework.test.util.AssertionErrors.*; - import java.io.ByteArrayInputStream; import java.util.Collections; import java.util.Map; - import javax.xml.namespace.QName; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; @@ -42,6 +38,9 @@ import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; import org.springframework.util.xml.SimpleNamespaceContext; +import static org.hamcrest.MatcherAssert.*; +import static org.springframework.test.util.AssertionErrors.*; + /** * A helper class for applying assertions via XPath expressions. * @@ -113,7 +112,7 @@ public class XpathExpectationsHelper { factory.setNamespaceAware(this.hasNamespaces); DocumentBuilder documentBuilder = factory.newDocumentBuilder(); InputSource inputSource = new InputSource(new ByteArrayInputStream(xml)); - if(StringUtils.hasText(encoding)) { + if (StringUtils.hasText(encoding)) { inputSource.setEncoding(encoding); } return documentBuilder.parse(inputSource); diff --git a/spring-web/src/main/java/org/springframework/web/client/HttpMessageConverterExtractor.java b/spring-web/src/main/java/org/springframework/web/client/HttpMessageConverterExtractor.java index 0da4efed64..7eada90cec 100644 --- a/spring-web/src/main/java/org/springframework/web/client/HttpMessageConverterExtractor.java +++ b/spring-web/src/main/java/org/springframework/web/client/HttpMessageConverterExtractor.java @@ -30,12 +30,12 @@ import org.springframework.http.converter.HttpMessageConverter; import org.springframework.util.Assert; /** - * Response extractor that uses the given {@linkplain HttpMessageConverter entity - * converters} to convert the response into a type {@code T}. + * Response extractor that uses the given {@linkplain HttpMessageConverter entity converters} + * to convert the response into a type {@code T}. * * @author Arjen Poutsma - * @see RestTemplate * @since 3.0 + * @see RestTemplate */ public class HttpMessageConverterExtractor implements ResponseExtractor { @@ -47,19 +47,18 @@ public class HttpMessageConverterExtractor implements ResponseExtractor { private final Log logger; + /** - * Creates a new instance of the {@code HttpMessageConverterExtractor} with the given - * response type and message converters. The given converters must support the response - * type. + * Create a new instance of the {@code HttpMessageConverterExtractor} with the given response + * type and message converters. The given converters must support the response type. */ public HttpMessageConverterExtractor(Class responseType, List> messageConverters) { this((Type) responseType, messageConverters); } /** - * Creates a new instance of the {@code HttpMessageConverterExtractor} with the given - * response type and message converters. The given converters must support the response - * type. + * Creates a new instance of the {@code HttpMessageConverterExtractor} with the given response + * type and message converters. The given converters must support the response type. */ public HttpMessageConverterExtractor(Type responseType, List> messageConverters) { this(responseType, messageConverters, LogFactory.getLog(HttpMessageConverterExtractor.class)); @@ -75,10 +74,10 @@ public class HttpMessageConverterExtractor implements ResponseExtractor { this.logger = logger; } - @Override - @SuppressWarnings({ "unchecked", "rawtypes" }) - public T extractData(ClientHttpResponse response) throws IOException { + @Override + @SuppressWarnings({"unchecked", "rawtypes"}) + public T extractData(ClientHttpResponse response) throws IOException { MessageBodyClientHttpResponseWrapper responseWrapper = new MessageBodyClientHttpResponseWrapper(response); if (!responseWrapper.hasMessageBody() || responseWrapper.hasEmptyMessageBody()) { return null; @@ -106,9 +105,9 @@ public class HttpMessageConverterExtractor implements ResponseExtractor { } } } - throw new RestClientException( - "Could not extract response: no suitable HttpMessageConverter found for response type [" + - this.responseType + "] and content type [" + contentType + "]"); + + throw new RestClientException("Could not extract response: no suitable HttpMessageConverter found " + + "for response type [" + this.responseType + "] and content type [" + contentType + "]"); } private MediaType getContentType(ClientHttpResponse response) { diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/config/ResourcesBeanDefinitionParser.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/config/ResourcesBeanDefinitionParser.java index 5254c49d10..f55e287af4 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/config/ResourcesBeanDefinitionParser.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/config/ResourcesBeanDefinitionParser.java @@ -310,7 +310,7 @@ class ResourcesBeanDefinitionParser implements BeanDefinitionParser { } if (isAutoRegistration) { - if(isWebJarsAssetLocatorPresent) { + if (isWebJarsAssetLocatorPresent) { RootBeanDefinition webJarsResolverDef = new RootBeanDefinition(WebJarsResourceResolver.class); webJarsResolverDef.setSource(source); webJarsResolverDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE); diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/ResourceChainRegistration.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/ResourceChainRegistration.java index fea0fd8058..92a75bedd7 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/ResourceChainRegistration.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/ResourceChainRegistration.java @@ -45,6 +45,7 @@ public class ResourceChainRegistration { private static final boolean isWebJarsAssetLocatorPresent = ClassUtils.isPresent( "org.webjars.WebJarAssetLocator", ResourceChainRegistration.class.getClassLoader()); + private final List resolvers = new ArrayList(4); private final List transformers = new ArrayList(4); @@ -103,7 +104,7 @@ public class ResourceChainRegistration { protected List getResourceResolvers() { if (!this.hasPathResolver) { List result = new ArrayList(this.resolvers); - if(isWebJarsAssetLocatorPresent) { + if (isWebJarsAssetLocatorPresent) { result.add(new WebJarsResourceResolver()); } result.add(new PathResourceResolver()); diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/CachingResourceResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/CachingResourceResolver.java index e3d788f41f..669e5a2fdf 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/CachingResourceResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/CachingResourceResolver.java @@ -86,9 +86,9 @@ public class CachingResourceResolver extends AbstractResourceResolver { protected String computeKey(HttpServletRequest request, String requestPath) { StringBuilder key = new StringBuilder(RESOLVED_RESOURCE_CACHE_KEY_PREFIX); key.append(requestPath); - if(request != null) { + if (request != null) { String encoding = request.getHeader("Accept-Encoding"); - if(encoding != null && encoding.contains("gzip")) { + if (encoding != null && encoding.contains("gzip")) { key.append("+encoding=gzip"); } } diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/PathResourceResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/PathResourceResolver.java index 0b3f777e12..fc964907c7 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/PathResourceResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/PathResourceResolver.java @@ -161,8 +161,10 @@ public class PathResourceResolver extends AbstractResourceResolver { if (!resource.getClass().equals(location.getClass())) { return false; } + String resourcePath; String locationPath; + if (resource instanceof UrlResource) { resourcePath = resource.getURL().toExternalForm(); locationPath = StringUtils.cleanPath(location.getURL().toString()); @@ -179,13 +181,15 @@ public class PathResourceResolver extends AbstractResourceResolver { resourcePath = resource.getURL().getPath(); locationPath = StringUtils.cleanPath(location.getURL().getPath()); } - if(locationPath.equals(resourcePath)) { + + if (locationPath.equals(resourcePath)) { return true; } locationPath = (locationPath.endsWith("/") || locationPath.isEmpty() ? locationPath : locationPath + "/"); if (!resourcePath.startsWith(locationPath)) { return false; } + if (resourcePath.contains("%")) { // Use URLDecoder (vs UriUtils) to preserve potentially decoded UTF-8 chars... if (URLDecoder.decode(resourcePath, "UTF-8").contains("../")) { @@ -195,6 +199,7 @@ public class PathResourceResolver extends AbstractResourceResolver { return false; } } + return true; } diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceHttpRequestHandler.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceHttpRequestHandler.java index b636dd133f..25c9184e0f 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceHttpRequestHandler.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceHttpRequestHandler.java @@ -416,7 +416,7 @@ public class ResourceHttpRequestHandler extends WebContentGenerator */ protected void setETagHeader(HttpServletRequest request, HttpServletResponse response) { String versionString = (String) request.getAttribute(VersionResourceResolver.RESOURCE_VERSION_ATTRIBUTE); - if(versionString != null) { + if (versionString != null) { response.setHeader(HttpHeaders.ETAG, "\"" + versionString + "\""); } } diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceUrlProvider.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceUrlProvider.java index 194ed96166..13298ed8bb 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceUrlProvider.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceUrlProvider.java @@ -36,7 +36,6 @@ import org.springframework.util.PathMatcher; import org.springframework.web.servlet.handler.SimpleUrlHandlerMapping; import org.springframework.web.util.UrlPathHelper; - /** * A central component to use to obtain the public URL path that clients should * use to access a static resource. @@ -130,7 +129,7 @@ public class ResourceUrlProvider implements ApplicationListenerThis allows WebJars.org users to write version agnostic paths in their templates, * like {@code