diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/config/InstantiationAwareBeanPostProcessor.java b/spring-beans/src/main/java/org/springframework/beans/factory/config/InstantiationAwareBeanPostProcessor.java index fdba7725759..8266f64d7de 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/config/InstantiationAwareBeanPostProcessor.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/config/InstantiationAwareBeanPostProcessor.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. @@ -54,8 +54,9 @@ public interface InstantiationAwareBeanPostProcessor extends BeanPostProcessor { * will be short-circuited. The only further processing applied is the * {@link #postProcessAfterInitialization} callback from the configured * {@link BeanPostProcessor BeanPostProcessors}. - *

This callback will only be applied to bean definitions with a bean class. - * In particular, it will not be applied to beans with a factory method. + *

This callback will be applied to bean definitions with their bean class, + * as well as to factory-method definitions in which case the returned bean type + * will be passed in here. *

Post-processors may implement the extended * {@link SmartInstantiationAwareBeanPostProcessor} interface in order * to predict the type of the bean object that they are going to return here. @@ -66,7 +67,8 @@ public interface InstantiationAwareBeanPostProcessor extends BeanPostProcessor { * or {@code null} to proceed with default instantiation * @throws org.springframework.beans.BeansException in case of errors * @see #postProcessAfterInstantiation - * @see org.springframework.beans.factory.support.AbstractBeanDefinition#hasBeanClass + * @see org.springframework.beans.factory.support.AbstractBeanDefinition#getBeanClass() + * @see org.springframework.beans.factory.support.AbstractBeanDefinition#getFactoryMethodName() */ @Nullable default Object postProcessBeforeInstantiation(Class beanClass, String beanName) throws BeansException { diff --git a/spring-core/src/main/java/org/springframework/core/type/filter/AbstractTypeHierarchyTraversingFilter.java b/spring-core/src/main/java/org/springframework/core/type/filter/AbstractTypeHierarchyTraversingFilter.java index 97433f548ba..cfa9ba2b939 100644 --- a/spring-core/src/main/java/org/springframework/core/type/filter/AbstractTypeHierarchyTraversingFilter.java +++ b/spring-core/src/main/java/org/springframework/core/type/filter/AbstractTypeHierarchyTraversingFilter.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. @@ -85,10 +85,12 @@ public abstract class AbstractTypeHierarchyTraversingFilter implements TypeFilte } } catch (IOException ex) { - logger.debug("Could not read super class [" + metadata.getSuperClassName() + - "] of type-filtered class [" + metadata.getClassName() + "]"); + if (logger.isDebugEnabled()) { + logger.debug("Could not read super class [" + metadata.getSuperClassName() + + "] of type-filtered class [" + metadata.getClassName() + "]"); + } } - } + } } } @@ -109,8 +111,10 @@ public abstract class AbstractTypeHierarchyTraversingFilter implements TypeFilte } } catch (IOException ex) { - logger.debug("Could not read interface [" + ifc + "] for type-filtered class [" + - metadata.getClassName() + "]"); + if (logger.isDebugEnabled()) { + logger.debug("Could not read interface [" + ifc + "] for type-filtered class [" + + metadata.getClassName() + "]"); + } } } } diff --git a/spring-core/src/main/java/org/springframework/util/SerializationUtils.java b/spring-core/src/main/java/org/springframework/util/SerializationUtils.java index 65d65be0ff6..1f15a163f0e 100644 --- a/spring-core/src/main/java/org/springframework/util/SerializationUtils.java +++ b/spring-core/src/main/java/org/springframework/util/SerializationUtils.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. @@ -43,8 +43,7 @@ public abstract class SerializationUtils { return null; } ByteArrayOutputStream baos = new ByteArrayOutputStream(1024); - try { - ObjectOutputStream oos = new ObjectOutputStream(baos); + try (ObjectOutputStream oos = new ObjectOutputStream(baos)) { oos.writeObject(object); oos.flush(); } @@ -64,8 +63,7 @@ public abstract class SerializationUtils { if (bytes == null) { return null; } - try { - ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(bytes)); + try (ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(bytes))) { return ois.readObject(); } catch (IOException ex) { diff --git a/spring-core/src/test/java/org/springframework/util/SerializationTestUtils.java b/spring-core/src/test/java/org/springframework/util/SerializationTestUtils.java index ce4eed15584..38c48dea347 100644 --- a/spring-core/src/test/java/org/springframework/util/SerializationTestUtils.java +++ b/spring-core/src/test/java/org/springframework/util/SerializationTestUtils.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. @@ -34,8 +34,9 @@ public class SerializationTestUtils { public static void testSerialization(Object o) throws IOException { OutputStream baos = new ByteArrayOutputStream(); - ObjectOutputStream oos = new ObjectOutputStream(baos); - oos.writeObject(o); + try (ObjectOutputStream oos = new ObjectOutputStream(baos)) { + oos.writeObject(o); + } } public static boolean isSerializable(Object o) throws IOException { @@ -50,16 +51,17 @@ public class SerializationTestUtils { public static Object serializeAndDeserialize(Object o) throws IOException, ClassNotFoundException { ByteArrayOutputStream baos = new ByteArrayOutputStream(); - ObjectOutputStream oos = new ObjectOutputStream(baos); - oos.writeObject(o); - oos.flush(); + try (ObjectOutputStream oos = new ObjectOutputStream(baos)) { + oos.writeObject(o); + oos.flush(); + } baos.flush(); byte[] bytes = baos.toByteArray(); ByteArrayInputStream is = new ByteArrayInputStream(bytes); - ObjectInputStream ois = new ObjectInputStream(is); - Object o2 = ois.readObject(); - return o2; + try (ObjectInputStream ois = new ObjectInputStream(is)) { + return ois.readObject(); + } } } diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/AbstractEmbeddedDatabaseConfigurer.java b/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/AbstractEmbeddedDatabaseConfigurer.java index 8f225346a5c..15aba492e09 100644 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/AbstractEmbeddedDatabaseConfigurer.java +++ b/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/AbstractEmbeddedDatabaseConfigurer.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. @@ -18,6 +18,7 @@ package org.springframework.jdbc.datasource.embedded; import java.sql.Connection; import java.sql.SQLException; +import java.sql.Statement; import javax.sql.DataSource; import org.apache.commons.logging.Log; @@ -42,11 +43,13 @@ abstract class AbstractEmbeddedDatabaseConfigurer implements EmbeddedDatabaseCon try { con = dataSource.getConnection(); if (con != null) { - con.createStatement().execute("SHUTDOWN"); + try (Statement stmt = con.createStatement()) { + stmt.execute("SHUTDOWN"); + } } } catch (SQLException ex) { - logger.warn("Could not shut down embedded database", ex); + logger.info("Could not shut down embedded database", ex); } finally { if (con != null) { diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/support/CustomSQLExceptionTranslatorRegistry.java b/spring-jdbc/src/main/java/org/springframework/jdbc/support/CustomSQLExceptionTranslatorRegistry.java index 887b83506ef..d872974031b 100644 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/support/CustomSQLExceptionTranslatorRegistry.java +++ b/spring-jdbc/src/main/java/org/springframework/jdbc/support/CustomSQLExceptionTranslatorRegistry.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2016 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. @@ -66,20 +66,23 @@ public class CustomSQLExceptionTranslatorRegistry { private CustomSQLExceptionTranslatorRegistry() { } + /** * Register a new custom translator for the specified database name. * @param dbName the database name * @param translator the custom translator */ public void registerTranslator(String dbName, SQLExceptionTranslator translator) { - SQLExceptionTranslator replaced = translatorMap.put(dbName, translator); - if (replaced != null) { - logger.warn("Replacing custom translator [" + replaced + "] for database '" + dbName + - "' with [" + translator + "]"); - } - else { - logger.info("Adding custom translator of type [" + translator.getClass().getName() + - "] for database '" + dbName + "'"); + SQLExceptionTranslator replaced = this.translatorMap.put(dbName, translator); + if (logger.isDebugEnabled()) { + if (replaced != null) { + logger.debug("Replacing custom translator [" + replaced + "] for database '" + dbName + + "' with [" + translator + "]"); + } + else { + logger.debug("Adding custom translator of type [" + translator.getClass().getName() + + "] for database '" + dbName + "'"); + } } } diff --git a/spring-jms/src/main/java/org/springframework/jms/listener/endpoint/DefaultJmsActivationSpecFactory.java b/spring-jms/src/main/java/org/springframework/jms/listener/endpoint/DefaultJmsActivationSpecFactory.java index 878966aaffb..95b0e7ddbbb 100644 --- a/spring-jms/src/main/java/org/springframework/jms/listener/endpoint/DefaultJmsActivationSpecFactory.java +++ b/spring-jms/src/main/java/org/springframework/jms/listener/endpoint/DefaultJmsActivationSpecFactory.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"); * you may not use this file except in compliance with the License. @@ -85,7 +85,9 @@ public class DefaultJmsActivationSpecFactory extends StandardJmsActivationSpecFa return adapter.getClass().getClassLoader().loadClass(specClassName); } catch (ClassNotFoundException ex) { - logger.debug("No default ActivationSpec class found: " + specClassName); + if (logger.isDebugEnabled()) { + logger.debug("No default ActivationSpec class found: " + specClassName); + } } } @@ -98,7 +100,9 @@ public class DefaultJmsActivationSpecFactory extends StandardJmsActivationSpecFa return adapter.getClass().getClassLoader().loadClass(specClassName); } catch (ClassNotFoundException ex) { - logger.debug("No default ActivationSpecImpl class found: " + specClassName); + if (logger.isDebugEnabled()) { + logger.debug("No default ActivationSpecImpl class found: " + specClassName); + } } } @@ -109,7 +113,9 @@ public class DefaultJmsActivationSpecFactory extends StandardJmsActivationSpecFa return adapter.getClass().getClassLoader().loadClass(specClassName); } catch (ClassNotFoundException ex) { - logger.debug("No default ActivationSpecImpl class found in provider package: " + specClassName); + if (logger.isDebugEnabled()) { + logger.debug("No default ActivationSpecImpl class found in provider package: " + specClassName); + } } // ActivationSpecImpl class in "inbound" subpackage (WebSphere MQ 6.0.2.1) @@ -118,7 +124,9 @@ public class DefaultJmsActivationSpecFactory extends StandardJmsActivationSpecFa return adapter.getClass().getClassLoader().loadClass(specClassName); } catch (ClassNotFoundException ex) { - logger.debug("No default ActivationSpecImpl class found in inbound subpackage: " + specClassName); + if (logger.isDebugEnabled()) { + logger.debug("No default ActivationSpecImpl class found in inbound subpackage: " + specClassName); + } } throw new IllegalStateException("No ActivationSpec class defined - " + diff --git a/spring-tx/src/main/java/org/springframework/transaction/PlatformTransactionManager.java b/spring-tx/src/main/java/org/springframework/transaction/PlatformTransactionManager.java index bd99d5fc764..39ab82f665c 100644 --- a/spring-tx/src/main/java/org/springframework/transaction/PlatformTransactionManager.java +++ b/spring-tx/src/main/java/org/springframework/transaction/PlatformTransactionManager.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 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. @@ -41,7 +41,6 @@ import org.springframework.lang.Nullable; * @since 16.05.2003 * @see org.springframework.transaction.support.TransactionTemplate * @see org.springframework.transaction.interceptor.TransactionInterceptor - * @see org.springframework.transaction.interceptor.TransactionProxyFactoryBean */ public interface PlatformTransactionManager { @@ -56,7 +55,7 @@ public interface PlatformTransactionManager { *

An exception to the above rule is the read-only flag, which should be * ignored if no explicit read-only mode is supported. Essentially, the * read-only flag is just a hint for potential optimization. - * @param definition TransactionDefinition instance (can be {@code null} for defaults), + * @param definition the TransactionDefinition instance (can be {@code null} for defaults), * describing propagation behavior, isolation level, timeout etc. * @return transaction status object representing the new or current transaction * @throws TransactionException in case of lookup, creation, or system errors @@ -68,7 +67,8 @@ public interface PlatformTransactionManager { * @see TransactionDefinition#getTimeout * @see TransactionDefinition#isReadOnly */ - TransactionStatus getTransaction(@Nullable TransactionDefinition definition) throws TransactionException; + TransactionStatus getTransaction(@Nullable TransactionDefinition definition) + throws TransactionException; /** * Commit the given transaction, with regard to its status. If the transaction diff --git a/spring-tx/src/main/java/org/springframework/transaction/annotation/Propagation.java b/spring-tx/src/main/java/org/springframework/transaction/annotation/Propagation.java index 95cc22fc9e2..1e235ce8770 100644 --- a/spring-tx/src/main/java/org/springframework/transaction/annotation/Propagation.java +++ b/spring-tx/src/main/java/org/springframework/transaction/annotation/Propagation.java @@ -87,11 +87,11 @@ public enum Propagation { /** * Execute within a nested transaction if a current transaction exists, - * behave like {@code REQUIRED} else. There is no analogous feature in EJB. + * behave like {@code REQUIRED} otherwise. There is no analogous feature in EJB. *

Note: Actual creation of a nested transaction will only work on specific * transaction managers. Out of the box, this only applies to the JDBC - * DataSourceTransactionManager when working on a JDBC 3.0 driver. - * Some JTA providers might support nested transactions as well. + * DataSourceTransactionManager. Some JTA providers might support nested + * transactions as well. * @see org.springframework.jdbc.datasource.DataSourceTransactionManager */ NESTED(TransactionDefinition.PROPAGATION_NESTED); diff --git a/spring-tx/src/main/java/org/springframework/transaction/interceptor/TransactionAspectSupport.java b/spring-tx/src/main/java/org/springframework/transaction/interceptor/TransactionAspectSupport.java index 96795067cd7..6e85e9a5688 100644 --- a/spring-tx/src/main/java/org/springframework/transaction/interceptor/TransactionAspectSupport.java +++ b/spring-tx/src/main/java/org/springframework/transaction/interceptor/TransactionAspectSupport.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. @@ -101,7 +101,7 @@ public abstract class TransactionAspectSupport implements BeanFactoryAware, Init *

To find out about specific transaction characteristics, consider using * TransactionSynchronizationManager's {@code isSynchronizationActive()} * and/or {@code isActualTransactionActive()} methods. - * @return TransactionInfo bound to this thread, or {@code null} if none + * @return the TransactionInfo bound to this thread, or {@code null} if none * @see TransactionInfo#hasTransaction() * @see org.springframework.transaction.support.TransactionSynchronizationManager#isSynchronizationActive() * @see org.springframework.transaction.support.TransactionSynchronizationManager#isActualTransactionActive() @@ -287,7 +287,8 @@ public abstract class TransactionAspectSupport implements BeanFactoryAware, Init if (txAttr == null || !(tm instanceof CallbackPreferringPlatformTransactionManager)) { // Standard transaction demarcation with getTransaction and commit/rollback calls. TransactionInfo txInfo = createTransactionIfNecessary(tm, txAttr, joinpointIdentification); - Object retVal = null; + + Object retVal; try { // This is an around advice: Invoke the next interceptor in the chain. // This will normally result in a target object being invoked. @@ -507,9 +508,10 @@ public abstract class TransactionAspectSupport implements BeanFactoryAware, Init else { // The TransactionInfo.hasTransaction() method will return false. We created it only // to preserve the integrity of the ThreadLocal stack maintained in this class. - if (logger.isTraceEnabled()) - logger.trace("Don't need to create transaction for [" + joinpointIdentification + - "]: This method isn't transactional."); + if (logger.isTraceEnabled()) { + logger.trace("No need to create transaction for [" + joinpointIdentification + + "]: This method is not transactional."); + } } // We always bind the TransactionInfo to the thread, even if we didn't create @@ -591,7 +593,7 @@ public abstract class TransactionAspectSupport implements BeanFactoryAware, Init /** - * Opaque object used to hold Transaction information. Subclasses + * Opaque object used to hold transaction information. Subclasses * must pass it back to methods on this class, but not see its internals. */ protected final class TransactionInfo { diff --git a/spring-tx/src/main/java/org/springframework/transaction/support/AbstractPlatformTransactionManager.java b/spring-tx/src/main/java/org/springframework/transaction/support/AbstractPlatformTransactionManager.java index 686a9d69b4c..1b5d9d6d682 100644 --- a/spring-tx/src/main/java/org/springframework/transaction/support/AbstractPlatformTransactionManager.java +++ b/spring-tx/src/main/java/org/springframework/transaction/support/AbstractPlatformTransactionManager.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. @@ -553,7 +553,7 @@ public abstract class AbstractPlatformTransactionManager implements PlatformTran if (definition.getTimeout() != TransactionDefinition.TIMEOUT_DEFAULT) { return definition.getTimeout(); } - return this.defaultTimeout; + return getDefaultTimeout(); } @@ -667,7 +667,7 @@ public abstract class AbstractPlatformTransactionManager implements PlatformTran /** * Reactivate transaction synchronization for the current thread * and resume all given synchronizations. - * @param suspendedSynchronizations List of TransactionSynchronization objects + * @param suspendedSynchronizations a List of TransactionSynchronization objects */ private void doResumeSynchronization(List suspendedSynchronizations) { TransactionSynchronizationManager.initSynchronization(); @@ -980,7 +980,7 @@ public abstract class AbstractPlatformTransactionManager implements PlatformTran * given Spring TransactionSynchronization objects. *

To be called by this abstract manager itself, or by special implementations * of the {@code registerAfterCompletionWithExistingTransaction} callback. - * @param synchronizations List of TransactionSynchronization objects + * @param synchronizations a List of TransactionSynchronization objects * @param completionStatus the completion status according to the * constants in the TransactionSynchronization interface * @see #registerAfterCompletionWithExistingTransaction(Object, java.util.List) @@ -1096,9 +1096,11 @@ public abstract class AbstractPlatformTransactionManager implements PlatformTran * there will be an active transaction: The implementation of this method has * to detect this and start an appropriate nested transaction. * @param transaction transaction object returned by {@code doGetTransaction} - * @param definition TransactionDefinition instance, describing propagation + * @param definition a TransactionDefinition instance, describing propagation * behavior, isolation level, read-only flag, timeout, and transaction name * @throws TransactionException in case of creation or system errors + * @throws org.springframework.transaction.NestedTransactionNotSupportedException + * if the underlying transaction does not support nesting */ protected abstract void doBegin(Object transaction, TransactionDefinition definition) throws TransactionException; @@ -1231,7 +1233,7 @@ public abstract class AbstractPlatformTransactionManager implements PlatformTran * immediately, passing in "STATUS_UNKNOWN". This is the best we can do if there's no * chance to determine the actual outcome of the outer transaction. * @param transaction transaction object returned by {@code doGetTransaction} - * @param synchronizations List of TransactionSynchronization objects + * @param synchronizations a List of TransactionSynchronization objects * @throws TransactionException in case of system errors * @see #invokeAfterCompletion(java.util.List, int) * @see TransactionSynchronization#afterCompletion(int) diff --git a/spring-tx/src/main/java/org/springframework/transaction/support/TransactionSynchronizationManager.java b/spring-tx/src/main/java/org/springframework/transaction/support/TransactionSynchronizationManager.java index f2aeba57c6f..19f20f8571e 100644 --- a/spring-tx/src/main/java/org/springframework/transaction/support/TransactionSynchronizationManager.java +++ b/spring-tx/src/main/java/org/springframework/transaction/support/TransactionSynchronizationManager.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. @@ -292,10 +292,11 @@ public abstract class TransactionSynchronizationManager { throws IllegalStateException { Assert.notNull(synchronization, "TransactionSynchronization must not be null"); - if (!isSynchronizationActive()) { + Set synchs = synchronizations.get(); + if (synchs == null) { throw new IllegalStateException("Transaction synchronization is not active"); } - synchronizations.get().add(synchronization); + synchs.add(synchronization); } /** diff --git a/spring-web/src/main/java/org/springframework/http/MediaTypeFactory.java b/spring-web/src/main/java/org/springframework/http/MediaTypeFactory.java index fc376cc2352..40e42c1bff1 100644 --- a/spring-web/src/main/java/org/springframework/http/MediaTypeFactory.java +++ b/spring-web/src/main/java/org/springframework/http/MediaTypeFactory.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. @@ -60,8 +60,8 @@ public class MediaTypeFactory { * @return a multi-value map, mapping media types to file extensions. */ private static MultiValueMap parseMimeTypes() { - try (InputStream is = MediaTypeFactory.class.getResourceAsStream(MIME_TYPES_FILE_NAME)) { - BufferedReader reader = new BufferedReader(new InputStreamReader(is, StandardCharsets.US_ASCII)); + InputStream is = MediaTypeFactory.class.getResourceAsStream(MIME_TYPES_FILE_NAME); + try (BufferedReader reader = new BufferedReader(new InputStreamReader(is, StandardCharsets.US_ASCII))) { MultiValueMap result = new LinkedMultiValueMap<>(); String line; while ((line = reader.readLine()) != null) { diff --git a/spring-web/src/main/java/org/springframework/web/method/annotation/AbstractWebArgumentResolverAdapter.java b/spring-web/src/main/java/org/springframework/web/method/annotation/AbstractWebArgumentResolverAdapter.java index c57e66df6aa..0d0272a373e 100644 --- a/spring-web/src/main/java/org/springframework/web/method/annotation/AbstractWebArgumentResolverAdapter.java +++ b/spring-web/src/main/java/org/springframework/web/method/annotation/AbstractWebArgumentResolverAdapter.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. @@ -81,7 +81,9 @@ public abstract class AbstractWebArgumentResolverAdapter implements HandlerMetho } catch (Exception ex) { // ignore (see class-level doc) - logger.debug("Error in checking support for parameter [" + parameter + "], message: " + ex.getMessage()); + if (logger.isDebugEnabled()) { + logger.debug("Error in checking support for parameter [" + parameter + "]: " + ex.getMessage()); + } return false; } } diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/function/client/ExchangeStrategies.java b/spring-webflux/src/main/java/org/springframework/web/reactive/function/client/ExchangeStrategies.java index c74c18efb14..3df7897efb9 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/function/client/ExchangeStrategies.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/function/client/ExchangeStrategies.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. @@ -24,10 +24,10 @@ import org.springframework.http.codec.HttpMessageReader; import org.springframework.http.codec.HttpMessageWriter; /** - * Defines the strategies for invoking {@link ExchangeFunction}s. An instance of - * this class is immutable; instances are typically created through the mutable {@link Builder}: - * either through {@link #builder()} to set up default strategies, or {@link #empty()} to start - * from scratch. + * Provides strategies for use in an {@link ExchangeFunction}. + * + *

To create an instance, see the static methods {@link #withDefaults()}, + * {@link #builder()}, and {@link #empty()}. * * @author Brian Clozel * @author Arjen Poutsma @@ -36,31 +36,32 @@ import org.springframework.http.codec.HttpMessageWriter; public interface ExchangeStrategies { /** - * Return the {@link HttpMessageReader}s to be used for request body conversion. - * @return the stream of message readers + * Return {@link HttpMessageReader HttpMessageReaders} to read and decode the response body with. + * @return the message readers */ List> messageReaders(); /** - * Return the {@link HttpMessageWriter}s to be used for response body conversion. - * @return the stream of message writers + * Return {@link HttpMessageWriter HttpMessageWriters} to write and encode the request body with. + * @return the message writers */ List> messageWriters(); - // Static methods + // Static builder methods /** - * Return a new {@code ExchangeStrategies} with default initialization. - * @return the new {@code ExchangeStrategies} + * Return a new {@code ExchangeStrategies} instance with default configuration + * provided by {@link ClientCodecConfigurer}. */ static ExchangeStrategies withDefaults() { return builder().build(); } /** - * Return a mutable builder for a {@code ExchangeStrategies} with default initialization. - * @return the builder + * Return a builder pre-configured with default configuration to start. + * This is the same as {@link #withDefaults()} but returns a mutable builder + * for further customizations. */ static Builder builder() { DefaultExchangeStrategiesBuilder builder = new DefaultExchangeStrategiesBuilder(); @@ -69,8 +70,7 @@ public interface ExchangeStrategies { } /** - * Return a mutable, empty builder for a {@code ExchangeStrategies}. - * @return the builder + * Return a builder with empty configuration to start. */ static Builder empty() { return new DefaultExchangeStrategiesBuilder(); diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/HandlerStrategies.java b/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/HandlerStrategies.java index d78ca5cb065..c0ea63c142a 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/HandlerStrategies.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/HandlerStrategies.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. @@ -28,10 +28,11 @@ import org.springframework.web.server.WebFilter; import org.springframework.web.server.i18n.LocaleContextResolver; /** - * Defines the strategies to be used for processing {@link HandlerFunction}s. An instance of - * this class is immutable; instances are typically created through the mutable {@link Builder}: - * either through {@link #builder()} to set up default strategies, or {@link #empty()} to start from - * scratch. + * Defines the strategies to be used for processing {@link HandlerFunction HandlerFunctions}. + * + *

An instance of this class is immutable. Instances are typically created through the + * mutable {@link Builder}: either through {@link #builder()} to set up default strategies, + * or {@link #empty()} to start from scratch. * * @author Arjen Poutsma * @author Juergen Hoeller @@ -78,7 +79,7 @@ public interface HandlerStrategies { LocaleContextResolver localeContextResolver(); - // Static methods + // Static builder methods /** * Return a new {@code HandlerStrategies} with default initialization. diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/AbstractHandlerExceptionResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/AbstractHandlerExceptionResolver.java index 2b20253d62b..75931501721 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/AbstractHandlerExceptionResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/AbstractHandlerExceptionResolver.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. @@ -135,11 +135,11 @@ public abstract class AbstractHandlerExceptionResolver implements HandlerExcepti prepareResponse(ex, response); ModelAndView result = doResolveException(request, response, handler, ex); if (result != null) { - // Print warn message when warn logger is not enabled... + // Print debug message when warn logger is not enabled. if (logger.isDebugEnabled() && (this.warnLogger == null || !this.warnLogger.isWarnEnabled())) { logger.debug("Resolved [" + ex + "]" + (result.isEmpty() ? "" : " to " + result)); } - // warnLogger with full stack trace (requires explicit config) + // Explicitly configured warn logger in logException method. logException(ex, request); } return result; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/i18n/CookieLocaleResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/i18n/CookieLocaleResolver.java index 69523af8bd8..78a0b51118a 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/i18n/CookieLocaleResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/i18n/CookieLocaleResolver.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. @@ -56,7 +56,7 @@ import org.springframework.web.util.WebUtils; public class CookieLocaleResolver extends CookieGenerator implements LocaleContextResolver { /** - * The name of the request attribute that holds the Locale. + * The name of the request attribute that holds the {@code Locale}. *

Only used for overriding a cookie value if the locale has been * changed in the course of the current request! *

Use {@code RequestContext(Utils).getLocale()} @@ -67,7 +67,7 @@ public class CookieLocaleResolver extends CookieGenerator implements LocaleConte public static final String LOCALE_REQUEST_ATTRIBUTE_NAME = CookieLocaleResolver.class.getName() + ".LOCALE"; /** - * The name of the request attribute that holds the TimeZone. + * The name of the request attribute that holds the {@code TimeZone}. *

Only used for overriding a cookie value if the locale has been * changed in the course of the current request! *

Use {@code RequestContext(Utils).getTimeZone()} @@ -123,14 +123,14 @@ public class CookieLocaleResolver extends CookieGenerator implements LocaleConte } /** - * Set a fixed Locale that this resolver will return if no cookie found. + * Set a fixed locale that this resolver will return if no cookie found. */ public void setDefaultLocale(@Nullable Locale defaultLocale) { this.defaultLocale = defaultLocale; } /** - * Return the fixed Locale that this resolver will return if no cookie found, + * Return the fixed locale that this resolver will return if no cookie found, * if any. */ @Nullable @@ -139,7 +139,7 @@ public class CookieLocaleResolver extends CookieGenerator implements LocaleConte } /** - * Set a fixed TimeZone that this resolver will return if no cookie found. + * Set a fixed time zone that this resolver will return if no cookie found. * @since 4.0 */ public void setDefaultTimeZone(@Nullable TimeZone defaultTimeZone) { @@ -147,7 +147,7 @@ public class CookieLocaleResolver extends CookieGenerator implements LocaleConte } /** - * Return the fixed TimeZone that this resolver will return if no cookie found, + * Return the fixed time zone that this resolver will return if no cookie found, * if any. * @since 4.0 */ @@ -284,6 +284,7 @@ public class CookieLocaleResolver extends CookieGenerator implements LocaleConte * @param locale the locale to stringify * @return a String representation for the given locale * @since 4.3 + * @see #isLanguageTagCompliant() */ protected String toLocaleValue(Locale locale) { return (isLanguageTagCompliant() ? locale.toLanguageTag() : locale.toString()); @@ -310,7 +311,7 @@ public class CookieLocaleResolver extends CookieGenerator implements LocaleConte /** * Determine the default time zone for the given request, - * Called if no TimeZone cookie has been found. + * Called if no time zone cookie has been found. *

The default implementation returns the specified default time zone, * if any, or {@code null} otherwise. * @param request the request to resolve the time zone for diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/i18n/LocaleChangeInterceptor.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/i18n/LocaleChangeInterceptor.java index 938b72761e5..d5c50c353af 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/i18n/LocaleChangeInterceptor.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/i18n/LocaleChangeInterceptor.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. @@ -149,7 +149,9 @@ public class LocaleChangeInterceptor extends HandlerInterceptorAdapter { } catch (IllegalArgumentException ex) { if (isIgnoreInvalidLocale()) { - logger.debug("Ignoring invalid locale value [" + newLocale + "]: " + ex.getMessage()); + if (logger.isDebugEnabled()) { + logger.debug("Ignoring invalid locale value [" + newLocale + "]: " + ex.getMessage()); + } } else { throw ex;