diff --git a/spring-beans/src/main/java/org/springframework/beans/PropertyMatches.java b/spring-beans/src/main/java/org/springframework/beans/PropertyMatches.java
index 87cea92830..87ccf2a95c 100644
--- a/spring-beans/src/main/java/org/springframework/beans/PropertyMatches.java
+++ b/spring-beans/src/main/java/org/springframework/beans/PropertyMatches.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2015 the original author or authors.
+ * Copyright 2002-2016 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.
@@ -30,8 +30,8 @@ import org.springframework.util.StringUtils;
* Helper class for calculating property matches, according to a configurable
* distance. Provide the list of potential matches and an easy way to generate
* an error message. Works for both java bean properties and fields.
- *
- * Mainly for use within the framework and in particular the binding facility
+ *
+ *
Mainly for use within the framework and in particular the binding facility.
*
* @author Alef Arendsen
* @author Arjen Poutsma
@@ -43,14 +43,12 @@ import org.springframework.util.StringUtils;
*/
public abstract class PropertyMatches {
- //---------------------------------------------------------------------
- // Static section
- //---------------------------------------------------------------------
-
/** Default maximum property distance: 2 */
public static final int DEFAULT_MAX_DISTANCE = 2;
+ // Static factory methods
+
/**
* Create PropertyMatches for the given bean property.
* @param propertyName the name of the property to find possible matches for
@@ -90,9 +88,7 @@ public abstract class PropertyMatches {
}
- //---------------------------------------------------------------------
- // Instance section
- //---------------------------------------------------------------------
+ // Instance state
private final String propertyName;
@@ -107,18 +103,19 @@ public abstract class PropertyMatches {
this.possibleMatches = possibleMatches;
}
+
/**
* Return the name of the requested property.
*/
public String getPropertyName() {
- return propertyName;
+ return this.propertyName;
}
/**
* Return the calculated possible matches.
*/
public String[] getPossibleMatches() {
- return possibleMatches;
+ return this.possibleMatches;
}
/**
@@ -127,6 +124,9 @@ public abstract class PropertyMatches {
*/
public abstract String buildErrorMessage();
+
+ // Implementation support for subclasses
+
protected void appendHintMessage(StringBuilder msg) {
msg.append("Did you mean ");
for (int i = 0; i < this.possibleMatches.length; i++) {
@@ -184,9 +184,12 @@ public abstract class PropertyMatches {
return d[s1.length()][s2.length()];
}
+
+ // Concrete subclasses
+
private static class BeanPropertyMatches extends PropertyMatches {
- private BeanPropertyMatches(String propertyName, Class> beanClass, int maxDistance) {
+ public BeanPropertyMatches(String propertyName, Class> beanClass, int maxDistance) {
super(propertyName, calculateMatches(propertyName,
BeanUtils.getPropertyDescriptors(beanClass), maxDistance));
}
@@ -231,12 +234,12 @@ public abstract class PropertyMatches {
}
return msg.toString();
}
-
}
+
private static class FieldPropertyMatches extends PropertyMatches {
- private FieldPropertyMatches(String propertyName, Class> beanClass, int maxDistance) {
+ public FieldPropertyMatches(String propertyName, Class> beanClass, int maxDistance) {
super(propertyName, calculateMatches(propertyName, beanClass, maxDistance));
}
@@ -255,7 +258,6 @@ public abstract class PropertyMatches {
return StringUtils.toStringArray(candidates);
}
-
@Override
public String buildErrorMessage() {
String propertyName = getPropertyName();
@@ -270,7 +272,6 @@ public abstract class PropertyMatches {
}
return msg.toString();
}
-
}
}
diff --git a/spring-context/src/main/java/org/springframework/context/support/ConversionServiceFactoryBean.java b/spring-context/src/main/java/org/springframework/context/support/ConversionServiceFactoryBean.java
index 5cf2e81746..2bba3f2c61 100644
--- a/spring-context/src/main/java/org/springframework/context/support/ConversionServiceFactoryBean.java
+++ b/spring-context/src/main/java/org/springframework/context/support/ConversionServiceFactoryBean.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2012 the original author or authors.
+ * Copyright 2002-2016 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.
@@ -27,12 +27,12 @@ import org.springframework.core.convert.support.GenericConversionService;
/**
* A factory providing convenient access to a ConversionService configured with
- * converters appropriate for most environments. Set the {@link #setConverters
- * "converters"} property to supplement the default converters.
+ * converters appropriate for most environments. Set the
+ * {@link #setConverters "converters"} property to supplement the default converters.
*
- *
This implementation creates a {@link DefaultConversionService}. Subclasses
- * may override {@link #createConversionService()} in order to return a
- * {@link GenericConversionService} instance of their choosing.
+ *
This implementation creates a {@link DefaultConversionService}.
+ * Subclasses may override {@link #createConversionService()} in order to return
+ * a {@link GenericConversionService} instance of their choosing.
*
*
Like all {@code FactoryBean} implementations, this class is suitable for
* use when configuring a Spring application context using Spring {@code }
diff --git a/spring-context/src/main/java/org/springframework/jmx/support/ConnectorServerFactoryBean.java b/spring-context/src/main/java/org/springframework/jmx/support/ConnectorServerFactoryBean.java
index 48d8eb7ffb..964b94aafb 100644
--- a/spring-context/src/main/java/org/springframework/jmx/support/ConnectorServerFactoryBean.java
+++ b/spring-context/src/main/java/org/springframework/jmx/support/ConnectorServerFactoryBean.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2012 the original author or authors.
+ * Copyright 2002-2016 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.
@@ -49,7 +49,6 @@ import org.springframework.util.CollectionUtils;
* @author Rob Harrop
* @author Juergen Hoeller
* @since 1.2
- * @see FactoryBean
* @see JMXConnectorServer
* @see MBeanServer
*/
diff --git a/spring-context/src/main/java/org/springframework/scripting/support/ScriptFactoryPostProcessor.java b/spring-context/src/main/java/org/springframework/scripting/support/ScriptFactoryPostProcessor.java
index d91573d03a..a0c7f4de3d 100644
--- a/spring-context/src/main/java/org/springframework/scripting/support/ScriptFactoryPostProcessor.java
+++ b/spring-context/src/main/java/org/springframework/scripting/support/ScriptFactoryPostProcessor.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2015 the original author or authors.
+ * Copyright 2002-2016 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.
@@ -206,8 +206,8 @@ public class ScriptFactoryPostProcessor extends InstantiationAwareBeanPostProces
@Override
public void setBeanFactory(BeanFactory beanFactory) {
if (!(beanFactory instanceof ConfigurableBeanFactory)) {
- throw new IllegalStateException("ScriptFactoryPostProcessor doesn't work with a BeanFactory "
- + "which does not implement ConfigurableBeanFactory: " + beanFactory.getClass());
+ throw new IllegalStateException("ScriptFactoryPostProcessor doesn't work with " +
+ "non-ConfigurableBeanFactory: " + beanFactory.getClass());
}
this.beanFactory = (ConfigurableBeanFactory) beanFactory;
@@ -381,7 +381,7 @@ public class ScriptFactoryPostProcessor extends InstantiationAwareBeanPostProces
* If the {@link BeanDefinition} has a
* {@link org.springframework.core.AttributeAccessor metadata attribute}
* under the key {@link #REFRESH_CHECK_DELAY_ATTRIBUTE} which is a valid {@link Number}
- * type, then this value is used. Otherwise, the the {@link #defaultRefreshCheckDelay}
+ * type, then this value is used. Otherwise, the {@link #defaultRefreshCheckDelay}
* value is used.
* @param beanDefinition the BeanDefinition to check
* @return the refresh check delay
diff --git a/spring-context/src/test/java/org/springframework/cache/config/ExpressionCachingIntegrationTests.java b/spring-context/src/test/java/org/springframework/cache/config/ExpressionCachingIntegrationTests.java
index 3f1f5a9b46..493b65178f 100644
--- a/spring-context/src/test/java/org/springframework/cache/config/ExpressionCachingIntegrationTests.java
+++ b/spring-context/src/test/java/org/springframework/cache/config/ExpressionCachingIntegrationTests.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2014 the original author or authors.
+ * Copyright 2002-2016 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,13 +29,12 @@ import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
- *
* @author Stephane Nicoll
*/
public class ExpressionCachingIntegrationTests {
+ @Test // SPR-11692
@SuppressWarnings("unchecked")
- @Test // SPR-11692
public void expressionIsCacheBasedOnActualMethod() {
ConfigurableApplicationContext context =
new AnnotationConfigApplicationContext(SharedConfig.class, Spr11692Config.class);
@@ -50,9 +49,9 @@ public class ExpressionCachingIntegrationTests {
}
-
@Configuration
static class Spr11692Config {
+
@Bean
public BaseDao userDao() {
return new UserDaoImpl();
@@ -65,11 +64,14 @@ public class ExpressionCachingIntegrationTests {
}
- private static interface BaseDao {
+ private interface BaseDao {
+
T persist(T t);
}
+
private static class UserDaoImpl implements BaseDao {
+
@Override
@CachePut(value = "users", key = "#user.id")
public User persist(User user) {
@@ -77,7 +79,9 @@ public class ExpressionCachingIntegrationTests {
}
}
+
private static class OrderDaoImpl implements BaseDao {
+
@Override
@CachePut(value = "orders", key = "#order.id")
public Order persist(Order order) {
@@ -85,33 +89,41 @@ public class ExpressionCachingIntegrationTests {
}
}
+
private static class User {
+
private final String id;
- private User(String id) {
+ public User(String id) {
this.id = id;
}
+ @SuppressWarnings("unused")
public String getId() {
- return id;
+ return this.id;
}
}
+
private static class Order {
+
private final String id;
- private Order(String id) {
+ public Order(String id) {
this.id = id;
}
+ @SuppressWarnings("unused")
public String getId() {
- return id;
+ return this.id;
}
}
+
@Configuration
@EnableCaching
static class SharedConfig extends CachingConfigurerSupport {
+
@Override
@Bean
public CacheManager cacheManager() {
diff --git a/spring-core/src/main/java/org/springframework/core/convert/Property.java b/spring-core/src/main/java/org/springframework/core/convert/Property.java
index 84258e9d96..0da18ee69d 100644
--- a/spring-core/src/main/java/org/springframework/core/convert/Property.java
+++ b/spring-core/src/main/java/org/springframework/core/convert/Property.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2014 the original author or authors.
+ * Copyright 2002-2016 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.
@@ -72,7 +72,7 @@ public final class Property {
this.readMethod = readMethod;
this.writeMethod = writeMethod;
this.methodParameter = resolveMethodParameter();
- this.name = (name == null ? resolveName() : name);
+ this.name = (name != null ? name : resolveName());
}
diff --git a/spring-core/src/main/java/org/springframework/core/convert/support/ConversionUtils.java b/spring-core/src/main/java/org/springframework/core/convert/support/ConversionUtils.java
index e93eabe90e..d6011a0b47 100644
--- a/spring-core/src/main/java/org/springframework/core/convert/support/ConversionUtils.java
+++ b/spring-core/src/main/java/org/springframework/core/convert/support/ConversionUtils.java
@@ -31,6 +31,7 @@ abstract class ConversionUtils {
public static Object invokeConverter(GenericConverter converter, Object source, TypeDescriptor sourceType,
TypeDescriptor targetType) {
+
try {
return converter.convert(source, sourceType, targetType);
}
@@ -42,7 +43,9 @@ abstract class ConversionUtils {
}
}
- public static boolean canConvertElements(TypeDescriptor sourceElementType, TypeDescriptor targetElementType, ConversionService conversionService) {
+ public static boolean canConvertElements(TypeDescriptor sourceElementType, TypeDescriptor targetElementType,
+ ConversionService conversionService) {
+
if (targetElementType == null) {
// yes
return true;
@@ -56,11 +59,11 @@ abstract class ConversionUtils {
return true;
}
else if (sourceElementType.getType().isAssignableFrom(targetElementType.getType())) {
- // maybe;
+ // maybe
return true;
}
else {
- // no;
+ // no
return false;
}
}
diff --git a/spring-core/src/main/java/org/springframework/core/convert/support/DefaultConversionService.java b/spring-core/src/main/java/org/springframework/core/convert/support/DefaultConversionService.java
index 408d1367b5..7437d490a0 100644
--- a/spring-core/src/main/java/org/springframework/core/convert/support/DefaultConversionService.java
+++ b/spring-core/src/main/java/org/springframework/core/convert/support/DefaultConversionService.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2015 the original author or authors.
+ * Copyright 2002-2016 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.
@@ -53,7 +53,6 @@ public class DefaultConversionService extends GenericConversionService {
"java.util.stream.Stream", DefaultConversionService.class.getClassLoader());
-
/**
* Create a new {@code DefaultConversionService} with the set of
* {@linkplain DefaultConversionService#addDefaultConverters(ConverterRegistry) default converters}.
diff --git a/spring-core/src/main/java/org/springframework/core/convert/support/GenericConversionService.java b/spring-core/src/main/java/org/springframework/core/convert/support/GenericConversionService.java
index 17868a3765..e06b246dc9 100644
--- a/spring-core/src/main/java/org/springframework/core/convert/support/GenericConversionService.java
+++ b/spring-core/src/main/java/org/springframework/core/convert/support/GenericConversionService.java
@@ -66,8 +66,8 @@ public class GenericConversionService implements ConfigurableConversionService {
private static final GenericConverter NO_OP_CONVERTER = new NoOpConverter("NO_OP");
/**
- * Used as a cache entry when no converter is available. This converter is never
- * returned.
+ * Used as a cache entry when no converter is available.
+ * This converter is never returned.
*/
private static final GenericConverter NO_MATCH = new NoOpConverter("NO_MATCH");
diff --git a/spring-expression/src/main/java/org/springframework/expression/EvaluationException.java b/spring-expression/src/main/java/org/springframework/expression/EvaluationException.java
index bca535d26c..f4132b881d 100644
--- a/spring-expression/src/main/java/org/springframework/expression/EvaluationException.java
+++ b/spring-expression/src/main/java/org/springframework/expression/EvaluationException.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2012 the original author or authors.
+ * Copyright 2002-2016 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.
@@ -26,7 +26,24 @@ package org.springframework.expression;
public class EvaluationException extends ExpressionException {
/**
- * Creates a new expression evaluation exception.
+ * Create a new expression evaluation exception.
+ * @param message description of the problem that occurred
+ */
+ public EvaluationException(String message) {
+ super(message);
+ }
+
+ /**
+ * Create a new expression evaluation exception.
+ * @param message description of the problem that occurred
+ * @param cause the underlying cause of this exception
+ */
+ public EvaluationException(String message, Throwable cause) {
+ super(message,cause);
+ }
+
+ /**
+ * Create a new expression evaluation exception.
* @param position the position in the expression where the problem occurred
* @param message description of the problem that occurred
*/
@@ -35,7 +52,7 @@ public class EvaluationException extends ExpressionException {
}
/**
- * Creates a new expression evaluation exception.
+ * Create a new expression evaluation exception.
* @param expressionString the expression that could not be evaluated
* @param message description of the problem that occurred
*/
@@ -44,7 +61,7 @@ public class EvaluationException extends ExpressionException {
}
/**
- * Creates a new expression evaluation exception.
+ * Create a new expression evaluation exception.
* @param position the position in the expression where the problem occurred
* @param message description of the problem that occurred
* @param cause the underlying cause of this exception
@@ -53,16 +70,4 @@ public class EvaluationException extends ExpressionException {
super(position, message, cause);
}
- /**
- * Creates a new expression evaluation exception.
- * @param message description of the problem that occurred
- */
- public EvaluationException(String message) {
- super(message);
- }
-
- public EvaluationException(String message, Throwable cause) {
- super(message,cause);
- }
-
}
diff --git a/spring-expression/src/main/java/org/springframework/expression/ExpressionException.java b/spring-expression/src/main/java/org/springframework/expression/ExpressionException.java
index 767f5cee3b..a300693e2f 100644
--- a/spring-expression/src/main/java/org/springframework/expression/ExpressionException.java
+++ b/spring-expression/src/main/java/org/springframework/expression/ExpressionException.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2015 the original author or authors.
+ * Copyright 2002-2016 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.
@@ -20,6 +20,7 @@ package org.springframework.expression;
* Super class for exceptions that can occur whilst processing expressions.
*
* @author Andy Clement
+ * @author Phil Webb
* @since 3.0
*/
@SuppressWarnings("serial")
@@ -27,9 +28,26 @@ public class ExpressionException extends RuntimeException {
protected String expressionString;
- protected int position; // -1 if not known - but should be known in all reasonable cases
+ protected int position; // -1 if not known; should be known in all reasonable cases
+ /**
+ * Construct a new expression exception.
+ * @param message a descriptive message
+ */
+ public ExpressionException(String message) {
+ super(message);
+ }
+
+ /**
+ * Construct a new expression exception.
+ * @param message a descriptive message
+ * @param cause the underlying cause of this exception
+ */
+ public ExpressionException(String message, Throwable cause) {
+ super(message, cause);
+ }
+
/**
* Construct a new expression exception.
* @param expressionString the expression string
@@ -37,8 +55,8 @@ public class ExpressionException extends RuntimeException {
*/
public ExpressionException(String expressionString, String message) {
super(message);
- this.position = -1;
this.expressionString = expressionString;
+ this.position = -1;
}
/**
@@ -49,8 +67,8 @@ public class ExpressionException extends RuntimeException {
*/
public ExpressionException(String expressionString, int position, String message) {
super(message);
- this.position = position;
this.expressionString = expressionString;
+ this.position = position;
}
/**
@@ -70,27 +88,10 @@ public class ExpressionException extends RuntimeException {
* @param cause the underlying cause of this exception
*/
public ExpressionException(int position, String message, Throwable cause) {
- super(message,cause);
+ super(message, cause);
this.position = position;
}
- /**
- * Construct a new expression exception.
- * @param message a descriptive message
- */
- public ExpressionException(String message) {
- super(message);
- }
-
- /**
- * Construct a new expression exception.
- * @param message a descriptive message
- * @param cause the underlying cause of this exception
- */
- public ExpressionException(String message, Throwable cause) {
- super(message,cause);
- }
-
/**
* Return the expression string.
@@ -107,8 +108,9 @@ public class ExpressionException extends RuntimeException {
}
/**
- * Return the exception message. Since Spring 4.0 this method returns the
- * same result as {@link #toDetailedString()}.
+ * Return the exception message.
+ * As of Spring 4.0, this method returns the same result as {@link #toDetailedString()}.
+ * @see #getSimpleMessage()
* @see java.lang.Throwable#getMessage()
*/
@Override
@@ -142,6 +144,7 @@ public class ExpressionException extends RuntimeException {
/**
* Return the exception simple message without including the expression
* that caused the failure.
+ * @since 4.0
*/
public String getSimpleMessage() {
return super.getMessage();
diff --git a/spring-expression/src/main/java/org/springframework/expression/ParseException.java b/spring-expression/src/main/java/org/springframework/expression/ParseException.java
index e8db01acc0..64cb2cadf8 100644
--- a/spring-expression/src/main/java/org/springframework/expression/ParseException.java
+++ b/spring-expression/src/main/java/org/springframework/expression/ParseException.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2012 the original author or authors.
+ * Copyright 2002-2016 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.
@@ -26,7 +26,7 @@ package org.springframework.expression;
public class ParseException extends ExpressionException {
/**
- * Creates a new expression parsing exception.
+ * Create a new expression parsing exception.
* @param expressionString the expression string that could not be parsed
* @param position the position in the expression string where the problem occurred
* @param message description of the problem that occurred
@@ -36,7 +36,7 @@ public class ParseException extends ExpressionException {
}
/**
- * Creates a new expression parsing exception.
+ * Create a new expression parsing exception.
* @param position the position in the expression string where the problem occurred
* @param message description of the problem that occurred
* @param cause the underlying cause of this exception
@@ -46,7 +46,7 @@ public class ParseException extends ExpressionException {
}
/**
- * Creates a new expression parsing exception.
+ * Create a new expression parsing exception.
* @param position the position in the expression string where the problem occurred
* @param message description of the problem that occurred
*/
diff --git a/spring-expression/src/main/java/org/springframework/expression/spel/SpelEvaluationException.java b/spring-expression/src/main/java/org/springframework/expression/spel/SpelEvaluationException.java
index 80a604f690..35f37cd7fa 100644
--- a/spring-expression/src/main/java/org/springframework/expression/spel/SpelEvaluationException.java
+++ b/spring-expression/src/main/java/org/springframework/expression/spel/SpelEvaluationException.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2013 the original author or authors.
+ * Copyright 2002-2016 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.
@@ -13,6 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+
package org.springframework.expression.spel;
import org.springframework.expression.EvaluationException;
@@ -34,7 +35,7 @@ public class SpelEvaluationException extends EvaluationException {
public SpelEvaluationException(SpelMessage message, Object... inserts) {
- super(message.formatMessage(0, inserts)); // TODO poor position information, can the callers not really supply something?
+ super(message.formatMessage(0, inserts));
this.message = message;
this.inserts = inserts;
}
@@ -45,54 +46,43 @@ public class SpelEvaluationException extends EvaluationException {
this.inserts = inserts;
}
- public SpelEvaluationException(int position, Throwable cause,
- SpelMessage message, Object... inserts) {
- super(position,message.formatMessage(position,inserts),cause);
+ public SpelEvaluationException(int position, Throwable cause, SpelMessage message, Object... inserts) {
+ super(position,message.formatMessage(position, inserts),cause);
this.message = message;
this.inserts = inserts;
}
public SpelEvaluationException(Throwable cause, SpelMessage message, Object... inserts) {
- super(message.formatMessage(0,inserts),cause);
+ super(message.formatMessage(0, inserts),cause);
this.message = message;
this.inserts = inserts;
}
- /**
- * @return a formatted message with inserts applied
- */
- @Override
- public String getMessage() {
- if (this.message != null) {
- return this.message.formatMessage(this.position, this.inserts);
- }
- else {
- return super.getMessage();
- }
- }
-
- /**
- * @return the message code
- */
- public SpelMessage getMessageCode() {
- return this.message;
- }
-
/**
* Set the position in the related expression which gave rise to this exception.
- *
- * @param position the position in the expression that gave rise to the exception
*/
public void setPosition(int position) {
this.position = position;
}
/**
- * @return the message inserts
+ * Return the message code.
+ */
+ public SpelMessage getMessageCode() {
+ return this.message;
+ }
+
+ /**
+ * Return the message inserts.
*/
public Object[] getInserts() {
return this.inserts;
}
+ @Override
+ public String getMessage() {
+ return getSimpleMessage();
+ }
+
}
diff --git a/spring-expression/src/main/java/org/springframework/expression/spel/SpelMessage.java b/spring-expression/src/main/java/org/springframework/expression/spel/SpelMessage.java
index 1431554a49..ebfa97600d 100644
--- a/spring-expression/src/main/java/org/springframework/expression/spel/SpelMessage.java
+++ b/spring-expression/src/main/java/org/springframework/expression/spel/SpelMessage.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2014 the original author or authors.
+ * Copyright 2002-2016 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,15 +24,13 @@ import java.text.MessageFormat;
* expect particular code numbers rather than particular text, enabling the message text
* to more easily be modified and the tests to run successfully in different locales.
*
- * When a message is formatted, it will have this kind of form
+ *
When a message is formatted, it will have this kind of form, capturing the prefix
+ * and the error kind, including the position if it is known:
*
*
- * EL1004E: (pos 34): Type cannot be found 'String'
+ * EL1004E:(pos 34): Type cannot be found 'String'
*
*
- * The prefix captures the code and the error kind, whilst the position is included
- * if it is known.
- *
* @author Andy Clement
* @since 3.0
*/
@@ -175,7 +173,7 @@ public enum SpelMessage {
"Cannot find terminating \" for string"),
NON_TERMINATING_QUOTED_STRING(Kind.ERROR, 1046,
- "Cannot find terminating ' for string"),
+ "Cannot find terminating '' for string"),
MISSING_LEADING_ZERO_FOR_NUMBER(Kind.ERROR, 1047,
"A real number must be prefixed by zero, it cannot start with just ''.''"),
@@ -190,7 +188,7 @@ public enum SpelMessage {
"The arguments '(...)' for the constructor call are missing"),
RUN_OUT_OF_ARGUMENTS(Kind.ERROR, 1051,
- "Unexpected ran out of arguments"),
+ "Unexpectedly ran out of arguments"),
UNABLE_TO_GROW_COLLECTION(Kind.ERROR, 1052,
"Unable to grow collection"),
@@ -262,7 +260,7 @@ public enum SpelMessage {
private final String message;
- private SpelMessage(Kind kind, int code, String message) {
+ SpelMessage(Kind kind, int code, String message) {
this.kind = kind;
this.code = code;
this.message = message;
@@ -293,6 +291,6 @@ public enum SpelMessage {
}
- public static enum Kind { INFO, WARNING, ERROR }
+ public enum Kind { INFO, WARNING, ERROR }
}
diff --git a/spring-expression/src/main/java/org/springframework/expression/spel/SpelParseException.java b/spring-expression/src/main/java/org/springframework/expression/spel/SpelParseException.java
index b498c5f16d..55ec34a84d 100644
--- a/spring-expression/src/main/java/org/springframework/expression/spel/SpelParseException.java
+++ b/spring-expression/src/main/java/org/springframework/expression/spel/SpelParseException.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2013 the original author or authors.
+ * Copyright 2002-2016 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.
@@ -13,6 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+
package org.springframework.expression.spel;
import org.springframework.expression.ParseException;
@@ -34,21 +35,21 @@ public class SpelParseException extends ParseException {
public SpelParseException(String expressionString, int position, SpelMessage message, Object... inserts) {
- super(expressionString, position, message.formatMessage(position,inserts));
+ super(expressionString, position, message.formatMessage(position, inserts));
this.position = position;
this.message = message;
this.inserts = inserts;
}
public SpelParseException(int position, SpelMessage message, Object... inserts) {
- super(position, message.formatMessage(position,inserts));
+ super(position, message.formatMessage(position, inserts));
this.position = position;
this.message = message;
this.inserts = inserts;
}
public SpelParseException(int position, Throwable cause, SpelMessage message, Object... inserts) {
- super(position, message.formatMessage(position,inserts), cause);
+ super(position, message.formatMessage(position, inserts), cause);
this.position = position;
this.message = message;
this.inserts = inserts;
@@ -56,26 +57,22 @@ public class SpelParseException extends ParseException {
/**
- * @return a formatted message with inserts applied
- */
- @Override
- public String getMessage() {
- return (this.message != null ? this.message.formatMessage(this.position, this.inserts)
- : super.getMessage());
- }
-
- /**
- * @return the message code
+ * Return the message code.
*/
public SpelMessage getMessageCode() {
return this.message;
}
/**
- * @return the message inserts
+ * Return the message inserts.
*/
public Object[] getInserts() {
return this.inserts;
}
+ @Override
+ public String getMessage() {
+ return getSimpleMessage();
+ }
+
}
diff --git a/spring-web/src/main/java/org/springframework/http/client/SimpleClientHttpRequestFactory.java b/spring-web/src/main/java/org/springframework/http/client/SimpleClientHttpRequestFactory.java
index 076e7b37ed..bf982d6e24 100644
--- a/spring-web/src/main/java/org/springframework/http/client/SimpleClientHttpRequestFactory.java
+++ b/spring-web/src/main/java/org/springframework/http/client/SimpleClientHttpRequestFactory.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2015 the original author or authors.
+ * Copyright 2002-2016 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.
@@ -151,8 +151,7 @@ public class SimpleClientHttpRequestFactory implements ClientHttpRequestFactory,
*/
@Override
public AsyncClientHttpRequest createAsyncRequest(URI uri, HttpMethod httpMethod) throws IOException {
- Assert.state(this.taskExecutor != null,
- "Asynchronous execution requires an AsyncTaskExecutor to be set");
+ Assert.state(this.taskExecutor != null, "Asynchronous execution requires TaskExecutor to be set");
HttpURLConnection connection = openConnection(uri.toURL(), this.proxy);
prepareConnection(connection, httpMethod.name());
diff --git a/spring-web/src/main/java/org/springframework/web/util/UriTemplate.java b/spring-web/src/main/java/org/springframework/web/util/UriTemplate.java
index 43d6094396..becfcefd1e 100644
--- a/spring-web/src/main/java/org/springframework/web/util/UriTemplate.java
+++ b/spring-web/src/main/java/org/springframework/web/util/UriTemplate.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2015 the original author or authors.
+ * Copyright 2002-2016 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.
@@ -44,14 +44,14 @@ import org.springframework.util.Assert;
@SuppressWarnings("serial")
public class UriTemplate implements Serializable {
+ private final String uriTemplate;
+
private final UriComponents uriComponents;
private final List variableNames;
private final Pattern matchPattern;
- private final String uriTemplate;
-
/**
* Construct a new {@code UriTemplate} with the given URI String.
@@ -105,7 +105,7 @@ public class UriTemplate implements Serializable {
* Example:
*
* UriTemplate template = new UriTemplate("http://example.com/hotels/{hotel}/bookings/{booking}");
- * System.out.println(template.expand("Rest & Relax", "42));
+ * System.out.println(template.expand("Rest & Relax", 42));
*
* will print: {@code http://example.com/hotels/Rest%20%26%20Relax/bookings/42}
* @param uriVariableValues the array of URI variables
@@ -173,7 +173,6 @@ public class UriTemplate implements Serializable {
private final Pattern pattern;
-
private TemplateInfo(List vars, Pattern pattern) {
this.variableNames = vars;
this.pattern = pattern;
@@ -187,7 +186,7 @@ public class UriTemplate implements Serializable {
return this.pattern;
}
- private static TemplateInfo parse(String uriTemplate) {
+ public static TemplateInfo parse(String uriTemplate) {
int level = 0;
List variableNames = new ArrayList();
StringBuilder pattern = new StringBuilder();
@@ -216,8 +215,7 @@ public class UriTemplate implements Serializable {
else {
if (idx + 1 == variable.length()) {
throw new IllegalArgumentException(
- "No custom regular expression specified after ':' " +
- "in \"" + variable + "\"");
+ "No custom regular expression specified after ':' in \"" + variable + "\"");
}
String regex = variable.substring(idx + 1, variable.length());
pattern.append('(');
@@ -238,7 +236,7 @@ public class UriTemplate implements Serializable {
}
private static String quote(StringBuilder builder) {
- return builder.length() != 0 ? Pattern.quote(builder.toString()) : "";
+ return (builder.length() > 0 ? Pattern.quote(builder.toString()) : "");
}
}
diff --git a/spring-web/src/test/java/org/springframework/web/client/AbstractJettyServerTestCase.java b/spring-web/src/test/java/org/springframework/web/client/AbstractJettyServerTestCase.java
index adf5449f0a..0b58c74096 100644
--- a/spring-web/src/test/java/org/springframework/web/client/AbstractJettyServerTestCase.java
+++ b/spring-web/src/test/java/org/springframework/web/client/AbstractJettyServerTestCase.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2015 the original author or authors.
+ * Copyright 2002-2016 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,13 +33,11 @@ import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
-
import org.eclipse.jetty.server.Connector;
import org.eclipse.jetty.server.NetworkConnector;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;
-
import org.junit.AfterClass;
import org.junit.BeforeClass;
@@ -56,11 +54,12 @@ public class AbstractJettyServerTestCase {
protected static final String helloWorld = "H\u00e9llo W\u00f6rld";
- protected static final MediaType textContentType = new MediaType("text", "plain",
- Collections.singletonMap("charset", "UTF-8"));
+ protected static final MediaType textContentType =
+ new MediaType("text", "plain", Collections.singletonMap("charset", "UTF-8"));
+
+ protected static final MediaType jsonContentType =
+ new MediaType("application", "json", Collections.singletonMap("charset", "UTF-8"));
- protected static final MediaType jsonContentType = new MediaType("application",
- "json", Collections.singletonMap("charset", "utf-8"));
private static Server jettyServer;
@@ -71,7 +70,6 @@ public class AbstractJettyServerTestCase {
@BeforeClass
public static void startJettyServer() throws Exception {
-
// Let server pick its own random, available port.
jettyServer = new Server(0);
@@ -114,39 +112,41 @@ public class AbstractJettyServerTestCase {
}
}
+
/** Servlet that sets the given status code. */
@SuppressWarnings("serial")
private static class StatusCodeServlet extends GenericServlet {
private final int sc;
- private StatusCodeServlet(int sc) {
+ public StatusCodeServlet(int sc) {
this.sc = sc;
}
@Override
- public void service(ServletRequest request, ServletResponse response) throws
- ServletException, IOException {
+ public void service(ServletRequest request, ServletResponse response) throws IOException {
((HttpServletResponse) response).setStatus(sc);
}
}
+
/** Servlet that returns an error message for a given status code. */
@SuppressWarnings("serial")
private static class ErrorServlet extends GenericServlet {
private final int sc;
- private ErrorServlet(int sc) {
+ public ErrorServlet(int sc) {
this.sc = sc;
}
@Override
- public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
+ public void service(ServletRequest request, ServletResponse response) throws IOException {
((HttpServletResponse) response).sendError(sc);
}
}
+
@SuppressWarnings("serial")
private static class GetServlet extends HttpServlet {
@@ -154,14 +154,13 @@ public class AbstractJettyServerTestCase {
private final MediaType contentType;
- private GetServlet(byte[] buf, MediaType contentType) {
+ public GetServlet(byte[] buf, MediaType contentType) {
this.buf = buf;
this.contentType = contentType;
}
@Override
- protected void doGet(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
+ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
if (contentType != null) {
response.setContentType(contentType.toString());
}
@@ -170,10 +169,11 @@ public class AbstractJettyServerTestCase {
}
}
+
@SuppressWarnings("serial")
private static class PostServlet extends HttpServlet {
- private final String s;
+ private final String content;
private final String location;
@@ -181,20 +181,19 @@ public class AbstractJettyServerTestCase {
private final MediaType contentType;
- private PostServlet(String s, String location, byte[] buf, MediaType contentType) {
- this.s = s;
+ public PostServlet(String content, String location, byte[] buf, MediaType contentType) {
+ this.content = content;
this.location = location;
this.buf = buf;
this.contentType = contentType;
}
@Override
- protected void doPost(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
+ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
assertTrue("Invalid request content-length", request.getContentLength() > 0);
assertNotNull("No content-type", request.getContentType());
String body = FileCopyUtils.copyToString(request.getReader());
- assertEquals("Invalid request body", s, body);
+ assertEquals("Invalid request body", content, body);
response.setStatus(HttpServletResponse.SC_CREATED);
response.setHeader("Location", baseUrl + location);
response.setContentLength(buf.length);
@@ -203,6 +202,7 @@ public class AbstractJettyServerTestCase {
}
}
+
@SuppressWarnings("serial")
private static class JsonPostServlet extends HttpServlet {
@@ -210,14 +210,13 @@ public class AbstractJettyServerTestCase {
private final MediaType contentType;
- private JsonPostServlet(String location, MediaType contentType) {
+ public JsonPostServlet(String location, MediaType contentType) {
this.location = location;
this.contentType = contentType;
}
@Override
- protected void doPost(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
+ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
assertTrue("Invalid request content-length", request.getContentLength() > 0);
assertNotNull("No content-type", request.getContentType());
String body = FileCopyUtils.copyToString(request.getReader());
@@ -230,18 +229,18 @@ public class AbstractJettyServerTestCase {
}
}
+
@SuppressWarnings("serial")
private static class PutServlet extends HttpServlet {
private final String s;
- private PutServlet(String s, byte[] buf, MediaType contentType) {
+ public PutServlet(String s, byte[] buf, MediaType contentType) {
this.s = s;
}
@Override
- protected void doPut(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
+ protected void doPut(HttpServletRequest request, HttpServletResponse response) throws IOException {
assertTrue("Invalid request content-length", request.getContentLength() > 0);
assertNotNull("No content-type", request.getContentType());
String body = FileCopyUtils.copyToString(request.getReader());
@@ -250,17 +249,19 @@ public class AbstractJettyServerTestCase {
}
}
+
@SuppressWarnings("serial")
private static class UriServlet extends HttpServlet {
@Override
- protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
+ protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
resp.setContentType("text/plain");
resp.setCharacterEncoding("utf-8");
resp.getWriter().write(req.getRequestURI());
}
}
+
@SuppressWarnings("serial")
private static class MultipartServlet extends HttpServlet {
@@ -300,13 +301,13 @@ public class AbstractJettyServerTestCase {
}
}
+
@SuppressWarnings("serial")
private static class FormServlet extends HttpServlet {
@Override
- protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- assertEquals(MediaType.APPLICATION_FORM_URLENCODED_VALUE,
- req.getContentType());
+ protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
+ assertEquals(MediaType.APPLICATION_FORM_URLENCODED_VALUE, req.getContentType());
Map parameters = req.getParameterMap();
assertEquals(2, parameters.size());
@@ -322,15 +323,14 @@ public class AbstractJettyServerTestCase {
}
}
+
@SuppressWarnings("serial")
private static class DeleteServlet extends HttpServlet {
@Override
- protected void doDelete(HttpServletRequest req, HttpServletResponse resp)
- throws ServletException, IOException {
+ protected void doDelete(HttpServletRequest req, HttpServletResponse resp) throws IOException {
resp.setStatus(200);
}
-
}
}
diff --git a/spring-web/src/test/java/org/springframework/web/client/AsyncRestTemplateIntegrationTests.java b/spring-web/src/test/java/org/springframework/web/client/AsyncRestTemplateIntegrationTests.java
index 7788956378..56bcdd9f9e 100644
--- a/spring-web/src/test/java/org/springframework/web/client/AsyncRestTemplateIntegrationTests.java
+++ b/spring-web/src/test/java/org/springframework/web/client/AsyncRestTemplateIntegrationTests.java
@@ -114,7 +114,6 @@ public class AsyncRestTemplateIntegrationTests extends AbstractJettyServerTestCa
assertNull("Invalid content", entity.getBody());
}
-
@Test
public void getNoContentTypeHeader() throws Exception {
Future> futureEntity = template.getForEntity(baseUrl + "/get/nocontenttype", byte[].class);
@@ -122,7 +121,6 @@ public class AsyncRestTemplateIntegrationTests extends AbstractJettyServerTestCa
assertArrayEquals("Invalid content", helloWorld.getBytes("UTF-8"), responseEntity.getBody());
}
-
@Test
public void getNoContent() throws Exception {
Future> responseFuture = template.getForEntity(baseUrl + "/status/nocontent", String.class);
diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/ResourceServlet.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/ResourceServlet.java
index 9905909acc..446c2bf1fc 100644
--- a/spring-webmvc/src/main/java/org/springframework/web/servlet/ResourceServlet.java
+++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/ResourceServlet.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2012 the original author or authors.
+ * Copyright 2002-2016 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.
@@ -175,8 +175,8 @@ public class ResourceServlet extends HttpServletBean {
}
/**
- * Return a PathMatcher to use for matching the "allowedResources" URL pattern.
- * Default is AntPathMatcher.
+ * Return a {@link PathMatcher} to use for matching the "allowedResources" URL pattern.
+ * The default is {@link AntPathMatcher}.
* @see #setAllowedResources
* @see org.springframework.util.AntPathMatcher
*/
@@ -191,9 +191,9 @@ public class ResourceServlet extends HttpServletBean {
*/
@Override
protected final void doGet(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
+ throws ServletException, IOException {
- // determine URL of resource to include
+ // Determine URL of resource to include...
String resourceUrl = determineResourceUrl(request);
if (resourceUrl != null) {
@@ -220,7 +220,7 @@ public class ResourceServlet extends HttpServletBean {
}
}
- // no resource URL specified -> try to include default URL.
+ // No resource URL specified -> try to include default URL.
else if (!includeDefaultUrl(request, response)) {
throw new ServletException("No target resource URL found for request");
}
@@ -265,23 +265,23 @@ public class ResourceServlet extends HttpServletBean {
* @throws IOException if thrown by the RequestDispatcher
*/
private void doInclude(HttpServletRequest request, HttpServletResponse response, String resourceUrl)
- throws ServletException, IOException {
+ throws ServletException, IOException {
if (this.contentType != null) {
response.setContentType(this.contentType);
}
- String[] resourceUrls =
- StringUtils.tokenizeToStringArray(resourceUrl, RESOURCE_URL_DELIMITERS);
- for (int i = 0; i < resourceUrls.length; i++) {
- // check whether URL matches allowed resources
- if (this.allowedResources != null && !this.pathMatcher.match(this.allowedResources, resourceUrls[i])) {
- throw new ServletException("Resource [" + resourceUrls[i] +
+
+ String[] resourceUrls = StringUtils.tokenizeToStringArray(resourceUrl, RESOURCE_URL_DELIMITERS);
+ for (String url : resourceUrls) {
+ // Check whether URL matches allowed resources
+ if (this.allowedResources != null && !this.pathMatcher.match(this.allowedResources, url)) {
+ throw new ServletException("Resource [" + url +
"] does not match allowed pattern [" + this.allowedResources + "]");
}
if (logger.isDebugEnabled()) {
- logger.debug("Including resource [" + resourceUrls[i] + "]");
+ logger.debug("Including resource [" + url + "]");
}
- RequestDispatcher rd = request.getRequestDispatcher(resourceUrls[i]);
+ RequestDispatcher rd = request.getRequestDispatcher(url);
rd.include(request, response);
}
}
@@ -309,8 +309,8 @@ public class ResourceServlet extends HttpServletBean {
if (resourceUrl != null) {
String[] resourceUrls = StringUtils.tokenizeToStringArray(resourceUrl, RESOURCE_URL_DELIMITERS);
long latestTimestamp = -1;
- for (int i = 0; i < resourceUrls.length; i++) {
- long timestamp = getFileTimestamp(resourceUrls[i]);
+ for (String url : resourceUrls) {
+ long timestamp = getFileTimestamp(url);
if (timestamp > latestTimestamp) {
latestTimestamp = timestamp;
}
@@ -336,8 +336,10 @@ public class ResourceServlet extends HttpServletBean {
return lastModifiedTime;
}
catch (IOException ex) {
- logger.warn("Couldn't retrieve last-modified timestamp of [" + resource +
- "] - using ResourceServlet startup time");
+ if (logger.isWarnEnabled()) {
+ logger.warn("Couldn't retrieve last-modified timestamp of " + resource +
+ " - using ResourceServlet startup time");
+ }
return -1;
}
}
diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/WebSocketMessage.java b/spring-websocket/src/main/java/org/springframework/web/socket/WebSocketMessage.java
index 5881ed0c34..fd5383d87e 100644
--- a/spring-websocket/src/main/java/org/springframework/web/socket/WebSocketMessage.java
+++ b/spring-websocket/src/main/java/org/springframework/web/socket/WebSocketMessage.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2013 the original author or authors.
+ * Copyright 2002-2016 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.
@@ -25,11 +25,10 @@ package org.springframework.web.socket;
public interface WebSocketMessage {
/**
- * Returns the message payload. This will never be {@code null}.
+ * Return the message payload (never {@code null}).
*/
T getPayload();
-
/**
* Return the number of bytes contained in the message.
*/
diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/transport/session/AbstractSockJsSession.java b/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/transport/session/AbstractSockJsSession.java
index 515f55333f..5905bf5819 100644
--- a/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/transport/session/AbstractSockJsSession.java
+++ b/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/transport/session/AbstractSockJsSession.java
@@ -80,10 +80,10 @@ public abstract class AbstractSockJsSession implements SockJsSession {
private static final Set disconnectedClientExceptions;
static {
- Set set = new HashSet(2);
- set.add("ClientAbortException"); // Tomcat
- set.add("EOFException"); // Tomcat
- set.add("EofException"); // Jetty
+ Set set = new HashSet(4);
+ set.add("ClientAbortException"); // Tomcat
+ set.add("EOFException"); // Tomcat
+ set.add("EofException"); // Jetty
// java.io.IOException "Broken pipe" on WildFly, Glassfish (already covered)
disconnectedClientExceptions = Collections.unmodifiableSet(set);
}
@@ -208,7 +208,7 @@ public abstract class AbstractSockJsSession implements SockJsSession {
writeFrameInternal(SockJsFrame.closeFrame(status.getCode(), status.getReason()));
}
catch (Throwable ex) {
- logger.debug("Failure while send SockJS close frame", ex);
+ logger.debug("Failure while sending SockJS close frame", ex);
}
}
updateLastActiveTime();