Skip to content

Commit

Permalink
Refactor JdkSerializationRedisSerializer.
Browse files Browse the repository at this point in the history
* Annotate deserialize(..) with @OverRide.
* Cleanup source code.
* Edit Javadoc.

Closes 2610
  • Loading branch information
jxblum committed Jun 14, 2023
1 parent 4da3bdf commit 6afe1e0
Showing 1 changed file with 33 additions and 21 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,58 +20,68 @@
import org.springframework.core.serializer.DefaultSerializer;
import org.springframework.core.serializer.support.DeserializingConverter;
import org.springframework.core.serializer.support.SerializingConverter;
import org.springframework.data.redis.util.RedisAssertions;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;

/**
* Java Serialization Redis serializer. Delegates to the default (Java based) {@link DefaultSerializer serializer} and
* {@link DefaultDeserializer}. This {@link RedisSerializer serializer} can be constructed with either custom
* {@link ClassLoader} or own {@link Converter converters}.
* Java Serialization {@link RedisSerializer}.
* <p>
* Delegates to the default (Java-based) {@link DefaultSerializer serializer}
* and {@link DefaultDeserializer deserializer}.
* <p>
* This {@link RedisSerializer serializer} can be constructed with either a custom {@link ClassLoader}
* or custom {@link Converter converters}.
*
* @author Mark Pollack
* @author Costin Leau
* @author Mark Paluch
* @author Christoph Strobl
* @author John Blum
*/
public class JdkSerializationRedisSerializer implements RedisSerializer<Object> {

private final Converter<Object, byte[]> serializer;
private final Converter<byte[], Object> deserializer;

/**
* Creates a new {@link JdkSerializationRedisSerializer} using the default class loader.
* Creates a new {@link JdkSerializationRedisSerializer} using the default {@link ClassLoader}.
*/
public JdkSerializationRedisSerializer() {
this(new SerializingConverter(), new DeserializingConverter());
}

/**
* Creates a new {@link JdkSerializationRedisSerializer} using a {@link ClassLoader}.
* Creates a new {@link JdkSerializationRedisSerializer} with the given {@link ClassLoader} used to
* resolve {@link Class types} during deserialization.
*
* @param classLoader the {@link ClassLoader} to use for deserialization. Can be {@literal null}.
* @param classLoader {@link ClassLoader} used to resolve {@link Class types} for deserialization;
* can be {@literal null}.
* @since 1.7
*/
public JdkSerializationRedisSerializer(@Nullable ClassLoader classLoader) {
this(new SerializingConverter(), new DeserializingConverter(classLoader));
}

/**
* Creates a new {@link JdkSerializationRedisSerializer} using a {@link Converter converters} to serialize and
* deserialize objects.
* Creates a new {@link JdkSerializationRedisSerializer} using {@link Converter converters} to serialize and
* deserialize {@link Object objects}.
*
* @param serializer must not be {@literal null}
* @param deserializer must not be {@literal null}
* @param serializer {@link Converter} used to serialize an {@link Object} to a byte array;
* must not be {@literal null}.
* @param deserializer {@link Converter} used to deserialize and convert a byte arra into an {@link Object};
* must not be {@literal null}
* @throws IllegalArgumentException if either the given {@code serializer} or {@code deserializer}
* are {@literal null}.
* @since 1.7
*/
public JdkSerializationRedisSerializer(Converter<Object, byte[]> serializer, Converter<byte[], Object> deserializer) {
public JdkSerializationRedisSerializer(Converter<Object, byte[]> serializer,
Converter<byte[], Object> deserializer) {

Assert.notNull(serializer, "Serializer must not be null");
Assert.notNull(deserializer, "Deserializer must not be null");

this.serializer = serializer;
this.deserializer = deserializer;
this.serializer = RedisAssertions.requireObject(serializer, "Serializer must not be null");
this.deserializer = RedisAssertions.requireObject(deserializer, "Deserializer must not be null");
}

@Override
public Object deserialize(@Nullable byte[] bytes) {

if (SerializationUtils.isEmpty(bytes)) {
Expand All @@ -80,20 +90,22 @@ public Object deserialize(@Nullable byte[] bytes) {

try {
return deserializer.convert(bytes);
} catch (Exception ex) {
throw new SerializationException("Cannot deserialize", ex);
} catch (Exception cause) {
throw new SerializationException("Cannot deserialize", cause);
}
}

@Override
public byte[] serialize(@Nullable Object object) {

if (object == null) {
return SerializationUtils.EMPTY_ARRAY;
}

try {
return serializer.convert(object);
} catch (Exception ex) {
throw new SerializationException("Cannot serialize", ex);
} catch (Exception cause) {
throw new SerializationException("Cannot serialize", cause);
}
}
}

0 comments on commit 6afe1e0

Please sign in to comment.