/** * Private constructor to be invoked from the static factory methods only. */ private MessageBuilder(T payload, Message<T> originalMessage) { Assert.notNull(payload, "payload must not be null"); this.payload = payload; this.originalMessage = originalMessage; this.headerAccessor = new IntegrationMessageHeaderAccessor(originalMessage); if (originalMessage != null) { this.modified = (!this.payload.equals(originalMessage.getPayload())); } }
public boolean accept(Message<?> message) { Long expirationDate = new IntegrationMessageHeaderAccessor(message).getExpirationDate(); if (expirationDate == null) { return true; } return expirationDate > System.currentTimeMillis(); }
protected int findLastReleasedSequenceNumber(Object groupId, Collection<Message<?>> partialSequence) { Message<?> lastReleasedMessage = Collections.max(partialSequence, this.sequenceNumberComparator); return new IntegrationMessageHeaderAccessor(lastReleasedMessage).getSequenceNumber(); }
@Override public MessageGroup addMessageToGroup(Object groupId, Message<?> message) { Assert.isInstanceOf(String.class, groupId); String key = (String) groupId; Integer priority = new IntegrationMessageHeaderAccessor(message).getPriority(); if (priority != null && priority < 10 && priority >= 0) { key = key + ":" + priority; } return super.addMessageToGroup(key, message); }
@Override public int getSequenceSize() { if (size() == 0) { return 0; } return new IntegrationMessageHeaderAccessor(getOne()).getSequenceSize(); }
public void second(Message<?> message) { int sequenceNumber = new IntegrationMessageHeaderAccessor(message).getSequenceNumber(); LOG.info("Second handling sequence number: " + sequenceNumber + "; Message ID: " + message.getHeaders().getId()); if (sequenceNumber != 2) { success.set(false); } countDownLatch2.countDown(); } }
@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 priorityExpression() { MessagingTemplate template = new MessagingTemplate(); MessageChannel channel = context.getBean("priorityExpressionInput", MessageChannel.class); Message<?> result = template.sendAndReceive(channel, new GenericMessage<>(Collections.singletonMap("priority", "-10"))); assertNotNull(result); assertEquals(new Integer(-10), new IntegrationMessageHeaderAccessor(result).getPriority()); }
@Test public void testExpirationDateSetAsDate() { Long past = System.currentTimeMillis() - (60 * 1000); Message<Integer> expiredMessage = MessageBuilder.withPayload(1) .setExpirationDate(new Date(past)).build(); assertEquals(past, new IntegrationMessageHeaderAccessor(expiredMessage).getExpirationDate()); }
@Test public void priority() { MessagingTemplate template = new MessagingTemplate(); MessageChannel channel = context.getBean("priorityInput", MessageChannel.class); Message<?> result = template.sendAndReceive(channel, new GenericMessage<>("test")); assertNotNull(result); assertEquals(new Integer(42), new IntegrationMessageHeaderAccessor(result).getPriority()); }
@Test public void testPriority() { Message<Integer> importantMessage = MessageBuilder.withPayload(1) .setPriority(123).build(); assertEquals(new Integer(123), new IntegrationMessageHeaderAccessor(importantMessage).getPriority()); }
@Test public void testExpirationDateSetAsLong() { Long past = System.currentTimeMillis() - (60 * 1000); Message<Integer> expiredMessage = MessageBuilder.withPayload(1) .setExpirationDate(past).build(); assertEquals(past, new IntegrationMessageHeaderAccessor(expiredMessage).getExpirationDate()); }
@Test public void chainWithHeaderEnricher() { Message<?> message = MessageBuilder.withPayload(123).build(); this.headerEnricherInput.send(message); Message<?> reply = this.replyOutput.receive(1000); assertNotNull(reply); assertEquals("foo", reply.getPayload()); assertEquals("ABC", new IntegrationMessageHeaderAccessor(reply).getCorrelationId()); assertEquals("XYZ", reply.getHeaders().get("testValue")); assertEquals(123, reply.getHeaders().get("testRef")); }
@Test public void priorityExplicitOverwriteTrue() { MessageChannel channel = this.context.getBean("priorityExplicitOverwriteTrueInput", MessageChannel.class); MessagingTemplate template = new MessagingTemplate(); template.setDefaultDestination(channel); Message<?> result = template.sendAndReceive(new GenericMessage<String>("test")); assertNotNull(result); assertEquals(new Integer(42), new IntegrationMessageHeaderAccessor(result).getPriority()); }
@Test public void correlationIdRef() { MessagingTemplate template = new MessagingTemplate(); MessageChannel channel = context.getBean("correlationIdRefInput", MessageChannel.class); Message<?> result = template.sendAndReceive(channel, new GenericMessage<>("test")); assertNotNull(result); assertEquals(123, new IntegrationMessageHeaderAccessor(result).getCorrelationId()); }
@Test public void correlationIdValue() { MessagingTemplate template = new MessagingTemplate(); MessageChannel channel = context.getBean("correlationIdValueInput", MessageChannel.class); Message<?> result = template.sendAndReceive(channel, new GenericMessage<>("test")); assertNotNull(result); assertEquals("ABC", new IntegrationMessageHeaderAccessor(result).getCorrelationId()); }
@Test public void testNonDestructiveSet() { Message<Integer> message1 = MessageBuilder.withPayload(1) .setPriority(42).build(); Message<Integer> message2 = MessageBuilder.fromMessage(message1) .setHeaderIfAbsent(IntegrationMessageHeaderAccessor.PRIORITY, 13) .build(); assertEquals(new Integer(42), new IntegrationMessageHeaderAccessor(message2).getPriority()); }
@Test @Transactional public void testAddAndUpdate() throws Exception { Message<String> message = MessageBuilder.withPayload("foo").setCorrelationId("X").build(); message = messageStore.addMessage(message); message = MessageBuilder.fromMessage(message).setCorrelationId("Y").build(); message = messageStore.addMessage(message); assertEquals("Y", new IntegrationMessageHeaderAccessor(messageStore.getMessage(message.getHeaders().getId())).getCorrelationId()); }
@Test public void testAddAndUpdate() throws Exception { Message<?> message = MessageBuilder.withPayload("foo").setCorrelationId("X").build(); message = messageStore.addMessage(message); message = MessageBuilder.fromMessage(message).setCorrelationId("Y").build(); message = messageStore.addMessage(message); message = messageStore.getMessage(message.getHeaders().getId()); assertEquals("Y", new IntegrationMessageHeaderAccessor(message).getCorrelationId()); }