Add concurrent test and fix potential NPE

After SPR-12884 (4.2 RC1) introduced support for a selector header
expression on SUBSCRIBE frames, messages from the destination cache
are further filtered based on the selector expression. While adding a
test to find subscriptions at the same time as unsubscribing, a
potential NPE was exposed. This commit fixes the NPE.

Issue: SPR-13204
This commit is contained in:
Rossen Stoyanchev
2015-07-06 16:58:55 -04:00
parent 5dcbc5db29
commit 0b43e4e4f2
2 changed files with 76 additions and 2 deletions

View File

@@ -16,8 +16,6 @@
package org.springframework.messaging.simp.broker;
import static org.springframework.messaging.support.MessageHeaderAccessor.getAccessor;
import java.util.Collection;
import java.util.HashSet;
import java.util.LinkedHashMap;
@@ -46,6 +44,8 @@ import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.util.PathMatcher;
import static org.springframework.messaging.support.MessageHeaderAccessor.getAccessor;
/**
* Implementation of {@link SubscriptionRegistry} that stores subscriptions
@@ -209,7 +209,13 @@ public class DefaultSubscriptionRegistry extends AbstractSubscriptionRegistry {
for (String sessionId : allMatches.keySet()) {
for (String subId : allMatches.get(sessionId)) {
SessionSubscriptionInfo info = this.subscriptionRegistry.getSubscriptions(sessionId);
if (info == null) {
continue;
}
Subscription sub = info.getSubscription(subId);
if (sub == null) {
continue;
}
Expression expression = sub.getSelectorExpression();
if (expression == null) {
result.add(sessionId, subId);