INT-1191 added bean resolution support for expression based header-enrichers

This commit is contained in:
Mark Fisher
2010-06-18 17:07:06 +00:00
parent 6c320719e1
commit c7bbc030cf
3 changed files with 105 additions and 1 deletions

View File

@@ -22,6 +22,8 @@ import java.util.Map;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.BeanFactoryAware;
import org.springframework.integration.core.Message;
import org.springframework.integration.core.MessagingException;
import org.springframework.integration.handler.ExpressionEvaluatingMessageProcessor;
@@ -164,7 +166,7 @@ public class HeaderEnricher implements Transformer {
}
static class ExpressionEvaluatingHeaderValueMessageProcessor extends AbstractHeaderValueMessageProcessor {
static class ExpressionEvaluatingHeaderValueMessageProcessor extends AbstractHeaderValueMessageProcessor implements BeanFactoryAware {
private final ExpressionEvaluatingMessageProcessor targetProcessor;
@@ -177,6 +179,10 @@ public class HeaderEnricher implements Transformer {
this.targetProcessor.setExpectedType(expectedType);
}
public void setBeanFactory(BeanFactory beanFactory) {
this.targetProcessor.setBeanFactory(beanFactory);
}
public Object processMessage(Message<?> message) {
return this.targetProcessor.processMessage(message);
}

View File

@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/integration"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/integration
http://www.springframework.org/schema/integration/spring-integration.xsd">
<channel id="output">
<queue/>
</channel>
<header-enricher input-channel="simpleInput" output-channel="output">
<header name="testHeader" expression="2 ^ 3"/>
</header-enricher>
<header-enricher input-channel="beanResolvingInput" output-channel="output">
<header name="num" expression="headers.num ^ @testBean.value" overwrite="true"/>
</header-enricher>
<beans:bean id="testBean" class="org.springframework.integration.transformer.SpelHeaderEnricherIntegrationTests$TestBean"/>
</beans:beans>

View File

@@ -0,0 +1,74 @@
/*
* 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.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.integration.transformer;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.integration.channel.PollableChannel;
import org.springframework.integration.core.Message;
import org.springframework.integration.core.MessageChannel;
import org.springframework.integration.message.MessageBuilder;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
/**
* @author Mark Fisher
*/
@ContextConfiguration
@RunWith(SpringJUnit4ClassRunner.class)
public class SpelHeaderEnricherIntegrationTests {
@Autowired
private MessageChannel simpleInput;
@Autowired
private MessageChannel beanResolvingInput;
@Autowired @Qualifier("output")
private PollableChannel output;
@Test
public void simple() {
Message<?> message = MessageBuilder.withPayload("test").build();
this.simpleInput.send(message);
Message<?> result = output.receive(0);
assertEquals(8, result.getHeaders().get("testHeader"));
}
@Test
public void beanResolving() {
Message<?> message = MessageBuilder.withPayload("test").setHeader("num", 3).build();
this.beanResolvingInput.send(message);
Message<?> result = output.receive(0);
assertEquals(243, result.getHeaders().get("num"));
}
static class TestBean {
public int getValue() {
return 5;
}
}
}