Refine search
@Override public javax.jms.Message toMessage(Object object, Session session) throws JMSException, MessageConversionException { if (!(object instanceof Message)) { throw new IllegalArgumentException("Could not convert [" + object + "] - only [" + Message.class.getName() + "] is handled by this converter"); } Message<?> input = (Message<?>) object; MessageHeaders headers = input.getHeaders(); Object conversionHint = headers.get(AbstractMessagingTemplate.CONVERSION_HINT_HEADER); javax.jms.Message reply = createMessageForPayload(input.getPayload(), session, conversionHint); this.headerMapper.fromHeaders(headers, reply); return reply; }
@Test public void toMessageWithPayloadAndHeaders() { MessageHeaders headers = new MessageHeaders(Collections.<String, Object>singletonMap("foo", "bar")); Message<?> message = this.converter.toMessage("payload", headers); assertEquals("payload", message.getPayload()); assertEquals("bar", message.getHeaders().get("foo")); }
@Override public <T> EventMessage<T> convertFromInboundMessage(Message<T> message) { MessageHeaders headers = message.getHeaders(); Map<String, ?> metaData = headers.entrySet() .stream() .filter(entry -> !entry.getKey().startsWith(AXON_MESSAGE_PREFIX)) .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); String messageId = Objects.toString(headers.get(MESSAGE_ID)); Long timestamp = headers.getTimestamp(); org.axonframework.messaging.GenericMessage<T> genericMessage = new org.axonframework.messaging.GenericMessage<>(messageId, message.getPayload(), metaData); if (headers.containsKey(AGGREGATE_ID)) { return new GenericDomainEventMessage<>(Objects.toString(headers.get(AGGREGATE_TYPE)), Objects.toString(headers.get(AGGREGATE_ID)), NumberUtils.convertNumberToTargetClass(headers.get(AGGREGATE_SEQ, Number.class), Long.class), genericMessage, () -> Instant.ofEpochMilli(timestamp)); } else { return new GenericEventMessage<>(genericMessage, () -> Instant.ofEpochMilli(timestamp)); } }
@Override public void handleMessage(Message<?> message) throws MessagingException { String executionId = message.getHeaders().containsKey("executionId") ? (String) message.getHeaders().get("executionId") : (String) null; if (null != executionId) processEngine.getRuntimeService().trigger(executionId); } };
@Test public void testIdOverwritten() throws Exception { MessageHeaders headers1 = new MessageHeaders(null); MessageHeaders headers2 = new MessageHeaders(headers1); assertNotSame(headers1.getId(), headers2.getId()); }
@Test public void testTimestampOverwritten() throws Exception { MessageHeaders headers1 = new MessageHeaders(null); Thread.sleep(50L); MessageHeaders headers2 = new MessageHeaders(headers1); assertNotSame(headers1.getTimestamp(), headers2.getTimestamp()); }
@SuppressWarnings("unchecked") private Map<String, List<String>> getNativeHeaders(Message<?> message) { return (Map<String, List<String>>) message.getHeaders().get( NativeMessageHeaderAccessor.NATIVE_HEADERS); }
@Transformer(inputChannel = "gatewayChannel") public String transform(Message<String> message) { assertTrue(message.getHeaders().containsKey("foo")); assertEquals("FOO", message.getHeaders().get("foo")); assertTrue(message.getHeaders().containsKey("calledMethod")); assertEquals("echo", message.getHeaders().get("calledMethod")); return this.handle(message.getPayload()) + Arrays.asList(new Throwable().getStackTrace()).toString(); }
protected final void doSend(MessageChannel channel, Message<?> message, long timeout) { Assert.notNull(channel, "MessageChannel is required"); Message<?> messageToSend = message; MessageHeaderAccessor accessor = MessageHeaderAccessor.getAccessor(message, MessageHeaderAccessor.class); if (accessor != null && accessor.isMutable()) { accessor.removeHeader(this.sendTimeoutHeader); accessor.removeHeader(this.receiveTimeoutHeader); accessor.setImmutable(); } else if (message.getHeaders().containsKey(this.sendTimeoutHeader) || message.getHeaders().containsKey(this.receiveTimeoutHeader)) { messageToSend = MessageBuilder.fromMessage(message) .setHeader(this.sendTimeoutHeader, null) .setHeader(this.receiveTimeoutHeader, null) .build(); } boolean sent = (timeout >= 0 ? channel.send(messageToSend, timeout) : channel.send(messageToSend)); if (!sent) { throw new MessageDeliveryException(message, "Failed to send message to channel '" + channel + "' within timeout: " + timeout); } }
@SuppressWarnings("unchecked") @Test @RedisAvailable public void testAddAndGetStringMessage() { RedisConnectionFactory jcf = this.getConnectionFactoryForTest(); RedisMessageStore store = new RedisMessageStore(jcf); Message<String> stringMessage = new GenericMessage<String>("Hello Redis"); store.addMessage(stringMessage); Message<String> retrievedMessage = (Message<String>) store.getMessage(stringMessage.getHeaders().getId()); assertNotNull(retrievedMessage); assertEquals("Hello Redis", retrievedMessage.getPayload()); }
@Test public void createIdRegenerated() { Message<String> message1 = MessageBuilder.withPayload("test") .setHeader("foo", "bar").build(); Message<String> message2 = MessageBuilder.fromMessage(message1).setHeader("another", 1).build(); assertEquals("bar", message2.getHeaders().get("foo")); assertNotSame(message1.getHeaders().getId(), message2.getHeaders().getId()); }
protected void doAddMessage(Message<?> message) { Assert.notNull(message, "'message' must not be null"); UUID messageId = message.getHeaders().getId(); Assert.notNull(messageId, "Cannot store messages without an ID header"); doStoreIfAbsent(this.messagePrefix + messageId, new MessageHolder(message)); }
@Test public void toMessageWithHeaders() { Map<String, Object> map = new HashMap<>(); map.put("foo", "bar"); MessageHeaders headers = new MessageHeaders(map); Message<?> message = this.converter.toMessage("ABC", headers); assertNotNull(message.getHeaders().getId()); assertNotNull(message.getHeaders().getTimestamp()); assertEquals(MimeTypeUtils.TEXT_PLAIN, message.getHeaders().get(MessageHeaders.CONTENT_TYPE)); assertEquals("bar", message.getHeaders().get("foo")); }
@Test(expected = IllegalArgumentException.class) public void testHeaderValueAccessWithIncorrectType() { Integer value = new Integer(123); Map<String, Object> map = new HashMap<>(); map.put("test", value); MessageHeaders headers = new MessageHeaders(map); assertEquals(value, headers.get("test", String.class)); }
@Test public void testBuildMessageWithoutIdAndTimestamp() { MessageHeaderAccessor headerAccessor = new MessageHeaderAccessor(); headerAccessor.setIdGenerator(new IdGenerator() { @Override public UUID generateId() { return MessageHeaders.ID_VALUE_NONE; } }); Message<?> message = MessageBuilder.createMessage("foo", headerAccessor.getMessageHeaders()); assertNull(message.getHeaders().getId()); assertNull(message.getHeaders().getTimestamp()); }
@Test public void toMessage() { Map<String, Object> map = new HashMap<>(); map.put(MessageHeaders.CONTENT_TYPE, MimeTypeUtils.TEXT_PLAIN); MessageHeaders headers = new MessageHeaders(map); Message<?> message = this.converter.toMessage("ABC", headers); assertEquals("ABC", new String(((byte[]) message.getPayload()))); }
public void resolveMessageHeaders(MessageHeaders headers) { this.invocations.put("resolveMessageHeaders", true); assertNotNull("MessageHeaders not injected", headers); assertEquals("Missing JMS message type header", "myMessageType", headers.get(JmsHeaders.TYPE)); assertEquals("Missing custom header", 4567L, (long) headers.get("customLong"), 0.0); }
@Test public void existingHeadersModification() throws InterruptedException { Map<String, Object> map = new HashMap<>(); map.put("foo", "bar"); map.put("bar", "baz"); GenericMessage<String> message = new GenericMessage<>("payload", map); Thread.sleep(50); MessageHeaderAccessor accessor = new MessageHeaderAccessor(message); accessor.setHeader("foo", "BAR"); MessageHeaders actual = accessor.getMessageHeaders(); assertEquals(3, actual.size()); assertNotEquals(message.getHeaders().getId(), actual.getId()); assertEquals("BAR", actual.get("foo")); assertEquals("baz", actual.get("bar")); }
@Test public void existingHeaders() throws InterruptedException { Map<String, Object> map = new HashMap<>(); map.put("foo", "bar"); map.put("bar", "baz"); GenericMessage<String> message = new GenericMessage<>("payload", map); MessageHeaderAccessor accessor = new MessageHeaderAccessor(message); MessageHeaders actual = accessor.getMessageHeaders(); assertEquals(3, actual.size()); assertEquals("bar", actual.get("foo")); assertEquals("baz", actual.get("bar")); }
/** * Create a new message with the given payload. * @param payload the message payload (never {@code null}) */ public GenericMessage(T payload) { this(payload, new MessageHeaders(null)); }