From a3674da5dbe20eb4edc5b25c3a27dbc88b07df51 Mon Sep 17 00:00:00 2001 From: Mark Fisher Date: Fri, 7 May 2010 02:49:29 +0000 Subject: [PATCH] INT-785 A method-invoking transformer no longer treats a Map return value as headers (since a Map should be usable as a payload). The newly added support for "ref" and "method" on a element support method-invoking header enriching (see INT-1130). For details of the change, view the diff for MethodInvokingTransformerTests in this commit. --- .../AbstractMessageProcessingTransformer.java | 25 ------- .../MethodInvokingTransformerTests.java | 67 ++++++++++--------- 2 files changed, 37 insertions(+), 55 deletions(-) diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/transformer/AbstractMessageProcessingTransformer.java b/org.springframework.integration/src/main/java/org/springframework/integration/transformer/AbstractMessageProcessingTransformer.java index 6921bba4da..3ff969b045 100644 --- a/org.springframework.integration/src/main/java/org/springframework/integration/transformer/AbstractMessageProcessingTransformer.java +++ b/org.springframework.integration/src/main/java/org/springframework/integration/transformer/AbstractMessageProcessingTransformer.java @@ -16,9 +16,6 @@ package org.springframework.integration.transformer; -import java.util.Map; -import java.util.Properties; - import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.BeanFactoryAware; import org.springframework.core.convert.ConversionService; @@ -27,7 +24,6 @@ import org.springframework.integration.core.Message; import org.springframework.integration.handler.AbstractMessageProcessor; import org.springframework.integration.handler.MessageProcessor; import org.springframework.integration.message.MessageBuilder; -import org.springframework.integration.message.MessageHandlingException; import org.springframework.util.Assert; /** @@ -61,27 +57,6 @@ public abstract class AbstractMessageProcessingTransformer implements Transforme if (result instanceof Message) { return (Message) result; } - if (result instanceof Properties && !(message.getPayload() instanceof Properties)) { - Properties propertiesToSet = (Properties) result; - MessageBuilder builder = MessageBuilder.fromMessage(message); - for (Object keyObject : propertiesToSet.keySet()) { - String key = (String) keyObject; - builder.setHeader(key, propertiesToSet.getProperty(key)); - } - return builder.build(); - } - if (result instanceof Map && !(message.getPayload() instanceof Map)) { - Map attributesToSet = (Map ) result; - MessageBuilder builder = MessageBuilder.fromMessage(message); - for (Object key : attributesToSet.keySet()) { - if (!(key instanceof String)) { - throw new MessageHandlingException(message, - "Map returned from a Transformer method must have String-typed keys"); - } - builder.setHeader((String) key, attributesToSet.get(key)); - } - return builder.build(); - } return MessageBuilder.withPayload(result).copyHeaders(message.getHeaders()).build(); } diff --git a/org.springframework.integration/src/test/java/org/springframework/integration/transformer/MethodInvokingTransformerTests.java b/org.springframework.integration/src/test/java/org/springframework/integration/transformer/MethodInvokingTransformerTests.java index 2142d5b863..f4d0818bd0 100644 --- a/org.springframework.integration/src/test/java/org/springframework/integration/transformer/MethodInvokingTransformerTests.java +++ b/org.springframework.integration/src/test/java/org/springframework/integration/transformer/MethodInvokingTransformerTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2009 the original author or authors. + * Copyright 2002-2010 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -27,6 +27,7 @@ import org.junit.Test; import org.springframework.integration.annotation.Header; import org.springframework.integration.annotation.Transformer; import org.springframework.integration.core.Message; +import org.springframework.integration.handler.MethodInvokingMessageProcessor; import org.springframework.integration.message.GenericMessage; import org.springframework.integration.message.MessageBuilder; import org.springframework.integration.message.MessageHandlingException; @@ -143,35 +144,6 @@ public class MethodInvokingTransformerTests { assertEquals("foonull", result.getPayload()); } - @Test - public void headerEnricherConfiguredWithMethodReference() throws Exception { - TestBean testBean = new TestBean(); - Method testMethod = testBean.getClass().getMethod("propertyEnricherTest", String.class); - MethodInvokingTransformer transformer = new MethodInvokingTransformer(testBean, testMethod); - Message message = MessageBuilder.withPayload("test") - .setHeader("prop1", "bad") - .setHeader("prop3", "baz").build(); - Message result = transformer.transform(message); - assertEquals("test", result.getPayload()); - assertEquals("foo", result.getHeaders().get("prop1")); - assertEquals("bar", result.getHeaders().get("prop2")); - assertEquals("baz", result.getHeaders().get("prop3")); - } - - @Test - public void headerEnricherConfiguredWithMethodName() throws Exception { - TestBean testBean = new TestBean(); - MethodInvokingTransformer transformer = new MethodInvokingTransformer(testBean, "propertyEnricherTest"); - Message message = MessageBuilder.withPayload("test") - .setHeader("prop1", "bad") - .setHeader("prop3", "baz").build(); - Message result = transformer.transform(message); - assertEquals("test", result.getPayload()); - assertEquals("foo", result.getHeaders().get("prop1")); - assertEquals("bar", result.getHeaders().get("prop2")); - assertEquals("baz", result.getHeaders().get("prop3")); - } - @Test public void messageReturnValueConfiguredWithMethodReference() throws Exception { TestBean testBean = new TestBean(); @@ -241,6 +213,41 @@ public class MethodInvokingTransformerTests { assertNull(result); } + @Test // this changed in 2.0 see INT-785 and INT-1130 + public void headerEnricherConfiguredWithMethodReference() throws Exception { + TestBean testBean = new TestBean(); + Method testMethod = testBean.getClass().getMethod("propertyEnricherTest", String.class); + HeaderEnricher transformer = new HeaderEnricher(); + transformer.setDefaultOverwrite(true); + MethodInvokingMessageProcessor processor = new MethodInvokingMessageProcessor(testBean, testMethod); + transformer.setMessageProcessor(processor); + Message message = MessageBuilder.withPayload("test") + .setHeader("prop1", "bad") + .setHeader("prop3", "baz").build(); + Message result = transformer.transform(message); + assertEquals("test", result.getPayload()); + assertEquals("foo", result.getHeaders().get("prop1")); + assertEquals("bar", result.getHeaders().get("prop2")); + assertEquals("baz", result.getHeaders().get("prop3")); + } + + @Test // this changed in 2.0 see INT-785 and INT-1130 + public void headerEnricherConfiguredWithMethodName() throws Exception { + TestBean testBean = new TestBean(); + HeaderEnricher transformer = new HeaderEnricher(); + MethodInvokingMessageProcessor processor = new MethodInvokingMessageProcessor(testBean, "propertyEnricherTest"); + transformer.setMessageProcessor(processor); + transformer.setDefaultOverwrite(true); + Message message = MessageBuilder.withPayload("test") + .setHeader("prop1", "bad") + .setHeader("prop3", "baz").build(); + Message result = transformer.transform(message); + assertEquals("test", result.getPayload()); + assertEquals("foo", result.getHeaders().get("prop1")); + assertEquals("bar", result.getHeaders().get("prop2")); + assertEquals("baz", result.getHeaders().get("prop3")); + } + @SuppressWarnings("unused") private static class TestBean {