DATAKV-32

+ fix bug in template that used hash value serializer instead of the key one
This commit is contained in:
Costin Leau
2011-01-31 14:26:28 +02:00
parent d366115961
commit 1234372729
2 changed files with 29 additions and 10 deletions

View File

@@ -453,6 +453,19 @@ public class RedisTemplate<K, V> extends RedisAccessor implements RedisOperation
return (T) values;
}
@SuppressWarnings("unchecked")
private <H> Collection<H> deserializeHashKeys(Collection<byte[]> rawKeys, Class<? extends Collection> type) {
Collection<H> values = (List.class.isAssignableFrom(type) ? new ArrayList<H>(rawKeys.size())
: new LinkedHashSet<H>(rawKeys.size()));
for (byte[] bs : rawKeys) {
if (bs != null) {
values.add((H) hashKeySerializer.deserialize(bs));
}
}
return values;
}
@SuppressWarnings("unchecked")
private <H> Collection<H> deserializeHashValues(Collection<byte[]> rawValues, Class<? extends Collection> type) {
Collection<H> values = (List.class.isAssignableFrom(type) ? new ArrayList<H>(rawValues.size())
@@ -1749,7 +1762,7 @@ public class RedisTemplate<K, V> extends RedisAccessor implements RedisOperation
}
}, true);
return (Set<HK>) deserializeHashValues(rawValues, Set.class);
return (Set<HK>) deserializeHashKeys(rawValues, Set.class);
}
@Override

View File

@@ -41,7 +41,7 @@ public class RedisMapTests extends AbstractRedisMapTests<Object, Object> {
@Override
RedisMap<Object, Object> createMap() {
String redisName = getClass().getName();
String redisName = getClass().getSimpleName();
return new DefaultRedisMap<Object, Object>(redisName, template);
}
@@ -56,6 +56,7 @@ public class RedisMapTests extends AbstractRedisMapTests<Object, Object> {
}
OxmSerializer serializer = new OxmSerializer(xstream, xstream);
JacksonJsonRedisSerializer<Person> jsonSerializer = new JacksonJsonRedisSerializer<Person>(Person.class);
JacksonJsonRedisSerializer<String> jsonStringSerializer = new JacksonJsonRedisSerializer<String>(String.class);
// create Jedis Factory
ObjectFactory<String> stringFactory = new StringObjectFactory();
@@ -77,8 +78,12 @@ public class RedisMapTests extends AbstractRedisMapTests<Object, Object> {
xstreamGenericTemplate.afterPropertiesSet();
// json
RedisTemplate<String, Person> jsonPersonTemplate = new RedisTemplate<String, Person>(jedisConnFactory);
jsonPersonTemplate.setValueSerializer(jsonSerializer);
RedisTemplate<String, Person> jsonPersonTemplate = new RedisTemplate<String, Person>();
jsonPersonTemplate.setConnectionFactory(jedisConnFactory);
jsonPersonTemplate.setDefaultSerializer(jsonSerializer);
jsonPersonTemplate.setHashKeySerializer(jsonSerializer);
jsonPersonTemplate.setHashValueSerializer(jsonStringSerializer);
jsonPersonTemplate.afterPropertiesSet();
JredisConnectionFactory jredisConnFactory = new JredisConnectionFactory();
@@ -101,10 +106,13 @@ public class RedisMapTests extends AbstractRedisMapTests<Object, Object> {
xstreamPersonTemplateJR.setValueSerializer(serializer);
// json JR
RedisTemplate<String, Person> jsonPersonTemplateJR = new RedisTemplate<String, Person>(jredisConnFactory);
jsonPersonTemplate.setValueSerializer(jsonSerializer);
RedisTemplate<String, Person> jsonPersonTemplateJR = new RedisTemplate<String, Person>();
jsonPersonTemplateJR.setConnectionFactory(jredisConnFactory);
jsonPersonTemplateJR.setDefaultSerializer(jsonSerializer);
jsonPersonTemplateJR.setHashKeySerializer(jsonSerializer);
jsonPersonTemplateJR.setHashValueSerializer(jsonStringSerializer);
jsonPersonTemplateJR.afterPropertiesSet();
return Arrays.asList(new Object[][] { { stringFactory, stringFactory, genericTemplate },
{ personFactory, personFactory, genericTemplate }, { stringFactory, personFactory, genericTemplate },
{ personFactory, stringFactory, genericTemplate },
@@ -114,9 +122,7 @@ public class RedisMapTests extends AbstractRedisMapTests<Object, Object> {
{ stringFactory, personFactory, genericTemplateJR },
{ personFactory, stringFactory, genericTemplateJR },
{ personFactory, stringFactory, xGenericTemplateJR },
{ personFactory, personFactory, jsonPersonTemplate },
{ personFactory, stringFactory, jsonPersonTemplate },
{ personFactory, personFactory, jsonPersonTemplateJR },
{ personFactory, stringFactory, jsonPersonTemplateJR } });
}
}