Skip to content

Commit ac851c8

Browse files
committed
Fix MessageListenerAdapter sending msg instead of body
when no Serializer is specified DATAREDIS-233
1 parent 6c9f958 commit ac851c8

File tree

3 files changed

+32
-16
lines changed

3 files changed

+32
-16
lines changed

src/main/java/org/springframework/data/redis/listener/adapter/MessageListenerAdapter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -372,7 +372,7 @@ protected Object extractMessage(Message message) {
372372
if (serializer != null) {
373373
return serializer.deserialize(message.getBody());
374374
}
375-
return message;
375+
return message.getBody();
376376
}
377377

378378
/**

src/test/java/org/springframework/data/redis/listener/PubSubTestParams.java

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import org.springframework.data.redis.ObjectFactory;
2222
import org.springframework.data.redis.Person;
2323
import org.springframework.data.redis.PersonObjectFactory;
24+
import org.springframework.data.redis.RawObjectFactory;
2425
import org.springframework.data.redis.SettingsUtils;
2526
import org.springframework.data.redis.StringObjectFactory;
2627
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
@@ -39,6 +40,7 @@ public static Collection<Object[]> testParams() {
3940
// create Jedis Factory
4041
ObjectFactory<String> stringFactory = new StringObjectFactory();
4142
ObjectFactory<Person> personFactory = new PersonObjectFactory();
43+
ObjectFactory<byte[]> rawFactory = new RawObjectFactory();
4244

4345
JedisConnectionFactory jedisConnFactory = new JedisConnectionFactory();
4446
jedisConnFactory.setUsePool(true);
@@ -52,6 +54,10 @@ public static Collection<Object[]> testParams() {
5254
RedisTemplate<String, Person> personTemplate = new RedisTemplate<String, Person>();
5355
personTemplate.setConnectionFactory(jedisConnFactory);
5456
personTemplate.afterPropertiesSet();
57+
RedisTemplate<byte[], byte[]> rawTemplate = new RedisTemplate<byte[], byte[]>();
58+
rawTemplate.setEnableDefaultSerializer(false);
59+
rawTemplate.setConnectionFactory(jedisConnFactory);
60+
rawTemplate.afterPropertiesSet();
5561

5662
// add Lettuce
5763
LettuceConnectionFactory lettuceConnFactory = new LettuceConnectionFactory();
@@ -63,6 +69,10 @@ public static Collection<Object[]> testParams() {
6369
RedisTemplate<String, Person> personTemplateLtc = new RedisTemplate<String, Person>();
6470
personTemplateLtc.setConnectionFactory(lettuceConnFactory);
6571
personTemplateLtc.afterPropertiesSet();
72+
RedisTemplate<byte[], byte[]> rawTemplateLtc = new RedisTemplate<byte[], byte[]>();
73+
rawTemplateLtc.setEnableDefaultSerializer(false);
74+
rawTemplateLtc.setConnectionFactory(lettuceConnFactory);
75+
rawTemplateLtc.afterPropertiesSet();
6676

6777
// SRP
6878
SrpConnectionFactory srpConnFactory = new SrpConnectionFactory();
@@ -74,12 +84,17 @@ public static Collection<Object[]> testParams() {
7484
RedisTemplate<String, Person> personTemplateSrp = new RedisTemplate<String, Person>();
7585
personTemplateSrp.setConnectionFactory(srpConnFactory);
7686
personTemplateSrp.afterPropertiesSet();
87+
RedisTemplate<byte[], byte[]> rawTemplateSrp = new RedisTemplate<byte[], byte[]>();
88+
rawTemplateSrp.setEnableDefaultSerializer(false);
89+
rawTemplateSrp.setConnectionFactory(srpConnFactory);
90+
rawTemplateSrp.afterPropertiesSet();
7791

7892
// JRedis does not support pub/sub
7993

8094
return Arrays.asList(new Object[][] { { stringFactory, stringTemplate }, { personFactory, personTemplate },
81-
{ stringFactory, stringTemplateLtc }, { personFactory, personTemplateLtc },
82-
{ stringFactory, stringTemplateSrp }, { personFactory, personTemplateSrp }
95+
{rawFactory, rawTemplate}, { stringFactory, stringTemplateLtc }, { personFactory, personTemplateLtc },
96+
{rawFactory, rawTemplateLtc}, { stringFactory, stringTemplateSrp }, { personFactory, personTemplateSrp },
97+
{rawFactory, rawTemplateSrp}
8398
});
8499
}
85100
}

src/test/java/org/springframework/data/redis/listener/PubSubTests.java

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,9 @@
1616
package org.springframework.data.redis.listener;
1717

1818
import static org.junit.Assert.assertEquals;
19-
import static org.junit.Assert.assertTrue;
2019
import static org.junit.Assert.assertNull;
20+
import static org.junit.Assert.assertThat;
21+
import static org.junit.matchers.JUnitMatchers.hasItems;
2122

2223
import java.util.Arrays;
2324
import java.util.Collection;
@@ -57,11 +58,11 @@ public class PubSubTests<T> {
5758
@SuppressWarnings("rawtypes")
5859
protected RedisTemplate template;
5960

60-
private final BlockingDeque<String> bag = new LinkedBlockingDeque<String>(99);
61+
private final BlockingDeque<Object> bag = new LinkedBlockingDeque<Object>(99);
6162

6263
private final Object handler = new Object() {
6364
@SuppressWarnings("unused")
64-
public void handleMessage(String message) {
65+
public void handleMessage(Object message) {
6566
bag.add(message);
6667
}
6768
};
@@ -117,27 +118,27 @@ protected T getT() {
117118
return factory.instance();
118119
}
119120

121+
@SuppressWarnings("unchecked")
120122
@Test
121123
public void testContainerSubscribe() throws Exception {
122-
String payload1 = "do";
123-
String payload2 = "re mi";
124+
T payload1 = getT();
125+
T payload2 = getT();
124126

125127
template.convertAndSend(CHANNEL, payload1);
126128
template.convertAndSend(CHANNEL, payload2);
127129

128-
Set<String> set = new LinkedHashSet<String>();
129-
set.add(bag.poll(1, TimeUnit.SECONDS));
130-
set.add(bag.poll(1, TimeUnit.SECONDS));
130+
Set<T> set = new LinkedHashSet<T>();
131+
set.add((T) bag.poll(1, TimeUnit.SECONDS));
132+
set.add((T) bag.poll(1, TimeUnit.SECONDS));
131133

132-
assertTrue(set.contains(payload1));
133-
assertTrue(set.contains(payload2));
134+
assertThat(set, hasItems(payload1, payload2));
134135
}
135136

136137
@Test
137138
public void testMessageBatch() throws Exception {
138139
int COUNT = 10;
139140
for (int i = 0; i < COUNT; i++) {
140-
template.convertAndSend(CHANNEL, "message=" + i);
141+
template.convertAndSend(CHANNEL, getT());
141142
}
142143

143144
Thread.sleep(1000);
@@ -146,8 +147,8 @@ public void testMessageBatch() throws Exception {
146147

147148
@Test
148149
public void testContainerUnsubscribe() throws Exception {
149-
String payload1 = "do";
150-
String payload2 = "re mi";
150+
T payload1 = getT();
151+
T payload2 = getT();
151152

152153
container.removeMessageListener(adapter, new ChannelTopic(CHANNEL));
153154
template.convertAndSend(CHANNEL, payload1);

0 commit comments

Comments
 (0)