From 7cb3de94d68dfcb51d8c261ab1c4ed3efabd4d7d Mon Sep 17 00:00:00 2001 From: Gary Russell Date: Fri, 30 Jul 2010 13:23:53 +0000 Subject: [PATCH] INT-1280 Remove cyclic package dependency - remove default (de)serializer; add constructor --- .../serializer/DeserializingConverter.java | 25 +++++++--------- .../serializer/SerializingConverter.java | 29 +++++++------------ .../PayloadDeserializingTransformer.java | 10 +++---- .../PayloadSerializingTransformer.java | 10 +++---- .../serializer/JavaSerializationTests.java | 12 ++++---- .../PayloadDeserializingTransformerTests.java | 13 +++++++++ .../PayloadSerializingTransformerTests.java | 14 +++++++++ 7 files changed, 63 insertions(+), 50 deletions(-) diff --git a/spring-integration-core/src/main/java/org/springframework/commons/serializer/DeserializingConverter.java b/spring-integration-core/src/main/java/org/springframework/commons/serializer/DeserializingConverter.java index e56bd84a9c..e823ff615b 100644 --- a/spring-integration-core/src/main/java/org/springframework/commons/serializer/DeserializingConverter.java +++ b/spring-integration-core/src/main/java/org/springframework/commons/serializer/DeserializingConverter.java @@ -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 { - private InputStreamingConverter streamingConverter - = new JavaStreamingConverter(); + private InputStreamingConverter streamingConverter; + + /** + * @param streamingConverter the InputStreamingConverter + */ + public DeserializingConverter(InputStreamingConverter streamingConverter) { + this.streamingConverter = streamingConverter; + } public Object convert(byte[] source) { ByteArrayInputStream byteStream = new ByteArrayInputStream(source); @@ -50,13 +54,4 @@ public class DeserializingConverter implements Converter { } } - /** - * Override the default {@link JavaStreamingConverter} - * @param streamingConverter the streamingConverter to set - */ - public void setStreamingConverter(InputStreamingConverter streamingConverter) { - this.streamingConverter = streamingConverter; - } - - } diff --git a/spring-integration-core/src/main/java/org/springframework/commons/serializer/SerializingConverter.java b/spring-integration-core/src/main/java/org/springframework/commons/serializer/SerializingConverter.java index 22f4d8ab69..c86d2a68a0 100644 --- a/spring-integration-core/src/main/java/org/springframework/commons/serializer/SerializingConverter.java +++ b/spring-integration-core/src/main/java/org/springframework/commons/serializer/SerializingConverter.java @@ -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 { - private OutputStreamingConverter streamingConverter - = new JavaStreamingConverter(); + private OutputStreamingConverter streamingConverter; + + /** + * @param streamingConverter the OutputStreamingConverter + */ + public SerializingConverter(OutputStreamingConverter 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 { } } - /** - * Override the default {@link JavaStreamingConverter} - * @param streamingConverter the streamingConverter to set - */ - public void setStreamingConverter( - OutputStreamingConverter streamingConverter) { - this.streamingConverter = streamingConverter; - } - } diff --git a/spring-integration-core/src/main/java/org/springframework/integration/transformer/PayloadDeserializingTransformer.java b/spring-integration-core/src/main/java/org/springframework/integration/transformer/PayloadDeserializingTransformer.java index 6c7696989a..92a0d04d56 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/transformer/PayloadDeserializingTransformer.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/transformer/PayloadDeserializingTransformer.java @@ -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 { - public PayloadDeserializingTransformer() { - this.converter = new DeserializingConverter(); - } - @Override protected Object transformPayload(byte[] payload) throws Exception { - Assert.notNull(this.converter, this.getClass().getName() + " needs a Converter"); + if (this.converter == null) { + this.converter = new DeserializingConverter(new JavaStreamingConverter()); + } return converter.convert(payload); } diff --git a/spring-integration-core/src/main/java/org/springframework/integration/transformer/PayloadSerializingTransformer.java b/spring-integration-core/src/main/java/org/springframework/integration/transformer/PayloadSerializingTransformer.java index efa849f6b7..7e94db6905 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/transformer/PayloadSerializingTransformer.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/transformer/PayloadSerializingTransformer.java @@ -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 { - public PayloadSerializingTransformer() { - this.converter = new SerializingConverter(); - } - @Override protected byte[] transformPayload(Object payload) throws Exception { - Assert.notNull(this.converter, this.getClass().getName() + " needs a Converter"); + if (this.converter == null) { + this.converter = new SerializingConverter(new JavaStreamingConverter()); + } return converter.convert(payload); } diff --git a/spring-integration-core/src/test/java/org/springframework/commons/serializer/JavaSerializationTests.java b/spring-integration-core/src/test/java/org/springframework/commons/serializer/JavaSerializationTests.java index e65247bf52..d9224596c1 100644 --- a/spring-integration-core/src/test/java/org/springframework/commons/serializer/JavaSerializationTests.java +++ b/spring-integration-core/src/test/java/org/springframework/commons/serializer/JavaSerializationTests.java @@ -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"); diff --git a/spring-integration-core/src/test/java/org/springframework/integration/transformer/PayloadDeserializingTransformerTests.java b/spring-integration-core/src/test/java/org/springframework/integration/transformer/PayloadDeserializingTransformerTests.java index 9dd3c77e54..11fd34b938 100644 --- a/spring-integration-core/src/test/java/org/springframework/integration/transformer/PayloadDeserializingTransformerTests.java +++ b/spring-integration-core/src/test/java/org/springframework/integration/transformer/PayloadDeserializingTransformerTests.java @@ -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(bytes)); } + @Test + public void customDeserializer() { + PayloadDeserializingTransformer transformer = new PayloadDeserializingTransformer(); + transformer.setConverter(new Converter(){ + 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 { diff --git a/spring-integration-core/src/test/java/org/springframework/integration/transformer/PayloadSerializingTransformerTests.java b/spring-integration-core/src/test/java/org/springframework/integration/transformer/PayloadSerializingTransformerTests.java index da9eeb1961..a9948f15ba 100644 --- a/spring-integration-core/src/test/java/org/springframework/integration/transformer/PayloadSerializingTransformerTests.java +++ b/spring-integration-core/src/test/java/org/springframework/integration/transformer/PayloadSerializingTransformerTests.java @@ -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(new Object())); } + + @Test + public void customSerializer() { + PayloadSerializingTransformer transformer = new PayloadSerializingTransformer(); + transformer.setConverter(new Converter(){ + 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")