diff --git a/spring-beans/src/main/java/org/springframework/beans/AbstractNestablePropertyAccessor.java b/spring-beans/src/main/java/org/springframework/beans/AbstractNestablePropertyAccessor.java index 9790cf79787..5e19d1940a5 100644 --- a/spring-beans/src/main/java/org/springframework/beans/AbstractNestablePropertyAccessor.java +++ b/spring-beans/src/main/java/org/springframework/beans/AbstractNestablePropertyAccessor.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"); * you may not use this file except in compliance with the License. @@ -958,6 +958,7 @@ public abstract class AbstractNestablePropertyAccessor extends AbstractPropertyA return tokens; } + @Override public String toString() { StringBuilder sb = new StringBuilder(getClass().getName()); diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/support/AbstractBeanDefinition.java b/spring-beans/src/main/java/org/springframework/beans/factory/support/AbstractBeanDefinition.java index cb266c46601..c64b1a7ee2a 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/support/AbstractBeanDefinition.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/support/AbstractBeanDefinition.java @@ -352,7 +352,8 @@ public abstract class AbstractBeanDefinition extends BeanMetadataAttributeAccess /** * Apply the provided default values to this bean. - * @param defaults the defaults to apply + * @param defaults the default settings to apply + * @since 2.5 */ public void applyDefaults(BeanDefinitionDefaults defaults) { setLazyInit(defaults.isLazyInit()); @@ -515,6 +516,7 @@ public abstract class AbstractBeanDefinition extends BeanMetadataAttributeAccess /** * Return whether this bean should be lazily initialized, i.e. not * eagerly instantiated on startup. Only applicable to a singleton bean. + * @return whether to apply lazy-init semantics ({@code false} by default) */ @Override public boolean isLazyInit() { @@ -523,8 +525,9 @@ public abstract class AbstractBeanDefinition extends BeanMetadataAttributeAccess /** * Set the autowire mode. This determines whether any automagical detection - * and setting of bean references will happen. Default is AUTOWIRE_NO, - * which means there's no autowire. + * and setting of bean references will happen. Default is AUTOWIRE_NO + * which means there won't be convention-based autowiring by name or type + * (however, there may still be explicit annotation-driven autowiring). * @param autowireMode the autowire mode to set. * Must be one of the constants defined in this class. * @see #AUTOWIRE_NO diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/support/BeanDefinitionDefaults.java b/spring-beans/src/main/java/org/springframework/beans/factory/support/BeanDefinitionDefaults.java index 2a3bd635f93..19bc13b72c3 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/support/BeanDefinitionDefaults.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/support/BeanDefinitionDefaults.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"); * you may not use this file except in compliance with the License. @@ -23,16 +23,17 @@ import org.springframework.util.StringUtils; * A simple holder for {@code BeanDefinition} property defaults. * * @author Mark Fisher + * @author Juergen Hoeller * @since 2.5 */ public class BeanDefinitionDefaults { private boolean lazyInit; - private int dependencyCheck = AbstractBeanDefinition.DEPENDENCY_CHECK_NONE; - private int autowireMode = AbstractBeanDefinition.AUTOWIRE_NO; + private int dependencyCheck = AbstractBeanDefinition.DEPENDENCY_CHECK_NONE; + @Nullable private String initMethodName; @@ -40,43 +41,84 @@ public class BeanDefinitionDefaults { private String destroyMethodName; + /** + * Set whether beans should be lazily initialized by default. + *

If {@code false}, the bean will get instantiated on startup by bean + * factories that perform eager initialization of singletons. + */ public void setLazyInit(boolean lazyInit) { this.lazyInit = lazyInit; } + /** + * Return whether beans should be lazily initialized by default, i.e. not + * eagerly instantiated on startup. Only applicable to singleton beans. + * @return whether to apply lazy-init semantics ({@code false} by default) + */ public boolean isLazyInit() { return this.lazyInit; } - public void setDependencyCheck(int dependencyCheck) { - this.dependencyCheck = dependencyCheck; - } - - public int getDependencyCheck() { - return this.dependencyCheck; - } - + /** + * Set the autowire mode. This determines whether any automagical detection + * and setting of bean references will happen. Default is AUTOWIRE_NO + * which means there won't be convention-based autowiring by name or type + * (however, there may still be explicit annotation-driven autowiring). + * @param autowireMode the autowire mode to set. + * Must be one of the constants defined in {@link AbstractBeanDefinition}. + */ public void setAutowireMode(int autowireMode) { this.autowireMode = autowireMode; } + /** + * Return the default autowire mode. + */ public int getAutowireMode() { return this.autowireMode; } + /** + * Set the dependency check code. + * @param dependencyCheck the code to set. + * Must be one of the constants defined in {@link AbstractBeanDefinition}. + */ + public void setDependencyCheck(int dependencyCheck) { + this.dependencyCheck = dependencyCheck; + } + + /** + * Return the default dependency check code. + */ + public int getDependencyCheck() { + return this.dependencyCheck; + } + + /** + * Set the name of the default initializer method. + */ public void setInitMethodName(@Nullable String initMethodName) { this.initMethodName = (StringUtils.hasText(initMethodName) ? initMethodName : null); } + /** + * Return the name of the default initializer method. + */ @Nullable public String getInitMethodName() { return this.initMethodName; } + /** + * Set the name of the default destroy method. + */ public void setDestroyMethodName(@Nullable String destroyMethodName) { this.destroyMethodName = (StringUtils.hasText(destroyMethodName) ? destroyMethodName : null); } + /** + * Return the name of the default destroy method. + */ @Nullable public String getDestroyMethodName() { return this.destroyMethodName; diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/xml/BeanDefinitionParserDelegate.java b/spring-beans/src/main/java/org/springframework/beans/factory/xml/BeanDefinitionParserDelegate.java index 5b0ee945f5b..5672ddcc7a6 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/xml/BeanDefinitionParserDelegate.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/xml/BeanDefinitionParserDelegate.java @@ -377,7 +377,7 @@ public class BeanDefinitionParserDelegate { */ public BeanDefinitionDefaults getBeanDefinitionDefaults() { BeanDefinitionDefaults bdd = new BeanDefinitionDefaults(); - bdd.setLazyInit("TRUE".equalsIgnoreCase(this.defaults.getLazyInit())); + bdd.setLazyInit(TRUE_VALUE.equalsIgnoreCase(this.defaults.getLazyInit())); bdd.setAutowireMode(getAutowireMode(DEFAULT_VALUE)); bdd.setInitMethodName(this.defaults.getInitMethod()); bdd.setDestroyMethodName(this.defaults.getDestroyMethod()); diff --git a/spring-core/src/main/java/org/springframework/core/log/LogFormatUtils.java b/spring-core/src/main/java/org/springframework/core/log/LogFormatUtils.java index cced2bf3d73..c00c33464fc 100644 --- a/spring-core/src/main/java/org/springframework/core/log/LogFormatUtils.java +++ b/spring-core/src/main/java/org/springframework/core/log/LogFormatUtils.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"); * you may not use this file except in compliance with the License. @@ -82,8 +82,9 @@ public abstract class LogFormatUtils { */ public static void traceDebug(Log logger, Function messageFactory) { if (logger.isDebugEnabled()) { - String logMessage = messageFactory.apply(logger.isTraceEnabled()); - if (logger.isTraceEnabled()) { + boolean traceEnabled = logger.isTraceEnabled(); + String logMessage = messageFactory.apply(traceEnabled); + if (traceEnabled) { logger.trace(logMessage); } else { diff --git a/spring-jdbc/src/test/java/org/springframework/jdbc/core/namedparam/BeanPropertySqlParameterSourceTests.java b/spring-jdbc/src/test/java/org/springframework/jdbc/core/namedparam/BeanPropertySqlParameterSourceTests.java index 4edec32b0c6..952523d33f6 100644 --- a/spring-jdbc/src/test/java/org/springframework/jdbc/core/namedparam/BeanPropertySqlParameterSourceTests.java +++ b/spring-jdbc/src/test/java/org/springframework/jdbc/core/namedparam/BeanPropertySqlParameterSourceTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2013 the original author or authors. + * Copyright 2002-2019 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. @@ -33,12 +33,12 @@ import static org.junit.Assert.*; public class BeanPropertySqlParameterSourceTests { @Test(expected = IllegalArgumentException.class) - public void withNullBeanPassedToCtor() throws Exception { + public void withNullBeanPassedToCtor() { new BeanPropertySqlParameterSource(null); } @Test(expected = IllegalArgumentException.class) - public void getValueWhereTheUnderlyingBeanHasNoSuchProperty() throws Exception { + public void getValueWhereTheUnderlyingBeanHasNoSuchProperty() { BeanPropertySqlParameterSource source = new BeanPropertySqlParameterSource(new TestBean()); source.getValue("thisPropertyDoesNotExist"); } @@ -65,19 +65,19 @@ public class BeanPropertySqlParameterSourceTests { } @Test - public void hasValueWhereTheUnderlyingBeanHasNoSuchProperty() throws Exception { + public void hasValueWhereTheUnderlyingBeanHasNoSuchProperty() { BeanPropertySqlParameterSource source = new BeanPropertySqlParameterSource(new TestBean()); assertFalse(source.hasValue("thisPropertyDoesNotExist")); } @Test(expected = IllegalArgumentException.class) - public void getValueWhereTheUnderlyingBeanPropertyIsNotReadable() throws Exception { + public void getValueWhereTheUnderlyingBeanPropertyIsNotReadable() { BeanPropertySqlParameterSource source = new BeanPropertySqlParameterSource(new NoReadableProperties()); source.getValue("noOp"); } @Test - public void hasValueWhereTheUnderlyingBeanPropertyIsNotReadable() throws Exception { + public void hasValueWhereTheUnderlyingBeanPropertyIsNotReadable() { BeanPropertySqlParameterSource source = new BeanPropertySqlParameterSource(new NoReadableProperties()); assertFalse(source.hasValue("noOp")); } diff --git a/spring-jdbc/src/test/java/org/springframework/jdbc/core/namedparam/MapSqlParameterSourceTests.java b/spring-jdbc/src/test/java/org/springframework/jdbc/core/namedparam/MapSqlParameterSourceTests.java index 7c92668930c..7140c1722ed 100644 --- a/spring-jdbc/src/test/java/org/springframework/jdbc/core/namedparam/MapSqlParameterSourceTests.java +++ b/spring-jdbc/src/test/java/org/springframework/jdbc/core/namedparam/MapSqlParameterSourceTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2006 the original author or authors. + * Copyright 2002-2019 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. @@ -29,18 +29,18 @@ import static org.junit.Assert.*; public class MapSqlParameterSourceTests { @Test - public void nullParameterValuesPassedToCtorIsOk() throws Exception { + public void nullParameterValuesPassedToCtorIsOk() { new MapSqlParameterSource(null); } @Test(expected = IllegalArgumentException.class) - public void getValueChokesIfParameterIsNotPresent() throws Exception { + public void getValueChokesIfParameterIsNotPresent() { MapSqlParameterSource source = new MapSqlParameterSource(); source.getValue("pechorin was right!"); } @Test - public void sqlParameterValueRegistersSqlType() throws Exception { + public void sqlParameterValueRegistersSqlType() { MapSqlParameterSource msps = new MapSqlParameterSource("FOO", new SqlParameterValue(2, "Foo")); assertEquals("Correct SQL Type not registered", 2, msps.getSqlType("FOO")); MapSqlParameterSource msps2 = new MapSqlParameterSource(); diff --git a/spring-oxm/src/main/java/org/springframework/oxm/jaxb/Jaxb2Marshaller.java b/spring-oxm/src/main/java/org/springframework/oxm/jaxb/Jaxb2Marshaller.java index 0ecc6c0bfc4..0cce38e0df2 100644 --- a/spring-oxm/src/main/java/org/springframework/oxm/jaxb/Jaxb2Marshaller.java +++ b/spring-oxm/src/main/java/org/springframework/oxm/jaxb/Jaxb2Marshaller.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"); * you may not use this file except in compliance with the License. @@ -111,16 +111,16 @@ import org.springframework.util.xml.StaxUtils; * @author Juergen Hoeller * @author Rossen Stoyanchev * @since 3.0 - * @see #setContextPath(String) - * @see #setClassesToBeBound(Class[]) - * @see #setJaxbContextProperties(Map) - * @see #setMarshallerProperties(Map) - * @see #setUnmarshallerProperties(Map) - * @see #setSchema(Resource) - * @see #setSchemas(Resource[]) - * @see #setMarshallerListener(javax.xml.bind.Marshaller.Listener) - * @see #setUnmarshallerListener(javax.xml.bind.Unmarshaller.Listener) - * @see #setAdapters(XmlAdapter[]) + * @see #setContextPath + * @see #setClassesToBeBound + * @see #setJaxbContextProperties + * @see #setMarshallerProperties + * @see #setUnmarshallerProperties + * @see #setSchema + * @see #setSchemas + * @see #setMarshallerListener + * @see #setUnmarshallerListener + * @see #setAdapters */ public class Jaxb2Marshaller implements MimeMarshaller, MimeUnmarshaller, GenericMarshaller, GenericUnmarshaller, BeanClassLoaderAware, InitializingBean { @@ -246,8 +246,8 @@ public class Jaxb2Marshaller implements MimeMarshaller, MimeUnmarshaller, Generi * Set the packages to search for classes with JAXB2 annotations in the classpath. * This is using a Spring-bases search and therefore analogous to Spring's component-scan * feature ({@link org.springframework.context.annotation.ClassPathBeanDefinitionScanner}). - *

Setting either this property, {@link #setContextPath "contextPath"} - * or {@link #setClassesToBeBound "classesToBeBound"} is required. + *

Setting either this property, {@link #setContextPath "contextPath"} or + * {@link #setClassesToBeBound "classesToBeBound"} is required. */ public void setPackagesToScan(@Nullable String... packagesToScan) { this.packagesToScan = packagesToScan; @@ -270,8 +270,9 @@ public class Jaxb2Marshaller implements MimeMarshaller, MimeUnmarshaller, Generi } /** - * Set the JAXB {@code Marshaller} properties. These properties will be set on the - * underlying JAXB {@code Marshaller}, and allow for features such as indentation. + * Set the JAXB {@code Marshaller} properties. + *

These properties will be set on the underlying JAXB {@code Marshaller}, + * and allow for features such as indentation. * @param properties the properties * @see javax.xml.bind.Marshaller#setProperty(String, Object) * @see javax.xml.bind.Marshaller#JAXB_ENCODING @@ -284,8 +285,8 @@ public class Jaxb2Marshaller implements MimeMarshaller, MimeUnmarshaller, Generi } /** - * Set the JAXB {@code Unmarshaller} properties. These properties will be set on the - * underlying JAXB {@code Unmarshaller}. + * Set the JAXB {@code Unmarshaller} properties. + *

These properties will be set on the underlying JAXB {@code Unmarshaller}. * @param properties the properties * @see javax.xml.bind.Unmarshaller#setProperty(String, Object) */ @@ -338,7 +339,8 @@ public class Jaxb2Marshaller implements MimeMarshaller, MimeUnmarshaller, Generi } /** - * Set the schema language. Default is the W3C XML Schema: {@code http://www.w3.org/2001/XMLSchema"}. + * Set the schema language. + * Default is the W3C XML Schema: {@code http://www.w3.org/2001/XMLSchema"}. * @see XMLConstants#W3C_XML_SCHEMA_NS_URI * @see XMLConstants#RELAXNG_NS_URI */ @@ -349,8 +351,8 @@ public class Jaxb2Marshaller implements MimeMarshaller, MimeUnmarshaller, Generi /** * Set the resource resolver, as used to load the schema resources. * @see SchemaFactory#setResourceResolver(org.w3c.dom.ls.LSResourceResolver) - * @see #setSchema(Resource) - * @see #setSchemas(Resource[]) + * @see #setSchema + * @see #setSchemas */ public void setSchemaResourceResolver(LSResourceResolver schemaResourceResolver) { this.schemaResourceResolver = schemaResourceResolver; @@ -374,10 +376,11 @@ public class Jaxb2Marshaller implements MimeMarshaller, MimeUnmarshaller, Generi } /** - * Specify whether the {@link #supports(Class)} returns {@code true} for the {@link JAXBElement} class. - *

Default is {@code false}, meaning that {@code supports(Class)} always returns {@code false} for - * {@code JAXBElement} classes (though {@link #supports(Type)} can return {@code true}, since it can - * obtain the type parameters of {@code JAXBElement}). + * Specify whether the {@link #supports(Class)} returns {@code true} for the + * {@link JAXBElement} class. + *

Default is {@code false}, meaning that {@code supports(Class)} always returns + * {@code false} for {@code JAXBElement} classes (though {@link #supports(Type)} can + * return {@code true}, since it can obtain the type parameters of {@code JAXBElement}). *

This property is typically enabled in combination with usage of classes like * {@link org.springframework.web.servlet.view.xml.MarshallingView MarshallingView}, * since the {@code ModelAndView} does not offer type parameter information at runtime. @@ -433,8 +436,8 @@ public class Jaxb2Marshaller implements MimeMarshaller, MimeUnmarshaller, Generi * {@code Source} passed to {@link #unmarshal(Source)} is a {@link SAXSource} or * {@link StreamSource}. It has no effect for {@link DOMSource} or {@link StAXSource} * instances. - *

Note: setting this option to {@code true} also - * automatically sets {@link #setSupportDtd} to {@code true}. + *

Note: setting this option to {@code true} also automatically + * sets {@link #setSupportDtd} to {@code true}. */ public void setProcessExternalEntities(boolean processExternalEntities) { this.processExternalEntities = processExternalEntities; @@ -710,6 +713,21 @@ public class Jaxb2Marshaller implements MimeMarshaller, MimeUnmarshaller, Generi } } + /** + * Return a newly created JAXB marshaller. + *

Note: JAXB marshallers are not necessarily thread-safe. + */ + protected Marshaller createMarshaller() { + try { + Marshaller marshaller = getJaxbContext().createMarshaller(); + initJaxbMarshaller(marshaller); + return marshaller; + } + catch (JAXBException ex) { + throw convertJaxbException(ex); + } + } + private void marshalStaxResult(Marshaller jaxbMarshaller, Object graph, Result staxResult) throws JAXBException { XMLStreamWriter streamWriter = StaxUtils.getXMLStreamWriter(staxResult); if (streamWriter != null) { @@ -727,26 +745,14 @@ public class Jaxb2Marshaller implements MimeMarshaller, MimeUnmarshaller, Generi } /** - * Return a newly created JAXB marshaller. JAXB marshallers are not necessarily thread safe. - */ - protected Marshaller createMarshaller() { - try { - Marshaller marshaller = getJaxbContext().createMarshaller(); - initJaxbMarshaller(marshaller); - return marshaller; - } - catch (JAXBException ex) { - throw convertJaxbException(ex); - } - } - - /** - * Template method that can be overridden by concrete JAXB marshallers for custom initialization behavior. - * Gets called after creation of JAXB {@code Marshaller}, and after the respective properties have been set. - *

The default implementation sets the {@link #setMarshallerProperties(Map) defined properties}, the {@link - * #setValidationEventHandler(ValidationEventHandler) validation event handler}, the {@link #setSchemas(Resource[]) - * schemas}, {@link #setMarshallerListener(javax.xml.bind.Marshaller.Listener) listener}, and - * {@link #setAdapters(XmlAdapter[]) adapters}. + * Template method that can be overridden by concrete JAXB marshallers + * for custom initialization behavior. Gets called after creation of JAXB + * {@code Marshaller}, and after the respective properties have been set. + *

The default implementation sets the + * {@link #setMarshallerProperties defined properties}, the + * {@link #setValidationEventHandler validation event handler}, the + * {@link #setSchemas schemas}, {@link #setMarshallerListener listener}, + * and {@link #setAdapters adapters}. */ protected void initJaxbMarshaller(Marshaller marshaller) throws JAXBException { if (this.marshallerProperties != null) { @@ -809,6 +815,21 @@ public class Jaxb2Marshaller implements MimeMarshaller, MimeUnmarshaller, Generi } } + /** + * Return a newly created JAXB unmarshaller. + *

Note: JAXB unmarshallers are not necessarily thread-safe. + */ + protected Unmarshaller createUnmarshaller() { + try { + Unmarshaller unmarshaller = getJaxbContext().createUnmarshaller(); + initJaxbUnmarshaller(unmarshaller); + return unmarshaller; + } + catch (JAXBException ex) { + throw convertJaxbException(ex); + } + } + protected Object unmarshalStaxSource(Unmarshaller jaxbUnmarshaller, Source staxSource) throws JAXBException { XMLStreamReader streamReader = StaxUtils.getXMLStreamReader(staxSource); if (streamReader != null) { @@ -875,27 +896,14 @@ public class Jaxb2Marshaller implements MimeMarshaller, MimeUnmarshaller, Generi } /** - * Return a newly created JAXB unmarshaller. - * Note: JAXB unmarshallers are not necessarily thread-safe. - */ - protected Unmarshaller createUnmarshaller() { - try { - Unmarshaller unmarshaller = getJaxbContext().createUnmarshaller(); - initJaxbUnmarshaller(unmarshaller); - return unmarshaller; - } - catch (JAXBException ex) { - throw convertJaxbException(ex); - } - } - - /** - * Template method that can be overridden by concrete JAXB marshallers for custom initialization behavior. - * Gets called after creation of JAXB {@code Marshaller}, and after the respective properties have been set. - *

The default implementation sets the {@link #setUnmarshallerProperties(Map) defined properties}, the {@link - * #setValidationEventHandler(ValidationEventHandler) validation event handler}, the {@link #setSchemas(Resource[]) - * schemas}, {@link #setUnmarshallerListener(javax.xml.bind.Unmarshaller.Listener) listener}, and - * {@link #setAdapters(XmlAdapter[]) adapters}. + * Template method that can be overridden by concrete JAXB marshallers + * for custom initialization behavior. Gets called after creation of JAXB + * {@code Marshaller}, and after the respective properties have been set. + *

The default implementation sets the + * {@link #setUnmarshallerProperties defined properties}, the + * {@link #setValidationEventHandler validation event handler}, the + * {@link #setSchemas schemas}, {@link #setUnmarshallerListener listener}, + * and {@link #setAdapters adapters}. */ protected void initJaxbUnmarshaller(Unmarshaller unmarshaller) throws JAXBException { if (this.unmarshallerProperties != null) { @@ -920,8 +928,8 @@ public class Jaxb2Marshaller implements MimeMarshaller, MimeUnmarshaller, Generi } /** - * Convert the given {@code JAXBException} to an appropriate exception from the - * {@code org.springframework.oxm} hierarchy. + * Convert the given {@code JAXBException} to an appropriate exception + * from the {@code org.springframework.oxm} hierarchy. * @param ex {@code JAXBException} that occurred * @return the corresponding {@code XmlMappingException} */ diff --git a/spring-web/src/main/java/org/springframework/web/cors/CorsConfiguration.java b/spring-web/src/main/java/org/springframework/web/cors/CorsConfiguration.java index 3b885f39bb7..0b86523081d 100644 --- a/spring-web/src/main/java/org/springframework/web/cors/CorsConfiguration.java +++ b/spring-web/src/main/java/org/springframework/web/cors/CorsConfiguration.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"); * you may not use this file except in compliance with the License. @@ -52,14 +52,14 @@ public class CorsConfiguration { /** Wildcard representing all origins, methods, or headers. */ public static final String ALL = "*"; - private static final List DEFAULT_METHODS = - Collections.unmodifiableList(Arrays.asList(HttpMethod.GET, HttpMethod.HEAD)); + private static final List DEFAULT_METHODS = Collections.unmodifiableList( + Arrays.asList(HttpMethod.GET, HttpMethod.HEAD)); - private static final List DEFAULT_PERMIT_ALL = - Collections.unmodifiableList(Arrays.asList(ALL)); + private static final List DEFAULT_PERMIT_METHODS = Collections.unmodifiableList( + Arrays.asList(HttpMethod.GET.name(), HttpMethod.HEAD.name(), HttpMethod.POST.name())); - private static final List DEFAULT_PERMIT_METHODS = - Collections.unmodifiableList(Arrays.asList(HttpMethod.GET.name(), HttpMethod.HEAD.name(), HttpMethod.POST.name())); + private static final List DEFAULT_PERMIT_ALL = Collections.unmodifiableList( + Collections.singletonList(ALL)); @Nullable @@ -322,22 +322,21 @@ public class CorsConfiguration { return this.maxAge; } + /** * By default a newly created {@code CorsConfiguration} does not permit any * cross-origin requests and must be configured explicitly to indicate what * should be allowed. - * *

Use this method to flip the initialization model to start with open * defaults that permit all cross-origin requests for GET, HEAD, and POST * requests. Note however that this method will not override any existing * values already set. - * *

The following defaults are applied if not already set: *

*/ public CorsConfiguration applyPermitDefaultValues() { @@ -361,23 +360,19 @@ public class CorsConfiguration { /** * Combine the non-null properties of the supplied * {@code CorsConfiguration} with this one. - * *

When combining single values like {@code allowCredentials} or * {@code maxAge}, {@code this} properties are overridden by non-null * {@code other} properties if any. - * *

Combining lists like {@code allowedOrigins}, {@code allowedMethods}, * {@code allowedHeaders} or {@code exposedHeaders} is done in an additive * way. For example, combining {@code ["GET", "POST"]} with * {@code ["PATCH"]} results in {@code ["GET", "POST", "PATCH"]}, but keep * in mind that combining {@code ["GET", "POST"]} with {@code ["*"]} * results in {@code ["*"]}. - * *

Notice that default permit values set by * {@link CorsConfiguration#applyPermitDefaultValues()} are overridden by * any value explicitly defined. - * - * @return the combined {@code CorsConfiguration} or {@code this} + * @return the combined {@code CorsConfiguration}, or {@code this} * configuration if the supplied configuration is {@code null} */ @Nullable diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/AbstractHandlerMapping.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/AbstractHandlerMapping.java index cbf6a1a3177..bb3b6e054f0 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/AbstractHandlerMapping.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/AbstractHandlerMapping.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"); * you may not use this file except in compliance with the License. @@ -116,7 +116,7 @@ public abstract class AbstractHandlerMapping extends WebApplicationObjectSupport public void setAlwaysUseFullPath(boolean alwaysUseFullPath) { this.urlPathHelper.setAlwaysUseFullPath(alwaysUseFullPath); if (this.corsConfigurationSource instanceof UrlBasedCorsConfigurationSource) { - ((UrlBasedCorsConfigurationSource)this.corsConfigurationSource).setAlwaysUseFullPath(alwaysUseFullPath); + ((UrlBasedCorsConfigurationSource) this.corsConfigurationSource).setAlwaysUseFullPath(alwaysUseFullPath); } } @@ -127,7 +127,7 @@ public abstract class AbstractHandlerMapping extends WebApplicationObjectSupport public void setUrlDecode(boolean urlDecode) { this.urlPathHelper.setUrlDecode(urlDecode); if (this.corsConfigurationSource instanceof UrlBasedCorsConfigurationSource) { - ((UrlBasedCorsConfigurationSource)this.corsConfigurationSource).setUrlDecode(urlDecode); + ((UrlBasedCorsConfigurationSource) this.corsConfigurationSource).setUrlDecode(urlDecode); } } @@ -138,7 +138,7 @@ public abstract class AbstractHandlerMapping extends WebApplicationObjectSupport public void setRemoveSemicolonContent(boolean removeSemicolonContent) { this.urlPathHelper.setRemoveSemicolonContent(removeSemicolonContent); if (this.corsConfigurationSource instanceof UrlBasedCorsConfigurationSource) { - ((UrlBasedCorsConfigurationSource)this.corsConfigurationSource).setRemoveSemicolonContent(removeSemicolonContent); + ((UrlBasedCorsConfigurationSource) this.corsConfigurationSource).setRemoveSemicolonContent(removeSemicolonContent); } } @@ -152,7 +152,7 @@ public abstract class AbstractHandlerMapping extends WebApplicationObjectSupport Assert.notNull(urlPathHelper, "UrlPathHelper must not be null"); this.urlPathHelper = urlPathHelper; if (this.corsConfigurationSource instanceof UrlBasedCorsConfigurationSource) { - ((UrlBasedCorsConfigurationSource)this.corsConfigurationSource).setUrlPathHelper(urlPathHelper); + ((UrlBasedCorsConfigurationSource) this.corsConfigurationSource).setUrlPathHelper(urlPathHelper); } } @@ -172,7 +172,7 @@ public abstract class AbstractHandlerMapping extends WebApplicationObjectSupport Assert.notNull(pathMatcher, "PathMatcher must not be null"); this.pathMatcher = pathMatcher; if (this.corsConfigurationSource instanceof UrlBasedCorsConfigurationSource) { - ((UrlBasedCorsConfigurationSource)this.corsConfigurationSource).setPathMatcher(pathMatcher); + ((UrlBasedCorsConfigurationSource) this.corsConfigurationSource).setPathMatcher(pathMatcher); } } @@ -232,7 +232,7 @@ public abstract class AbstractHandlerMapping extends WebApplicationObjectSupport @Deprecated public Map getCorsConfigurations() { if (this.corsConfigurationSource instanceof UrlBasedCorsConfigurationSource) { - return ((UrlBasedCorsConfigurationSource)this.corsConfigurationSource).getCorsConfigurations(); + return ((UrlBasedCorsConfigurationSource) this.corsConfigurationSource).getCorsConfigurations(); } else { throw new IllegalStateException("No CORS configurations available when the source " + diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/config/MvcNamespaceTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/config/MvcNamespaceTests.java index a09b1e251be..ea688a37840 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/config/MvcNamespaceTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/config/MvcNamespaceTests.java @@ -169,7 +169,7 @@ public class MvcNamespaceTests { @Before - public void setUp() throws Exception { + public void setup() throws Exception { TestMockServletContext servletContext = new TestMockServletContext(); appContext = new XmlWebApplicationContext(); appContext.setServletContext(servletContext); @@ -889,7 +889,7 @@ public class MvcNamespaceTests { AbstractHandlerMapping handlerMapping = (AbstractHandlerMapping)appContext.getBean(beanName); assertNotNull(handlerMapping); DirectFieldAccessor accessor = new DirectFieldAccessor(handlerMapping); - Map configs = ((UrlBasedCorsConfigurationSource)accessor + Map configs = ((UrlBasedCorsConfigurationSource) accessor .getPropertyValue("corsConfigurationSource")).getCorsConfigurations(); assertNotNull(configs); assertEquals(1, configs.size()); @@ -914,7 +914,7 @@ public class MvcNamespaceTests { AbstractHandlerMapping handlerMapping = (AbstractHandlerMapping)appContext.getBean(beanName); assertNotNull(handlerMapping); DirectFieldAccessor accessor = new DirectFieldAccessor(handlerMapping); - Map configs = ((UrlBasedCorsConfigurationSource)accessor + Map configs = ((UrlBasedCorsConfigurationSource) accessor .getPropertyValue("corsConfigurationSource")).getCorsConfigurations(); assertNotNull(configs); assertEquals(2, configs.size());