RESOLVED - issue INT-1058, INT-1098: message ID is unique to an immutable instance
This commit is contained in:
@@ -19,10 +19,11 @@ package org.springframework.integration.ip;
|
||||
import org.springframework.integration.core.MessageHeaders;
|
||||
|
||||
/**
|
||||
* Headers for Messages mapped from UDP datagram packets.
|
||||
* Headers for Messages mapped from IP datagram packets.
|
||||
*
|
||||
* @author Mark Fisher
|
||||
* @author Gary Russell
|
||||
* @author Dave Syer
|
||||
* @since 2.0
|
||||
*/
|
||||
public abstract class IpHeaders {
|
||||
@@ -41,6 +42,8 @@ public abstract class IpHeaders {
|
||||
|
||||
public static final String ACK_ADDRESS = IP + "ackTo";
|
||||
|
||||
public static final String ACK_ID = IP + "ackId";
|
||||
|
||||
public static final String REMOTE_PORT = TCP + "remote_port";
|
||||
|
||||
}
|
||||
|
||||
@@ -53,6 +53,7 @@ import org.springframework.util.Assert;
|
||||
*
|
||||
* @author Mark Fisher
|
||||
* @author Gary Russell
|
||||
* @author Dave Syer
|
||||
* @since 2.0
|
||||
*/
|
||||
public class DatagramPacketMessageMapper implements InboundMessageMapper<DatagramPacket>,
|
||||
@@ -187,7 +188,7 @@ public class DatagramPacketMessageMapper implements InboundMessageMapper<Datagra
|
||||
payload = new byte[length];
|
||||
System.arraycopy(packet.getData(), offset + matcher.end(), payload, 0, length);
|
||||
message = MessageBuilder.withPayload(payload)
|
||||
.setHeader(MessageHeaders.ID, UUID.fromString(matcher.group(2)))
|
||||
.setHeader(IpHeaders.ACK_ID, UUID.fromString(matcher.group(2)))
|
||||
.setHeader(IpHeaders.ACK_ADDRESS, matcher.group(1))
|
||||
.setHeader(IpHeaders.HOSTNAME, packet.getAddress().getHostName())
|
||||
.setHeader(IpHeaders.IP_ADDRESS, packet.getAddress().getHostAddress())
|
||||
|
||||
@@ -125,7 +125,7 @@ public class UnicastReceivingChannelAdapter extends AbstractInternetProtocolRece
|
||||
|
||||
protected void sendAck(Message<byte[]> message) {
|
||||
MessageHeaders headers = message.getHeaders();
|
||||
Object id = headers.getId();
|
||||
Object id = headers.get(IpHeaders.ACK_ID);
|
||||
byte[] ack = id.toString().getBytes();
|
||||
String ackAddress = ((String) headers.get(IpHeaders.ACK_ADDRESS)).trim();
|
||||
Matcher mat = addressPattern.matcher(ackAddress);
|
||||
|
||||
@@ -28,20 +28,34 @@ import org.junit.Test;
|
||||
|
||||
import org.springframework.integration.adapter.MessageMappingException;
|
||||
import org.springframework.integration.core.Message;
|
||||
import org.springframework.integration.ip.IpHeaders;
|
||||
import org.springframework.integration.ip.udp.DatagramPacketMessageMapper;
|
||||
import org.springframework.integration.message.MessageBuilder;
|
||||
|
||||
/**
|
||||
* @author Gary Russell
|
||||
* @author Dave Syer
|
||||
* @since 2.0
|
||||
*/
|
||||
public class DatagramPacketMessageMapperTests {
|
||||
|
||||
@Test
|
||||
public void testFromToMessage() throws Exception {
|
||||
public void testFromToMessageNoAckNoLengthCheck() throws Exception {
|
||||
test(false, false);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testFromToMessageAckNoLengthCheck() throws Exception {
|
||||
test(true, false);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testFromToMessageNoAckLengthCheck() throws Exception {
|
||||
test(false, true);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testFromToMessageAckLengthCheck() throws Exception {
|
||||
test(true, true);
|
||||
}
|
||||
|
||||
@@ -56,8 +70,8 @@ public class DatagramPacketMessageMapperTests {
|
||||
Message<byte[]> messageOut = mapper.toMessage(packet);
|
||||
assertEquals(new String(message.getPayload()), new String(messageOut.getPayload()));
|
||||
if (ack) {
|
||||
assertEquals(message.getHeaders().getId().toString(),
|
||||
messageOut.getHeaders().getId().toString());
|
||||
assertEquals(messageOut.getHeaders().get(IpHeaders.ACK_ID).toString(),
|
||||
message.getHeaders().getId().toString());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -34,6 +34,7 @@ import org.junit.Ignore;
|
||||
import org.junit.Test;
|
||||
|
||||
import org.springframework.integration.core.Message;
|
||||
import org.springframework.integration.ip.IpHeaders;
|
||||
import org.springframework.integration.ip.udp.DatagramPacketMessageMapper;
|
||||
import org.springframework.integration.ip.udp.MulticastSendingMessageHandler;
|
||||
import org.springframework.integration.ip.udp.UnicastSendingMessageHandler;
|
||||
@@ -100,7 +101,7 @@ public class DatagramPacketSendingHandlerTests {
|
||||
mapper.setAcknowledge(true);
|
||||
mapper.setLengthCheck(true);
|
||||
Message<byte[]> message = mapper.toMessage(receivedPacket);
|
||||
Object id = message.getHeaders().getId();
|
||||
Object id = message.getHeaders().get(IpHeaders.ACK_ID);
|
||||
byte[] ack = id.toString().getBytes();
|
||||
DatagramPacket ackPack = new DatagramPacket(ack, ack.length,
|
||||
new InetSocketAddress("localHost", ackPort));
|
||||
@@ -201,7 +202,7 @@ public class DatagramPacketSendingHandlerTests {
|
||||
mapper.setAcknowledge(true);
|
||||
mapper.setLengthCheck(true);
|
||||
Message<byte[]> message = mapper.toMessage(receivedPacket);
|
||||
Object id = message.getHeaders().getId();
|
||||
Object id = message.getHeaders().get(IpHeaders.ACK_ID);
|
||||
byte[] ack = id.toString().getBytes();
|
||||
DatagramPacket ackPack = new DatagramPacket(ack, ack.length,
|
||||
new InetSocketAddress("localHost", ackPort));
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
acknowledge="true"
|
||||
ack-host="localhost"
|
||||
ack-port="22222"
|
||||
ack-timeout="10000"
|
||||
ack-timeout="2000"
|
||||
channel="outputChannel"/>
|
||||
|
||||
<beans:import resource="testIp-common-context.xml" />
|
||||
|
||||
Reference in New Issue
Block a user