Skip to content

Commit 64bc9b4

Browse files
committed
Do match message type
SimpMessageTypeMessageCondition was lenient in matching the message type, essentially matching on any non-null message type with an exact match given a preference only in comparing mulitple matches. This commit modifies matching logic to look for an exact match. Issue: SPR-16109
1 parent a58002a commit 64bc9b4

File tree

2 files changed

+10
-8
lines changed

2 files changed

+10
-8
lines changed

spring-messaging/src/main/java/org/springframework/messaging/simp/SimpMessageTypeMessageCondition.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2002-2015 the original author or authors.
2+
* Copyright 2002-2017 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -74,11 +74,8 @@ public SimpMessageTypeMessageCondition combine(SimpMessageTypeMessageCondition o
7474
@Override
7575
@Nullable
7676
public SimpMessageTypeMessageCondition getMatchingCondition(Message<?> message) {
77-
Object actualMessageType = SimpMessageHeaderAccessor.getMessageType(message.getHeaders());
78-
if (actualMessageType == null) {
79-
return null;
80-
}
81-
return this;
77+
SimpMessageType actual = SimpMessageHeaderAccessor.getMessageType(message.getHeaders());
78+
return (actual != null && actual.equals(this.messageType) ? this : null);
8279
}
8380

8481
@Override

spring-messaging/src/test/java/org/springframework/messaging/simp/annotation/support/SimpAnnotationMethodMessageHandlerTests.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
import org.springframework.messaging.simp.SimpAttributesContextHolder;
5252
import org.springframework.messaging.simp.SimpMessageHeaderAccessor;
5353
import org.springframework.messaging.simp.SimpMessageSendingOperations;
54+
import org.springframework.messaging.simp.SimpMessageType;
5455
import org.springframework.messaging.simp.SimpMessagingTemplate;
5556
import org.springframework.messaging.simp.annotation.SubscribeMapping;
5657
import org.springframework.messaging.support.MessageBuilder;
@@ -159,7 +160,7 @@ public void messageMappingDestinationVariableResolution() {
159160

160161
@Test
161162
public void subscribeEventDestinationVariableResolution() {
162-
Message<?> message = createMessage("/pre/sub/bar/value");
163+
Message<?> message = createMessage(SimpMessageType.SUBSCRIBE, "/pre/sub/bar/value", null);
163164
this.messageHandler.registerHandler(this.testController);
164165
this.messageHandler.handleMessage(message);
165166

@@ -328,7 +329,11 @@ private Message<?> createMessage(String destination) {
328329
}
329330

330331
private Message<?> createMessage(String destination, Map<String, Object> headers) {
331-
SimpMessageHeaderAccessor accessor = SimpMessageHeaderAccessor.create();
332+
return createMessage(SimpMessageType.MESSAGE, destination, headers);
333+
}
334+
335+
private Message<?> createMessage(SimpMessageType messageType, String destination, Map<String, Object> headers) {
336+
SimpMessageHeaderAccessor accessor = SimpMessageHeaderAccessor.create(messageType);
332337
accessor.setSessionId("session1");
333338
accessor.setSessionAttributes(new HashMap<>());
334339
accessor.setDestination(destination);

0 commit comments

Comments
 (0)