INT-1280 Remove cyclic package dependency - remove default (de)serializer; add constructor

This commit is contained in:
Gary Russell
2010-07-30 13:23:53 +00:00
parent 8ffe575b1f
commit 7cb3de94d6
7 changed files with 63 additions and 50 deletions

View File

@@ -19,13 +19,11 @@ package org.springframework.commons.serializer;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import org.springframework.commons.serializer.java.JavaStreamingConverter;
import org.springframework.core.convert.converter.Converter;
/**
* Delegates to a {@link InputStreamingConverter} (default is
* {@link JavaStreamingConverter}} to deserialize data
* in a byte[] to an object.
* A {@link Converter} that delegates to a {@link InputStreamingConverter}
* to convert data in a byte[] to an object.
*
* @author Gary Russell
* @since 2.0
@@ -33,8 +31,14 @@ import org.springframework.core.convert.converter.Converter;
*/
public class DeserializingConverter implements Converter<byte[], Object> {
private InputStreamingConverter<Object> streamingConverter
= new JavaStreamingConverter();
private InputStreamingConverter<Object> streamingConverter;
/**
* @param streamingConverter the InputStreamingConverter
*/
public DeserializingConverter(InputStreamingConverter<Object> streamingConverter) {
this.streamingConverter = streamingConverter;
}
public Object convert(byte[] source) {
ByteArrayInputStream byteStream = new ByteArrayInputStream(source);
@@ -50,13 +54,4 @@ public class DeserializingConverter implements Converter<byte[], Object> {
}
}
/**
* Override the default {@link JavaStreamingConverter}
* @param streamingConverter the streamingConverter to set
*/
public void setStreamingConverter(InputStreamingConverter<Object> streamingConverter) {
this.streamingConverter = streamingConverter;
}
}

View File

@@ -17,16 +17,12 @@
package org.springframework.commons.serializer;
import java.io.ByteArrayOutputStream;
import java.io.Serializable;
import org.springframework.commons.serializer.java.JavaStreamingConverter;
import org.springframework.core.convert.converter.Converter;
import org.springframework.util.Assert;
/**
* Delegates to a {@link OutputStreamingConverter} (default is
* {@link JavaStreamingConverter}) to serialize an object
* to a byte[].
* A {@Link Converter} that delegates to a {@link OutputStreamingConverter}
* to convert an object to a byte[].
*
* @author Gary Russell
* @since 2.0
@@ -34,11 +30,17 @@ import org.springframework.util.Assert;
*/
public class SerializingConverter implements Converter<Object, byte[]> {
private OutputStreamingConverter<Object> streamingConverter
= new JavaStreamingConverter();
private OutputStreamingConverter<Object> streamingConverter;
/**
* @param streamingConverter the OutputStreamingConverter
*/
public SerializingConverter(OutputStreamingConverter<Object> streamingConverter) {
this.streamingConverter = streamingConverter;
}
public byte[] convert(Object source) {
ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
ByteArrayOutputStream byteStream = new ByteArrayOutputStream(128);
try {
this.streamingConverter.convert(source, byteStream);
return byteStream.toByteArray();
@@ -47,13 +49,4 @@ public class SerializingConverter implements Converter<Object, byte[]> {
}
}
/**
* Override the default {@link JavaStreamingConverter}
* @param streamingConverter the streamingConverter to set
*/
public void setStreamingConverter(
OutputStreamingConverter<Object> streamingConverter) {
this.streamingConverter = streamingConverter;
}
}

View File

@@ -17,8 +17,8 @@
package org.springframework.integration.transformer;
import org.springframework.commons.serializer.DeserializingConverter;
import org.springframework.commons.serializer.java.JavaStreamingConverter;
import org.springframework.core.convert.converter.Converter;
import org.springframework.util.Assert;
/**
* Transformer that deserializes the inbound byte array payload to an object by delegating to a
@@ -33,13 +33,11 @@ import org.springframework.util.Assert;
*/
public class PayloadDeserializingTransformer extends PayloadTypeConvertingTransformer<byte[], Object> {
public PayloadDeserializingTransformer() {
this.converter = new DeserializingConverter();
}
@Override
protected Object transformPayload(byte[] payload) throws Exception {
Assert.notNull(this.converter, this.getClass().getName() + " needs a Converter<byte[], Object>");
if (this.converter == null) {
this.converter = new DeserializingConverter(new JavaStreamingConverter());
}
return converter.convert(payload);
}

View File

@@ -17,8 +17,8 @@
package org.springframework.integration.transformer;
import org.springframework.commons.serializer.SerializingConverter;
import org.springframework.commons.serializer.java.JavaStreamingConverter;
import org.springframework.core.convert.converter.Converter;
import org.springframework.util.Assert;
/**
* Transformer that serializes the inbound payload into a byte array by delegating to a
@@ -34,13 +34,11 @@ import org.springframework.util.Assert;
public class PayloadSerializingTransformer extends PayloadTypeConvertingTransformer<Object, byte[]> {
public PayloadSerializingTransformer() {
this.converter = new SerializingConverter();
}
@Override
protected byte[] transformPayload(Object payload) throws Exception {
Assert.notNull(this.converter, this.getClass().getName() + " needs a Converter<Object, byte[]>");
if (this.converter == null) {
this.converter = new SerializingConverter(new JavaStreamingConverter());
}
return converter.convert(payload);
}

View File

@@ -25,6 +25,7 @@ import java.io.NotSerializableException;
import java.io.Serializable;
import org.junit.Test;
import org.springframework.commons.serializer.java.JavaStreamingConverter;
/**
@@ -36,15 +37,16 @@ public class JavaSerializationTests {
@Test
public void testGood() {
SerializingConverter toBytes = new SerializingConverter();
JavaStreamingConverter streamingConverter = new JavaStreamingConverter();
SerializingConverter toBytes = new SerializingConverter(streamingConverter);
byte[] bytes = toBytes.convert("Testing");
DeserializingConverter fromBytes = new DeserializingConverter();
DeserializingConverter fromBytes = new DeserializingConverter(streamingConverter);
assertEquals("Testing", fromBytes.convert(bytes));
}
@Test
public void testBadSerializeNotSerializable() {
SerializingConverter toBytes = new SerializingConverter();
SerializingConverter toBytes = new SerializingConverter(new JavaStreamingConverter());
try {
toBytes.convert(new Object());
fail("Expected IllegalArgumentException");
@@ -57,7 +59,7 @@ public class JavaSerializationTests {
@Test
public void testBadSerializeNotSerializableField() {
SerializingConverter toBytes = new SerializingConverter();
SerializingConverter toBytes = new SerializingConverter(new JavaStreamingConverter());
try {
toBytes.convert(new UnSerializable());
fail("Expected SerializationFailureException");
@@ -70,7 +72,7 @@ public class JavaSerializationTests {
@Test
public void testBadDeserialize() {
DeserializingConverter fromBytes = new DeserializingConverter();
DeserializingConverter fromBytes = new DeserializingConverter(new JavaStreamingConverter());
try {
fromBytes.convert("Junk".getBytes());
fail("Expected DeserializationFailureException");

View File

@@ -25,8 +25,10 @@ import java.io.Serializable;
import org.junit.Test;
import org.springframework.core.convert.converter.Converter;
import org.springframework.integration.Message;
import org.springframework.integration.core.GenericMessage;
import org.springframework.integration.core.MessageBuilder;
/**
* @author Mark Fisher
@@ -69,6 +71,17 @@ public class PayloadDeserializingTransformerTests {
transformer.transform(new GenericMessage<byte[]>(bytes));
}
@Test
public void customDeserializer() {
PayloadDeserializingTransformer transformer = new PayloadDeserializingTransformer();
transformer.setConverter(new Converter<byte[], Object>(){
public Object convert(byte[] source) {
return "Converted";
}
});
Message<?> message = transformer.transform(MessageBuilder.withPayload("Test".getBytes()).build());
assertEquals("Converted", message.getPayload());
}
@SuppressWarnings("serial")
private static class TestBean implements Serializable {

View File

@@ -26,8 +26,10 @@ import java.io.Serializable;
import org.junit.Test;
import org.springframework.core.convert.converter.Converter;
import org.springframework.integration.Message;
import org.springframework.integration.core.GenericMessage;
import org.springframework.integration.core.MessageBuilder;
import org.springframework.integration.core.StringMessage;
/**
@@ -68,6 +70,18 @@ public class PayloadSerializingTransformerTests {
PayloadSerializingTransformer transformer = new PayloadSerializingTransformer();
transformer.transform(new GenericMessage<Object>(new Object()));
}
@Test
public void customSerializer() {
PayloadSerializingTransformer transformer = new PayloadSerializingTransformer();
transformer.setConverter(new Converter<Object, byte[]>(){
public byte[] convert(Object source) {
return "Converted".getBytes();
}
});
Message<?> message = transformer.transform(MessageBuilder.withPayload("Test").build());
assertEquals("Converted", new String((byte[]) message.getPayload()));
}
@SuppressWarnings("serial")