diff --git a/build.gradle b/build.gradle index e815b0d017..0dc6e06883 100644 --- a/build.gradle +++ b/build.gradle @@ -333,6 +333,7 @@ project('spring-integration-groovy') { compile project(":spring-integration-scripting") compile "org.codehaus.groovy:groovy-all:$groovyVersion" compile "org.springframework:spring-context-support:$springVersion" + testCompile project(":spring-integration-test") } bundlor { bundleSymbolicName = 'org.springframework.integration.groovy' diff --git a/spring-integration-core/src/main/java/org/springframework/integration/config/xml/HeaderEnricherParserSupport.java b/spring-integration-core/src/main/java/org/springframework/integration/config/xml/HeaderEnricherParserSupport.java index c1f1ead6e5..bd525a1dce 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/config/xml/HeaderEnricherParserSupport.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/config/xml/HeaderEnricherParserSupport.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2011 the original author or authors. + * Copyright 2002-2012 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. @@ -32,6 +32,8 @@ import org.springframework.beans.factory.xml.ParserContext; import org.springframework.util.ClassUtils; import org.springframework.util.StringUtils; import org.springframework.util.xml.DomUtils; +import org.springframework.integration.expression.DynamicExpression; +import org.springframework.integration.transformer.HeaderEnricher; /** * Base support class for 'header-enricher' parsers. @@ -50,7 +52,7 @@ public abstract class HeaderEnricherParserSupport extends AbstractTransformerPar @Override protected final String getTransformerClassName() { - return IntegrationNamespaceUtils.BASE_PACKAGE + ".transformer.HeaderEnricher"; + return HeaderEnricher.class.getName(); } protected final void addElementToHeaderMapping(String elementName, String headerName) { @@ -85,7 +87,7 @@ public abstract class HeaderEnricherParserSupport extends AbstractTransformerPar String elementName = node.getLocalName(); Class headerType = null; if ("header".equals(elementName)) { - headerName = headerElement.getAttribute("name"); + headerName = headerElement.getAttribute(NAME_ATTRIBUTE); } else { headerName = elementToNameMap.get(elementName); @@ -114,9 +116,9 @@ public abstract class HeaderEnricherParserSupport extends AbstractTransformerPar } if (headerName != null) { String value = headerElement.getAttribute("value"); - String ref = headerElement.getAttribute("ref"); - String method = headerElement.getAttribute("method"); - String expression = headerElement.getAttribute("expression"); + String ref = headerElement.getAttribute(REF_ATTRIBUTE); + String method = headerElement.getAttribute(METHOD_ATTRIBUTE); + String expression = headerElement.getAttribute(EXPRESSION_ATTRIBUTE); Element beanElement = null; Element scriptElement = null; @@ -188,8 +190,7 @@ public abstract class HeaderEnricherParserSupport extends AbstractTransformerPar valueProcessorBuilder = BeanDefinitionBuilder.genericBeanDefinition( IntegrationNamespaceUtils.BASE_PACKAGE + ".transformer.HeaderEnricher$ExpressionEvaluatingHeaderValueMessageProcessor"); if (expressionElement != null) { - BeanDefinitionBuilder dynamicExpressionBuilder = BeanDefinitionBuilder.genericBeanDefinition( - "org.springframework.integration.expression.DynamicExpression"); + BeanDefinitionBuilder dynamicExpressionBuilder = BeanDefinitionBuilder.genericBeanDefinition(DynamicExpression.class); dynamicExpressionBuilder.addConstructorArgValue(expressionElement.getAttribute("key")); dynamicExpressionBuilder.addConstructorArgReference(expressionElement.getAttribute("source")); valueProcessorBuilder.addConstructorArgValue(dynamicExpressionBuilder.getBeanDefinition()); @@ -206,9 +207,11 @@ public abstract class HeaderEnricherParserSupport extends AbstractTransformerPar } if (hasMethod || isScript) { valueProcessorBuilder = BeanDefinitionBuilder.genericBeanDefinition( - IntegrationNamespaceUtils.BASE_PACKAGE + ".transformer.HeaderEnricher$MethodInvokingHeaderValueMessageProcessor"); + IntegrationNamespaceUtils.BASE_PACKAGE + ".transformer.HeaderEnricher$MessageProcessingHeaderValueMessageProcessor"); valueProcessorBuilder.addConstructorArgValue(innerComponentDefinition); - valueProcessorBuilder.addConstructorArgValue(hasMethod ? method : null); + if (hasMethod) { + valueProcessorBuilder.addConstructorArgValue(method); + } } else { valueProcessorBuilder = BeanDefinitionBuilder.genericBeanDefinition( @@ -223,7 +226,7 @@ public abstract class HeaderEnricherParserSupport extends AbstractTransformerPar } if (hasMethod) { valueProcessorBuilder = BeanDefinitionBuilder.genericBeanDefinition( - IntegrationNamespaceUtils.BASE_PACKAGE + ".transformer.HeaderEnricher$MethodInvokingHeaderValueMessageProcessor"); + IntegrationNamespaceUtils.BASE_PACKAGE + ".transformer.HeaderEnricher$MessageProcessingHeaderValueMessageProcessor"); valueProcessorBuilder.addConstructorArgReference(ref); valueProcessorBuilder.addConstructorArgValue(method); } diff --git a/spring-integration-core/src/main/java/org/springframework/integration/transformer/HeaderEnricher.java b/spring-integration-core/src/main/java/org/springframework/integration/transformer/HeaderEnricher.java index 100e96b430..b41fdd2ecb 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/transformer/HeaderEnricher.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/transformer/HeaderEnricher.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2011 the original author or authors. + * Copyright 2002-2012 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. @@ -44,6 +44,7 @@ import org.springframework.integration.support.MessageBuilder; * * @author Mark Fisher * @author David Turanski + * @author Artem Bilan */ public class HeaderEnricher implements Transformer, BeanNameAware, InitializingBean { @@ -249,11 +250,19 @@ public class HeaderEnricher implements Transformer, BeanNameAware, InitializingB } } - static class MethodInvokingHeaderValueMessageProcessor extends AbstractHeaderValueMessageProcessor { + static class MessageProcessingHeaderValueMessageProcessor extends AbstractHeaderValueMessageProcessor { - private final MethodInvokingMessageProcessor targetProcessor; + private final MessageProcessor targetProcessor; - public MethodInvokingHeaderValueMessageProcessor(Object targetObject, String method) { + public MessageProcessingHeaderValueMessageProcessor(MessageProcessor targetProcessor) { + this.targetProcessor = targetProcessor; + } + + public MessageProcessingHeaderValueMessageProcessor(Object targetObject) { + this(targetObject, null); + } + + public MessageProcessingHeaderValueMessageProcessor(Object targetObject, String method) { this.targetProcessor = new MethodInvokingMessageProcessor(targetObject, method); } diff --git a/spring-integration-groovy/src/test/java/org/springframework/integration/groovy/config/GroovyHeaderEnricherTests-context.xml b/spring-integration-groovy/src/test/java/org/springframework/integration/groovy/config/GroovyHeaderEnricherTests-context.xml index 834eb9b12c..70ad31dd99 100644 --- a/spring-integration-groovy/src/test/java/org/springframework/integration/groovy/config/GroovyHeaderEnricherTests-context.xml +++ b/spring-integration-groovy/src/test/java/org/springframework/integration/groovy/config/GroovyHeaderEnricherTests-context.xml @@ -22,7 +22,7 @@ - + ("Hello")); assertEquals("groovy", outputA.receive(1000).getHeaders().get("TEST_HEADER")); } - + + @SuppressWarnings("unchecked") @Test public void inlineScript() throws Exception{ + Map headers = + TestUtils.getPropertyValue(headerEnricherWithInlineGroovyScript, "handler.transformer.headersToAdd", Map.class); + assertEquals(1, headers.size()); + HeaderEnricher.HeaderValueMessageProcessor headerValueMessageProcessor = headers.get("TEST_HEADER"); + assertThat(headerValueMessageProcessor.getClass().getName(), Matchers.containsString("HeaderEnricher$MessageProcessingHeaderValueMessageProcessor")); + Object targetProcessor = TestUtils.getPropertyValue(headerValueMessageProcessor, "targetProcessor"); + assertEquals(GroovyScriptExecutingMessageProcessor.class, targetProcessor.getClass()); + inputB.send(new GenericMessage("Hello")); assertEquals("groovy", outputB.receive(1000).getHeaders().get("TEST_HEADER")); }