From 75e08695a04980dbceae6789364717e9d8764d58 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Fri, 14 Feb 2014 21:39:40 +0100 Subject: [PATCH] Mixed polishing along with recent changes (cherry picked from commit 14e5a02) --- .../springframework/cache/CacheManager.java | 13 +++++----- .../expression/spel/MapAccessTests.java | 16 +++++++++--- .../interceptor/RollbackRuleAttribute.java | 16 ++++++------ .../ServletRequestMethodArgumentResolver.java | 9 +++---- .../web/servlet/tags/form/FormTag.java | 25 +++++++++++++------ 5 files changed, 50 insertions(+), 29 deletions(-) diff --git a/spring-context/src/main/java/org/springframework/cache/CacheManager.java b/spring-context/src/main/java/org/springframework/cache/CacheManager.java index 86228014ea..205bc9a327 100644 --- a/spring-context/src/main/java/org/springframework/cache/CacheManager.java +++ b/spring-context/src/main/java/org/springframework/cache/CacheManager.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2011 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. @@ -19,7 +19,8 @@ package org.springframework.cache; import java.util.Collection; /** - * A manager for a set of {@link Cache}s. + * Spring's central cache manager SPI. + * Allows for retrieving named {@link Cache} regions. * * @author Costin Leau * @since 3.1 @@ -28,14 +29,14 @@ public interface CacheManager { /** * Return the cache associated with the given name. - * @param name cache identifier (must not be {@code null}) - * @return associated cache, or {@code null} if none is found + * @param name the cache identifier (must not be {@code null}) + * @return the associated cache, or {@code null} if none found */ Cache getCache(String name); /** - * Return a collection of the caches known by this cache manager. - * @return names of caches known by the cache manager. + * Return a collection of the cache names known by this manager. + * @return the names of all caches known by the cache manager */ Collection getCacheNames(); diff --git a/spring-expression/src/test/java/org/springframework/expression/spel/MapAccessTests.java b/spring-expression/src/test/java/org/springframework/expression/spel/MapAccessTests.java index 47412fc18a..e579ccd466 100644 --- a/spring-expression/src/test/java/org/springframework/expression/spel/MapAccessTests.java +++ b/spring-expression/src/test/java/org/springframework/expression/spel/MapAccessTests.java @@ -81,9 +81,19 @@ public class MapAccessTests extends ExpressionTestCase { Object bean = new TestBean("name1", new TestBean("name2", null, "Description 2", 15, props1), "description 1", 6, props1); ExpressionParser parser = new SpelExpressionParser(); - Expression exp = parser.parseExpression("testBean.properties['key2']"); - String key = (String) exp.getValue(bean); - assertNotNull(key); + Expression expr = parser.parseExpression("testBean.properties['key2']"); + assertEquals("value2", expr.getValue(bean)); + } + + @Test + public void testGetValueFromRootMap() { + Map map = new HashMap(); + map.put("key", "value"); + EvaluationContext context = new StandardEvaluationContext(map); + + ExpressionParser spelExpressionParser = new SpelExpressionParser(); + Expression expr = spelExpressionParser.parseExpression("#root['key']"); + assertEquals("value", expr.getValue(map)); } diff --git a/spring-tx/src/main/java/org/springframework/transaction/interceptor/RollbackRuleAttribute.java b/spring-tx/src/main/java/org/springframework/transaction/interceptor/RollbackRuleAttribute.java index 0f605308ad..c7267cd9d7 100644 --- a/spring-tx/src/main/java/org/springframework/transaction/interceptor/RollbackRuleAttribute.java +++ b/spring-tx/src/main/java/org/springframework/transaction/interceptor/RollbackRuleAttribute.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. @@ -16,10 +16,10 @@ package org.springframework.transaction.interceptor; -import org.springframework.util.Assert; - import java.io.Serializable; +import org.springframework.util.Assert; + /** * Rule determining whether or not a given exception (and any subclasses) * should cause a rollback. @@ -59,8 +59,8 @@ public class RollbackRuleAttribute implements Serializable{ * @throws IllegalArgumentException if the supplied {@code clazz} is * not a {@code Throwable} type or is {@code null} */ - public RollbackRuleAttribute(Class clazz) { - Assert.notNull(clazz, "'clazz' cannot be null."); + public RollbackRuleAttribute(Class clazz) { + Assert.notNull(clazz, "'clazz' cannot be null"); if (!Throwable.class.isAssignableFrom(clazz)) { throw new IllegalArgumentException( "Cannot construct rollback rule from [" + clazz.getName() + "]: it's not a Throwable"); @@ -87,7 +87,7 @@ public class RollbackRuleAttribute implements Serializable{ * {@code exceptionName} is {@code null} or empty */ public RollbackRuleAttribute(String exceptionName) { - Assert.hasText(exceptionName, "'exceptionName' cannot be null or empty."); + Assert.hasText(exceptionName, "'exceptionName' cannot be null or empty"); this.exceptionName = exceptionName; } @@ -110,8 +110,8 @@ public class RollbackRuleAttribute implements Serializable{ } - private int getDepth(Class exceptionClass, int depth) { - if (exceptionClass.getName().indexOf(this.exceptionName) != -1) { + private int getDepth(Class exceptionClass, int depth) { + if (exceptionClass.getName().contains(this.exceptionName)) { // Found it! return depth; } diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ServletRequestMethodArgumentResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ServletRequestMethodArgumentResolver.java index d0c3a02024..a1047423c2 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ServletRequestMethodArgumentResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ServletRequestMethodArgumentResolver.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. @@ -19,7 +19,6 @@ package org.springframework.web.servlet.mvc.method.annotation; import java.io.IOException; import java.io.InputStream; import java.io.Reader; -import java.lang.reflect.Method; import java.security.Principal; import java.util.Locale; @@ -102,9 +101,9 @@ public class ServletRequestMethodArgumentResolver implements HandlerMethodArgume return request.getReader(); } else { - // should never happen.. - Method method = parameter.getMethod(); - throw new UnsupportedOperationException("Unknown parameter type: " + paramType + " in method: " + method); + // should never happen... + throw new UnsupportedOperationException( + "Unknown parameter type: " + paramType + " in method: " + parameter.getMethod()); } } diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/FormTag.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/FormTag.java index 5556f513a5..e8173fdddd 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/FormTag.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/form/FormTag.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. @@ -16,8 +16,8 @@ package org.springframework.web.servlet.tags.form; +import java.io.UnsupportedEncodingException; import java.util.Map; - import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; @@ -32,6 +32,7 @@ import org.springframework.util.ObjectUtils; import org.springframework.util.StringUtils; import org.springframework.web.servlet.support.RequestDataValueProcessor; import org.springframework.web.util.HtmlUtils; +import org.springframework.web.util.UriUtils; /** * Databinding-aware JSP tag for rendering an HTML '{@code form}' whose @@ -352,8 +353,7 @@ public class FormTag extends AbstractHtmlElementTag { tagWriter.startTag(FORM_TAG); writeDefaultAttributes(tagWriter); tagWriter.writeAttribute(ACTION_ATTRIBUTE, resolveAction()); - writeOptionalAttribute(tagWriter, METHOD_ATTRIBUTE, - isMethodBrowserSupported(getMethod()) ? getMethod() : DEFAULT_METHOD); + writeOptionalAttribute(tagWriter, METHOD_ATTRIBUTE, getHttpMethod()); writeOptionalAttribute(tagWriter, TARGET_ATTRIBUTE, getTarget()); writeOptionalAttribute(tagWriter, ENCTYPE_ATTRIBUTE, getEnctype()); writeOptionalAttribute(tagWriter, ACCEPT_CHARSET_ATTRIBUTE, getAcceptCharset()); @@ -389,6 +389,10 @@ public class FormTag extends AbstractHtmlElementTag { return EVAL_BODY_INCLUDE; } + private String getHttpMethod() { + return (isMethodBrowserSupported(getMethod()) ? getMethod() : DEFAULT_METHOD); + } + private void assertHttpMethod(String method) { for (HttpMethod httpMethod : HttpMethod.values()) { if (httpMethod.name().equalsIgnoreCase(method)) { @@ -426,7 +430,6 @@ public class FormTag extends AbstractHtmlElementTag { * with the context and servlet paths, and the result is used. Otherwise, the * {@link org.springframework.web.servlet.support.RequestContext#getRequestUri() * originating URI} is used. - * * @return the value that is to be used for the '{@code action}' attribute */ protected String resolveAction() throws JspException { @@ -438,7 +441,8 @@ public class FormTag extends AbstractHtmlElementTag { } else if (StringUtils.hasText(servletRelativeAction)) { String pathToServlet = getRequestContext().getPathToServlet(); - if (servletRelativeAction.startsWith("/") && !servletRelativeAction.startsWith(getRequestContext().getContextPath())) { + if (servletRelativeAction.startsWith("/") && + !servletRelativeAction.startsWith(getRequestContext().getContextPath())) { servletRelativeAction = pathToServlet + servletRelativeAction; } servletRelativeAction = getDisplayString(evaluate(ACTION_ATTRIBUTE, servletRelativeAction)); @@ -446,6 +450,13 @@ public class FormTag extends AbstractHtmlElementTag { } else { String requestUri = getRequestContext().getRequestUri(); + String encoding = this.pageContext.getResponse().getCharacterEncoding(); + try { + requestUri = UriUtils.encodePath(requestUri, encoding); + } + catch (UnsupportedEncodingException ex) { + // shouldn't happen - if it does, proceed with requestUri as-is + } ServletResponse response = this.pageContext.getResponse(); if (response instanceof HttpServletResponse) { requestUri = ((HttpServletResponse) response).encodeURL(requestUri); @@ -471,7 +482,7 @@ public class FormTag extends AbstractHtmlElementTag { private String processAction(String action) { RequestDataValueProcessor processor = getRequestContext().getRequestDataValueProcessor(); ServletRequest request = this.pageContext.getRequest(); - if ((processor != null) && (request instanceof HttpServletRequest)) { + if (processor != null && request instanceof HttpServletRequest) { action = processor.processAction((HttpServletRequest) request, action); } return action;