diff --git a/spring-integration-http/.springBeans b/spring-integration-http/.springBeans
index 85a1da38fa..ca9c181739 100644
--- a/spring-integration-http/.springBeans
+++ b/spring-integration-http/.springBeans
@@ -1,13 +1,13 @@
-
-
- 1
-
-
-
-
-
-
-
-
-
-
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
diff --git a/spring-integration-http/src/main/java/org/springframework/integration/http/config/HttpInboundEndpointParser.java b/spring-integration-http/src/main/java/org/springframework/integration/http/config/HttpInboundEndpointParser.java
index 25c54faffc..b5aefc3faf 100644
--- a/spring-integration-http/src/main/java/org/springframework/integration/http/config/HttpInboundEndpointParser.java
+++ b/spring-integration-http/src/main/java/org/springframework/integration/http/config/HttpInboundEndpointParser.java
@@ -92,7 +92,26 @@ public class HttpInboundEndpointParser extends AbstractSingleBeanDefinitionParse
IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "errors-key");
IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "error-code");
IntegrationNamespaceUtils.setReferenceIfAttributeDefined(builder, element, "message-converters");
- IntegrationNamespaceUtils.setReferenceIfAttributeDefined(builder, element, "header-mapper");
+
+
+ //IntegrationNamespaceUtils.setReferenceIfAttributeDefined(builder, element, "header-mapper");
+ String headerMapper = element.getAttribute("header-mapper");
+ String mappedRequestHeaders = element.getAttribute("mapped-request-headers");
+ String mappedResponseHeaders = element.getAttribute("mapped-response-headers");
+ if (StringUtils.hasText(headerMapper)) {
+ if (StringUtils.hasText(mappedRequestHeaders) || StringUtils.hasText(mappedResponseHeaders)) {
+ parserContext.getReaderContext().error("Neither 'mappped-request-headers' or 'mapped-response-headers' " +
+ "attributes are allowed when a 'header-mapper' has been specified.", parserContext.extractSource(element));
+ }
+ builder.addPropertyReference("headerMapper", headerMapper);
+ }
+ else if (StringUtils.hasText(mappedRequestHeaders) || StringUtils.hasText(mappedResponseHeaders)) {
+ BeanDefinitionBuilder headerMapperBuilder = BeanDefinitionBuilder.genericBeanDefinition(
+ "org.springframework.integration.http.support.DefaultHttpHeaderMapper");
+ IntegrationNamespaceUtils.setValueIfAttributeDefined(headerMapperBuilder, element, "mapped-request-headers", "outboundHeaderNames");
+ IntegrationNamespaceUtils.setValueIfAttributeDefined(headerMapperBuilder, element, "mapped-response-headers", "inboundHeaderNames");
+ builder.addPropertyValue("headerMapper", headerMapperBuilder.getBeanDefinition());
+ }
}
private String getInputChannelAttributeName() {
diff --git a/spring-integration-http/src/main/resources/org/springframework/integration/http/config/spring-integration-http-2.0.xsd b/spring-integration-http/src/main/resources/org/springframework/integration/http/config/spring-integration-http-2.0.xsd
index 1bc3397c04..329a39d218 100644
--- a/spring-integration-http/src/main/resources/org/springframework/integration/http/config/spring-integration-http-2.0.xsd
+++ b/spring-integration-http/src/main/resources/org/springframework/integration/http/config/spring-integration-http-2.0.xsd
@@ -85,6 +85,16 @@
+
+
+
+
+
@@ -159,6 +169,26 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/spring-integration-http/src/test/java/org/springframework/integration/http/config/HttpInboundChannelAdapterParserTests-context.xml b/spring-integration-http/src/test/java/org/springframework/integration/http/config/HttpInboundChannelAdapterParserTests-context.xml
index 0aa51b0c9e..2f74385c56 100644
--- a/spring-integration-http/src/test/java/org/springframework/integration/http/config/HttpInboundChannelAdapterParserTests-context.xml
+++ b/spring-integration-http/src/test/java/org/springframework/integration/http/config/HttpInboundChannelAdapterParserTests-context.xml
@@ -23,5 +23,8 @@
+
+
diff --git a/spring-integration-http/src/test/java/org/springframework/integration/http/config/HttpInboundChannelAdapterParserTests.java b/spring-integration-http/src/test/java/org/springframework/integration/http/config/HttpInboundChannelAdapterParserTests.java
index 0148cccf16..4bee52308c 100644
--- a/spring-integration-http/src/test/java/org/springframework/integration/http/config/HttpInboundChannelAdapterParserTests.java
+++ b/spring-integration-http/src/test/java/org/springframework/integration/http/config/HttpInboundChannelAdapterParserTests.java
@@ -25,6 +25,7 @@ import java.io.ByteArrayOutputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.List;
+import java.util.Map;
import java.util.Properties;
import javax.servlet.http.HttpServletResponse;
@@ -34,6 +35,7 @@ import org.junit.runner.RunWith;
import org.springframework.beans.DirectFieldAccessor;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.integration.Message;
import org.springframework.integration.core.PollableChannel;
@@ -41,6 +43,7 @@ import org.springframework.integration.history.MessageHistory;
import org.springframework.integration.http.MockHttpServletRequest;
import org.springframework.integration.http.inbound.HttpRequestHandlingController;
import org.springframework.integration.http.inbound.HttpRequestHandlingMessagingGateway;
+import org.springframework.integration.http.support.DefaultHttpHeaderMapper;
import org.springframework.integration.test.util.TestUtils;
import org.springframework.mock.web.MockHttpServletResponse;
import org.springframework.test.context.ContextConfiguration;
@@ -49,6 +52,7 @@ import org.springframework.util.MultiValueMap;
/**
* @author Mark Fisher
+ * @author Oleg Zhurakousky
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
@@ -65,6 +69,9 @@ public class HttpInboundChannelAdapterParserTests {
@Autowired
private HttpRequestHandlingMessagingGateway putOrDeleteAdapter;
+
+ @Autowired
+ private HttpRequestHandlingMessagingGateway withMappedHeaders;
@Autowired
private HttpRequestHandlingController inboundController;
@@ -89,6 +96,22 @@ public class HttpInboundChannelAdapterParserTests {
assertEquals(1, map.get("foo").size());
assertEquals("bar", map.getFirst("foo"));
}
+
+ @Test
+ @SuppressWarnings("unchecked")
+ public void getRequestWithHeaders() throws Exception {
+ DefaultHttpHeaderMapper headerMapper =
+ (DefaultHttpHeaderMapper) TestUtils.getPropertyValue(withMappedHeaders, "headerMapper");
+
+ HttpHeaders headers = new HttpHeaders();
+ headers.set("foo", "foo");
+ headers.set("bar", "bar");
+ headers.set("baz", "baz");
+ Map map = (Map) headerMapper.toHeaders(headers);
+ assertTrue(map.size() == 2);
+ assertEquals("foo", map.get("foo"));
+ assertEquals("bar", map.get("bar"));
+ }
@Test
public void getRequestNotAllowed() throws Exception {
diff --git a/spring-integration-http/src/test/java/org/springframework/integration/http/config/HttpInboundGatewayParserTests-context.xml b/spring-integration-http/src/test/java/org/springframework/integration/http/config/HttpInboundGatewayParserTests-context.xml
index 6303b7a348..57f8bc55a3 100644
--- a/spring-integration-http/src/test/java/org/springframework/integration/http/config/HttpInboundGatewayParserTests-context.xml
+++ b/spring-integration-http/src/test/java/org/springframework/integration/http/config/HttpInboundGatewayParserTests-context.xml
@@ -20,5 +20,9 @@
+
+
diff --git a/spring-integration-http/src/test/java/org/springframework/integration/http/config/HttpInboundGatewayParserTests.java b/spring-integration-http/src/test/java/org/springframework/integration/http/config/HttpInboundGatewayParserTests.java
index d926b35531..c3c0d14757 100644
--- a/spring-integration-http/src/test/java/org/springframework/integration/http/config/HttpInboundGatewayParserTests.java
+++ b/spring-integration-http/src/test/java/org/springframework/integration/http/config/HttpInboundGatewayParserTests.java
@@ -21,9 +21,14 @@ import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertTrue;
import static org.springframework.integration.test.util.TestUtils.getPropertyValue;
import static org.springframework.integration.test.util.TestUtils.handlerExpecting;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
import javax.servlet.http.HttpServletResponse;
import org.junit.Test;
@@ -31,26 +36,37 @@ import org.junit.runner.RunWith;
import org.springframework.beans.DirectFieldAccessor;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.http.HttpHeaders;
import org.springframework.integration.Message;
+import org.springframework.integration.MessageHeaders;
import org.springframework.integration.core.PollableChannel;
import org.springframework.integration.core.SubscribableChannel;
import org.springframework.integration.http.MockHttpServletRequest;
import org.springframework.integration.http.MockHttpServletResponse;
import org.springframework.integration.http.inbound.HttpRequestHandlingController;
import org.springframework.integration.http.inbound.HttpRequestHandlingMessagingGateway;
+import org.springframework.integration.http.support.DefaultHttpHeaderMapper;
+import org.springframework.integration.test.util.TestUtils;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
/**
* @author Mark Fisher
* @author Iwein Fuld
+ * @author Oleg Zhurakousky
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
public class HttpInboundGatewayParserTests {
@Autowired
+ @Qualifier("inboundGateway")
private HttpRequestHandlingMessagingGateway gateway;
+
+ @Autowired
+ @Qualifier("withMappedHeaders")
+ private HttpRequestHandlingMessagingGateway withMappedHeaders;
@Autowired
private HttpRequestHandlingController inboundController;
@@ -89,5 +105,30 @@ public class HttpInboundGatewayParserTests {
String errorCode = (String) accessor.getPropertyValue("errorCode");
assertEquals("oops", errorCode);
}
+
+ @Test
+ @SuppressWarnings("unchecked")
+ public void requestWithHeaders() throws Exception {
+ DefaultHttpHeaderMapper headerMapper =
+ (DefaultHttpHeaderMapper) TestUtils.getPropertyValue(withMappedHeaders, "headerMapper");
+
+ HttpHeaders headers = new HttpHeaders();
+ headers.set("foo", "foo");
+ headers.set("bar", "bar");
+ headers.set("baz", "baz");
+ Map map = (Map) headerMapper.toHeaders(headers);
+ assertTrue(map.size() == 2);
+ assertEquals("foo", map.get("foo"));
+ assertEquals("bar", map.get("bar"));
+
+ Map mapOfHeaders = new HashMap();
+ mapOfHeaders.put("abc", "abc");
+ MessageHeaders mh = new MessageHeaders(mapOfHeaders);
+ headers = new HttpHeaders();
+ headerMapper.fromHeaders(mh, headers);
+ assertTrue(headers.size() == 1);
+ List abc = headers.get("X-abc");
+ assertEquals("abc", abc.get(0));
+ }
}