diff --git a/spring-integration-http/src/main/java/org/springframework/integration/http/support/DefaultHttpHeaderMapper.java b/spring-integration-http/src/main/java/org/springframework/integration/http/support/DefaultHttpHeaderMapper.java index 3f44639873..07e4f97bae 100644 --- a/spring-integration-http/src/main/java/org/springframework/integration/http/support/DefaultHttpHeaderMapper.java +++ b/spring-integration-http/src/main/java/org/springframework/integration/http/support/DefaultHttpHeaderMapper.java @@ -240,7 +240,7 @@ public class DefaultHttpHeaderMapper implements HeaderMapper, BeanF private volatile String[] inboundHeaderNames = new String[0]; private volatile String userDefinedHeaderPrefix = "X-"; - + public void setBeanFactory(BeanFactory beanFactory) throws BeansException { this.beanFactory = beanFactory; } @@ -294,7 +294,9 @@ public class DefaultHttpHeaderMapper implements HeaderMapper, BeanF if (!this.containsElementIgnoreCase(HTTP_REQUEST_HEADER_NAMES, name) && !this.containsElementIgnoreCase(HTTP_RESPONSE_HEADER_NAMES, name)) { // prefix the user-defined header names if not already prefixed - name = name.startsWith(this.userDefinedHeaderPrefix) ? name : this.userDefinedHeaderPrefix + name; + + name = StringUtils.startsWithIgnoreCase(name, this.userDefinedHeaderPrefix) ? name : + this.userDefinedHeaderPrefix + name; } if (logger.isDebugEnabled()) { logger.debug(MessageFormat.format("setting headerName=[{0}], value={1}", name, value)); @@ -319,7 +321,8 @@ public class DefaultHttpHeaderMapper implements HeaderMapper, BeanF for (String name : headerNames) { if (this.shouldMapInboundHeader(name)) { if (!ObjectUtils.containsElement(HTTP_REQUEST_HEADER_NAMES, name) && !ObjectUtils.containsElement(HTTP_RESPONSE_HEADER_NAMES, name)) { - String prefixedName = name.startsWith(this.userDefinedHeaderPrefix) ? name : this.userDefinedHeaderPrefix + name; + String prefixedName = StringUtils.startsWithIgnoreCase(name, this.userDefinedHeaderPrefix) ? name : + this.userDefinedHeaderPrefix + name; Object value = source.containsKey(prefixedName) ? this.getHttpHeader(source, prefixedName) : this.getHttpHeader(source, name); if (value != null) { if (logger.isDebugEnabled()) { diff --git a/spring-integration-http/src/test/java/org/springframework/integration/http/support/DefaultHttpHeaderMapperFromMessageOutboundTests.java b/spring-integration-http/src/test/java/org/springframework/integration/http/support/DefaultHttpHeaderMapperFromMessageOutboundTests.java index e5d93e2de4..8c6f9bada9 100644 --- a/spring-integration-http/src/test/java/org/springframework/integration/http/support/DefaultHttpHeaderMapperFromMessageOutboundTests.java +++ b/spring-integration-http/src/test/java/org/springframework/integration/http/support/DefaultHttpHeaderMapperFromMessageOutboundTests.java @@ -603,4 +603,24 @@ public class DefaultHttpHeaderMapperFromMessageOutboundTests { assertEquals(1, result.size()); assertEquals("x-foo-value", result.get("X-Foo")); } + @Test + public void validateCustomHeaderCaseInsensitivity() throws ParseException{ + DefaultHttpHeaderMapper mapper = new DefaultHttpHeaderMapper(); + mapper.setOutboundHeaderNames(new String[]{"*", "HTTP_REQUEST_HEADERS"}); + Map messageHeaders = new HashMap(); + messageHeaders.put("foobar", "abc"); + messageHeaders.put("X-bar", "xbar"); + messageHeaders.put("x-baz", "xbaz"); + messageHeaders.put("Content-Type", "text/html"); + messageHeaders.put("Accept", "text/xml"); + HttpHeaders headers = new HttpHeaders(); + mapper.fromHeaders(new MessageHeaders(messageHeaders), headers); + assertEquals(5, headers.size()); + assertEquals(1, headers.get("X-foobar").size()); + assertEquals(1, headers.get("x-foobar").size()); + assertEquals(1, headers.get("X-bar").size()); + assertEquals(1, headers.get("x-bar").size()); + assertEquals(1, headers.get("X-baz").size()); + assertEquals(1, headers.get("x-baz").size()); + } }