@Override protected AdviceMessage<?> buildMessage(MutableMessageHeaders headers, Object payload, JsonNode root, DeserializationContext ctxt) throws IOException { Message<?> inputMessage = getMapper().readValue(root.get("inputMessage").traverse(), Message.class); return new AdviceMessage<Object>(payload, (MessageHeaders) headers, inputMessage); }
@Override public AdviceMessage<?> convert(Document source) { @SuppressWarnings("unchecked") Map<String, Object> headers = MongoDbMessageStore.this.converter.normalizeHeaders((Map<String, Object>) source.get("headers")); Message<?> inputMessage = null; if (source.get("inputMessage") != null) { Bson inputMessageObject = (Bson) source.get("inputMessage"); Object inputMessageType = asMap(inputMessageObject).get("_class"); try { Class<?> messageClass = ClassUtils.forName(inputMessageType.toString(), MongoDbMessageStore.this.classLoader); inputMessage = (Message<?>) MongoDbMessageStore.this.converter.read(messageClass, inputMessageObject); } catch (Exception e) { throw new IllegalStateException("failed to load class: " + inputMessageType, e); } } AdviceMessage<?> message = new AdviceMessage<>( MongoDbMessageStore.this.converter.extractPayload(source), headers, inputMessage); enhanceHeaders(message.getHeaders(), headers); return message; }
private void evaluateSuccessExpression(Message<?> message) throws Exception { Object evalResult; boolean evaluationFailed = false; try { evalResult = this.onSuccessExpression.getValue(this.prepareEvaluationContextToUse(null), message); } catch (Exception e) { evalResult = e; evaluationFailed = true; } if (this.successChannel == null && this.successChannelName != null && getChannelResolver() != null) { this.successChannel = getChannelResolver().resolveDestination(this.successChannelName); } if (evalResult != null && this.successChannel != null) { AdviceMessage<?> resultMessage = new AdviceMessage<Object>(evalResult, message); this.messagingTemplate.send(this.successChannel, resultMessage); } if (evaluationFailed && this.propagateOnSuccessEvaluationFailures) { throw (Exception) evalResult; } }
IntegrationMessageHeaderAccessor headerAccessor = new IntegrationMessageHeaderAccessor(message); headerAccessor.setHeader(HEADER_NAME, history); message = new AdviceMessage<T>(message.getPayload(), headerAccessor.toMessageHeaders(), ((AdviceMessage<?>) message).getInputMessage());
@Test @MongoDbAvailable public void testAdviceMessageAsPayload() throws Exception { MessageStore store = this.getMessageStore(); Person p = new Person(); p.setFname("John"); p.setLname("Doe"); Message<Person> inputMessage = MessageBuilder.withPayload(p).build(); Message<?> messageToStore = new GenericMessage<Message<?>>(new AdviceMessage<String>("foo", inputMessage)); store.addMessage(messageToStore); Message<?> retrievedMessage = store.getMessage(messageToStore.getHeaders().getId()); assertNotNull(retrievedMessage); assertTrue(retrievedMessage.getPayload() instanceof AdviceMessage); AdviceMessage<?> adviceMessage = (AdviceMessage<?>) retrievedMessage.getPayload(); assertEquals("foo", adviceMessage.getPayload()); assertEquals(messageToStore.getHeaders(), retrievedMessage.getHeaders()); assertEquals(inputMessage, adviceMessage.getInputMessage()); assertEquals(messageToStore, retrievedMessage); }
@Test @MongoDbAvailable public void testInt3076AdviceMessage() throws Exception { MessageStore store = this.getMessageStore(); Person p = new Person(); p.setFname("John"); p.setLname("Doe"); Message<Person> inputMessage = MessageBuilder.withPayload(p).build(); Message<?> messageToStore = new AdviceMessage<String>("foo", inputMessage); store.addMessage(messageToStore); Message<?> retrievedMessage = store.getMessage(messageToStore.getHeaders().getId()); assertNotNull(retrievedMessage); assertTrue(retrievedMessage instanceof AdviceMessage); assertEquals(messageToStore.getPayload(), retrievedMessage.getPayload()); assertEquals(messageToStore.getHeaders(), retrievedMessage.getHeaders()); assertEquals(inputMessage, ((AdviceMessage<?>) retrievedMessage).getInputMessage()); assertEquals(messageToStore, retrievedMessage); }
Message<?> adviceMessage = new AdviceMessage<>("foo", genericMessage); ErrorMessage errorMessage = new ErrorMessage(new RuntimeException("test exception"), mutableMessage);
@Override protected AdviceMessage<?> buildMessage(MutableMessageHeaders headers, Object payload, JsonNode root, DeserializationContext ctxt) throws IOException { Message<?> inputMessage = getMapper().readValue(root.get("inputMessage").traverse(), Message.class); return new AdviceMessage<Object>(payload, (MessageHeaders) headers, inputMessage); }
@Test public void testCorrectAdviceMessageAfterWrite() { Message<?> inputMessage = new GenericMessage<>("input"); AdviceMessage<String> original = new AdviceMessage<>("foo", inputMessage); assertNull(MessageHistory.read(original)); Message<String> result1 = MessageHistory.write(original, new TestComponent(1)); assertThat(result1, instanceOf(AdviceMessage.class)); assertNotSame(original, result1); assertSame(original.getPayload(), result1.getPayload()); assertSame(original.getInputMessage(), ((AdviceMessage<?>) result1).getInputMessage()); MessageHistory history1 = MessageHistory.read(result1); assertNotNull(history1); assertEquals("testComponent-1", history1.toString()); Message<String> result2 = MessageHistory.write(result1, new TestComponent(2)); assertThat(result2, instanceOf(AdviceMessage.class)); assertNotSame(original, result2); assertSame(original.getPayload(), result2.getPayload()); assertSame(original.getInputMessage(), ((AdviceMessage<?>) result2).getInputMessage()); assertNotSame(result1, result2); MessageHistory history2 = MessageHistory.read(result2); assertNotNull(history2); assertEquals("testComponent-1,testComponent-2", history2.toString()); }
@Override public AdviceMessage<?> convert(Document source) { @SuppressWarnings("unchecked") Map<String, Object> headers = MongoDbMessageStore.this.converter.normalizeHeaders((Map<String, Object>) source.get("headers")); Message<?> inputMessage = null; if (source.get("inputMessage") != null) { Bson inputMessageObject = (Bson) source.get("inputMessage"); Object inputMessageType = asMap(inputMessageObject).get("_class"); try { Class<?> messageClass = ClassUtils.forName(inputMessageType.toString(), MongoDbMessageStore.this.classLoader); inputMessage = (Message<?>) MongoDbMessageStore.this.converter.read(messageClass, inputMessageObject); } catch (Exception e) { throw new IllegalStateException("failed to load class: " + inputMessageType, e); } } AdviceMessage<?> message = new AdviceMessage<>( MongoDbMessageStore.this.converter.extractPayload(source), headers, inputMessage); enhanceHeaders(message.getHeaders(), headers); return message; }
private void evaluateSuccessExpression(Message<?> message) throws Exception { Object evalResult; boolean evaluationFailed = false; try { evalResult = this.onSuccessExpression.getValue(this.prepareEvaluationContextToUse(null), message); } catch (Exception e) { evalResult = e; evaluationFailed = true; } if (this.successChannel == null && this.successChannelName != null && getChannelResolver() != null) { this.successChannel = getChannelResolver().resolveDestination(this.successChannelName); } if (evalResult != null && this.successChannel != null) { AdviceMessage<?> resultMessage = new AdviceMessage<Object>(evalResult, message); this.messagingTemplate.send(this.successChannel, resultMessage); } if (evaluationFailed && this.propagateOnSuccessEvaluationFailures) { throw (Exception) evalResult; } }
IntegrationMessageHeaderAccessor headerAccessor = new IntegrationMessageHeaderAccessor(message); headerAccessor.setHeader(HEADER_NAME, history); message = new AdviceMessage<T>(message.getPayload(), headerAccessor.toMessageHeaders(), ((AdviceMessage<?>) message).getInputMessage());