+ finished adding integration tests for OXM support (XStream used in tests)

This commit is contained in:
Costin Leau
2011-01-28 18:45:45 +02:00
parent f32dd365a0
commit 00d847066f
4 changed files with 121 additions and 12 deletions

View File

@@ -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.
*/

View File

@@ -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) {

View File

@@ -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 } });
}
}

View File

@@ -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 } });
}
}