Now invokes the transformer in 'preSend' instead of 'postSend'.

This commit is contained in:
Mark Fisher
2008-07-05 16:56:05 +00:00
parent e1dca0ff9f
commit f6de774110
2 changed files with 35 additions and 31 deletions

View File

@@ -22,39 +22,43 @@ import org.springframework.integration.channel.interceptor.ChannelInterceptorAda
import org.springframework.integration.message.Message;
/**
* a {@link ChannelInterceptor} which allows the application of a {@link MessageTransformer} on either send or receive to a channel
* @author Jonas Partner
* A {@link ChannelInterceptor} which invokes a {@link MessageTransformer}
* when either sending-to or receiving-from a channel.
*
* @author Jonas Partner
*/
public class MessageTransformingChannelInterceptor extends ChannelInterceptorAdapter {
private boolean convertOnSend = true;
private final MessageTransformer transfomer;
private volatile boolean transformOnSend = true;
public MessageTransformingChannelInterceptor(MessageTransformer transformer) {
this.transfomer = transformer;
}
public boolean getConvertOnSend() {
return convertOnSend;
public boolean getTransformOnSend() {
return this.transformOnSend;
}
public void setConvertOnSend(boolean convertOnSend) {
this.convertOnSend = convertOnSend;
public void setTransformOnSend(boolean transformOnSend) {
this.transformOnSend = transformOnSend;
}
@Override
public void postSend(Message<?> message, MessageChannel channel, boolean sent) {
if(convertOnSend){
transfomer.transform(message);
public boolean preSend(Message<?> message, MessageChannel channel) {
if (this.transformOnSend) {
this.transfomer.transform(message);
}
return true;
}
@Override
public void postReceive(Message<?> message, MessageChannel channel) {
if(!convertOnSend){
transfomer.transform(message);
if (!this.transformOnSend) {
this.transfomer.transform(message);
}
}

View File

@@ -20,26 +20,26 @@ import static org.junit.Assert.*;
import org.junit.Before;
import org.junit.Test;
import org.springframework.integration.channel.AbstractMessageChannel;
import org.springframework.integration.channel.QueueChannel;
import org.springframework.integration.message.Message;
import org.springframework.integration.message.StringMessage;
/**
*
* @author Jonas Partner
*
*/
public class MessageTransformingChannelInterceptorTests {
AbstractMessageChannel channel;
StringMessage message;
TestTransformer transfomer;
MessageTransformingChannelInterceptor channelInterceptor;
@Before
public void setUp(){
channel = new QueueChannel();
@@ -48,28 +48,28 @@ public class MessageTransformingChannelInterceptorTests {
channelInterceptor = new MessageTransformingChannelInterceptor(transfomer);
channel.addInterceptor(channelInterceptor);
}
@Test
public void testTransformOnReceive(){
channelInterceptor.setConvertOnSend(false);
public void testTransformOnReceive() {
channelInterceptor.setTransformOnSend(false);
channel.send(message);
assertFalse("Transfomrer on incorrectly invoked on send", transfomer.invoked);
Message msg = channel.receive(1);
Message<?> msg = channel.receive(1);
assertEquals("Wrong message",message, msg);
assertTrue("Transfomer not invoked on receive", transfomer.invoked);
}
@Test
public void testTransformOnSend(){
channelInterceptor.setConvertOnSend(true);
public void testTransformOnSend() {
channelInterceptor.setTransformOnSend(true);
channel.send(message);
assertTrue("Transfomrer not invoked on send", transfomer.invoked);
Message msg = channel.receive(1);
Message<?> msg = channel.receive(1);
assertEquals("Wrong message",message, msg);
assertEquals("Transfomer invoked on receive", 1, transfomer.invokedCount);
}
private static class TestTransformer implements MessageTransformer{
boolean invoked = false;
@@ -80,7 +80,7 @@ public class MessageTransformingChannelInterceptorTests {
invoked = true;
invokedCount++;
}
}
}