@Override protected Object getSequenceSize() { return this.headerAccessor.getSequenceSize(); }
@Override public int getSequenceSize() { if (size() == 0) { return 0; } return new IntegrationMessageHeaderAccessor(getOne()).getSequenceSize(); }
@Test public void splitDocument() throws Exception { Document doc = XmlTestUtil.getDocumentForString("<orders><order>one</order><order>two</order><order>three</order></orders>"); this.splitter.handleMessage(new GenericMessage<>(doc)); List<Message<?>> docMessages = this.replyChannel.clear(); assertEquals("Wrong number of messages", 3, docMessages.size()); for (Message<?> message : docMessages) { assertThat(message.getPayload(), instanceOf(Node.class)); assertThat(message.getPayload(), not(instanceOf(Document.class))); assertThat(new IntegrationMessageHeaderAccessor(message).getSequenceSize(), greaterThan(0)); } }
@Test public void splitStringXml() throws Exception { String payload = "<orders><order>one</order><order>two</order><order>three</order></orders>"; this.splitter.handleMessage(new GenericMessage<>(payload)); List<Message<?>> docMessages = this.replyChannel.clear(); assertEquals("Wrong number of messages", 3, docMessages.size()); for (Message<?> message : docMessages) { assertThat(message.getPayload(), instanceOf(String.class)); assertThat(new IntegrationMessageHeaderAccessor(message).getSequenceSize(), greaterThan(0)); } }
@Test public void splitDocumentWithCreateDocumentsTrue() throws Exception { this.splitter.setCreateDocuments(true); Document doc = XmlTestUtil.getDocumentForString("<orders><order>one</order><order>two</order><order>three</order></orders>"); this.splitter.handleMessage(new GenericMessage<>(doc)); List<Message<?>> docMessages = this.replyChannel.clear(); assertEquals("Wrong number of messages", 3, docMessages.size()); for (Message<?> message : docMessages) { assertThat(message.getPayload(), instanceOf(Document.class)); Document docPayload = (Document) message.getPayload(); assertEquals("Wrong root element name", "order", docPayload.getDocumentElement().getLocalName()); assertThat(new IntegrationMessageHeaderAccessor(message).getSequenceSize(), greaterThan(0)); } }
@Test public void splitterParserTestApplySequenceFalse() { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( "splitterParserTests.xml", this.getClass()); context.start(); DirectChannel inputChannel = context.getBean("noSequenceInput", DirectChannel.class); PollableChannel output = (PollableChannel) context.getBean("output"); inputChannel.send(MessageBuilder.withPayload(Collections.emptyList()).build()); Message<?> message = output.receive(1000); assertThat(new IntegrationMessageHeaderAccessor(message).getSequenceNumber(), is(0)); assertThat(new IntegrationMessageHeaderAccessor(message).getSequenceSize(), is(0)); context.close(); }
@Test public void testMessageHeadersCopiedFromMap() { Map<String, Object> headerMap = new HashMap<String, Object>(); headerMap.put("testAttribute", Integer.valueOf(123)); headerMap.put("testProperty", "foo"); headerMap.put(IntegrationMessageHeaderAccessor.SEQUENCE_SIZE, 42); headerMap.put(IntegrationMessageHeaderAccessor.SEQUENCE_NUMBER, 24); GenericMessage<String> message = new GenericMessage<String>("test", headerMap); assertEquals(123, message.getHeaders().get("testAttribute")); assertEquals("foo", message.getHeaders().get("testProperty", String.class)); assertEquals(42, new IntegrationMessageHeaderAccessor(message).getSequenceSize()); assertEquals(24, new IntegrationMessageHeaderAccessor(message).getSequenceNumber()); }
@Override protected Object getSequenceSize() { return this.headerAccessor.getSequenceSize(); }
@Test public void applySequenceDisabledByDefault() { BroadcastingDispatcher dispatcher = new BroadcastingDispatcher(); final List<Message<?>> messages = Collections.synchronizedList(new ArrayList<Message<?>>()); MessageHandler target1 = new MessageStoringTestEndpoint(messages); MessageHandler target2 = new MessageStoringTestEndpoint(messages); dispatcher.addHandler(target1); dispatcher.addHandler(target2); dispatcher.dispatch(new GenericMessage<String>("test")); assertEquals(2, messages.size()); assertEquals(0, new IntegrationMessageHeaderAccessor(messages.get(0)).getSequenceNumber()); assertEquals(0, new IntegrationMessageHeaderAccessor(messages.get(0)).getSequenceSize()); assertEquals(0, new IntegrationMessageHeaderAccessor(messages.get(1)).getSequenceNumber()); assertEquals(0, new IntegrationMessageHeaderAccessor(messages.get(1)).getSequenceSize()); }
@Test public void applySequenceEnabled() { BroadcastingDispatcher dispatcher = new BroadcastingDispatcher(); dispatcher.setApplySequence(true); final List<Message<?>> messages = Collections.synchronizedList(new ArrayList<Message<?>>()); MessageHandler target1 = new MessageStoringTestEndpoint(messages); MessageHandler target2 = new MessageStoringTestEndpoint(messages); MessageHandler target3 = new MessageStoringTestEndpoint(messages); dispatcher.addHandler(target1); dispatcher.addHandler(target2); dispatcher.addHandler(target3); Message<?> inputMessage = new GenericMessage<String>("test"); Object originalId = inputMessage.getHeaders().getId(); dispatcher.dispatch(inputMessage); assertEquals(3, messages.size()); assertEquals(1, new IntegrationMessageHeaderAccessor(messages.get(0)).getSequenceNumber()); assertEquals(3, new IntegrationMessageHeaderAccessor(messages.get(0)).getSequenceSize()); assertEquals(originalId, new IntegrationMessageHeaderAccessor(messages.get(0)).getCorrelationId()); assertEquals(2, new IntegrationMessageHeaderAccessor(messages.get(1)).getSequenceNumber()); assertEquals(3, new IntegrationMessageHeaderAccessor(messages.get(1)).getSequenceSize()); assertEquals(originalId, new IntegrationMessageHeaderAccessor(messages.get(1)).getCorrelationId()); assertEquals(3, new IntegrationMessageHeaderAccessor(messages.get(2)).getSequenceNumber()); assertEquals(3, new IntegrationMessageHeaderAccessor(messages.get(2)).getSequenceSize()); assertEquals(originalId, new IntegrationMessageHeaderAccessor(messages.get(2)).getCorrelationId()); }
@Test public void spelIteratorSplitter() { this.spelIteratorInput.send(new GenericMessage<String>("a,b,c,d")); Message<?> a = output.receive(0); Message<?> b = output.receive(0); Message<?> c = output.receive(0); Message<?> d = output.receive(0); assertEquals("a", a.getPayload()); assertEquals(1, new IntegrationMessageHeaderAccessor(a).getSequenceNumber()); assertEquals(0, new IntegrationMessageHeaderAccessor(a).getSequenceSize()); assertEquals("b", b.getPayload()); assertEquals(2, new IntegrationMessageHeaderAccessor(b).getSequenceNumber()); assertEquals(0, new IntegrationMessageHeaderAccessor(b).getSequenceSize()); assertEquals("c", c.getPayload()); assertEquals(3, new IntegrationMessageHeaderAccessor(c).getSequenceNumber()); assertEquals(0, new IntegrationMessageHeaderAccessor(c).getSequenceSize()); assertEquals("d", d.getPayload()); assertEquals(4, new IntegrationMessageHeaderAccessor(d).getSequenceNumber()); assertEquals(0, new IntegrationMessageHeaderAccessor(d).getSequenceSize()); assertNull(output.receive(0)); }
@Test public void iteratorSplitter() { this.iteratorInput.send(new GenericMessage<String>("a,b,c,d")); Message<?> a = output.receive(0); Message<?> b = output.receive(0); Message<?> c = output.receive(0); Message<?> d = output.receive(0); assertEquals("a", a.getPayload()); assertEquals(1, new IntegrationMessageHeaderAccessor(a).getSequenceNumber()); assertEquals(0, new IntegrationMessageHeaderAccessor(a).getSequenceSize()); assertEquals("b", b.getPayload()); assertEquals(2, new IntegrationMessageHeaderAccessor(b).getSequenceNumber()); assertEquals(0, new IntegrationMessageHeaderAccessor(b).getSequenceSize()); assertEquals("c", c.getPayload()); assertEquals(3, new IntegrationMessageHeaderAccessor(c).getSequenceNumber()); assertEquals(0, new IntegrationMessageHeaderAccessor(c).getSequenceSize()); assertEquals("d", d.getPayload()); assertEquals(4, new IntegrationMessageHeaderAccessor(d).getSequenceNumber()); assertEquals(0, new IntegrationMessageHeaderAccessor(d).getSequenceSize()); assertNull(output.receive(0)); }
@Test public void sequence() { Message<?> originalMessage = new GenericMessage<String>("test"); this.sequenceRouter.send(originalMessage); Message<?> message1 = this.sequenceOut1.receive(1000); Message<?> message2 = this.sequenceOut2.receive(1000); Message<?> message3 = this.sequenceOut3.receive(1000); assertEquals(originalMessage.getHeaders().getId(), new IntegrationMessageHeaderAccessor(message1).getCorrelationId()); assertEquals(originalMessage.getHeaders().getId(), new IntegrationMessageHeaderAccessor(message2).getCorrelationId()); assertEquals(originalMessage.getHeaders().getId(), new IntegrationMessageHeaderAccessor(message3).getCorrelationId()); assertEquals(1, new IntegrationMessageHeaderAccessor(message1).getSequenceNumber()); assertEquals(3, new IntegrationMessageHeaderAccessor(message1).getSequenceSize()); assertEquals(2, new IntegrationMessageHeaderAccessor(message2).getSequenceNumber()); assertEquals(3, new IntegrationMessageHeaderAccessor(message2).getSequenceSize()); assertEquals(3, new IntegrationMessageHeaderAccessor(message3).getSequenceNumber()); assertEquals(3, new IntegrationMessageHeaderAccessor(message3).getSequenceSize()); }
@Test public void applySequenceEnabled() { QueueChannel channelA = new QueueChannel(1); QueueChannel channelB = new QueueChannel(1); channelA.setBeanName("channelA"); channelB.setBeanName("channelB"); RecipientListRouter router = new RecipientListRouter(); router.setApplySequence(true); List<MessageChannel> channels = new ArrayList<MessageChannel>(); channels.add(channelA); channels.add(channelB); router.setChannels(channels); Message<String> message = new GenericMessage<String>("test"); router.handleMessage(message); Message<?> result1a = channelA.receive(0); Message<?> result1b = channelB.receive(0); assertNotNull(result1a); assertNotNull(result1b); assertEquals("test", result1a.getPayload()); assertEquals(1, new IntegrationMessageHeaderAccessor(result1a).getSequenceNumber()); assertEquals(2, new IntegrationMessageHeaderAccessor(result1a).getSequenceSize()); assertEquals(message.getHeaders().getId(), new IntegrationMessageHeaderAccessor(result1a).getCorrelationId()); assertEquals("test", result1b.getPayload()); assertEquals(2, new IntegrationMessageHeaderAccessor(result1b).getSequenceNumber()); assertEquals(2, new IntegrationMessageHeaderAccessor(result1b).getSequenceSize()); assertEquals(message.getHeaders().getId(), new IntegrationMessageHeaderAccessor(result1b).getCorrelationId()); }
@Test public void applySequenceNotEnabledByDefault() { QueueChannel channelA = new QueueChannel(1); QueueChannel channelB = new QueueChannel(1); channelA.setBeanName("channelA"); channelB.setBeanName("channelB"); RecipientListRouter router = new RecipientListRouter(); List<MessageChannel> channels = new ArrayList<MessageChannel>(); channels.add(channelA); channels.add(channelB); router.setChannels(channels); Message<String> message = new GenericMessage<String>("test"); router.handleMessage(message); Message<?> result1a = channelA.receive(0); Message<?> result1b = channelB.receive(0); assertNotNull(result1a); assertNotNull(result1b); assertEquals("test", result1a.getPayload()); assertEquals(0, new IntegrationMessageHeaderAccessor(result1a).getSequenceNumber()); assertEquals(0, new IntegrationMessageHeaderAccessor(result1a).getSequenceSize()); assertNull(new IntegrationMessageHeaderAccessor(result1a).getCorrelationId()); assertEquals("test", result1b.getPayload()); assertEquals(0, new IntegrationMessageHeaderAccessor(result1b).getSequenceNumber()); assertEquals(0, new IntegrationMessageHeaderAccessor(result1b).getSequenceSize()); assertNull(new IntegrationMessageHeaderAccessor(result1b).getCorrelationId()); }
@Test public void headerForObjectReturnValues() throws Exception { GenericMessage<String> message = new GenericMessage<>("foo.bar"); MethodInvokingSplitter splitter = this.getSplitter("stringToStringArray"); QueueChannel replyChannel = new QueueChannel(); splitter.setOutputChannel(replyChannel); splitter.handleMessage(message); List<Message<?>> replies = replyChannel.clear(); Message<?> reply1 = replies.get(0); assertNotNull(reply1); assertEquals(2, new IntegrationMessageHeaderAccessor(reply1).getSequenceSize()); assertEquals(1, new IntegrationMessageHeaderAccessor(reply1).getSequenceNumber()); assertEquals(message.getHeaders().getId(), new IntegrationMessageHeaderAccessor(reply1).getCorrelationId()); Message<?> reply2 = replies.get(1); assertNotNull(reply2); assertEquals(2, new IntegrationMessageHeaderAccessor(reply2).getSequenceSize()); assertEquals(2, new IntegrationMessageHeaderAccessor(reply2).getSequenceNumber()); assertEquals(message.getHeaders().getId(), new IntegrationMessageHeaderAccessor(reply2).getCorrelationId()); }
@Test public void headerForMessageReturnValues() throws Exception { GenericMessage<String> message = new GenericMessage<>("foo.bar"); MethodInvokingSplitter splitter = this.getSplitter("messageToMessageList"); QueueChannel replyChannel = new QueueChannel(); splitter.setOutputChannel(replyChannel); splitter.handleMessage(message); List<Message<?>> replies = replyChannel.clear(); Message<?> reply1 = replies.get(0); assertNotNull(reply1); assertEquals(2, new IntegrationMessageHeaderAccessor(reply1).getSequenceSize()); assertEquals(1, new IntegrationMessageHeaderAccessor(reply1).getSequenceNumber()); assertEquals(message.getHeaders().getId(), new IntegrationMessageHeaderAccessor(reply1).getCorrelationId()); Message<?> reply2 = replies.get(1); assertNotNull(reply2); assertEquals(2, new IntegrationMessageHeaderAccessor(reply2).getSequenceSize()); assertEquals(2, new IntegrationMessageHeaderAccessor(reply2).getSequenceNumber()); assertEquals(message.getHeaders().getId(), new IntegrationMessageHeaderAccessor(reply2).getCorrelationId()); }
@Override public boolean matches(Message<?> value) { IntegrationMessageHeaderAccessor accessor = new IntegrationMessageHeaderAccessor(value); return "foo".equals(accessor.getCorrelationId()) && 42 == accessor.getSequenceNumber() && 43 == accessor.getSequenceSize(); } };
@Override public int getSequenceSize() { if (size() == 0) { return 0; } return new IntegrationMessageHeaderAccessor(getOne()).getSequenceSize(); }