From 91fa2ed0d4ae30c8a5d705623b9e18a718104a23 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Mon, 30 Jul 2018 22:07:31 +0200 Subject: [PATCH] Initialize pre-filled HashMaps with large enough capacity Empty Maps are preferably initialized without capacity (not initializing them at all or lazily initializing with default capacity when needed). Issue: SPR-17105 (cherry picked from commit 4a147d26fcd086ffc4d495e34b6d1b54854c345b) --- .../config/ConstructorArgumentValues.java | 2 +- .../factory/support/AbstractBeanDefinition.java | 8 ++++---- .../cache/interceptor/CacheAspectSupport.java | 2 +- .../concurrent/ConcurrentTaskExecutor.java | 10 +++++++--- .../validation/AbstractBindingResult.java | 4 ++-- .../core/AttributeAccessorSupport.java | 2 +- .../jdbc/core/simple/AbstractJdbcInsert.java | 16 ++++++++-------- .../messaging/MessageHeaders.java | 4 ++-- .../broker/AbstractSubscriptionRegistry.java | 4 ++-- .../AbstractMessageBrokerConfiguration.java | 4 ++-- .../simp/user/MultiServerUserRegistry.java | 2 +- .../org/springframework/http/HttpHeaders.java | 2 +- .../org/springframework/http/HttpMethod.java | 4 ++-- .../http/server/DefaultPathContainer.java | 4 ++-- .../web/util/HierarchicalUriComponents.java | 14 +++----------- .../web/util/HtmlCharacterEntityReferences.java | 4 ++-- .../web/util/OpaqueUriComponents.java | 2 +- .../function/client/DefaultWebClient.java | 2 +- .../adapter/NettyWebSocketSessionSupport.java | 17 +++++++++-------- 19 files changed, 52 insertions(+), 55 deletions(-) diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/config/ConstructorArgumentValues.java b/spring-beans/src/main/java/org/springframework/beans/factory/config/ConstructorArgumentValues.java index db4ae1e6c1..760b9534d9 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/config/ConstructorArgumentValues.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/config/ConstructorArgumentValues.java @@ -43,7 +43,7 @@ import org.springframework.util.ObjectUtils; */ public class ConstructorArgumentValues { - private final Map indexedArgumentValues = new LinkedHashMap<>(0); + private final Map indexedArgumentValues = new LinkedHashMap<>(); private final List genericArgumentValues = new ArrayList<>(); 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 1109b75c06..81b04a7719 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 @@ -1,5 +1,5 @@ /* - * Copyright 2002-2017 the original author or authors. + * Copyright 2002-2018 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. @@ -158,7 +158,7 @@ public abstract class AbstractBeanDefinition extends BeanMetadataAttributeAccess private boolean primary = false; - private final Map qualifiers = new LinkedHashMap<>(0); + private final Map qualifiers = new LinkedHashMap<>(); @Nullable private Supplier instanceSupplier; @@ -470,7 +470,7 @@ public abstract class AbstractBeanDefinition extends BeanMetadataAttributeAccess */ @Override public boolean isSingleton() { - return SCOPE_SINGLETON.equals(scope) || SCOPE_DEFAULT.equals(scope); + return SCOPE_SINGLETON.equals(this.scope) || SCOPE_DEFAULT.equals(this.scope); } /** @@ -480,7 +480,7 @@ public abstract class AbstractBeanDefinition extends BeanMetadataAttributeAccess */ @Override public boolean isPrototype() { - return SCOPE_PROTOTYPE.equals(scope); + return SCOPE_PROTOTYPE.equals(this.scope); } /** diff --git a/spring-context/src/main/java/org/springframework/cache/interceptor/CacheAspectSupport.java b/spring-context/src/main/java/org/springframework/cache/interceptor/CacheAspectSupport.java index 26b6a85c60..5393067732 100644 --- a/spring-context/src/main/java/org/springframework/cache/interceptor/CacheAspectSupport.java +++ b/spring-context/src/main/java/org/springframework/cache/interceptor/CacheAspectSupport.java @@ -381,7 +381,7 @@ public abstract class CacheAspectSupport extends AbstractCacheInvoker Object cacheValue; Object returnValue; - if (cacheHit != null && cachePutRequests.isEmpty() && !hasCachePut(contexts)) { + if (cacheHit != null && !hasCachePut(contexts)) { // If there are no put requests, just use the cache hit cacheValue = cacheHit.get(); returnValue = wrapCacheValue(method, cacheValue); diff --git a/spring-context/src/main/java/org/springframework/scheduling/concurrent/ConcurrentTaskExecutor.java b/spring-context/src/main/java/org/springframework/scheduling/concurrent/ConcurrentTaskExecutor.java index d10f162cd3..592e3af73b 100644 --- a/spring-context/src/main/java/org/springframework/scheduling/concurrent/ConcurrentTaskExecutor.java +++ b/spring-context/src/main/java/org/springframework/scheduling/concurrent/ConcurrentTaskExecutor.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2017 the original author or authors. + * Copyright 2002-2018 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. @@ -230,17 +230,21 @@ public class ConcurrentTaskExecutor implements AsyncListenableTaskExecutor, Sche protected static class ManagedTaskBuilder { public static Runnable buildManagedTask(Runnable task, String identityName) { - Map properties = new HashMap<>(2); + Map properties; if (task instanceof SchedulingAwareRunnable) { + properties = new HashMap<>(4); properties.put(ManagedTask.LONGRUNNING_HINT, Boolean.toString(((SchedulingAwareRunnable) task).isLongLived())); } + else { + properties = new HashMap<>(2); + } properties.put(ManagedTask.IDENTITY_NAME, identityName); return ManagedExecutors.managedTask(task, properties, null); } public static Callable buildManagedTask(Callable task, String identityName) { - Map properties = new HashMap<>(1); + Map properties = new HashMap<>(2); properties.put(ManagedTask.IDENTITY_NAME, identityName); return ManagedExecutors.managedTask(task, properties, null); } diff --git a/spring-context/src/main/java/org/springframework/validation/AbstractBindingResult.java b/spring-context/src/main/java/org/springframework/validation/AbstractBindingResult.java index 3d08c96597..3ae1accd1f 100644 --- a/spring-context/src/main/java/org/springframework/validation/AbstractBindingResult.java +++ b/spring-context/src/main/java/org/springframework/validation/AbstractBindingResult.java @@ -52,9 +52,9 @@ public abstract class AbstractBindingResult extends AbstractErrors implements Bi private final List errors = new LinkedList<>(); - private final Map> fieldTypes = new HashMap<>(0); + private final Map> fieldTypes = new HashMap<>(); - private final Map fieldValues = new HashMap<>(0); + private final Map fieldValues = new HashMap<>(); private final Set suppressedFields = new HashSet<>(); diff --git a/spring-core/src/main/java/org/springframework/core/AttributeAccessorSupport.java b/spring-core/src/main/java/org/springframework/core/AttributeAccessorSupport.java index b19d65dc6c..e8a5d5729e 100644 --- a/spring-core/src/main/java/org/springframework/core/AttributeAccessorSupport.java +++ b/spring-core/src/main/java/org/springframework/core/AttributeAccessorSupport.java @@ -38,7 +38,7 @@ import org.springframework.util.StringUtils; public abstract class AttributeAccessorSupport implements AttributeAccessor, Serializable { /** Map with String keys and Object values */ - private final Map attributes = new LinkedHashMap<>(0); + private final Map attributes = new LinkedHashMap<>(); @Override diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/core/simple/AbstractJdbcInsert.java b/spring-jdbc/src/main/java/org/springframework/jdbc/core/simple/AbstractJdbcInsert.java index 70b8055b0a..5b6ee49b16 100644 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/core/simple/AbstractJdbcInsert.java +++ b/spring-jdbc/src/main/java/org/springframework/jdbc/core/simple/AbstractJdbcInsert.java @@ -327,7 +327,7 @@ public abstract class AbstractJdbcInsert { /** * Delegate method that executes the insert using the passed-in Map of parameters. - * @param args Map with parameter names and values to be used in insert + * @param args a Map with parameter names and values to be used in insert * @return the number of rows affected */ protected int doExecute(Map args) { @@ -360,7 +360,7 @@ public abstract class AbstractJdbcInsert { /** * Method that provides execution of the insert using the passed-in * Map of parameters and returning a generated key. - * @param args Map with parameter names and values to be used in insert + * @param args a Map with parameter names and values to be used in insert * @return the key generated by the insert */ protected Number doExecuteAndReturnKey(Map args) { @@ -384,7 +384,7 @@ public abstract class AbstractJdbcInsert { /** * Method that provides execution of the insert using the passed-in * Map of parameters and returning all generated keys. - * @param args Map with parameter names and values to be used in insert + * @param args a Map with parameter names and values to be used in insert * @return the KeyHolder containing keys generated by the insert */ protected KeyHolder doExecuteAndReturnKeyHolder(Map args) { @@ -465,7 +465,7 @@ public abstract class AbstractJdbcInsert { if (keyQuery.toUpperCase().startsWith("RETURNING")) { Long key = getJdbcTemplate().queryForObject( getInsertString() + " " + keyQuery, values.toArray(), Long.class); - Map keys = new HashMap<>(1); + Map keys = new HashMap<>(2); keys.put(getGeneratedKeyNames()[0], key); keyHolder.getKeyList().add(keys); } @@ -484,7 +484,7 @@ public abstract class AbstractJdbcInsert { //Get the key Statement keyStmt = null; ResultSet rs = null; - Map keys = new HashMap<>(1); + Map keys = new HashMap<>(2); try { keyStmt = con.createStatement(); rs = keyStmt.executeQuery(keyQuery); @@ -582,7 +582,7 @@ public abstract class AbstractJdbcInsert { } /** - * Internal implementation for setting parameter values + * Internal implementation for setting parameter values. * @param preparedStatement the PreparedStatement * @param values the values to be set */ @@ -605,7 +605,7 @@ public abstract class AbstractJdbcInsert { * Match the provided in parameter values with registered parameters and parameters * defined via meta-data processing. * @param parameterSource the parameter values provided as a {@link SqlParameterSource} - * @return Map with parameter names and values + * @return a Map with parameter names and values */ protected List matchInParameterValuesWithInsertColumns(SqlParameterSource parameterSource) { return this.tableMetaDataContext.matchInParameterValuesWithInsertColumns(parameterSource); @@ -615,7 +615,7 @@ public abstract class AbstractJdbcInsert { * Match the provided in parameter values with registered parameters and parameters * defined via meta-data processing. * @param args the parameter values provided in a Map - * @return Map with parameter names and values + * @return a Map with parameter names and values */ protected List matchInParameterValuesWithInsertColumns(Map args) { return this.tableMetaDataContext.matchInParameterValuesWithInsertColumns(args); diff --git a/spring-messaging/src/main/java/org/springframework/messaging/MessageHeaders.java b/spring-messaging/src/main/java/org/springframework/messaging/MessageHeaders.java index 8f3a16dacb..4fcbadbee0 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/MessageHeaders.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/MessageHeaders.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2017 the original author or authors. + * Copyright 2002-2018 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,7 @@ public class MessageHeaders implements Map, Serializable { * @param keysToIgnore the keys of the entries to ignore */ private MessageHeaders(MessageHeaders original, Set keysToIgnore) { - this.headers = new HashMap<>(original.headers.size() - keysToIgnore.size()); + this.headers = new HashMap<>(original.headers.size()); original.headers.forEach((key, value) -> { if (!keysToIgnore.contains(key)) { this.headers.put(key, value); diff --git a/spring-messaging/src/main/java/org/springframework/messaging/simp/broker/AbstractSubscriptionRegistry.java b/spring-messaging/src/main/java/org/springframework/messaging/simp/broker/AbstractSubscriptionRegistry.java index e12655de4a..7c6ff1d5bd 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/simp/broker/AbstractSubscriptionRegistry.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/simp/broker/AbstractSubscriptionRegistry.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2017 the original author or authors. + * Copyright 2002-2018 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. @@ -38,7 +38,7 @@ import org.springframework.util.MultiValueMap; public abstract class AbstractSubscriptionRegistry implements SubscriptionRegistry { private static final MultiValueMap EMPTY_MAP = - CollectionUtils.unmodifiableMultiValueMap(new LinkedMultiValueMap<>(0)); + CollectionUtils.unmodifiableMultiValueMap(new LinkedMultiValueMap<>()); protected final Log logger = LogFactory.getLog(getClass()); diff --git a/spring-messaging/src/main/java/org/springframework/messaging/simp/config/AbstractMessageBrokerConfiguration.java b/spring-messaging/src/main/java/org/springframework/messaging/simp/config/AbstractMessageBrokerConfiguration.java index 5283ed5abf..2b2a71a6c1 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/simp/config/AbstractMessageBrokerConfiguration.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/simp/config/AbstractMessageBrokerConfiguration.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2017 the original author or authors. + * Copyright 2002-2018 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. @@ -312,7 +312,7 @@ public abstract class AbstractMessageBrokerConfiguration implements ApplicationC if (handler == null) { return new NoOpBrokerMessageHandler(); } - Map subscriptions = new HashMap<>(1); + Map subscriptions = new HashMap<>(4); String destination = getBrokerRegistry().getUserDestinationBroadcast(); if (destination != null) { subscriptions.put(destination, userDestinationMessageHandler()); diff --git a/spring-messaging/src/main/java/org/springframework/messaging/simp/user/MultiServerUserRegistry.java b/spring-messaging/src/main/java/org/springframework/messaging/simp/user/MultiServerUserRegistry.java index 7d943d44c6..de438e023f 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/simp/user/MultiServerUserRegistry.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/simp/user/MultiServerUserRegistry.java @@ -545,7 +545,7 @@ public class MultiServerUserRegistry implements SimpUserRegistry, SmartApplicati private class SessionLookup { public Map findSessions(String userName) { - Map map = new HashMap<>(1); + Map map = new HashMap<>(4); SimpUser user = localRegistry.getUser(userName); if (user != null) { for (SimpSession session : user.getSessions()) { diff --git a/spring-web/src/main/java/org/springframework/http/HttpHeaders.java b/spring-web/src/main/java/org/springframework/http/HttpHeaders.java index c67c6f1518..17f3394752 100644 --- a/spring-web/src/main/java/org/springframework/http/HttpHeaders.java +++ b/spring-web/src/main/java/org/springframework/http/HttpHeaders.java @@ -75,7 +75,7 @@ public class HttpHeaders implements MultiValueMap, Serializable /** * The empty {@code HttpHeaders} instance (immutable). */ - public static final HttpHeaders EMPTY = new HttpHeaders(new LinkedHashMap<>(0), true); + public static final HttpHeaders EMPTY = new HttpHeaders(new LinkedHashMap<>(), true); /** * The HTTP {@code Accept} header field name. * @see Section 5.3.2 of RFC 7231 diff --git a/spring-web/src/main/java/org/springframework/http/HttpMethod.java b/spring-web/src/main/java/org/springframework/http/HttpMethod.java index 2ddb36b28a..bd2d1ef182 100644 --- a/spring-web/src/main/java/org/springframework/http/HttpMethod.java +++ b/spring-web/src/main/java/org/springframework/http/HttpMethod.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2016 the original author or authors. + * Copyright 2002-2018 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. @@ -35,7 +35,7 @@ public enum HttpMethod { GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE; - private static final Map mappings = new HashMap<>(8); + private static final Map mappings = new HashMap<>(16); static { for (HttpMethod httpMethod : values()) { diff --git a/spring-web/src/main/java/org/springframework/http/server/DefaultPathContainer.java b/spring-web/src/main/java/org/springframework/http/server/DefaultPathContainer.java index e97418f818..edf1069612 100644 --- a/spring-web/src/main/java/org/springframework/http/server/DefaultPathContainer.java +++ b/spring-web/src/main/java/org/springframework/http/server/DefaultPathContainer.java @@ -36,9 +36,9 @@ import org.springframework.util.StringUtils; * @author Rossen Stoyanchev * @since 5.0 */ -class DefaultPathContainer implements PathContainer { +final class DefaultPathContainer implements PathContainer { - private static final MultiValueMap EMPTY_MAP = new LinkedMultiValueMap<>(0); + private static final MultiValueMap EMPTY_MAP = new LinkedMultiValueMap<>(); private static final PathContainer EMPTY_PATH = new DefaultPathContainer("", Collections.emptyList()); diff --git a/spring-web/src/main/java/org/springframework/web/util/HierarchicalUriComponents.java b/spring-web/src/main/java/org/springframework/web/util/HierarchicalUriComponents.java index 0a17b6858f..97ab202f0a 100644 --- a/spring-web/src/main/java/org/springframework/web/util/HierarchicalUriComponents.java +++ b/spring-web/src/main/java/org/springframework/web/util/HierarchicalUriComponents.java @@ -55,54 +55,46 @@ final class HierarchicalUriComponents extends UriComponents { private static final String PATH_DELIMITER_STRING = "/"; + private static final MultiValueMap EMPTY_QUERY_PARAMS = + CollectionUtils.unmodifiableMultiValueMap(new LinkedMultiValueMap<>()); + /** * Represents an empty path. */ static final PathComponent NULL_PATH_COMPONENT = new PathComponent() { - @Override public String getPath() { return ""; } - @Override public List getPathSegments() { return Collections.emptyList(); } - @Override public PathComponent encode(BiFunction encoder) { return this; } - @Override public void verify() { } - @Override public PathComponent expand(UriTemplateVariables uriVariables, @Nullable UnaryOperator encoder) { return this; } - @Override public void copyToUriComponentsBuilder(UriComponentsBuilder builder) { } - @Override public boolean equals(Object other) { return (this == other); } - @Override public int hashCode() { return getClass().hashCode(); } }; - private static final MultiValueMap EMPTY_QUERY_PARAMS = - CollectionUtils.unmodifiableMultiValueMap(new LinkedMultiValueMap<>(0)); - @Nullable private final String userInfo; diff --git a/spring-web/src/main/java/org/springframework/web/util/HtmlCharacterEntityReferences.java b/spring-web/src/main/java/org/springframework/web/util/HtmlCharacterEntityReferences.java index 4d00262dc3..3afe5e8f06 100644 --- a/spring-web/src/main/java/org/springframework/web/util/HtmlCharacterEntityReferences.java +++ b/spring-web/src/main/java/org/springframework/web/util/HtmlCharacterEntityReferences.java @@ -55,7 +55,7 @@ class HtmlCharacterEntityReferences { private final String[] characterToEntityReferenceMap = new String[3000]; - private final Map entityReferenceToCharacterMap = new HashMap<>(252); + private final Map entityReferenceToCharacterMap = new HashMap<>(512); /** @@ -124,7 +124,7 @@ class HtmlCharacterEntityReferences { */ @Nullable public String convertToReference(char character) { - return convertToReference(character, WebUtils.DEFAULT_CHARACTER_ENCODING); + return convertToReference(character, WebUtils.DEFAULT_CHARACTER_ENCODING); } /** diff --git a/spring-web/src/main/java/org/springframework/web/util/OpaqueUriComponents.java b/spring-web/src/main/java/org/springframework/web/util/OpaqueUriComponents.java index 22f4e1e8e1..835606fad4 100644 --- a/spring-web/src/main/java/org/springframework/web/util/OpaqueUriComponents.java +++ b/spring-web/src/main/java/org/springframework/web/util/OpaqueUriComponents.java @@ -38,7 +38,7 @@ import org.springframework.util.ObjectUtils; @SuppressWarnings("serial") final class OpaqueUriComponents extends UriComponents { - private static final MultiValueMap QUERY_PARAMS_NONE = new LinkedMultiValueMap<>(0); + private static final MultiValueMap QUERY_PARAMS_NONE = new LinkedMultiValueMap<>(); @Nullable private final String ssp; diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/function/client/DefaultWebClient.java b/spring-webflux/src/main/java/org/springframework/web/reactive/function/client/DefaultWebClient.java index 715f5a8f70..d6d50c5e00 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/function/client/DefaultWebClient.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/function/client/DefaultWebClient.java @@ -345,7 +345,7 @@ class DefaultWebClient implements WebClient { private MultiValueMap initCookies() { if (CollectionUtils.isEmpty(this.cookies)) { - return (defaultCookies != null ? defaultCookies : new LinkedMultiValueMap<>(0)); + return (defaultCookies != null ? defaultCookies : new LinkedMultiValueMap<>()); } else if (CollectionUtils.isEmpty(defaultCookies)) { return this.cookies; diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/socket/adapter/NettyWebSocketSessionSupport.java b/spring-webflux/src/main/java/org/springframework/web/reactive/socket/adapter/NettyWebSocketSessionSupport.java index 149a136b48..70eb5a74ed 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/socket/adapter/NettyWebSocketSessionSupport.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/socket/adapter/NettyWebSocketSessionSupport.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2016 the original author or authors. + * Copyright 2002-2018 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.web.reactive.socket.adapter; import java.util.HashMap; @@ -48,14 +49,14 @@ public abstract class NettyWebSocketSessionSupport extends AbstractWebSocketS protected static final int DEFAULT_FRAME_MAX_SIZE = 64 * 1024; - private static final Map, WebSocketMessage.Type> MESSAGE_TYPES; + private static final Map, WebSocketMessage.Type> messageTypes; static { - MESSAGE_TYPES = new HashMap<>(4); - MESSAGE_TYPES.put(TextWebSocketFrame.class, WebSocketMessage.Type.TEXT); - MESSAGE_TYPES.put(BinaryWebSocketFrame.class, WebSocketMessage.Type.BINARY); - MESSAGE_TYPES.put(PingWebSocketFrame.class, WebSocketMessage.Type.PING); - MESSAGE_TYPES.put(PongWebSocketFrame.class, WebSocketMessage.Type.PONG); + messageTypes = new HashMap<>(8); + messageTypes.put(TextWebSocketFrame.class, WebSocketMessage.Type.TEXT); + messageTypes.put(BinaryWebSocketFrame.class, WebSocketMessage.Type.BINARY); + messageTypes.put(PingWebSocketFrame.class, WebSocketMessage.Type.PING); + messageTypes.put(PongWebSocketFrame.class, WebSocketMessage.Type.PONG); } @@ -72,7 +73,7 @@ public abstract class NettyWebSocketSessionSupport extends AbstractWebSocketS protected WebSocketMessage toMessage(WebSocketFrame frame) { DataBuffer payload = bufferFactory().wrap(frame.content()); - return new WebSocketMessage(MESSAGE_TYPES.get(frame.getClass()), payload); + return new WebSocketMessage(messageTypes.get(frame.getClass()), payload); } protected WebSocketFrame toFrame(WebSocketMessage message) {