+ finished adding integration tests for OXM support (XStream used in tests)
This commit is contained in:
@@ -70,10 +70,12 @@ import org.springframework.util.ClassUtils;
|
||||
public class RedisTemplate<K, V> extends RedisAccessor implements RedisOperations<K, V> {
|
||||
|
||||
private boolean exposeConnection = false;
|
||||
private RedisSerializer keySerializer = new JdkSerializationRedisSerializer();
|
||||
private RedisSerializer valueSerializer = new JdkSerializationRedisSerializer();
|
||||
private RedisSerializer hashKeySerializer = new JdkSerializationRedisSerializer();
|
||||
private RedisSerializer hashValueSerializer = new JdkSerializationRedisSerializer();
|
||||
private RedisSerializer<?> defaultSerializer = new JdkSerializationRedisSerializer();
|
||||
|
||||
private RedisSerializer keySerializer = null;
|
||||
private RedisSerializer valueSerializer = null;
|
||||
private RedisSerializer hashKeySerializer = null;
|
||||
private RedisSerializer hashValueSerializer = null;
|
||||
private RedisSerializer<String> stringSerializer = new StringRedisSerializer();
|
||||
|
||||
// cache singleton objects (where possible)
|
||||
@@ -99,6 +101,36 @@ public class RedisTemplate<K, V> extends RedisAccessor implements RedisOperation
|
||||
afterPropertiesSet();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void afterPropertiesSet() {
|
||||
super.afterPropertiesSet();
|
||||
boolean defaultUsed = false;
|
||||
|
||||
if (keySerializer == null) {
|
||||
keySerializer = defaultSerializer;
|
||||
defaultUsed = true;
|
||||
}
|
||||
if (valueSerializer == null) {
|
||||
valueSerializer = defaultSerializer;
|
||||
defaultUsed = true;
|
||||
}
|
||||
|
||||
if (hashKeySerializer == null) {
|
||||
hashKeySerializer = defaultSerializer;
|
||||
defaultUsed = true;
|
||||
}
|
||||
|
||||
if (hashValueSerializer == null) {
|
||||
hashValueSerializer = defaultSerializer;
|
||||
defaultUsed = true;
|
||||
}
|
||||
|
||||
if (defaultUsed) {
|
||||
Assert.notNull(defaultSerializer, "default serializer null and not all serializers initialized");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T execute(RedisCallback<T> action) {
|
||||
return execute(action, isExposeConnection());
|
||||
@@ -236,7 +268,26 @@ public class RedisTemplate<K, V> extends RedisAccessor implements RedisOperation
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the key serializer to be used by this template. Defaults to {@link JdkSerializationRedisSerializer}.
|
||||
* Returns the default serializer used by this template.
|
||||
*
|
||||
* @return template default serializer
|
||||
*/
|
||||
public RedisSerializer<?> getDefaultSerializer() {
|
||||
return defaultSerializer;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the default serializer to use for this template. All serializers (expect the {@link #setStringSerializer(RedisSerializer)}) are
|
||||
* initialized to this value unless explicitly set. Defaults to {@link JdkSerializationRedisSerializer}.
|
||||
*
|
||||
* @param serializer default serializer to use
|
||||
*/
|
||||
public void setDefaultSerializer(RedisSerializer<?> serializer) {
|
||||
this.defaultSerializer = serializer;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the key serializer to be used by this template. Defaults to {@link getDefaultSerializer}.
|
||||
*
|
||||
* @param serializer
|
||||
*/
|
||||
@@ -254,7 +305,7 @@ public class RedisTemplate<K, V> extends RedisAccessor implements RedisOperation
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the value serializer to be used by this template. Defaults to {@link JdkSerializationRedisSerializer}.
|
||||
* Sets the value serializer to be used by this template. Defaults to {@link getDefaultSerializer}.
|
||||
*
|
||||
* @param serializer
|
||||
*/
|
||||
@@ -272,7 +323,7 @@ public class RedisTemplate<K, V> extends RedisAccessor implements RedisOperation
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the hash key (or field) serializer to be used by this template. Defaults to {@link JdkSerializationRedisSerializer}.
|
||||
* Sets the hash key (or field) serializer to be used by this template. Defaults to {@link getDefaultSerializer}.
|
||||
*
|
||||
* @param hashKeySerializer The hashKeySerializer to set.
|
||||
*/
|
||||
@@ -281,7 +332,7 @@ public class RedisTemplate<K, V> extends RedisAccessor implements RedisOperation
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the hash value serializer to be used by this template. Defaults to {@link JdkSerializationRedisSerializer}.
|
||||
* Sets the hash value serializer to be used by this template. Defaults to {@link getDefaultSerializer}.
|
||||
*
|
||||
* @param hashValueSerializer The hashValueSerializer to set.
|
||||
*/
|
||||
|
||||
@@ -91,6 +91,7 @@ public class OxmSerializer implements InitializingBean, RedisSerializer<Object>
|
||||
|
||||
ByteArrayOutputStream stream = new ByteArrayOutputStream();
|
||||
StreamResult result = new StreamResult(stream);
|
||||
|
||||
try {
|
||||
marshaller.marshal(t, result);
|
||||
} catch (Exception ex) {
|
||||
|
||||
@@ -23,6 +23,8 @@ import org.springframework.data.keyvalue.redis.SettingsUtils;
|
||||
import org.springframework.data.keyvalue.redis.connection.jedis.JedisConnectionFactory;
|
||||
import org.springframework.data.keyvalue.redis.connection.jredis.JredisConnectionFactory;
|
||||
import org.springframework.data.keyvalue.redis.core.RedisTemplate;
|
||||
import org.springframework.data.keyvalue.redis.serializer.OxmSerializer;
|
||||
import org.springframework.oxm.xstream.XStreamMarshaller;
|
||||
|
||||
/**
|
||||
* @author Costin Leau
|
||||
@@ -30,6 +32,15 @@ import org.springframework.data.keyvalue.redis.core.RedisTemplate;
|
||||
public abstract class CollectionTestParams {
|
||||
|
||||
public static Collection<Object[]> testParams() {
|
||||
// XStream serializer
|
||||
XStreamMarshaller xstream = new XStreamMarshaller();
|
||||
try {
|
||||
xstream.afterPropertiesSet();
|
||||
} catch (Exception ex) {
|
||||
throw new RuntimeException("Cannot init XStream", ex);
|
||||
}
|
||||
OxmSerializer serializer = new OxmSerializer(xstream, xstream);
|
||||
|
||||
// create Jedis Factory
|
||||
ObjectFactory<String> stringFactory = new StringObjectFactory();
|
||||
ObjectFactory<Person> personFactory = new PersonObjectFactory();
|
||||
@@ -45,6 +56,14 @@ public abstract class CollectionTestParams {
|
||||
RedisTemplate<String, String> stringTemplate = new RedisTemplate<String, String>(jedisConnFactory);
|
||||
RedisTemplate<String, Person> personTemplate = new RedisTemplate<String, Person>(jedisConnFactory);
|
||||
|
||||
RedisTemplate<String, String> xstreamStringTemplate = new RedisTemplate<String, String>();
|
||||
xstreamStringTemplate.setConnectionFactory(jedisConnFactory);
|
||||
xstreamStringTemplate.setDefaultSerializer(serializer);
|
||||
xstreamStringTemplate.afterPropertiesSet();
|
||||
|
||||
RedisTemplate<String, Person> xstreamPersonTemplate = new RedisTemplate<String, Person>(jedisConnFactory);
|
||||
xstreamPersonTemplate.setValueSerializer(serializer);
|
||||
|
||||
JredisConnectionFactory jredisConnFactory = new JredisConnectionFactory();
|
||||
jredisConnFactory.setUsePool(true);
|
||||
|
||||
@@ -56,8 +75,17 @@ public abstract class CollectionTestParams {
|
||||
RedisTemplate<String, String> stringTemplateJR = new RedisTemplate<String, String>(jredisConnFactory);
|
||||
RedisTemplate<String, Person> personTemplateJR = new RedisTemplate<String, Person>(jredisConnFactory);
|
||||
|
||||
RedisTemplate<String, Person> xstreamStringTemplateJR = new RedisTemplate<String, Person>();
|
||||
xstreamStringTemplateJR.setConnectionFactory(jredisConnFactory);
|
||||
xstreamStringTemplateJR.setDefaultSerializer(serializer);
|
||||
xstreamStringTemplateJR.afterPropertiesSet();
|
||||
|
||||
RedisTemplate<String, Person> xstreamPersonTemplateJR = new RedisTemplate<String, Person>(jredisConnFactory);
|
||||
xstreamPersonTemplateJR.setValueSerializer(serializer);
|
||||
|
||||
return Arrays.asList(new Object[][] { { stringFactory, stringTemplateJR }, { personFactory, personTemplateJR },
|
||||
{ stringFactory, stringTemplate },
|
||||
{ personFactory, personTemplate } });
|
||||
{ stringFactory, stringTemplate }, { personFactory, personTemplate },
|
||||
{ stringFactory, xstreamStringTemplate }, { personFactory, xstreamPersonTemplate },
|
||||
{ stringFactory, xstreamStringTemplateJR }, { personFactory, xstreamPersonTemplateJR } });
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,6 +24,8 @@ import org.springframework.data.keyvalue.redis.SettingsUtils;
|
||||
import org.springframework.data.keyvalue.redis.connection.jedis.JedisConnectionFactory;
|
||||
import org.springframework.data.keyvalue.redis.connection.jredis.JredisConnectionFactory;
|
||||
import org.springframework.data.keyvalue.redis.core.RedisTemplate;
|
||||
import org.springframework.data.keyvalue.redis.serializer.OxmSerializer;
|
||||
import org.springframework.oxm.xstream.XStreamMarshaller;
|
||||
|
||||
/**
|
||||
* Integration test for RedisMap.
|
||||
@@ -44,6 +46,16 @@ public class RedisMapTests extends AbstractRedisMapTests<Object, Object> {
|
||||
|
||||
@Parameters
|
||||
public static Collection<Object[]> testParams() {
|
||||
// XStream serializer
|
||||
XStreamMarshaller xstream = new XStreamMarshaller();
|
||||
try {
|
||||
xstream.afterPropertiesSet();
|
||||
} catch (Exception ex) {
|
||||
throw new RuntimeException("Cannot init XStream", ex);
|
||||
}
|
||||
OxmSerializer serializer = new OxmSerializer(xstream, xstream);
|
||||
|
||||
|
||||
// create Jedis Factory
|
||||
ObjectFactory<String> stringFactory = new StringObjectFactory();
|
||||
ObjectFactory<Person> personFactory = new PersonObjectFactory();
|
||||
@@ -58,6 +70,11 @@ public class RedisMapTests extends AbstractRedisMapTests<Object, Object> {
|
||||
|
||||
RedisTemplate<String, String> genericTemplate = new RedisTemplate<String, String>(jedisConnFactory);
|
||||
|
||||
RedisTemplate<String, String> xstreamGenericTemplate = new RedisTemplate<String, String>();
|
||||
xstreamGenericTemplate.setConnectionFactory(jedisConnFactory);
|
||||
xstreamGenericTemplate.setDefaultSerializer(serializer);
|
||||
xstreamGenericTemplate.afterPropertiesSet();
|
||||
|
||||
|
||||
JredisConnectionFactory jredisConnFactory = new JredisConnectionFactory();
|
||||
jredisConnFactory.setUsePool(true);
|
||||
@@ -70,11 +87,23 @@ public class RedisMapTests extends AbstractRedisMapTests<Object, Object> {
|
||||
|
||||
RedisTemplate<String, String> genericTemplateJR = new RedisTemplate<String, String>(jredisConnFactory);
|
||||
|
||||
RedisTemplate<String, Person> xGenericTemplateJR = new RedisTemplate<String, Person>();
|
||||
xGenericTemplateJR.setConnectionFactory(jredisConnFactory);
|
||||
xGenericTemplateJR.setDefaultSerializer(serializer);
|
||||
xGenericTemplateJR.afterPropertiesSet();
|
||||
|
||||
RedisTemplate<String, Person> xstreamPersonTemplateJR = new RedisTemplate<String, Person>(jredisConnFactory);
|
||||
xstreamPersonTemplateJR.setValueSerializer(serializer);
|
||||
|
||||
|
||||
return Arrays.asList(new Object[][] { { stringFactory, stringFactory, genericTemplate },
|
||||
{ personFactory, personFactory, genericTemplate }, { stringFactory, personFactory, genericTemplate },
|
||||
{ personFactory, stringFactory, genericTemplate }, { stringFactory, stringFactory, genericTemplateJR },
|
||||
{ personFactory, stringFactory, genericTemplate },
|
||||
{ personFactory, stringFactory, xstreamGenericTemplate },
|
||||
{ stringFactory, stringFactory, genericTemplateJR },
|
||||
{ personFactory, personFactory, genericTemplateJR },
|
||||
{ stringFactory, personFactory, genericTemplateJR },
|
||||
{ personFactory, stringFactory, genericTemplateJR } });
|
||||
{ personFactory, stringFactory, genericTemplateJR },
|
||||
{ personFactory, stringFactory, xGenericTemplateJR } });
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user