Browse Source

Polishing

pull/22521/head
Juergen Hoeller 6 years ago
parent
commit
df9be494cc
  1. 4
      spring-context/src/main/java/org/springframework/context/annotation/ClassPathScanningCandidateComponentProvider.java
  2. 6
      spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassParser.java
  3. 4
      spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassPostProcessor.java
  4. 4
      spring-context/src/main/java/org/springframework/context/event/AbstractApplicationEventMulticaster.java
  5. 2
      spring-context/src/main/java/org/springframework/context/support/AbstractApplicationContext.java
  6. 4
      spring-context/src/main/java/org/springframework/context/support/ResourceBundleMessageSource.java
  7. 15
      spring-context/src/main/java/org/springframework/context/support/SimpleThreadScope.java
  8. 4
      spring-core/src/main/java/org/springframework/util/ClassUtils.java
  9. 8
      spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompSession.java
  10. 4
      spring-web/src/main/java/org/springframework/http/HttpHeaders.java
  11. 19
      spring-web/src/main/java/org/springframework/web/server/adapter/HttpWebHandlerAdapter.java
  12. 10
      spring-webmvc/src/main/java/org/springframework/web/servlet/DispatcherServlet.java
  13. 8
      spring-webmvc/src/main/java/org/springframework/web/servlet/config/AnnotationDrivenBeanDefinitionParser.java
  14. 14
      spring-webmvc/src/main/java/org/springframework/web/servlet/config/MvcNamespaceUtils.java
  15. 7
      spring-webmvc/src/main/java/org/springframework/web/servlet/handler/AbstractUrlHandlerMapping.java
  16. 8
      spring-webmvc/src/main/java/org/springframework/web/servlet/handler/HandlerExceptionResolverComposite.java
  17. 4
      spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/condition/PatternsRequestCondition.java
  18. 4
      spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/RequestMappingInfoHandlerMethodMappingNamingStrategy.java
  19. 4
      spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ExceptionHandlerExceptionResolver.java
  20. 6
      spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/SessionAttributeMethodArgumentResolver.java
  21. 4
      spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ViewMethodReturnValueHandler.java
  22. 22
      spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ViewNameMethodReturnValueHandler.java

4
spring-context/src/main/java/org/springframework/context/annotation/ClassPathScanningCandidateComponentProvider.java

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2017 the original author or authors. * Copyright 2002-2019 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -377,7 +377,7 @@ public class ClassPathScanningCandidateComponentProvider implements EnvironmentC
for (TypeFilter filter : this.includeFilters) { for (TypeFilter filter : this.includeFilters) {
String stereotype = extractStereotype(filter); String stereotype = extractStereotype(filter);
if (stereotype == null) { if (stereotype == null) {
throw new IllegalArgumentException("Failed to extract stereotype from "+ filter); throw new IllegalArgumentException("Failed to extract stereotype from " + filter);
} }
types.addAll(index.getCandidateTypes(basePackage, stereotype)); types.addAll(index.getCandidateTypes(basePackage, stereotype));
} }

6
spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassParser.java

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2018 the original author or authors. * Copyright 2002-2019 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -896,7 +896,7 @@ class ConfigurationClassParser {
return new AssignableTypeFilter(clazz).match((MetadataReader) this.source, metadataReaderFactory); return new AssignableTypeFilter(clazz).match((MetadataReader) this.source, metadataReaderFactory);
} }
public ConfigurationClass asConfigClass(ConfigurationClass importedBy) throws IOException { public ConfigurationClass asConfigClass(ConfigurationClass importedBy) {
if (this.source instanceof Class) { if (this.source instanceof Class) {
return new ConfigurationClass((Class<?>) this.source, importedBy); return new ConfigurationClass((Class<?>) this.source, importedBy);
} }
@ -964,7 +964,7 @@ class ConfigurationClassParser {
return result; return result;
} }
public Set<SourceClass> getAnnotations() throws IOException { public Set<SourceClass> getAnnotations() {
Set<SourceClass> result = new LinkedHashSet<>(); Set<SourceClass> result = new LinkedHashSet<>();
for (String className : this.metadata.getAnnotationTypes()) { for (String className : this.metadata.getAnnotationTypes()) {
try { try {

4
spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassPostProcessor.java

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2018 the original author or authors. * Copyright 2002-2019 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -438,7 +438,7 @@ public class ConfigurationClassPostProcessor implements BeanDefinitionRegistryPo
} }
@Override @Override
public Object postProcessBeforeInitialization(Object bean, String beanName) { public Object postProcessBeforeInitialization(Object bean, String beanName) {
if (bean instanceof ImportAware) { if (bean instanceof ImportAware) {
ImportRegistry ir = this.beanFactory.getBean(IMPORT_REGISTRY_BEAN_NAME, ImportRegistry.class); ImportRegistry ir = this.beanFactory.getBean(IMPORT_REGISTRY_BEAN_NAME, ImportRegistry.class);
AnnotationMetadata importingClass = ir.getImportingClassFor(bean.getClass().getSuperclass().getName()); AnnotationMetadata importingClass = ir.getImportingClassFor(bean.getClass().getSuperclass().getName());

4
spring-context/src/main/java/org/springframework/context/event/AbstractApplicationEventMulticaster.java

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2018 the original author or authors. * Copyright 2002-2019 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -269,7 +269,7 @@ public abstract class AbstractApplicationEventMulticaster
* type before trying to instantiate it. * type before trying to instantiate it.
* <p>If this method returns {@code true} for a given listener as a first pass, * <p>If this method returns {@code true} for a given listener as a first pass,
* the listener instance will get retrieved and fully evaluated through a * the listener instance will get retrieved and fully evaluated through a
* {@link #supportsEvent(ApplicationListener,ResolvableType, Class)} call afterwards. * {@link #supportsEvent(ApplicationListener, ResolvableType, Class)} call afterwards.
* @param listenerType the listener's type as determined by the BeanFactory * @param listenerType the listener's type as determined by the BeanFactory
* @param eventType the event type to check * @param eventType the event type to check
* @return whether the given listener should be included in the candidates * @return whether the given listener should be included in the candidates

2
spring-context/src/main/java/org/springframework/context/support/AbstractApplicationContext.java

@ -1243,7 +1243,7 @@ public abstract class AbstractApplicationContext extends DefaultResourceLoader
@Override @Override
@Nullable @Nullable
public <A extends Annotation> A findAnnotationOnBean(String beanName, Class<A> annotationType) public <A extends Annotation> A findAnnotationOnBean(String beanName, Class<A> annotationType)
throws NoSuchBeanDefinitionException{ throws NoSuchBeanDefinitionException {
assertBeanFactoryActive(); assertBeanFactoryActive();
return getBeanFactory().findAnnotationOnBean(beanName, annotationType); return getBeanFactory().findAnnotationOnBean(beanName, annotationType);

4
spring-context/src/main/java/org/springframework/context/support/ResourceBundleMessageSource.java

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2018 the original author or authors. * Copyright 2002-2019 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -329,7 +329,7 @@ public class ResourceBundleMessageSource extends AbstractResourceBasedMessageSou
try { try {
return bundle.getString(key); return bundle.getString(key);
} }
catch (MissingResourceException ex){ catch (MissingResourceException ex) {
// Assume key not found for some other reason // Assume key not found for some other reason
// -> do NOT throw the exception to allow for checking parent message source. // -> do NOT throw the exception to allow for checking parent message source.
} }

15
spring-context/src/main/java/org/springframework/context/support/SimpleThreadScope.java

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2017 the original author or authors. * Copyright 2002-2019 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -36,14 +36,13 @@ import org.springframework.lang.Nullable;
* or through a {@link org.springframework.beans.factory.config.CustomScopeConfigurer} bean. * or through a {@link org.springframework.beans.factory.config.CustomScopeConfigurer} bean.
* *
* <p>{@code SimpleThreadScope} <em>does not clean up any objects</em> associated with it. * <p>{@code SimpleThreadScope} <em>does not clean up any objects</em> associated with it.
* As such, it is typically preferable to use * It is therefore typically preferable to use a request-bound scope implementation such
* {@link org.springframework.web.context.request.RequestScope RequestScope} * as {@code org.springframework.web.context.request.RequestScope} in web environments,
* in web environments. * implementing the full lifecycle for scoped attributes (including reliable destruction).
* *
* <p>For an implementation of a thread-based {@code Scope} with support for * <p>For an implementation of a thread-based {@code Scope} with support for destruction
* destruction callbacks, refer to the * callbacks, refer to
* <a href="http://www.springbyexample.org/examples/custom-thread-scope-module.html"> * <a href="http://www.springbyexample.org/examples/custom-thread-scope-module.html">Spring by Example</a>.
* Spring by Example Custom Thread Scope Module</a>.
* *
* <p>Thanks to Eugene Kuleshov for submitting the original prototype for a thread scope! * <p>Thanks to Eugene Kuleshov for submitting the original prototype for a thread scope!
* *

4
spring-core/src/main/java/org/springframework/util/ClassUtils.java

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2018 the original author or authors. * Copyright 2002-2019 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -42,7 +42,7 @@ import java.util.Set;
import org.springframework.lang.Nullable; import org.springframework.lang.Nullable;
/** /**
* Miscellaneous class utility methods. * Miscellaneous {@code java.lang.Class} utility methods.
* Mainly for internal use within the framework. * Mainly for internal use within the framework.
* *
* @author Juergen Hoeller * @author Juergen Hoeller

8
spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompSession.java

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2018 the original author or authors. * Copyright 2002-2019 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -19,8 +19,8 @@ package org.springframework.messaging.simp.stomp;
import org.springframework.lang.Nullable; import org.springframework.lang.Nullable;
/** /**
* Represents a STOMP session with operations to send messages, create * Represents a STOMP session with operations to send messages,
* subscriptions and receive messages on those subscriptions. * create subscriptions and receive messages on those subscriptions.
* *
* @author Rossen Stoyanchev * @author Rossen Stoyanchev
* @since 4.2 * @since 4.2
@ -63,7 +63,7 @@ public interface StompSession {
* {@link StompHeaders} instead of just a destination. The headers must * {@link StompHeaders} instead of just a destination. The headers must
* contain a destination and may also have other headers such as * contain a destination and may also have other headers such as
* "content-type" or custom headers for the broker to propagate to * "content-type" or custom headers for the broker to propagate to
* subscribers, or broker-specific, non-standard headers.. * subscribers, or broker-specific, non-standard headers.
* @param headers the message headers * @param headers the message headers
* @param payload the message payload * @param payload the message payload
* @return a Receiptable for tracking receipts * @return a Receiptable for tracking receipts

4
spring-web/src/main/java/org/springframework/http/HttpHeaders.java

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2018 the original author or authors. * Copyright 2002-2019 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -1551,7 +1551,7 @@ public class HttpHeaders implements MultiValueMap<String, String>, Serializable
/** /**
* Return a {@code HttpHeaders} object that can only be read, not written to. * Return an {@code HttpHeaders} object that can only be read, not written to.
*/ */
public static HttpHeaders readOnlyHttpHeaders(HttpHeaders headers) { public static HttpHeaders readOnlyHttpHeaders(HttpHeaders headers) {
Assert.notNull(headers, "HttpHeaders must not be null"); Assert.notNull(headers, "HttpHeaders must not be null");

19
spring-web/src/main/java/org/springframework/web/server/adapter/HttpWebHandlerAdapter.java

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2018 the original author or authors. * Copyright 2002-2019 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -126,7 +126,7 @@ public class HttpWebHandlerAdapter extends WebHandlerDecorator implements HttpHa
* @param codecConfigurer the codec configurer to use * @param codecConfigurer the codec configurer to use
*/ */
public void setCodecConfigurer(ServerCodecConfigurer codecConfigurer) { public void setCodecConfigurer(ServerCodecConfigurer codecConfigurer) {
Assert.notNull(codecConfigurer, "ServerCodecConfigurer must not be null"); Assert.notNull(codecConfigurer, "ServerCodecConfigurer is required");
this.codecConfigurer = codecConfigurer; this.codecConfigurer = codecConfigurer;
} }
@ -159,8 +159,7 @@ public class HttpWebHandlerAdapter extends WebHandlerDecorator implements HttpHa
/** /**
* Configure the {@code ApplicationContext} associated with the web application, * Configure the {@code ApplicationContext} associated with the web application,
* if it was initialized with one via * if it was initialized with one via
* {@link org.springframework.web.server.adapter.WebHttpHandlerBuilder#applicationContext * {@link org.springframework.web.server.adapter.WebHttpHandlerBuilder#applicationContext(ApplicationContext)}.
* WebHttpHandlerBuilder#applicationContext}.
* @param applicationContext the context * @param applicationContext the context
* @since 5.0.3 * @since 5.0.3
*/ */
@ -204,8 +203,7 @@ public class HttpWebHandlerAdapter extends WebHandlerDecorator implements HttpHa
return Mono.empty(); return Mono.empty();
} }
if (response.setStatusCode(HttpStatus.INTERNAL_SERVER_ERROR)) { if (response.setStatusCode(HttpStatus.INTERNAL_SERVER_ERROR)) {
logger.error("Failed to handle request [" + request.getMethod() + " " logger.error("Failed to handle request [" + request.getMethod() + " " + request.getURI() + "]", ex);
+ request.getURI() + "]", ex);
return Mono.empty(); return Mono.empty();
} }
// After the response is committed, propagate errors to the server.. // After the response is committed, propagate errors to the server..
@ -214,11 +212,12 @@ public class HttpWebHandlerAdapter extends WebHandlerDecorator implements HttpHa
return Mono.error(ex); return Mono.error(ex);
} }
private boolean isDisconnectedClientError(Throwable ex) { private boolean isDisconnectedClientError(Throwable ex) {
String message = NestedExceptionUtils.getMostSpecificCause(ex).getMessage(); String message = NestedExceptionUtils.getMostSpecificCause(ex).getMessage();
message = (message != null ? message.toLowerCase() : ""); if (message != null && message.toLowerCase().contains("broken pipe")) {
String className = ex.getClass().getSimpleName(); return true;
return (message.contains("broken pipe") || DISCONNECTED_CLIENT_EXCEPTIONS.contains(className)); }
return DISCONNECTED_CLIENT_EXCEPTIONS.contains(ex.getClass().getSimpleName());
} }
} }

10
spring-webmvc/src/main/java/org/springframework/web/servlet/DispatcherServlet.java

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2018 the original author or authors. * Copyright 2002-2019 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -1119,8 +1119,8 @@ public class DispatcherServlet extends FrameworkServlet {
logger.debug("Request is already a MultipartHttpServletRequest - if not in a forward, " + logger.debug("Request is already a MultipartHttpServletRequest - if not in a forward, " +
"this typically results from an additional MultipartFilter in web.xml"); "this typically results from an additional MultipartFilter in web.xml");
} }
else if (hasMultipartException(request) ) { else if (hasMultipartException(request)) {
logger.debug("Multipart resolution failed for current request before - " + logger.debug("Multipart resolution previously failed for current request - " +
"skipping re-resolution for undisturbed error rendering"); "skipping re-resolution for undisturbed error rendering");
} }
else { else {
@ -1388,7 +1388,7 @@ public class DispatcherServlet extends FrameworkServlet {
* @param attributesSnapshot the snapshot of the request attributes before the include * @param attributesSnapshot the snapshot of the request attributes before the include
*/ */
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
private void restoreAttributesAfterInclude(HttpServletRequest request, Map<?,?> attributesSnapshot) { private void restoreAttributesAfterInclude(HttpServletRequest request, Map<?, ?> attributesSnapshot) {
// Need to copy into separate Collection here, to avoid side effects // Need to copy into separate Collection here, to avoid side effects
// on the Enumeration when removing attributes. // on the Enumeration when removing attributes.
Set<String> attrsToCheck = new HashSet<>(); Set<String> attrsToCheck = new HashSet<>();
@ -1407,7 +1407,7 @@ public class DispatcherServlet extends FrameworkServlet {
// or removing the attribute, respectively, if appropriate. // or removing the attribute, respectively, if appropriate.
for (String attrName : attrsToCheck) { for (String attrName : attrsToCheck) {
Object attrValue = attributesSnapshot.get(attrName); Object attrValue = attributesSnapshot.get(attrName);
if (attrValue == null){ if (attrValue == null) {
request.removeAttribute(attrName); request.removeAttribute(attrName);
} }
else if (attrValue != request.getAttribute(attrName)) { else if (attrValue != request.getAttribute(attrName)) {

8
spring-webmvc/src/main/java/org/springframework/web/servlet/config/AnnotationDrivenBeanDefinitionParser.java

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2018 the original author or authors. * Copyright 2002-2019 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -218,7 +218,7 @@ class AnnotationDrivenBeanDefinitionParser implements BeanDefinitionParser {
} }
configurePathMatchingProperties(handlerMappingDef, element, context); configurePathMatchingProperties(handlerMappingDef, element, context);
readerContext.getRegistry().registerBeanDefinition(HANDLER_MAPPING_BEAN_NAME , handlerMappingDef); readerContext.getRegistry().registerBeanDefinition(HANDLER_MAPPING_BEAN_NAME, handlerMappingDef);
RuntimeBeanReference corsRef = MvcNamespaceUtils.registerCorsConfigurations(null, context, source); RuntimeBeanReference corsRef = MvcNamespaceUtils.registerCorsConfigurations(null, context, source);
handlerMappingDef.getPropertyValues().add("corsConfigurations", corsRef); handlerMappingDef.getPropertyValues().add("corsConfigurations", corsRef);
@ -270,7 +270,7 @@ class AnnotationDrivenBeanDefinitionParser implements BeanDefinitionParser {
handlerAdapterDef.getPropertyValues().add("callableInterceptors", callableInterceptors); handlerAdapterDef.getPropertyValues().add("callableInterceptors", callableInterceptors);
handlerAdapterDef.getPropertyValues().add("deferredResultInterceptors", deferredResultInterceptors); handlerAdapterDef.getPropertyValues().add("deferredResultInterceptors", deferredResultInterceptors);
readerContext.getRegistry().registerBeanDefinition(HANDLER_ADAPTER_BEAN_NAME , handlerAdapterDef); readerContext.getRegistry().registerBeanDefinition(HANDLER_ADAPTER_BEAN_NAME, handlerAdapterDef);
RootBeanDefinition uriContributorDef = RootBeanDefinition uriContributorDef =
new RootBeanDefinition(CompositeUriComponentsContributorFactoryBean.class); new RootBeanDefinition(CompositeUriComponentsContributorFactoryBean.class);
@ -396,7 +396,7 @@ class AnnotationDrivenBeanDefinitionParser implements BeanDefinitionParser {
factoryBeanDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE); factoryBeanDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
factoryBeanDef.getPropertyValues().add("mediaTypes", getDefaultMediaTypes()); factoryBeanDef.getPropertyValues().add("mediaTypes", getDefaultMediaTypes());
String name = CONTENT_NEGOTIATION_MANAGER_BEAN_NAME; String name = CONTENT_NEGOTIATION_MANAGER_BEAN_NAME;
context.getReaderContext().getRegistry().registerBeanDefinition(name , factoryBeanDef); context.getReaderContext().getRegistry().registerBeanDefinition(name, factoryBeanDef);
context.registerComponent(new BeanComponentDefinition(factoryBeanDef, name)); context.registerComponent(new BeanComponentDefinition(factoryBeanDef, name));
beanRef = new RuntimeBeanReference(name); beanRef = new RuntimeBeanReference(name);
} }

14
spring-webmvc/src/main/java/org/springframework/web/servlet/config/MvcNamespaceUtils.java

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2017 the original author or authors. * Copyright 2002-2019 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -82,8 +82,8 @@ public abstract class MvcNamespaceUtils {
} }
parserContext.getRegistry().registerAlias(urlPathHelperRef.getBeanName(), URL_PATH_HELPER_BEAN_NAME); parserContext.getRegistry().registerAlias(urlPathHelperRef.getBeanName(), URL_PATH_HELPER_BEAN_NAME);
} }
else if (!parserContext.getRegistry().isAlias(URL_PATH_HELPER_BEAN_NAME) else if (!parserContext.getRegistry().isAlias(URL_PATH_HELPER_BEAN_NAME) &&
&& !parserContext.getRegistry().containsBeanDefinition(URL_PATH_HELPER_BEAN_NAME)) { !parserContext.getRegistry().containsBeanDefinition(URL_PATH_HELPER_BEAN_NAME)) {
RootBeanDefinition urlPathHelperDef = new RootBeanDefinition(UrlPathHelper.class); RootBeanDefinition urlPathHelperDef = new RootBeanDefinition(UrlPathHelper.class);
urlPathHelperDef.setSource(source); urlPathHelperDef.setSource(source);
urlPathHelperDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE); urlPathHelperDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
@ -107,8 +107,8 @@ public abstract class MvcNamespaceUtils {
} }
parserContext.getRegistry().registerAlias(pathMatcherRef.getBeanName(), PATH_MATCHER_BEAN_NAME); parserContext.getRegistry().registerAlias(pathMatcherRef.getBeanName(), PATH_MATCHER_BEAN_NAME);
} }
else if (!parserContext.getRegistry().isAlias(PATH_MATCHER_BEAN_NAME) else if (!parserContext.getRegistry().isAlias(PATH_MATCHER_BEAN_NAME) &&
&& !parserContext.getRegistry().containsBeanDefinition(PATH_MATCHER_BEAN_NAME)) { !parserContext.getRegistry().containsBeanDefinition(PATH_MATCHER_BEAN_NAME)) {
RootBeanDefinition pathMatcherDef = new RootBeanDefinition(AntPathMatcher.class); RootBeanDefinition pathMatcherDef = new RootBeanDefinition(AntPathMatcher.class);
pathMatcherDef.setSource(source); pathMatcherDef.setSource(source);
pathMatcherDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE); pathMatcherDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
@ -123,7 +123,7 @@ public abstract class MvcNamespaceUtils {
* name unless already registered. * name unless already registered.
*/ */
private static void registerBeanNameUrlHandlerMapping(ParserContext context, @Nullable Object source) { private static void registerBeanNameUrlHandlerMapping(ParserContext context, @Nullable Object source) {
if (!context.getRegistry().containsBeanDefinition(BEAN_NAME_URL_HANDLER_MAPPING_BEAN_NAME)){ if (!context.getRegistry().containsBeanDefinition(BEAN_NAME_URL_HANDLER_MAPPING_BEAN_NAME)) {
RootBeanDefinition mappingDef = new RootBeanDefinition(BeanNameUrlHandlerMapping.class); RootBeanDefinition mappingDef = new RootBeanDefinition(BeanNameUrlHandlerMapping.class);
mappingDef.setSource(source); mappingDef.setSource(source);
mappingDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE); mappingDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
@ -195,7 +195,7 @@ public abstract class MvcNamespaceUtils {
* unless already registered. * unless already registered.
*/ */
private static void registerHandlerMappingIntrospector(ParserContext parserContext, @Nullable Object source) { private static void registerHandlerMappingIntrospector(ParserContext parserContext, @Nullable Object source) {
if (!parserContext.getRegistry().containsBeanDefinition(HANDLER_MAPPING_INTROSPECTOR_BEAN_NAME)){ if (!parserContext.getRegistry().containsBeanDefinition(HANDLER_MAPPING_INTROSPECTOR_BEAN_NAME)) {
RootBeanDefinition beanDef = new RootBeanDefinition(HandlerMappingIntrospector.class); RootBeanDefinition beanDef = new RootBeanDefinition(HandlerMappingIntrospector.class);
beanDef.setSource(source); beanDef.setSource(source);
beanDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE); beanDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);

7
spring-webmvc/src/main/java/org/springframework/web/servlet/handler/AbstractUrlHandlerMapping.java

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2018 the original author or authors. * Copyright 2002-2019 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -22,7 +22,6 @@ import java.util.Comparator;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
@ -158,7 +157,7 @@ public abstract class AbstractUrlHandlerMapping extends AbstractHandlerMapping i
* both "/test" and "/team". For details, see the AntPathMatcher class. * both "/test" and "/team". For details, see the AntPathMatcher class.
* <p>Looks for the most exact pattern, where most exact is defined as * <p>Looks for the most exact pattern, where most exact is defined as
* the longest path pattern. * the longest path pattern.
* @param urlPath URL the bean is mapped to * @param urlPath the URL the bean is mapped to
* @param request current HTTP request (to expose the path within the mapping to) * @param request current HTTP request (to expose the path within the mapping to)
* @return the associated handler instance, or {@code null} if not found * @return the associated handler instance, or {@code null} if not found
* @see #exposePathWithinMapping * @see #exposePathWithinMapping
@ -186,7 +185,7 @@ public abstract class AbstractUrlHandlerMapping extends AbstractHandlerMapping i
} }
else if (useTrailingSlashMatch()) { else if (useTrailingSlashMatch()) {
if (!registeredPattern.endsWith("/") && getPathMatcher().match(registeredPattern + "/", urlPath)) { if (!registeredPattern.endsWith("/") && getPathMatcher().match(registeredPattern + "/", urlPath)) {
matchingPatterns.add(registeredPattern +"/"); matchingPatterns.add(registeredPattern + "/");
} }
} }
} }

8
spring-webmvc/src/main/java/org/springframework/web/servlet/handler/HandlerExceptionResolverComposite.java

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2017 the original author or authors. * Copyright 2002-2019 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -66,12 +66,12 @@ public class HandlerExceptionResolverComposite implements HandlerExceptionResolv
/** /**
* Resolve the exception by iterating over the list of configured exception resolvers. * Resolve the exception by iterating over the list of configured exception resolvers.
* The first one to return a ModelAndView instance wins. Otherwise {@code null} is returned. * <p>The first one to return a {@link ModelAndView} wins. Otherwise {@code null} is returned.
*/ */
@Override @Override
@Nullable @Nullable
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, public ModelAndView resolveException(
@Nullable Object handler,Exception ex) { HttpServletRequest request, HttpServletResponse response, @Nullable Object handler, Exception ex) {
if (this.resolvers != null) { if (this.resolvers != null) {
for (HandlerExceptionResolver handlerExceptionResolver : this.resolvers) { for (HandlerExceptionResolver handlerExceptionResolver : this.resolvers) {

4
spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/condition/PatternsRequestCondition.java

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2018 the original author or authors. * Copyright 2002-2019 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -256,7 +256,7 @@ public final class PatternsRequestCondition extends AbstractRequestCondition<Pat
} }
if (this.useTrailingSlashMatch) { if (this.useTrailingSlashMatch) {
if (!pattern.endsWith("/") && this.pathMatcher.match(pattern + "/", lookupPath)) { if (!pattern.endsWith("/") && this.pathMatcher.match(pattern + "/", lookupPath)) {
return pattern +"/"; return pattern + "/";
} }
} }
return null; return null;

4
spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/RequestMappingInfoHandlerMethodMappingNamingStrategy.java

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2014 the original author or authors. * Copyright 2002-2019 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -46,7 +46,7 @@ public class RequestMappingInfoHandlerMethodMappingNamingStrategy
} }
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
String simpleTypeName = handlerMethod.getBeanType().getSimpleName(); String simpleTypeName = handlerMethod.getBeanType().getSimpleName();
for (int i = 0 ; i < simpleTypeName.length(); i++) { for (int i = 0; i < simpleTypeName.length(); i++) {
if (Character.isUpperCase(simpleTypeName.charAt(i))) { if (Character.isUpperCase(simpleTypeName.charAt(i))) {
sb.append(simpleTypeName.charAt(i)); sb.append(simpleTypeName.charAt(i));
} }

4
spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ExceptionHandlerExceptionResolver.java

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2018 the original author or authors. * Copyright 2002-2019 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -122,7 +122,7 @@ public class ExceptionHandlerExceptionResolver extends AbstractHandlerMethodExce
* resolution use {@link #setArgumentResolvers} instead. * resolution use {@link #setArgumentResolvers} instead.
*/ */
public void setCustomArgumentResolvers(@Nullable List<HandlerMethodArgumentResolver> argumentResolvers) { public void setCustomArgumentResolvers(@Nullable List<HandlerMethodArgumentResolver> argumentResolvers) {
this.customArgumentResolvers= argumentResolvers; this.customArgumentResolvers = argumentResolvers;
} }
/** /**

6
spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/SessionAttributeMethodArgumentResolver.java

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2017 the original author or authors. * Copyright 2002-2019 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -50,14 +50,14 @@ public class SessionAttributeMethodArgumentResolver extends AbstractNamedValueMe
@Override @Override
@Nullable @Nullable
protected Object resolveName(String name, MethodParameter parameter, NativeWebRequest request){ protected Object resolveName(String name, MethodParameter parameter, NativeWebRequest request) {
return request.getAttribute(name, RequestAttributes.SCOPE_SESSION); return request.getAttribute(name, RequestAttributes.SCOPE_SESSION);
} }
@Override @Override
protected void handleMissingValue(String name, MethodParameter parameter) throws ServletException { protected void handleMissingValue(String name, MethodParameter parameter) throws ServletException {
throw new ServletRequestBindingException("Missing session attribute '" + name + throw new ServletRequestBindingException("Missing session attribute '" + name +
"' of type " + parameter.getNestedParameterType().getSimpleName()); "' of type " + parameter.getNestedParameterType().getSimpleName());
} }
} }

4
spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ViewMethodReturnValueHandler.java

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2018 the original author or authors. * Copyright 2002-2019 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -50,7 +50,7 @@ public class ViewMethodReturnValueHandler implements HandlerMethodReturnValueHan
public void handleReturnValue(@Nullable Object returnValue, MethodParameter returnType, public void handleReturnValue(@Nullable Object returnValue, MethodParameter returnType,
ModelAndViewContainer mavContainer, NativeWebRequest webRequest) throws Exception { ModelAndViewContainer mavContainer, NativeWebRequest webRequest) throws Exception {
if (returnValue instanceof View){ if (returnValue instanceof View) {
View view = (View) returnValue; View view = (View) returnValue;
mavContainer.setView(view); mavContainer.setView(view);
if (view instanceof SmartView && ((SmartView) view).isRedirectView()) { if (view instanceof SmartView && ((SmartView) view).isRedirectView()) {

22
spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ViewNameMethodReturnValueHandler.java

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2017 the original author or authors. * Copyright 2002-2019 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -33,10 +33,10 @@ import org.springframework.web.servlet.RequestToViewNameTranslator;
* as the actual return value is left as-is allowing the configured * as the actual return value is left as-is allowing the configured
* {@link RequestToViewNameTranslator} to select a view name by convention. * {@link RequestToViewNameTranslator} to select a view name by convention.
* *
* <p>A String return value can be interpreted in more than one ways depending * <p>A String return value can be interpreted in more than one ways depending on
* on the presence of annotations like {@code @ModelAttribute} or * the presence of annotations like {@code @ModelAttribute} or {@code @ResponseBody}.
* {@code @ResponseBody}. Therefore this handler should be configured after * Therefore this handler should be configured after the handlers that support these
* the handlers that support these annotations. * annotations.
* *
* @author Rossen Stoyanchev * @author Rossen Stoyanchev
* @author Juergen Hoeller * @author Juergen Hoeller
@ -49,12 +49,10 @@ public class ViewNameMethodReturnValueHandler implements HandlerMethodReturnValu
/** /**
* Configure one more simple patterns (as described in * Configure one more simple patterns (as described in {@link PatternMatchUtils#simpleMatch})
* {@link PatternMatchUtils#simpleMatch}) to use in order to recognize * to use in order to recognize custom redirect prefixes in addition to "redirect:".
* custom redirect prefixes in addition to "redirect:". * <p>Note that simply configuring this property will not make a custom redirect prefix work.
* <p>Note that simply configuring this property will not make a custom * There must be a custom View that recognizes the prefix as well.
* redirect prefix work. There must be a custom View that recognizes the
* prefix as well.
* @since 4.1 * @since 4.1
*/ */
public void setRedirectPatterns(@Nullable String... redirectPatterns) { public void setRedirectPatterns(@Nullable String... redirectPatterns) {
@ -87,7 +85,7 @@ public class ViewNameMethodReturnValueHandler implements HandlerMethodReturnValu
mavContainer.setRedirectModelScenario(true); mavContainer.setRedirectModelScenario(true);
} }
} }
else if (returnValue != null){ else if (returnValue != null) {
// should not happen // should not happen
throw new UnsupportedOperationException("Unexpected return type: " + throw new UnsupportedOperationException("Unexpected return type: " +
returnType.getParameterType().getName() + " in method: " + returnType.getMethod()); returnType.getParameterType().getName() + " in method: " + returnType.getMethod());

Loading…
Cancel
Save