List of usage examples for org.springframework.integration.support MessageBuilder fromMessage
public static <T> MessageBuilder<T> fromMessage(Message<T> message)
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)); }