diff --git a/org.springframework.web.portlet/src/main/java/org/springframework/web/portlet/mvc/annotation/AnnotationMethodHandlerAdapter.java b/org.springframework.web.portlet/src/main/java/org/springframework/web/portlet/mvc/annotation/AnnotationMethodHandlerAdapter.java index ab346c666fa..be5b974ee47 100644 --- a/org.springframework.web.portlet/src/main/java/org/springframework/web/portlet/mvc/annotation/AnnotationMethodHandlerAdapter.java +++ b/org.springframework.web.portlet/src/main/java/org/springframework/web/portlet/mvc/annotation/AnnotationMethodHandlerAdapter.java @@ -29,7 +29,6 @@ import java.util.LinkedHashMap; import java.util.Locale; import java.util.Map; import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; import javax.portlet.ActionRequest; import javax.portlet.ActionResponse; import javax.portlet.ClientDataRequest; @@ -152,7 +151,7 @@ public class AnnotationMethodHandlerAdapter extends PortletContentGenerator private BeanExpressionContext expressionContext; private final Map, PortletHandlerMethodResolver> methodResolverCache = - new ConcurrentHashMap, PortletHandlerMethodResolver>(); + new HashMap, PortletHandlerMethodResolver>(); /** @@ -393,12 +392,14 @@ public class AnnotationMethodHandlerAdapter extends PortletContentGenerator */ private PortletHandlerMethodResolver getMethodResolver(Object handler) { Class handlerClass = ClassUtils.getUserClass(handler); - PortletHandlerMethodResolver resolver = this.methodResolverCache.get(handlerClass); - if (resolver == null) { - resolver = new PortletHandlerMethodResolver(handlerClass); - this.methodResolverCache.put(handlerClass, resolver); + synchronized (this.methodResolverCache) { + PortletHandlerMethodResolver resolver = this.methodResolverCache.get(handlerClass); + if (resolver == null) { + resolver = new PortletHandlerMethodResolver(handlerClass); + this.methodResolverCache.put(handlerClass, resolver); + } + return resolver; } - return resolver; } diff --git a/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/mvc/annotation/AnnotationMethodHandlerAdapter.java b/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/mvc/annotation/AnnotationMethodHandlerAdapter.java index f7154662ee8..039f8a04ed3 100644 --- a/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/mvc/annotation/AnnotationMethodHandlerAdapter.java +++ b/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/mvc/annotation/AnnotationMethodHandlerAdapter.java @@ -34,7 +34,6 @@ import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; @@ -184,7 +183,7 @@ public class AnnotationMethodHandlerAdapter extends WebContentGenerator private BeanExpressionContext expressionContext; private final Map, ServletHandlerMethodResolver> methodResolverCache = - new ConcurrentHashMap, ServletHandlerMethodResolver>(); + new HashMap, ServletHandlerMethodResolver>(); public AnnotationMethodHandlerAdapter() { @@ -194,7 +193,7 @@ public class AnnotationMethodHandlerAdapter extends WebContentGenerator // See SPR-7316 StringHttpMessageConverter stringHttpMessageConverter = new StringHttpMessageConverter(); stringHttpMessageConverter.setWriteAcceptCharset(false); - messageConverters = new HttpMessageConverter[]{new ByteArrayHttpMessageConverter(), stringHttpMessageConverter, + this.messageConverters = new HttpMessageConverter[]{new ByteArrayHttpMessageConverter(), stringHttpMessageConverter, new SourceHttpMessageConverter(), new XmlAwareFormHttpMessageConverter()}; } @@ -440,12 +439,14 @@ public class AnnotationMethodHandlerAdapter extends WebContentGenerator */ private ServletHandlerMethodResolver getMethodResolver(Object handler) { Class handlerClass = ClassUtils.getUserClass(handler); - ServletHandlerMethodResolver resolver = this.methodResolverCache.get(handlerClass); - if (resolver == null) { - resolver = new ServletHandlerMethodResolver(handlerClass); - this.methodResolverCache.put(handlerClass, resolver); + synchronized (this.methodResolverCache) { + ServletHandlerMethodResolver resolver = this.methodResolverCache.get(handlerClass); + if (resolver == null) { + resolver = new ServletHandlerMethodResolver(handlerClass); + this.methodResolverCache.put(handlerClass, resolver); + } + return resolver; } - return resolver; }