diff --git a/spring-expression/src/main/java/org/springframework/expression/PropertyAccessor.java b/spring-expression/src/main/java/org/springframework/expression/PropertyAccessor.java
index 619390125f..e6c78b14de 100644
--- a/spring-expression/src/main/java/org/springframework/expression/PropertyAccessor.java
+++ b/spring-expression/src/main/java/org/springframework/expression/PropertyAccessor.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2013 the original author or authors.
+ * Copyright 2002-2014 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,15 +18,18 @@ package org.springframework.expression;
/**
- * A property accessor is able to read (and possibly write) to object properties. The
- * interface places no restrictions and so implementors are free to access properties
- * directly as fields or through getters or in any other way they see as appropriate. A
- * resolver can optionally specify an array of target classes for which it should be
- * called - but if it returns null from getSpecificTargetClasses() then it will be called
- * for all property references and given a chance to determine if it can read or write
- * them. Property resolvers are considered to be ordered and each will be called in turn.
+ * A property accessor is able to read from (and possibly write to) an object's properties.
+ * This interface places no restrictions, and so implementors are free to access properties
+ * directly as fields or through getters or in any other way they see as appropriate.
+ *
+ *
A resolver can optionally specify an array of target classes for which it should be
+ * called. However, if it returns {@code null} from {@link #getSpecificTargetClasses()},
+ * it will be called for all property references and given a chance to determine if it
+ * can read or write them.
+ *
+ *
Property resolvers are considered to be ordered and each will be called in turn.
* The only rule that affects the call order is that any naming the target class directly
- * in getSpecifiedTargetClasses() will be called first, before the general resolvers.
+ * in {@link #getSpecificTargetClasses()} will be called first, before the general resolvers.
*
* @author Andy Clement
* @since 3.0
@@ -34,11 +37,11 @@ package org.springframework.expression;
public interface PropertyAccessor {
/**
- * Return an array of classes for which this resolver should be called. Returning null
- * indicates this is a general resolver that can be called in an attempt to resolve a
- * property on any type.
- * @return an array of classes that this resolver is suitable for (or null if a
- * general resolver)
+ * Return an array of classes for which this resolver should be called.
+ *
>Returning {@code null} indicates this is a general resolver that
+ * can be called in an attempt to resolve a property on any type.
+ * @return an array of classes that this resolver is suitable for
+ * (or {@code null} if a general resolver)
*/
Class>[] getSpecificTargetClasses();
@@ -49,13 +52,13 @@ public interface PropertyAccessor {
* @param target the target object upon which the property is being accessed
* @param name the name of the property being accessed
* @return true if this resolver is able to read the property
- * @throws AccessException if there is any problem determining whether the property
- * can be read
+ * @throws AccessException if there is any problem determining whether the property can be read
*/
boolean canRead(EvaluationContext context, Object target, String name) throws AccessException;
/**
- * Called to read a property from a specified target object
+ * Called to read a property from a specified target object.
+ * Should only succeed if {@link #canRead} also returns {@code true}.
* @param context the evaluation context in which the access is being attempted
* @param target the target object upon which the property is being accessed
* @param name the name of the property being accessed
@@ -65,20 +68,20 @@ public interface PropertyAccessor {
TypedValue read(EvaluationContext context, Object target, String name) throws AccessException;
/**
- * Called to determine if a resolver instance is able to write to a specified property
- * on a specified target object.
+ * Called to determine if a resolver instance is able to write to a specified
+ * property on a specified target object.
* @param context the evaluation context in which the access is being attempted
* @param target the target object upon which the property is being accessed
* @param name the name of the property being accessed
* @return true if this resolver is able to write to the property
- * @throws AccessException if there is any problem determining whether the property
- * can be written to
+ * @throws AccessException if there is any problem determining whether the
+ * property can be written to
*/
boolean canWrite(EvaluationContext context, Object target, String name) throws AccessException;
/**
- * Called to write to a property on a specified target object. Should only succeed if
- * canWrite() also returns true.
+ * Called to write to a property on a specified target object.
+ * Should only succeed if {@link #canWrite} also returns {@code true}.
* @param context the evaluation context in which the access is being attempted
* @param target the target object upon which the property is being accessed
* @param name the name of the property being accessed
diff --git a/spring-web/src/main/java/org/springframework/http/converter/xml/AbstractJaxb2HttpMessageConverter.java b/spring-web/src/main/java/org/springframework/http/converter/xml/AbstractJaxb2HttpMessageConverter.java
index ca465a1698..71af0810fd 100644
--- a/spring-web/src/main/java/org/springframework/http/converter/xml/AbstractJaxb2HttpMessageConverter.java
+++ b/spring-web/src/main/java/org/springframework/http/converter/xml/AbstractJaxb2HttpMessageConverter.java
@@ -31,6 +31,7 @@ import org.springframework.util.Assert;
* that use JAXB2. Creates {@link JAXBContext} object lazily.
*
* @author Arjen Poutsma
+ * @author Rossen Stoyanchev
* @since 3.0
*/
public abstract class AbstractJaxb2HttpMessageConverter extends AbstractXmlHttpMessageConverter {
@@ -61,8 +62,8 @@ public abstract class AbstractJaxb2HttpMessageConverter extends AbstractXmlHt
* Customize the {@link Marshaller} created by this
* message converter before using it to write the object to the output.
* @param marshaller the marshaller to customize
- * @see #createMarshaller(Class)
* @since 4.0.3
+ * @see #createMarshaller(Class)
*/
protected void customizeMarshaller(Marshaller marshaller) {
}
@@ -90,8 +91,8 @@ public abstract class AbstractJaxb2HttpMessageConverter extends AbstractXmlHt
* Customize the {@link Unmarshaller} created by this
* message converter before using it to read the object from the input.
* @param unmarshaller the unmarshaller to customize
- * @see #createUnmarshaller(Class)
* @since 4.0.3
+ * @see #createUnmarshaller(Class)
*/
protected void customizeUnmarshaller(Unmarshaller unmarshaller) {
}
diff --git a/spring-web/src/main/java/org/springframework/http/server/ServletServerHttpResponse.java b/spring-web/src/main/java/org/springframework/http/server/ServletServerHttpResponse.java
index 802a53dfde..6e663fbf45 100644
--- a/spring-web/src/main/java/org/springframework/http/server/ServletServerHttpResponse.java
+++ b/spring-web/src/main/java/org/springframework/http/server/ServletServerHttpResponse.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2012 the original author or authors.
+ * Copyright 2002-2014 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.
@@ -22,7 +22,6 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
-
import javax.servlet.http.HttpServletResponse;
import org.springframework.http.HttpHeaders;
@@ -116,11 +115,12 @@ public class ServletServerHttpResponse implements ServerHttpResponse {
}
}
+
/**
* Extends HttpHeaders with the ability to look up headers already present in
* the underlying HttpServletResponse.
*
- * The intent is merely to expose what is available through the HttpServletResponse
+ * The intent is merely to expose what is available through the HttpServletResponse
* i.e. the ability to look up specific header values by name. All other
* map-related operations (e.g. iteration, removal, etc) apply only to values
* added directly through HttpHeaders methods.
@@ -144,8 +144,8 @@ public class ServletServerHttpResponse implements ServerHttpResponse {
@Override
public List get(Object key) {
+ Assert.isInstanceOf(String.class, key, "Key must be a String-based header name");
- Assert.isInstanceOf(String.class, key, "key must be a String-based header name");
Collection values1 = servletResponse.getHeaders((String) key);
boolean isEmpty1 = CollectionUtils.isEmpty(values1);
diff --git a/spring-web/src/main/java/org/springframework/web/util/WebUtils.java b/spring-web/src/main/java/org/springframework/web/util/WebUtils.java
index ae5dfeff33..b35f0b4a79 100644
--- a/spring-web/src/main/java/org/springframework/web/util/WebUtils.java
+++ b/spring-web/src/main/java/org/springframework/web/util/WebUtils.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2013 the original author or authors.
+ * Copyright 2002-2014 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.
@@ -277,7 +277,7 @@ public abstract class WebUtils {
* @throws IllegalStateException if the session attribute could not be found
*/
public static Object getRequiredSessionAttribute(HttpServletRequest request, String name)
- throws IllegalStateException {
+ throws IllegalStateException {
Object attr = getSessionAttribute(request, name);
if (attr == null) {
diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/FlashMapManager.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/FlashMapManager.java
index 078713194b..527009e58e 100644
--- a/spring-webmvc/src/main/java/org/springframework/web/servlet/FlashMapManager.java
+++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/FlashMapManager.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2012 the original author or authors.
+ * Copyright 2002-2014 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.
@@ -25,7 +25,6 @@ import javax.servlet.http.HttpServletResponse;
*
* @author Rossen Stoyanchev
* @since 3.1
- *
* @see FlashMap
*/
public interface FlashMapManager {
@@ -46,7 +45,7 @@ public interface FlashMapManager {
/**
* Save the given FlashMap, in some underlying storage and set the start
* of its expiration period.
- * Note: Invoke this method prior to a redirect in order
+ *
NOTE: Invoke this method prior to a redirect in order
* to allow saving the FlashMap in the HTTP session or in a response
* cookie before the response is committed.
* @param flashMap the FlashMap to save
diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/PathMatchConfigurer.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/PathMatchConfigurer.java
index 902b04ad36..119c0d8fa3 100644
--- a/spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/PathMatchConfigurer.java
+++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/PathMatchConfigurer.java
@@ -13,6 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+
package org.springframework.web.servlet.config.annotation;
import org.springframework.util.PathMatcher;
@@ -29,11 +30,16 @@ import org.springframework.web.util.UrlPathHelper;
public class PathMatchConfigurer {
private Boolean useSuffixPatternMatch;
+
private Boolean useTrailingSlashMatch;
+
private Boolean useRegisteredSuffixPatternMatch;
+
private UrlPathHelper urlPathHelper;
+
private PathMatcher pathMatcher;
+
/**
* Whether to use suffix pattern match (".*") when matching patterns to
* requests. If enabled a method mapped to "/users" also matches to "/users.*".
@@ -95,23 +101,25 @@ public class PathMatchConfigurer {
return this;
}
+
public Boolean isUseSuffixPatternMatch() {
- return useSuffixPatternMatch;
+ return this.useSuffixPatternMatch;
}
public Boolean isUseTrailingSlashMatch() {
- return useTrailingSlashMatch;
+ return this.useTrailingSlashMatch;
}
public Boolean isUseRegisteredSuffixPatternMatch() {
- return useRegisteredSuffixPatternMatch;
+ return this.useRegisteredSuffixPatternMatch;
}
public UrlPathHelper getUrlPathHelper() {
- return urlPathHelper;
+ return this.urlPathHelper;
}
public PathMatcher getPathMatcher() {
- return pathMatcher;
+ return this.pathMatcher;
}
+
}
diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/RequestMappingHandlerAdapter.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/RequestMappingHandlerAdapter.java
index 701cace142..4d951c777d 100644
--- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/RequestMappingHandlerAdapter.java
+++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/RequestMappingHandlerAdapter.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2012 the original author or authors.
+ * Copyright 2002-2014 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,7 +26,6 @@ import java.util.Map.Entry;
import java.util.Set;
import java.util.concurrent.Callable;
import java.util.concurrent.ConcurrentHashMap;
-
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@@ -114,8 +113,8 @@ import org.springframework.web.util.WebUtils;
* @see HandlerMethodArgumentResolver
* @see HandlerMethodReturnValueHandler
*/
-public class RequestMappingHandlerAdapter extends AbstractHandlerMethodAdapter implements BeanFactoryAware,
- InitializingBean {
+public class RequestMappingHandlerAdapter extends AbstractHandlerMethodAdapter
+ implements BeanFactoryAware, InitializingBean {
private List customArgumentResolvers;
@@ -698,7 +697,7 @@ public class RequestMappingHandlerAdapter extends AbstractHandlerMethodAdapter i
Class> handlerType = handlerMethod.getBeanType();
SessionAttributesHandler sessionAttrHandler = this.sessionAttributesHandlerCache.get(handlerType);
if (sessionAttrHandler == null) {
- synchronized(this.sessionAttributesHandlerCache) {
+ synchronized (this.sessionAttributesHandlerCache) {
sessionAttrHandler = this.sessionAttributesHandlerCache.get(handlerType);
if (sessionAttrHandler == null) {
sessionAttrHandler = new SessionAttributesHandler(handlerType, sessionAttributeStore);
@@ -710,7 +709,8 @@ public class RequestMappingHandlerAdapter extends AbstractHandlerMethodAdapter i
}
/**
- * Invoke the {@link RequestMapping} handler method preparing a {@link ModelAndView} if view resolution is required.
+ * Invoke the {@link RequestMapping} handler method preparing a {@link ModelAndView}
+ * if view resolution is required.
*/
private ModelAndView invokeHandleMethod(HttpServletRequest request,
HttpServletResponse response, HandlerMethod handlerMethod) throws Exception {
@@ -778,7 +778,7 @@ public class RequestMappingHandlerAdapter extends AbstractHandlerMethodAdapter i
List attrMethods = new ArrayList();
// Global methods first
for (Entry> entry : this.modelAttributeAdviceCache.entrySet()) {
- if(entry.getKey().isApplicableToBeanType(handlerType)) {
+ if (entry.getKey().isApplicableToBeanType(handlerType)) {
Object bean = entry.getKey().resolveBean();
for (Method method : entry.getValue()) {
attrMethods.add(createModelAttributeMethod(binderFactory, bean, method));
@@ -810,7 +810,7 @@ public class RequestMappingHandlerAdapter extends AbstractHandlerMethodAdapter i
List initBinderMethods = new ArrayList();
// Global methods first
for (Entry> entry : this.initBinderAdviceCache .entrySet()) {
- if(entry.getKey().isApplicableToBeanType(handlerType)) {
+ if (entry.getKey().isApplicableToBeanType(handlerType)) {
Object bean = entry.getKey().resolveBean();
for (Method method : entry.getValue()) {
initBinderMethods.add(createInitBinderMethod(bean, method));
@@ -850,7 +850,6 @@ public class RequestMappingHandlerAdapter extends AbstractHandlerMethodAdapter i
ModelFactory modelFactory, NativeWebRequest webRequest) throws Exception {
modelFactory.updateModel(webRequest, mavContainer);
-
if (mavContainer.isRequestHandled()) {
return null;
}
diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/support/AbstractFlashMapManager.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/support/AbstractFlashMapManager.java
index 5d1a602d2c..221c2fdab0 100644
--- a/spring-webmvc/src/main/java/org/springframework/web/servlet/support/AbstractFlashMapManager.java
+++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/support/AbstractFlashMapManager.java
@@ -20,12 +20,12 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
-
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+
import org.springframework.util.Assert;
import org.springframework.util.CollectionUtils;
import org.springframework.util.MultiValueMap;
@@ -43,13 +43,14 @@ import org.springframework.web.util.UrlPathHelper;
*/
public abstract class AbstractFlashMapManager implements FlashMapManager {
+ private static final Object writeLock = new Object();
+
protected final Log logger = LogFactory.getLog(getClass());
private int flashMapTimeout = 180;
private UrlPathHelper urlPathHelper = new UrlPathHelper();
- private static final Object writeLock = new Object();
/**
* Set the amount of time in seconds after a {@link FlashMap} is saved
@@ -82,17 +83,17 @@ public abstract class AbstractFlashMapManager implements FlashMapManager {
return this.urlPathHelper;
}
+
@Override
public final FlashMap retrieveAndUpdate(HttpServletRequest request, HttpServletResponse response) {
-
List maps = retrieveFlashMaps(request);
if (CollectionUtils.isEmpty(maps)) {
return null;
}
+
if (logger.isDebugEnabled()) {
logger.debug("Retrieved FlashMap(s): " + maps);
}
-
List mapsToRemove = getExpiredFlashMaps(maps);
FlashMap match = getMatchingFlashMap(maps, request);
@@ -163,8 +164,7 @@ public abstract class AbstractFlashMapManager implements FlashMapManager {
String expectedPath = flashMap.getTargetRequestPath();
if (expectedPath != null) {
String requestUri = this.urlPathHelper.getOriginatingRequestUri(request);
- if (!requestUri.equals(expectedPath)
- && !requestUri.equals(expectedPath + "/")) {
+ if (!requestUri.equals(expectedPath) && !requestUri.equals(expectedPath + "/")) {
return false;
}
}
@@ -187,18 +187,16 @@ public abstract class AbstractFlashMapManager implements FlashMapManager {
String path = decodeAndNormalizePath(flashMap.getTargetRequestPath(), request);
flashMap.setTargetRequestPath(path);
-
decodeParameters(flashMap.getTargetRequestParams(), request);
if (logger.isDebugEnabled()) {
logger.debug("Saving FlashMap=" + flashMap);
}
-
flashMap.startExpirationPeriod(this.flashMapTimeout);
synchronized (writeLock) {
List allMaps = retrieveFlashMaps(request);
- allMaps = (allMaps == null) ? new CopyOnWriteArrayList() : allMaps;
+ allMaps = (allMaps != null ? allMaps : new CopyOnWriteArrayList());
allMaps.add(flashMap);
updateFlashMaps(allMaps, request, response);
}
@@ -232,7 +230,7 @@ public abstract class AbstractFlashMapManager implements FlashMapManager {
* @param request the current request
* @param response the current response
*/
- protected abstract void updateFlashMaps(List flashMaps, HttpServletRequest request,
- HttpServletResponse response);
+ protected abstract void updateFlashMaps(
+ List flashMaps, HttpServletRequest request, HttpServletResponse response);
}
diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/support/SessionFlashMapManager.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/support/SessionFlashMapManager.java
index d3afa478ac..a31635b79b 100644
--- a/spring-webmvc/src/main/java/org/springframework/web/servlet/support/SessionFlashMapManager.java
+++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/support/SessionFlashMapManager.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2012 the original author or authors.
+ * Copyright 2002-2014 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,7 +17,6 @@
package org.springframework.web.servlet.support;
import java.util.List;
-
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@@ -30,10 +29,11 @@ import org.springframework.web.servlet.FlashMap;
* @author Rossen Stoyanchev
* @since 3.1.1
*/
-public class SessionFlashMapManager extends AbstractFlashMapManager{
+public class SessionFlashMapManager extends AbstractFlashMapManager {
private static final String FLASH_MAPS_SESSION_ATTRIBUTE = SessionFlashMapManager.class.getName() + ".FLASH_MAPS";
+
/**
* Retrieve saved FlashMap instances from the HTTP Session.
* Does not cause an HTTP session to be created but may update it if a
@@ -44,7 +44,7 @@ public class SessionFlashMapManager extends AbstractFlashMapManager{
@SuppressWarnings("unchecked")
protected List retrieveFlashMaps(HttpServletRequest request) {
HttpSession session = request.getSession(false);
- return (session != null) ? (List) session.getAttribute(FLASH_MAPS_SESSION_ATTRIBUTE) : null;
+ return (session != null ? (List) session.getAttribute(FLASH_MAPS_SESSION_ATTRIBUTE) : null);
}
/**
diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/support/FlashMapManagerTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/support/FlashMapManagerTests.java
index 5c763eca1c..f0399ada7d 100644
--- a/spring-webmvc/src/test/java/org/springframework/web/servlet/support/FlashMapManagerTests.java
+++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/support/FlashMapManagerTests.java
@@ -16,12 +16,10 @@
package org.springframework.web.servlet.support;
-
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
-
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@@ -305,8 +303,7 @@ public class FlashMapManagerTests {
}
@Override
- protected void updateFlashMaps(List flashMaps, HttpServletRequest request,
- HttpServletResponse response) {
+ protected void updateFlashMaps(List flashMaps, HttpServletRequest request, HttpServletResponse response) {
this.flashMaps = flashMaps;
}
}