INT-1734
added support for case insensitivity for the user defined header prefix in DefaultHttpHeaderMapper
This commit is contained in:
committed by
Mark Fisher
parent
caa25251a9
commit
f57fdcd516
@@ -294,7 +294,9 @@ public class DefaultHttpHeaderMapper implements HeaderMapper<HttpHeaders>, BeanF
|
|||||||
if (!this.containsElementIgnoreCase(HTTP_REQUEST_HEADER_NAMES, name) &&
|
if (!this.containsElementIgnoreCase(HTTP_REQUEST_HEADER_NAMES, name) &&
|
||||||
!this.containsElementIgnoreCase(HTTP_RESPONSE_HEADER_NAMES, name)) {
|
!this.containsElementIgnoreCase(HTTP_RESPONSE_HEADER_NAMES, name)) {
|
||||||
// prefix the user-defined header names if not already prefixed
|
// 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()) {
|
if (logger.isDebugEnabled()) {
|
||||||
logger.debug(MessageFormat.format("setting headerName=[{0}], value={1}", name, value));
|
logger.debug(MessageFormat.format("setting headerName=[{0}], value={1}", name, value));
|
||||||
@@ -319,7 +321,8 @@ public class DefaultHttpHeaderMapper implements HeaderMapper<HttpHeaders>, BeanF
|
|||||||
for (String name : headerNames) {
|
for (String name : headerNames) {
|
||||||
if (this.shouldMapInboundHeader(name)) {
|
if (this.shouldMapInboundHeader(name)) {
|
||||||
if (!ObjectUtils.containsElement(HTTP_REQUEST_HEADER_NAMES, name) && !ObjectUtils.containsElement(HTTP_RESPONSE_HEADER_NAMES, 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);
|
Object value = source.containsKey(prefixedName) ? this.getHttpHeader(source, prefixedName) : this.getHttpHeader(source, name);
|
||||||
if (value != null) {
|
if (value != null) {
|
||||||
if (logger.isDebugEnabled()) {
|
if (logger.isDebugEnabled()) {
|
||||||
|
|||||||
@@ -603,4 +603,24 @@ public class DefaultHttpHeaderMapperFromMessageOutboundTests {
|
|||||||
assertEquals(1, result.size());
|
assertEquals(1, result.size());
|
||||||
assertEquals("x-foo-value", result.get("X-Foo"));
|
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<String, Object> messageHeaders = new HashMap<String, Object>();
|
||||||
|
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());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user