Example usage for org.springframework.integration.support MessageBuilder fromMessage

List of usage examples for org.springframework.integration.support MessageBuilder fromMessage

Introduction

In this page you can find the example usage for org.springframework.integration.support MessageBuilder fromMessage.

Prototype

public static <T> MessageBuilder<T> fromMessage(Message<T> message) 

Source Link

Document

Create a builder for a new Message instance pre-populated with all of the headers copied from the provided message.

Usage

From source file:org.springframework.integration.gateway.GatewayMethodInboundMessageMapper.java

private Message<?> mapArgumentsToMessage(Object[] arguments) {
    Object messageOrPayload = null;
    boolean foundPayloadAnnotation = false;
    Map<String, Object> headers = new HashMap<String, Object>();
    EvaluationContext methodInvocationEvaluationContext = createMethodInvocationEvaluationContext(arguments);
    if (this.payloadExpression != null) {
        messageOrPayload = this.payloadExpression.getValue(methodInvocationEvaluationContext);
    }/*from  w ww  .j  a va  2  s.  c  o  m*/
    for (int i = 0; i < this.parameterList.size(); i++) {
        Object argumentValue = arguments[i];
        MethodParameter methodParameter = this.parameterList.get(i);
        Annotation annotation = this.findMappingAnnotation(methodParameter.getParameterAnnotations());
        if (annotation != null) {
            if (annotation.annotationType().equals(Payload.class)) {
                if (messageOrPayload != null) {
                    this.throwExceptionForMultipleMessageOrPayloadParameters(methodParameter);
                }
                String expression = ((Payload) annotation).value();
                if (!StringUtils.hasText(expression)) {
                    messageOrPayload = argumentValue;
                } else {
                    messageOrPayload = this.evaluatePayloadExpression(expression, argumentValue);
                }
                foundPayloadAnnotation = true;
            } else if (annotation.annotationType().equals(Header.class)) {
                Header headerAnnotation = (Header) annotation;
                String headerName = this.determineHeaderName(headerAnnotation, methodParameter);
                if (headerAnnotation.required() && argumentValue == null) {
                    throw new IllegalArgumentException(
                            "Received null argument value for required header: '" + headerName + "'");
                }
                headers.put(headerName, argumentValue);
            } else if (annotation.annotationType().equals(Headers.class)) {
                if (argumentValue != null) {
                    if (!(argumentValue instanceof Map)) {
                        throw new IllegalArgumentException(
                                "@Headers annotation is only valid for Map-typed parameters");
                    }
                    for (Object key : ((Map<?, ?>) argumentValue).keySet()) {
                        Assert.isInstanceOf(String.class, key,
                                "Invalid header name [" + key + "], name type must be String.");
                        Object value = ((Map<?, ?>) argumentValue).get(key);
                        headers.put((String) key, value);
                    }
                }
            }
        } else if (messageOrPayload == null) {
            messageOrPayload = argumentValue;
        } else if (Map.class.isAssignableFrom(methodParameter.getParameterType())) {
            if (messageOrPayload instanceof Map && !foundPayloadAnnotation) {
                if (payloadExpression == null) {
                    throw new MessagingException("Ambiguous method parameters; found more than one "
                            + "Map-typed parameter and neither one contains a @Payload annotation");
                }
            }
            this.copyHeaders((Map<?, ?>) argumentValue, headers);
        } else if (this.payloadExpression == null) {
            this.throwExceptionForMultipleMessageOrPayloadParameters(methodParameter);
        }
    }
    Assert.isTrue(messageOrPayload != null,
            "unable to determine a Message or payload parameter on method [" + method + "]");
    MessageBuilder<?> builder = (messageOrPayload instanceof Message)
            ? MessageBuilder.fromMessage((Message<?>) messageOrPayload)
            : MessageBuilder.withPayload(messageOrPayload);
    builder.copyHeadersIfAbsent(headers);
    if (!CollectionUtils.isEmpty(this.headerExpressions)) {
        Map<String, Object> evaluatedHeaders = new HashMap<String, Object>();
        for (Map.Entry<String, Expression> entry : this.headerExpressions.entrySet()) {
            Object value = entry.getValue().getValue(methodInvocationEvaluationContext);
            if (value != null) {
                evaluatedHeaders.put(entry.getKey(), value);
            }
        }
        builder.copyHeaders(evaluatedHeaders);
    }
    return builder.build();
}

From source file:org.springframework.integration.handler.MethodInvokingMessageProcessorTests.java

@Test
public void testHandlerInheritanceMethodImplInSuper() {
    class A {//from w  w w.ja va  2 s  .  c om
        @SuppressWarnings("unused")
        public Message<String> myMethod(final Message<String> msg) {
            return MessageBuilder.fromMessage(msg).setHeader("A", "A").build();
        }
    }

    class B extends A {
    }

    @SuppressWarnings("unused")
    class C extends B {
    }

    MethodInvokingMessageProcessor processor = new MethodInvokingMessageProcessor(new B(), "myMethod");
    Message<?> message = (Message<?>) processor.processMessage(new GenericMessage<String>(""));
    assertEquals("A", message.getHeaders().get("A"));
}

From source file:org.springframework.integration.handler.MethodInvokingMessageProcessorTests.java

@Test
public void testHandlerInheritanceMethodImplInLatestSuper() {
    class A {//from www  .j  a  v a 2  s  .  c om
        @SuppressWarnings("unused")
        public Message<String> myMethod(Message<String> msg) {
            return MessageBuilder.fromMessage(msg).setHeader("A", "A").build();
        }
    }

    class B extends A {
        @Override
        public Message<String> myMethod(Message<String> msg) {
            return MessageBuilder.fromMessage(msg).setHeader("B", "B").build();
        }
    }

    @SuppressWarnings("unused")
    class C extends B {
    }

    MethodInvokingMessageProcessor processor = new MethodInvokingMessageProcessor(new B(), "myMethod");
    Message<?> message = (Message<?>) processor.processMessage(new GenericMessage<String>(""));
    assertEquals("B", message.getHeaders().get("B"));
}

From source file:org.springframework.integration.handler.MethodInvokingMessageProcessorTests.java

public void testHandlerInheritanceMethodImplInSubClass() {
    class A {//w w w  .ja  va  2 s  .  c o m
        @SuppressWarnings("unused")
        public Message<String> myMethod(Message<String> msg) {
            return MessageBuilder.fromMessage(msg).setHeader("A", "A").build();
        }
    }

    class B extends A {
        @Override
        public Message<String> myMethod(Message<String> msg) {
            return MessageBuilder.fromMessage(msg).setHeader("B", "B").build();
        }
    }

    class C extends B {
        @Override
        public Message<String> myMethod(Message<String> msg) {
            return MessageBuilder.fromMessage(msg).setHeader("C", "C").build();
        }
    }

    MethodInvokingMessageProcessor processor = new MethodInvokingMessageProcessor(new C(), "myMethod");
    Message<?> message = (Message<?>) processor.processMessage(new GenericMessage<String>(""));
    assertEquals("C", message.getHeaders().get("C"));
}

From source file:org.springframework.integration.handler.MethodInvokingMessageProcessorTests.java

public void testHandlerInheritanceMethodImplInSubClassAndSuper() {
    class A {/*w w  w. j  a  v a  2 s.  c om*/
        @SuppressWarnings("unused")
        public Message<String> myMethod(Message<String> msg) {
            return MessageBuilder.fromMessage(msg).setHeader("A", "A").build();
        }
    }

    class B extends A {
    }

    class C extends B {
        @Override
        public Message<String> myMethod(Message<String> msg) {
            return MessageBuilder.fromMessage(msg).setHeader("C", "C").build();
        }
    }

    MethodInvokingMessageProcessor processor = new MethodInvokingMessageProcessor(new C(), "myMethod");
    Message<?> message = (Message<?>) processor.processMessage(new GenericMessage<String>(""));
    assertEquals("C", message.getHeaders().get("C"));
}

From source file:org.springframework.integration.jdbc.JdbcMessageStore.java

@Override
@SuppressWarnings({ "rawtypes", "unchecked" })
public <T> Message<T> addMessage(final Message<T> message) {
    if (message.getHeaders().containsKey(SAVED_KEY)) {
        Message<T> saved = (Message<T>) getMessage(message.getHeaders().getId());
        if (saved != null) {
            if (saved.equals(message)) {
                return message;
            } // We need to save it under its own id
        }/*w w w. j  av  a  2 s .c  om*/
    }

    final long createdDate = System.currentTimeMillis();
    Message<T> result = MessageBuilder.fromMessage(message).setHeader(SAVED_KEY, Boolean.TRUE)
            .setHeader(CREATED_DATE_KEY, new Long(createdDate)).build();

    Map innerMap = (Map) new DirectFieldAccessor(result.getHeaders()).getPropertyValue("headers");
    // using reflection to set ID since it is immutable through MessageHeaders
    innerMap.put(MessageHeaders.ID, message.getHeaders().get(MessageHeaders.ID));

    final String messageId = getKey(result.getHeaders().getId());
    final byte[] messageBytes = serializer.convert(result);

    jdbcTemplate.update(getQuery(Query.CREATE_MESSAGE), new PreparedStatementSetter() {
        @Override
        public void setValues(PreparedStatement ps) throws SQLException {
            if (logger.isDebugEnabled()) {
                logger.debug("Inserting message with id key=" + messageId);
            }
            ps.setString(1, messageId);
            ps.setString(2, region);
            ps.setTimestamp(3, new Timestamp(createdDate));
            lobHandler.getLobCreator().setBlobAsBytes(ps, 4, messageBytes);
        }
    });
    return result;
}

From source file:org.springframework.integration.jdbc.JdbcMessageStoreTests.java

@Test
@Transactional/*from   w  w  w . j  a  v a 2  s  .  c o m*/
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", messageStore.getMessage(message.getHeaders().getId()).getHeaders().getCorrelationId());
}

From source file:org.springframework.integration.jdbc.JdbcMessageStoreTests.java

@Test
@Transactional/*from w  ww  .j  a  va 2  s.c o m*/
public void testAddAndUpdateAlreadySavedAndCopied() throws Exception {
    Message<String> message = MessageBuilder.withPayload("foo").build();
    Message<String> saved = messageStore.addMessage(message);
    Message<String> copy = MessageBuilder.fromMessage(saved).build();
    Message<String> result = messageStore.addMessage(copy);
    assertEquals(copy, result);
    assertEquals(saved, result);
    assertNotNull(messageStore.getMessage(saved.getHeaders().getId()));
}

From source file:org.springframework.integration.jdbc.JdbcMessageStoreTests.java

@Test
@Transactional/*from   w w w .j  a v a  2 s .  c  o m*/
public void testAddAndUpdateWithChange() throws Exception {
    Message<String> message = MessageBuilder.withPayload("foo").build();
    Message<String> saved = messageStore.addMessage(message);
    Message<String> copy = MessageBuilder.fromMessage(saved).setHeader("newHeader", 1).build();
    Message<String> result = messageStore.addMessage(copy);
    assertNotSame(saved, result);
    assertThat(saved, sameExceptIgnorableHeaders(result, JdbcMessageStore.CREATED_DATE_KEY, "newHeader"));
    assertNotNull(messageStore.getMessage(saved.getHeaders().getId()));
}

From source file:org.springframework.integration.jdbc.JdbcMessageStoreTests.java

@Test
@Transactional// w w  w. j  av  a2s  .com
public void testSameMessageToMultipleGroups() throws Exception {

    final String group1Id = "group1";
    final String group2Id = "group2";

    final Message<String> message = MessageBuilder.withPayload("foo").build();

    final MessageBuilder<String> builder1 = MessageBuilder.fromMessage(message);
    final MessageBuilder<String> builder2 = MessageBuilder.fromMessage(message);

    builder1.setSequenceNumber(1);
    builder2.setSequenceNumber(2);

    final Message<?> message1 = builder1.build();
    final Message<?> message2 = builder2.build();

    messageStore.addMessageToGroup(group1Id, message1);
    messageStore.addMessageToGroup(group2Id, message2);

    final Message<?> messageFromGroup1 = messageStore.pollMessageFromGroup(group1Id);
    final Message<?> messageFromGroup2 = messageStore.pollMessageFromGroup(group2Id);

    assertNotNull(messageFromGroup1);
    assertNotNull(messageFromGroup2);

    LOG.info("messageFromGroup1: " + messageFromGroup1.getHeaders().getId() + "; Sequence #: "
            + messageFromGroup1.getHeaders().getSequenceNumber());
    LOG.info("messageFromGroup2: " + messageFromGroup2.getHeaders().getId() + "; Sequence #: "
            + messageFromGroup2.getHeaders().getSequenceNumber());

    assertEquals(Integer.valueOf(1), messageFromGroup1.getHeaders().get(MessageHeaders.SEQUENCE_NUMBER));
    assertEquals(Integer.valueOf(2), messageFromGroup2.getHeaders().get(MessageHeaders.SEQUENCE_NUMBER));

}