INT-2524 - Don't Map Transfer-Encoding Header
For reference see: https://jira.springsource.org/browse/INT-2524 INT-2524 - Add some more tests
This commit is contained in:
committed by
Gary Russell
parent
3c15f376db
commit
4c77b7c93b
@@ -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.
|
||||
@@ -52,10 +52,11 @@ import org.springframework.util.StringUtils;
|
||||
|
||||
/**
|
||||
* Default {@link HeaderMapper} implementation for HTTP.
|
||||
*
|
||||
*
|
||||
* @author Mark Fisher
|
||||
* @author Jeremy Grelle
|
||||
* @author Oleg Zhurakousky
|
||||
* @author Gunnar Hillert
|
||||
* @since 2.0
|
||||
*/
|
||||
public class DefaultHttpHeaderMapper implements HeaderMapper<HttpHeaders>, BeanFactoryAware, InitializingBean{
|
||||
@@ -63,7 +64,7 @@ public class DefaultHttpHeaderMapper implements HeaderMapper<HttpHeaders>, BeanF
|
||||
private static final Log logger = LogFactory.getLog(DefaultHttpHeaderMapper.class);
|
||||
|
||||
private volatile ConversionService conversionService;
|
||||
|
||||
|
||||
private volatile BeanFactory beanFactory;
|
||||
|
||||
private static final String ACCEPT = "Accept";
|
||||
@@ -152,8 +153,6 @@ public class DefaultHttpHeaderMapper implements HeaderMapper<HttpHeaders>, BeanF
|
||||
|
||||
private static final String TRAILER = "Trailer";
|
||||
|
||||
private static final String TRANSFER_ENCODING = "Transfer-Encoding";
|
||||
|
||||
private static final String UPGRADE = "Upgrade";
|
||||
|
||||
private static final String USER_AGENT = "User-Agent";
|
||||
@@ -223,7 +222,6 @@ public class DefaultHttpHeaderMapper implements HeaderMapper<HttpHeaders>, BeanF
|
||||
SERVER,
|
||||
SET_COOKIE,
|
||||
TRAILER,
|
||||
TRANSFER_ENCODING,
|
||||
VARY,
|
||||
VIA,
|
||||
WARNING,
|
||||
@@ -240,7 +238,7 @@ public class DefaultHttpHeaderMapper implements HeaderMapper<HttpHeaders>, BeanF
|
||||
private volatile String[] inboundHeaderNames = new String[0];
|
||||
|
||||
private volatile String userDefinedHeaderPrefix = "X-";
|
||||
|
||||
|
||||
public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
|
||||
this.beanFactory = beanFactory;
|
||||
}
|
||||
@@ -250,7 +248,7 @@ public class DefaultHttpHeaderMapper implements HeaderMapper<HttpHeaders>, BeanF
|
||||
* or HTTP response (for inbound adapters) from a Spring Integration Message's headers.
|
||||
* The values can also contain simple wildcard patterns (e.g. "foo*" or "*foo") to be matched.
|
||||
* <p>
|
||||
* Any non-standard headers will be prefixed with the value specified by
|
||||
* Any non-standard headers will be prefixed with the value specified by
|
||||
* {@link DefaultHttpHeaderMapper#setUserDefinedHeaderPrefix(String)}. The default is 'X-'.
|
||||
*/
|
||||
public void setOutboundHeaderNames(String[] outboundHeaderNames) {
|
||||
@@ -263,7 +261,7 @@ public class DefaultHttpHeaderMapper implements HeaderMapper<HttpHeaders>, BeanF
|
||||
* The values can also contain simple wildcard patterns (e.g. "foo*" or "*foo") to be matched.
|
||||
* <p>
|
||||
* This will match the header name directly or, for non-standard HTTP headers, it will match
|
||||
* the header name prefixed with the value specified by
|
||||
* the header name prefixed with the value specified by
|
||||
* {@link DefaultHttpHeaderMapper#setUserDefinedHeaderPrefix(String)}. The default is 'X-'.
|
||||
*/
|
||||
public void setInboundHeaderNames(String[] inboundHeaderNames) {
|
||||
@@ -280,7 +278,7 @@ public class DefaultHttpHeaderMapper implements HeaderMapper<HttpHeaders>, BeanF
|
||||
/**
|
||||
* Map from the integration MessageHeaders to an HttpHeaders instance.
|
||||
* Depending on which type of adapter is using this mapper, the HttpHeaders might be
|
||||
* for an HTTP request (outbound adapter) or for an HTTP response (inbound adapter).
|
||||
* for an HTTP request (outbound adapter) or for an HTTP response (inbound adapter).
|
||||
*/
|
||||
public void fromHeaders(MessageHeaders headers, HttpHeaders target) {
|
||||
if (logger.isDebugEnabled()){
|
||||
@@ -291,18 +289,18 @@ public class DefaultHttpHeaderMapper implements HeaderMapper<HttpHeaders>, BeanF
|
||||
if (this.shouldMapOutboundHeader(name)) {
|
||||
Object value = headers.get(name);
|
||||
if (value != null) {
|
||||
if (!this.containsElementIgnoreCase(HTTP_REQUEST_HEADER_NAMES, name) &&
|
||||
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 = StringUtils.startsWithIgnoreCase(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));
|
||||
}
|
||||
this.setHttpHeader(target, name, value);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -310,7 +308,7 @@ public class DefaultHttpHeaderMapper implements HeaderMapper<HttpHeaders>, BeanF
|
||||
/**
|
||||
* Map from an HttpHeaders instance to integration MessageHeaders.
|
||||
* Depending on which type of adapter is using this mapper, the HttpHeaders might be
|
||||
* from an HTTP request (inbound adapter) or from an HTTP response (outbound adapter).
|
||||
* from an HTTP request (inbound adapter) or from an HTTP response (outbound adapter).
|
||||
*/
|
||||
public Map<String, Object> toHeaders(HttpHeaders source) {
|
||||
if (logger.isDebugEnabled()) {
|
||||
@@ -321,7 +319,7 @@ public class DefaultHttpHeaderMapper implements HeaderMapper<HttpHeaders>, 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 = StringUtils.startsWithIgnoreCase(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) {
|
||||
@@ -344,7 +342,7 @@ public class DefaultHttpHeaderMapper implements HeaderMapper<HttpHeaders>, BeanF
|
||||
}
|
||||
return target;
|
||||
}
|
||||
|
||||
|
||||
public void afterPropertiesSet() throws Exception {
|
||||
if (this.beanFactory != null){
|
||||
this.conversionService = IntegrationContextUtils.getConversionService(this.beanFactory);
|
||||
@@ -535,7 +533,7 @@ public class DefaultHttpHeaderMapper implements HeaderMapper<HttpHeaders>, BeanF
|
||||
else {
|
||||
Class<?> clazz = (value != null) ? value.getClass() : null;
|
||||
throw new IllegalArgumentException(
|
||||
"Expected HttpMethod or String value for 'Allow' header value, but received: " + clazz);
|
||||
"Expected HttpMethod or String value for 'Allow' header value, but received: " + clazz);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -546,7 +544,7 @@ public class DefaultHttpHeaderMapper implements HeaderMapper<HttpHeaders>, BeanF
|
||||
else {
|
||||
Class<?> clazz = (value != null) ? value.getClass() : null;
|
||||
throw new IllegalArgumentException(
|
||||
"Expected String value for 'Cache-Control' header value, but received: " + clazz);
|
||||
"Expected String value for 'Cache-Control' header value, but received: " + clazz);
|
||||
}
|
||||
}
|
||||
else if (CONTENT_LENGTH.equalsIgnoreCase(name)) {
|
||||
@@ -715,7 +713,7 @@ public class DefaultHttpHeaderMapper implements HeaderMapper<HttpHeaders>, BeanF
|
||||
for (Object next : (Iterable<?>) value) {
|
||||
String convertedValue = null;
|
||||
if (next instanceof String) {
|
||||
convertedValue = (String) next;
|
||||
convertedValue = (String) next;
|
||||
}
|
||||
else {
|
||||
convertedValue = this.convertToString(value);
|
||||
@@ -724,7 +722,7 @@ public class DefaultHttpHeaderMapper implements HeaderMapper<HttpHeaders>, BeanF
|
||||
target.add(name, (String) next);
|
||||
}
|
||||
else {
|
||||
logger.warn("Element of the header '" + name + "' with value '" + value +
|
||||
logger.warn("Element of the header '" + name + "' with value '" + value +
|
||||
"' will not be set since it is not a String and no Converter " +
|
||||
"is available. Consider registering a Converter with ConversionService (e.g., <int:converter>)");
|
||||
}
|
||||
@@ -736,7 +734,7 @@ public class DefaultHttpHeaderMapper implements HeaderMapper<HttpHeaders>, BeanF
|
||||
target.set(name, convertedValue);
|
||||
}
|
||||
else {
|
||||
logger.warn("Header '" + name + "' with value '" + value +
|
||||
logger.warn("Header '" + name + "' with value '" + value +
|
||||
"' will not be set since it is not a String and no Converter " +
|
||||
"is available. Consider registering a Converter with ConversionService (e.g., <int:converter>)");
|
||||
}
|
||||
@@ -824,9 +822,9 @@ public class DefaultHttpHeaderMapper implements HeaderMapper<HttpHeaders>, BeanF
|
||||
target.put(name, value);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private String convertToString(Object value){
|
||||
if (this.conversionService != null &&
|
||||
if (this.conversionService != null &&
|
||||
this.conversionService.canConvert(TypeDescriptor.forObject(value), TypeDescriptor.valueOf(String.class))){
|
||||
return this.conversionService.convert(value, String.class);
|
||||
}
|
||||
@@ -836,7 +834,7 @@ public class DefaultHttpHeaderMapper implements HeaderMapper<HttpHeaders>, BeanF
|
||||
|
||||
/**
|
||||
* Factory method for creating a basic outbound mapper instance.
|
||||
* This will map all standard HTTP request headers when sending an HTTP request,
|
||||
* This will map all standard HTTP request headers when sending an HTTP request,
|
||||
* and it will map all standard HTTP response headers when receiving an HTTP response.
|
||||
*/
|
||||
public static DefaultHttpHeaderMapper outboundMapper() {
|
||||
|
||||
@@ -46,6 +46,7 @@ import org.springframework.util.CollectionUtils;
|
||||
/**
|
||||
* @author Oleg Zhurakousky
|
||||
* @author Mark Fisher
|
||||
* @author Gunnar Hillert
|
||||
* @since 2.0.1
|
||||
*/
|
||||
public class DefaultHttpHeaderMapperFromMessageInboundTests {
|
||||
@@ -273,6 +274,46 @@ public class DefaultHttpHeaderMapperFromMessageInboundTests {
|
||||
assertEquals(new URI("http://foo.com").toString(), headers.getLocation().toString());
|
||||
}
|
||||
|
||||
// Transfer Encoding tests
|
||||
|
||||
@Test
|
||||
public void validateTransferEncodingNotMappedFromMessageHeaders() throws Exception{
|
||||
HeaderMapper<HttpHeaders> mapper = DefaultHttpHeaderMapper.inboundMapper();
|
||||
Map<String, Object> messageHeaders = new HashMap<String, Object>();
|
||||
messageHeaders.put("Transfer-Encoding", "chunked");
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
mapper.fromHeaders(new MessageHeaders(messageHeaders), headers);
|
||||
|
||||
assertTrue(String.format("'Headers' is not empty. It contains '%s' element(s).",
|
||||
headers.size()), headers.isEmpty());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void validateTransferEncodingMappedFromHttpHeaders() throws Exception{
|
||||
DefaultHttpHeaderMapper mapper = new DefaultHttpHeaderMapper();
|
||||
mapper.setInboundHeaderNames(new String[] {"Transfer-Encoding"});
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
headers.set("Transfer-Encoding", "chunked");
|
||||
|
||||
Map<String, ?> result = mapper.toHeaders(headers);
|
||||
assertEquals(1, result.size());
|
||||
assertEquals("chunked", result.get("Transfer-Encoding"));
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void validateTransferEncodingNotMappedFromHttpHeadersByDefault() throws Exception{
|
||||
DefaultHttpHeaderMapper mapper = new DefaultHttpHeaderMapper();
|
||||
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
headers.set("Transfer-Encoding", "chunked");
|
||||
|
||||
Map<String, ?> result = mapper.toHeaders(headers);
|
||||
assertTrue(String.format("'result' is not empty. It contains '%s' element(s).",
|
||||
result.size()), result.isEmpty());
|
||||
|
||||
}
|
||||
|
||||
// Pragma tested as part of DefaultHttpHeaderMapperFromMessageOutboundTests
|
||||
|
||||
@Test
|
||||
|
||||
@@ -53,10 +53,10 @@ public class DefaultHttpHeaderMapperFromMessageOutboundTests {
|
||||
Map<String, Object> messageHeaders = new HashMap<String, Object>();
|
||||
messageHeaders.put("Accept", "bar");
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
|
||||
|
||||
mapper.fromHeaders(new MessageHeaders(messageHeaders), headers);
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void validateAcceptHeaderSingleString(){
|
||||
HeaderMapper<HttpHeaders> mapper = DefaultHttpHeaderMapper.outboundMapper();
|
||||
@@ -64,12 +64,12 @@ public class DefaultHttpHeaderMapperFromMessageOutboundTests {
|
||||
messageHeaders.put("Accept", "bar/foo");
|
||||
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
|
||||
|
||||
mapper.fromHeaders(new MessageHeaders(messageHeaders), headers);
|
||||
assertEquals("bar", headers.getAccept().get(0).getType());
|
||||
assertEquals("foo", headers.getAccept().get(0).getSubtype());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void validateAcceptHeaderSingleMediaType(){
|
||||
HeaderMapper<HttpHeaders> mapper = DefaultHttpHeaderMapper.outboundMapper();
|
||||
@@ -77,80 +77,80 @@ public class DefaultHttpHeaderMapperFromMessageOutboundTests {
|
||||
messageHeaders.put("Accept", new MediaType("bar", "foo"));
|
||||
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
|
||||
|
||||
mapper.fromHeaders(new MessageHeaders(messageHeaders), headers);
|
||||
assertEquals("bar", headers.getAccept().get(0).getType());
|
||||
assertEquals("foo", headers.getAccept().get(0).getSubtype());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void validateAcceptHeaderMultipleAsDelimitedString(){
|
||||
HeaderMapper<HttpHeaders> mapper = DefaultHttpHeaderMapper.outboundMapper();
|
||||
Map<String, Object> messageHeaders = new HashMap<String, Object>();
|
||||
messageHeaders.put("Accept", "bar/foo, text/xml");
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
|
||||
|
||||
mapper.fromHeaders(new MessageHeaders(messageHeaders), headers);
|
||||
assertEquals(2, headers.getAccept().size());
|
||||
assertEquals("bar/foo", headers.getAccept().get(0).toString());
|
||||
assertEquals("text/xml", headers.getAccept().get(1).toString());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void validateAcceptHeaderMultipleAsStringArray(){
|
||||
HeaderMapper<HttpHeaders> mapper = DefaultHttpHeaderMapper.outboundMapper();
|
||||
Map<String, Object> messageHeaders = new HashMap<String, Object>();
|
||||
messageHeaders.put("Accept", new String[]{"bar/foo", "text/xml"});
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
|
||||
|
||||
mapper.fromHeaders(new MessageHeaders(messageHeaders), headers);
|
||||
assertEquals(2, headers.getAccept().size());
|
||||
assertEquals("bar/foo", headers.getAccept().get(0).toString());
|
||||
assertEquals("text/xml", headers.getAccept().get(1).toString());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void validateAcceptHeaderMultipleAsStringCollection(){
|
||||
HeaderMapper<HttpHeaders> mapper = DefaultHttpHeaderMapper.outboundMapper();
|
||||
Map<String, Object> messageHeaders = new HashMap<String, Object>();
|
||||
messageHeaders.put("Accept", CollectionUtils.arrayToList(new String[]{"bar/foo", "text/xml"}));
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
|
||||
|
||||
mapper.fromHeaders(new MessageHeaders(messageHeaders), headers);
|
||||
assertEquals(2, headers.getAccept().size());
|
||||
assertEquals("bar/foo", headers.getAccept().get(0).toString());
|
||||
assertEquals("text/xml", headers.getAccept().get(1).toString());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void validateAcceptHeaderMultipleAsStringCollectionCaseInsensitive(){
|
||||
HeaderMapper<HttpHeaders> mapper = DefaultHttpHeaderMapper.outboundMapper();
|
||||
Map<String, Object> messageHeaders = new HashMap<String, Object>();
|
||||
messageHeaders.put("acCePt", CollectionUtils.arrayToList(new String[]{"bar/foo", "text/xml"}));
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
|
||||
|
||||
mapper.fromHeaders(new MessageHeaders(messageHeaders), headers);
|
||||
assertEquals(2, headers.getAccept().size());
|
||||
assertEquals("bar/foo", headers.getAccept().get(0).toString());
|
||||
assertEquals("text/xml", headers.getAccept().get(1).toString());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void validateAcceptHeaderMultipleAsMediatypeCollection(){
|
||||
HeaderMapper<HttpHeaders> mapper = DefaultHttpHeaderMapper.outboundMapper();
|
||||
Map<String, Object> messageHeaders = new HashMap<String, Object>();
|
||||
messageHeaders.put("Accept",
|
||||
messageHeaders.put("Accept",
|
||||
CollectionUtils.arrayToList(new MediaType[]{new MediaType("bar", "foo"), new MediaType("text", "xml")}));
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
|
||||
|
||||
mapper.fromHeaders(new MessageHeaders(messageHeaders), headers);
|
||||
assertEquals(2, headers.getAccept().size());
|
||||
assertEquals("bar/foo", headers.getAccept().get(0).toString());
|
||||
assertEquals("text/xml", headers.getAccept().get(1).toString());
|
||||
}
|
||||
|
||||
|
||||
// ACCEPT_CHARSET tests
|
||||
|
||||
|
||||
@Test(expected=UnsupportedCharsetException.class)
|
||||
public void validateAcceptCharsetHeaderWithWrongCharset(){
|
||||
HeaderMapper<HttpHeaders> mapper = DefaultHttpHeaderMapper.outboundMapper();
|
||||
@@ -159,26 +159,26 @@ public class DefaultHttpHeaderMapperFromMessageOutboundTests {
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
mapper.fromHeaders(new MessageHeaders(messageHeaders), headers);
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void validateAcceptCharsetHeaderSingleString(){
|
||||
HeaderMapper<HttpHeaders> mapper = DefaultHttpHeaderMapper.outboundMapper();
|
||||
Map<String, Object> messageHeaders = new HashMap<String, Object>();
|
||||
messageHeaders.put("Accept-Charset", "UTF-8");
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
|
||||
|
||||
mapper.fromHeaders(new MessageHeaders(messageHeaders), headers);
|
||||
assertEquals(1, headers.getAcceptCharset().size());
|
||||
assertEquals("UTF-8", headers.getAcceptCharset().get(0).displayName());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void validateAcceptCharsetHeaderSingleCharset(){
|
||||
HeaderMapper<HttpHeaders> mapper = DefaultHttpHeaderMapper.outboundMapper();
|
||||
Map<String, Object> messageHeaders = new HashMap<String, Object>();
|
||||
messageHeaders.put("Accept-Charset", Charset.forName("UTF-8"));
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
|
||||
|
||||
mapper.fromHeaders(new MessageHeaders(messageHeaders), headers);
|
||||
assertEquals(1, headers.getAcceptCharset().size());
|
||||
assertEquals("UTF-8", headers.getAcceptCharset().get(0).displayName());
|
||||
@@ -190,26 +190,26 @@ public class DefaultHttpHeaderMapperFromMessageOutboundTests {
|
||||
Map<String, Object> messageHeaders = new HashMap<String, Object>();
|
||||
messageHeaders.put("Accept-Charset", "UTF-8, ISO-8859-1");
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
|
||||
|
||||
mapper.fromHeaders(new MessageHeaders(messageHeaders), headers);
|
||||
assertEquals(2, headers.getAcceptCharset().size());
|
||||
// validate contains since the order is not enforced
|
||||
assertTrue(headers.getAcceptCharset().contains(Charset.forName("UTF-8")));
|
||||
assertTrue(headers.getAcceptCharset().contains(Charset.forName("ISO-8859-1")));
|
||||
assertTrue(headers.getAcceptCharset().contains(Charset.forName("UTF-8")));
|
||||
assertTrue(headers.getAcceptCharset().contains(Charset.forName("ISO-8859-1")));
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void validateAcceptCharsetHeaderMultipleAsStringArray(){
|
||||
HeaderMapper<HttpHeaders> mapper = DefaultHttpHeaderMapper.outboundMapper();
|
||||
Map<String, Object> messageHeaders = new HashMap<String, Object>();
|
||||
messageHeaders.put("Accept-Charset", new String[]{"UTF-8", "ISO-8859-1"});
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
|
||||
|
||||
mapper.fromHeaders(new MessageHeaders(messageHeaders), headers);
|
||||
assertEquals(2, headers.getAcceptCharset().size());
|
||||
// validate contains since the order is not enforced
|
||||
assertTrue(headers.getAcceptCharset().contains(Charset.forName("UTF-8")));
|
||||
assertTrue(headers.getAcceptCharset().contains(Charset.forName("ISO-8859-1")));
|
||||
assertTrue(headers.getAcceptCharset().contains(Charset.forName("UTF-8")));
|
||||
assertTrue(headers.getAcceptCharset().contains(Charset.forName("ISO-8859-1")));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -218,12 +218,12 @@ public class DefaultHttpHeaderMapperFromMessageOutboundTests {
|
||||
Map<String, Object> messageHeaders = new HashMap<String, Object>();
|
||||
messageHeaders.put("Accept-Charset", new Charset[]{ Charset.forName("UTF-8"), Charset.forName("ISO-8859-1") });
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
|
||||
|
||||
mapper.fromHeaders(new MessageHeaders(messageHeaders), headers);
|
||||
assertEquals(2, headers.getAcceptCharset().size());
|
||||
// validate contains since the order is not enforced
|
||||
assertTrue(headers.getAcceptCharset().contains(Charset.forName("UTF-8")));
|
||||
assertTrue(headers.getAcceptCharset().contains(Charset.forName("ISO-8859-1")));
|
||||
assertTrue(headers.getAcceptCharset().contains(Charset.forName("UTF-8")));
|
||||
assertTrue(headers.getAcceptCharset().contains(Charset.forName("ISO-8859-1")));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -232,114 +232,114 @@ public class DefaultHttpHeaderMapperFromMessageOutboundTests {
|
||||
Map<String, Object> messageHeaders = new HashMap<String, Object>();
|
||||
messageHeaders.put("Accept-Charset", CollectionUtils.arrayToList(new String[]{"UTF-8", "ISO-8859-1"}));
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
|
||||
|
||||
mapper.fromHeaders(new MessageHeaders(messageHeaders), headers);
|
||||
assertEquals(2, headers.getAcceptCharset().size());
|
||||
// validate contains since the order is not enforced
|
||||
assertTrue(headers.getAcceptCharset().contains(Charset.forName("UTF-8")));
|
||||
assertTrue(headers.getAcceptCharset().contains(Charset.forName("ISO-8859-1")));
|
||||
assertTrue(headers.getAcceptCharset().contains(Charset.forName("UTF-8")));
|
||||
assertTrue(headers.getAcceptCharset().contains(Charset.forName("ISO-8859-1")));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void validateAcceptCharsetHeaderMultipleAsCollectionOfCharsets(){
|
||||
HeaderMapper<HttpHeaders> mapper = DefaultHttpHeaderMapper.outboundMapper();
|
||||
Map<String, Object> messageHeaders = new HashMap<String, Object>();
|
||||
messageHeaders.put("Accept-Charset",
|
||||
messageHeaders.put("Accept-Charset",
|
||||
CollectionUtils.arrayToList(new Charset[]{Charset.forName("UTF-8"), Charset.forName("ISO-8859-1")}));
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
|
||||
|
||||
mapper.fromHeaders(new MessageHeaders(messageHeaders), headers);
|
||||
assertEquals(2, headers.getAcceptCharset().size());
|
||||
// validate contains since the order is not enforced
|
||||
assertTrue(headers.getAcceptCharset().contains(Charset.forName("UTF-8")));
|
||||
assertTrue(headers.getAcceptCharset().contains(Charset.forName("ISO-8859-1")));
|
||||
assertTrue(headers.getAcceptCharset().contains(Charset.forName("UTF-8")));
|
||||
assertTrue(headers.getAcceptCharset().contains(Charset.forName("ISO-8859-1")));
|
||||
}
|
||||
|
||||
|
||||
// Cache-Control tests
|
||||
|
||||
|
||||
@Test
|
||||
public void validateCacheControl(){
|
||||
HeaderMapper<HttpHeaders> mapper = DefaultHttpHeaderMapper.outboundMapper();
|
||||
Map<String, Object> messageHeaders = new HashMap<String, Object>();
|
||||
messageHeaders.put("Cache-Control", "foo");
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
|
||||
|
||||
mapper.fromHeaders(new MessageHeaders(messageHeaders), headers);
|
||||
assertEquals("foo", headers.getCacheControl());
|
||||
}
|
||||
|
||||
|
||||
// Content-Length tests
|
||||
|
||||
|
||||
@Test
|
||||
public void validateContentLengthAsString(){
|
||||
HeaderMapper<HttpHeaders> mapper = DefaultHttpHeaderMapper.outboundMapper();
|
||||
Map<String, Object> messageHeaders = new HashMap<String, Object>();
|
||||
messageHeaders.put("Content-Length", "1");
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
|
||||
|
||||
mapper.fromHeaders(new MessageHeaders(messageHeaders), headers);
|
||||
assertEquals(1, headers.getContentLength());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void validateContentLengthAsNumber(){
|
||||
HeaderMapper<HttpHeaders> mapper = DefaultHttpHeaderMapper.outboundMapper();
|
||||
Map<String, Object> messageHeaders = new HashMap<String, Object>();
|
||||
messageHeaders.put("Content-Length", 1);
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
|
||||
|
||||
mapper.fromHeaders(new MessageHeaders(messageHeaders), headers);
|
||||
assertEquals(1, headers.getContentLength());
|
||||
}
|
||||
|
||||
|
||||
@Test(expected=NumberFormatException.class)
|
||||
public void validateContentLengthAsNonNumericString(){
|
||||
HeaderMapper<HttpHeaders> mapper = DefaultHttpHeaderMapper.outboundMapper();
|
||||
Map<String, Object> messageHeaders = new HashMap<String, Object>();
|
||||
messageHeaders.put("Content-Length", "foo");
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
|
||||
|
||||
mapper.fromHeaders(new MessageHeaders(messageHeaders), headers);
|
||||
}
|
||||
|
||||
|
||||
// Content-Type test
|
||||
|
||||
|
||||
@Test(expected=IllegalArgumentException.class)
|
||||
public void validateContentTypeWrongValue(){
|
||||
HeaderMapper<HttpHeaders> mapper = DefaultHttpHeaderMapper.outboundMapper();
|
||||
Map<String, Object> messageHeaders = new HashMap<String, Object>();
|
||||
messageHeaders.put("Content-Type", "foo");
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
|
||||
|
||||
mapper.fromHeaders(new MessageHeaders(messageHeaders), headers);
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void validateContentTypeAsString(){
|
||||
HeaderMapper<HttpHeaders> mapper = DefaultHttpHeaderMapper.outboundMapper();
|
||||
Map<String, Object> messageHeaders = new HashMap<String, Object>();
|
||||
messageHeaders.put("Content-Type", "text/html");
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
|
||||
|
||||
mapper.fromHeaders(new MessageHeaders(messageHeaders), headers);
|
||||
assertEquals("text", headers.getContentType().getType());
|
||||
assertEquals("html", headers.getContentType().getSubtype());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void validateContentTypeAsMediaType(){
|
||||
HeaderMapper<HttpHeaders> mapper = DefaultHttpHeaderMapper.outboundMapper();
|
||||
Map<String, Object> messageHeaders = new HashMap<String, Object>();
|
||||
messageHeaders.put("Content-Type", new MediaType("text", "html"));
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
|
||||
|
||||
mapper.fromHeaders(new MessageHeaders(messageHeaders), headers);
|
||||
assertEquals("text", headers.getContentType().getType());
|
||||
assertEquals("html", headers.getContentType().getSubtype());
|
||||
}
|
||||
|
||||
|
||||
// Date test
|
||||
|
||||
|
||||
@Test
|
||||
public void validateDateAsNumber() throws ParseException{
|
||||
HeaderMapper<HttpHeaders> mapper = DefaultHttpHeaderMapper.outboundMapper();
|
||||
@@ -347,12 +347,12 @@ public class DefaultHttpHeaderMapperFromMessageOutboundTests {
|
||||
messageHeaders.put("Date", 12345678);
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
mapper.fromHeaders(new MessageHeaders(messageHeaders), headers);
|
||||
|
||||
|
||||
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss zzz", Locale.US);
|
||||
|
||||
|
||||
assertEquals(simpleDateFormat.parse("Thu, 01 Jan 1970 03:25:45 GMT").getTime(), headers.getDate());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void validateDateAsString() throws ParseException{
|
||||
HeaderMapper<HttpHeaders> mapper = DefaultHttpHeaderMapper.outboundMapper();
|
||||
@@ -360,9 +360,9 @@ public class DefaultHttpHeaderMapperFromMessageOutboundTests {
|
||||
messageHeaders.put("Date", "12345678");
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
mapper.fromHeaders(new MessageHeaders(messageHeaders), headers);
|
||||
|
||||
|
||||
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss zzz", Locale.US);
|
||||
|
||||
|
||||
assertEquals(simpleDateFormat.parse("Thu, 01 Jan 1970 03:25:45 GMT").getTime(), headers.getDate());
|
||||
}
|
||||
@Test
|
||||
@@ -372,14 +372,14 @@ public class DefaultHttpHeaderMapperFromMessageOutboundTests {
|
||||
messageHeaders.put("Date", new Date(12345678));
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
mapper.fromHeaders(new MessageHeaders(messageHeaders), headers);
|
||||
|
||||
|
||||
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss zzz", Locale.US);
|
||||
|
||||
|
||||
assertEquals(simpleDateFormat.parse("Thu, 01 Jan 1970 03:25:45 GMT").getTime(), headers.getDate());
|
||||
}
|
||||
|
||||
|
||||
// If-Modified-Since tests
|
||||
|
||||
|
||||
@Test
|
||||
public void validateIfModifiedSinceAsNumber() throws ParseException{
|
||||
HeaderMapper<HttpHeaders> mapper = DefaultHttpHeaderMapper.outboundMapper();
|
||||
@@ -387,12 +387,12 @@ public class DefaultHttpHeaderMapperFromMessageOutboundTests {
|
||||
messageHeaders.put("If-Modified-Since", 12345678);
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
mapper.fromHeaders(new MessageHeaders(messageHeaders), headers);
|
||||
|
||||
|
||||
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss zzz", Locale.US);
|
||||
|
||||
|
||||
assertEquals(simpleDateFormat.parse("Thu, 01 Jan 1970 03:25:45 GMT").getTime(), headers.getIfNotModifiedSince());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void validateIfModifiedSinceAsString() throws ParseException{
|
||||
HeaderMapper<HttpHeaders> mapper = DefaultHttpHeaderMapper.outboundMapper();
|
||||
@@ -400,9 +400,9 @@ public class DefaultHttpHeaderMapperFromMessageOutboundTests {
|
||||
messageHeaders.put("If-Modified-Since", "12345678");
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
mapper.fromHeaders(new MessageHeaders(messageHeaders), headers);
|
||||
|
||||
|
||||
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss zzz", Locale.US);
|
||||
|
||||
|
||||
assertEquals(simpleDateFormat.parse("Thu, 01 Jan 1970 03:25:45 GMT").getTime(), headers.getIfNotModifiedSince());
|
||||
}
|
||||
@Test
|
||||
@@ -412,14 +412,14 @@ public class DefaultHttpHeaderMapperFromMessageOutboundTests {
|
||||
messageHeaders.put("If-Modified-Since", new Date(12345678));
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
mapper.fromHeaders(new MessageHeaders(messageHeaders), headers);
|
||||
|
||||
|
||||
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss zzz", Locale.US);
|
||||
|
||||
|
||||
assertEquals(simpleDateFormat.parse("Thu, 01 Jan 1970 03:25:45 GMT").getTime(), headers.getIfNotModifiedSince());
|
||||
}
|
||||
|
||||
|
||||
// If-None-Match
|
||||
|
||||
|
||||
@Test
|
||||
public void validateIfNoneMatch() throws ParseException{
|
||||
HeaderMapper<HttpHeaders> mapper = DefaultHttpHeaderMapper.outboundMapper();
|
||||
@@ -427,11 +427,11 @@ public class DefaultHttpHeaderMapperFromMessageOutboundTests {
|
||||
messageHeaders.put("If-None-Match", "1234567");
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
mapper.fromHeaders(new MessageHeaders(messageHeaders), headers);
|
||||
|
||||
|
||||
assertEquals(1, headers.getIfNoneMatch().size());
|
||||
assertEquals("1234567", headers.getIfNoneMatch().get(0));
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void validateIfNoneMatchAsDelimitedString() throws ParseException{
|
||||
HeaderMapper<HttpHeaders> mapper = DefaultHttpHeaderMapper.outboundMapper();
|
||||
@@ -439,12 +439,12 @@ public class DefaultHttpHeaderMapperFromMessageOutboundTests {
|
||||
messageHeaders.put("If-None-Match", "1234567, 123");
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
mapper.fromHeaders(new MessageHeaders(messageHeaders), headers);
|
||||
|
||||
|
||||
assertEquals(2, headers.getIfNoneMatch().size());
|
||||
assertEquals("1234567", headers.getIfNoneMatch().get(0));
|
||||
assertEquals("123", headers.getIfNoneMatch().get(1));
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void validateIfNoneMatchAsStringArray() throws ParseException{
|
||||
HeaderMapper<HttpHeaders> mapper = DefaultHttpHeaderMapper.outboundMapper();
|
||||
@@ -452,7 +452,7 @@ public class DefaultHttpHeaderMapperFromMessageOutboundTests {
|
||||
messageHeaders.put("If-None-Match", new String[]{"1234567", "123"});
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
mapper.fromHeaders(new MessageHeaders(messageHeaders), headers);
|
||||
|
||||
|
||||
assertEquals(2, headers.getIfNoneMatch().size());
|
||||
assertEquals("1234567", headers.getIfNoneMatch().get(0));
|
||||
assertEquals("123", headers.getIfNoneMatch().get(1));
|
||||
@@ -465,7 +465,7 @@ public class DefaultHttpHeaderMapperFromMessageOutboundTests {
|
||||
messageHeaders.put("If-None-Match", "1234567, 123");
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
mapper.fromHeaders(new MessageHeaders(messageHeaders), headers);
|
||||
|
||||
|
||||
assertEquals(2, headers.getIfNoneMatch().size());
|
||||
assertEquals("1234567", headers.getIfNoneMatch().get(0));
|
||||
assertEquals("123", headers.getIfNoneMatch().get(1));
|
||||
@@ -478,12 +478,12 @@ public class DefaultHttpHeaderMapperFromMessageOutboundTests {
|
||||
messageHeaders.put("If-None-Match", CollectionUtils.arrayToList(new String[]{"1234567", "123"}));
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
mapper.fromHeaders(new MessageHeaders(messageHeaders), headers);
|
||||
|
||||
|
||||
assertEquals(2, headers.getIfNoneMatch().size());
|
||||
assertEquals("1234567", headers.getIfNoneMatch().get(0));
|
||||
assertEquals("123", headers.getIfNoneMatch().get(1));
|
||||
}
|
||||
|
||||
|
||||
// Pragma tests
|
||||
@Test
|
||||
public void validatePragma() throws ParseException{
|
||||
@@ -494,9 +494,32 @@ public class DefaultHttpHeaderMapperFromMessageOutboundTests {
|
||||
mapper.fromHeaders(new MessageHeaders(messageHeaders), headers);
|
||||
assertEquals("foo", headers.getPragma());
|
||||
}
|
||||
|
||||
|
||||
// Transfer-Encoding tests
|
||||
@Test
|
||||
public void validateTransferEncoding() throws ParseException{
|
||||
HeaderMapper<HttpHeaders> mapper = DefaultHttpHeaderMapper.outboundMapper();
|
||||
Map<String, Object> messageHeaders = new HashMap<String, Object>();
|
||||
messageHeaders.put("Transfer-Encoding", "chunked");
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
mapper.fromHeaders(new MessageHeaders(messageHeaders), headers);
|
||||
assertNull(headers.get("Transfer-Encoding"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void validateTransferEncodingToHeaders() throws ParseException{
|
||||
HeaderMapper<HttpHeaders> mapper = DefaultHttpHeaderMapper.outboundMapper();
|
||||
|
||||
HttpHeaders httpHeaders = new HttpHeaders();
|
||||
httpHeaders.set("Transfer-Encoding", "chunked");
|
||||
|
||||
Map<String, ?> messageHeaders = mapper.toHeaders(httpHeaders);
|
||||
assertEquals(0, messageHeaders.size());
|
||||
|
||||
}
|
||||
|
||||
// Custom headers
|
||||
|
||||
|
||||
@Test
|
||||
public void validateCustomHeaderWithNoHeaderNames() throws ParseException{
|
||||
DefaultHttpHeaderMapper mapper = new DefaultHttpHeaderMapper();
|
||||
@@ -507,7 +530,7 @@ public class DefaultHttpHeaderMapperFromMessageOutboundTests {
|
||||
assertNull(headers.get("foo"));
|
||||
assertNull(headers.get("X-foo"));
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void validateCustomHeaderWithHeaderNames() throws ParseException{
|
||||
DefaultHttpHeaderMapper mapper = new DefaultHttpHeaderMapper();
|
||||
@@ -592,7 +615,7 @@ public class DefaultHttpHeaderMapperFromMessageOutboundTests {
|
||||
assertEquals(1, result.size());
|
||||
assertEquals("x-foo-value", result.get("x-foo"));
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void validateCustomHeaderWithStandardPrefixSameCase() throws Exception{
|
||||
DefaultHttpHeaderMapper mapper = new DefaultHttpHeaderMapper();
|
||||
|
||||
Reference in New Issue
Block a user