/*
* Copyright 2002-2016 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.http.support;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import java.net.URI;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import org.junit.Test;
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.core.convert.ConversionService;
import org.springframework.core.convert.converter.Converter;
import org.springframework.core.convert.support.DefaultConversionService;
import org.springframework.core.convert.support.GenericConversionService;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
import org.springframework.integration.mapping.HeaderMapper;
import org.springframework.messaging.MessageHeaders;
import org.springframework.util.CollectionUtils;
/**
* @author Oleg Zhurakousky
* @author Mark Fisher
* @author Gunnar Hillert
* @author Artem Bilan
* @since 2.0.1
*/
public class DefaultHttpHeaderMapperFromMessageInboundTests {
// Allow tests
@Test(expected = IllegalArgumentException.class)
public void validateAllowWithWrongMethodName() {
HeaderMapper<HttpHeaders> mapper = DefaultHttpHeaderMapper.inboundMapper();
Map<String, Object> messageHeaders = new HashMap<String, Object>();
messageHeaders.put("Allow", "bar");
HttpHeaders headers = new HttpHeaders();
mapper.fromHeaders(new MessageHeaders(messageHeaders), headers);
}
@Test
public void validateAllowAsString() {
HeaderMapper<HttpHeaders> mapper = DefaultHttpHeaderMapper.inboundMapper();
Map<String, Object> messageHeaders = new HashMap<String, Object>();
messageHeaders.put("Allow", "GET");
HttpHeaders headers = new HttpHeaders();
mapper.fromHeaders(new MessageHeaders(messageHeaders), headers);
assertEquals(1, headers.getAllow().size());
assertEquals(HttpMethod.GET, headers.getAllow().iterator().next());
}
@Test
public void validateAllowAsStringCaseInsensitive() {
HeaderMapper<HttpHeaders> mapper = DefaultHttpHeaderMapper.inboundMapper();
Map<String, Object> messageHeaders = new HashMap<String, Object>();
messageHeaders.put("allow", "GET");
HttpHeaders headers = new HttpHeaders();
mapper.fromHeaders(new MessageHeaders(messageHeaders), headers);
assertEquals(1, headers.getAllow().size());
assertEquals(HttpMethod.GET, headers.getAllow().iterator().next());
}
@Test
public void validateAllowAsHttpMethod() {
HeaderMapper<HttpHeaders> mapper = DefaultHttpHeaderMapper.inboundMapper();
Map<String, Object> messageHeaders = new HashMap<String, Object>();
messageHeaders.put("Allow", HttpMethod.GET);
HttpHeaders headers = new HttpHeaders();
mapper.fromHeaders(new MessageHeaders(messageHeaders), headers);
assertEquals(1, headers.getAllow().size());
assertEquals(HttpMethod.GET, headers.getAllow().iterator().next());
}
@Test
public void validateAllowAsDelimitedString() {
HeaderMapper<HttpHeaders> mapper = DefaultHttpHeaderMapper.inboundMapper();
Map<String, Object> messageHeaders = new HashMap<String, Object>();
messageHeaders.put("Allow", "GET, POST");
HttpHeaders headers = new HttpHeaders();
mapper.fromHeaders(new MessageHeaders(messageHeaders), headers);
assertEquals(2, headers.getAllow().size());
assertTrue(headers.getAllow().contains(HttpMethod.GET));
assertTrue(headers.getAllow().contains(HttpMethod.POST));
}
@Test
public void validateAllowAsStringArray() {
HeaderMapper<HttpHeaders> mapper = DefaultHttpHeaderMapper.inboundMapper();
Map<String, Object> messageHeaders = new HashMap<String, Object>();
messageHeaders.put("Allow", new String[] { "GET", "POST" });
HttpHeaders headers = new HttpHeaders();
mapper.fromHeaders(new MessageHeaders(messageHeaders), headers);
assertEquals(2, headers.getAllow().size());
assertTrue(headers.getAllow().contains(HttpMethod.GET));
assertTrue(headers.getAllow().contains(HttpMethod.POST));
}
@Test
public void validateAllowAsHttpMethodArray() {
HeaderMapper<HttpHeaders> mapper = DefaultHttpHeaderMapper.inboundMapper();
Map<String, Object> messageHeaders = new HashMap<String, Object>();
messageHeaders.put("Allow", new HttpMethod[] { HttpMethod.GET, HttpMethod.POST });
HttpHeaders headers = new HttpHeaders();
mapper.fromHeaders(new MessageHeaders(messageHeaders), headers);
assertEquals(2, headers.getAllow().size());
assertTrue(headers.getAllow().contains(HttpMethod.GET));
assertTrue(headers.getAllow().contains(HttpMethod.POST));
}
@Test
public void validateAllowAsCollectionOfString() {
HeaderMapper<HttpHeaders> mapper = DefaultHttpHeaderMapper.inboundMapper();
Map<String, Object> messageHeaders = new HashMap<String, Object>();
messageHeaders.put("Allow", CollectionUtils.arrayToList(new String[] { "GET", "POST" }));
HttpHeaders headers = new HttpHeaders();
mapper.fromHeaders(new MessageHeaders(messageHeaders), headers);
assertEquals(2, headers.getAllow().size());
assertTrue(headers.getAllow().contains(HttpMethod.GET));
assertTrue(headers.getAllow().contains(HttpMethod.POST));
}
@Test
public void validateAllowAsCollectionOfHttpMethods() {
HeaderMapper<HttpHeaders> mapper = DefaultHttpHeaderMapper.inboundMapper();
Map<String, Object> messageHeaders = new HashMap<String, Object>();
messageHeaders.put("Allow", CollectionUtils.arrayToList(new HttpMethod[] { HttpMethod.GET, HttpMethod.POST }));
HttpHeaders headers = new HttpHeaders();
mapper.fromHeaders(new MessageHeaders(messageHeaders), headers);
assertEquals(2, headers.getAllow().size());
assertTrue(headers.getAllow().contains(HttpMethod.GET));
assertTrue(headers.getAllow().contains(HttpMethod.POST));
}
// Cache-Control tested as part of DefaultHttpHeaderMapperFromMessageOutboundTests
// Content-Length tested as part of DefaultHttpHeaderMapperFromMessageOutboundTests
// Content-Type tested as part of DefaultHttpHeaderMapperFromMessageOutboundTests
// Date tested as part of DefaultHttpHeaderMapperFromMessageOutboundTests
// ETag tests
@Test
public void validateETag() {
HeaderMapper<HttpHeaders> mapper = DefaultHttpHeaderMapper.inboundMapper();
Map<String, Object> messageHeaders = new HashMap<String, Object>();
messageHeaders.put("ETag", "\"1234\"");
HttpHeaders headers = new HttpHeaders();
mapper.fromHeaders(new MessageHeaders(messageHeaders), headers);
assertEquals("\"1234\"", headers.getETag());
}
// Expires tests
@Test
public void validateExpiresAsNumber() throws ParseException {
HeaderMapper<HttpHeaders> mapper = DefaultHttpHeaderMapper.inboundMapper();
Map<String, Object> messageHeaders = new HashMap<String, Object>();
messageHeaders.put("Expires", 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.getExpires());
}
@Test
public void validateExpiresAsString() throws ParseException {
HeaderMapper<HttpHeaders> mapper = DefaultHttpHeaderMapper.inboundMapper();
Map<String, Object> messageHeaders = new HashMap<String, Object>();
messageHeaders.put("Expires", "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.getExpires());
}
@Test
public void validateExpiresAsDate() throws ParseException {
HeaderMapper<HttpHeaders> mapper = DefaultHttpHeaderMapper.inboundMapper();
Map<String, Object> messageHeaders = new HashMap<String, Object>();
messageHeaders.put("Expires", 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.getExpires());
}
// Last-Modified tests
@Test
public void validateLastModifiedAsNumber() throws ParseException {
HeaderMapper<HttpHeaders> mapper = DefaultHttpHeaderMapper.inboundMapper();
Map<String, Object> messageHeaders = new HashMap<String, Object>();
messageHeaders.put("Last-Modified", 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.getLastModified());
}
@Test
public void validateLastModifiedAsString() throws ParseException {
HeaderMapper<HttpHeaders> mapper = DefaultHttpHeaderMapper.inboundMapper();
Map<String, Object> messageHeaders = new HashMap<String, Object>();
messageHeaders.put("Last-Modified", "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.getLastModified());
}
@Test
public void validateLastModifiedAsDate() throws ParseException {
HeaderMapper<HttpHeaders> mapper = DefaultHttpHeaderMapper.inboundMapper();
Map<String, Object> messageHeaders = new HashMap<String, Object>();
messageHeaders.put("Last-Modified", 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.getLastModified());
}
// Location tests
@Test
public void validateLocation() throws Exception {
HeaderMapper<HttpHeaders> mapper = DefaultHttpHeaderMapper.inboundMapper();
Map<String, Object> messageHeaders = new HashMap<String, Object>();
messageHeaders.put("Location", "http://foo.com");
HttpHeaders headers = new HttpHeaders();
mapper.fromHeaders(new MessageHeaders(messageHeaders), headers);
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
public void validateCustomHeaderNamesMappedToHttpHeaders() throws Exception {
DefaultHttpHeaderMapper mapper = new DefaultHttpHeaderMapper();
mapper.setOutboundHeaderNames(new String[] { "foo", "bar" });
Map<String, Object> messageHeaders = new HashMap<String, Object>();
messageHeaders.put("foo", "abc");
messageHeaders.put("bar", "123");
HttpHeaders headers = new HttpHeaders();
mapper.fromHeaders(new MessageHeaders(messageHeaders), headers);
assertEquals(2, headers.size());
assertEquals(1, headers.get("foo").size());
assertEquals("abc", headers.getFirst("foo"));
assertEquals(1, headers.get("bar").size());
assertEquals("123", headers.getFirst("bar"));
}
@Test
public void validateCustomHeaderNamePatternsMappedToHttpHeaders() throws Exception {
DefaultHttpHeaderMapper mapper = new DefaultHttpHeaderMapper();
mapper.setOutboundHeaderNames(new String[] { "x*", "*z", "a*f" });
Map<String, Object> messageHeaders = new HashMap<String, Object>();
messageHeaders.put("x1", "x1-value");
messageHeaders.put("1x", "1x-value");
messageHeaders.put("z1", "z1-value");
messageHeaders.put("1z", "1z-value");
messageHeaders.put("abc", "abc-value");
messageHeaders.put("def", "def-value");
messageHeaders.put("abcdef", "abcdef-value");
HttpHeaders headers = new HttpHeaders();
mapper.fromHeaders(new MessageHeaders(messageHeaders), headers);
assertEquals(3, headers.size());
assertNull(headers.get("1x"));
assertNull(headers.get("z1"));
assertNull(headers.get("abc"));
assertNull(headers.get("def"));
assertEquals(1, headers.get("x1").size());
assertEquals("x1-value", headers.getFirst("x1"));
assertEquals(1, headers.get("1z").size());
assertEquals("1z-value", headers.getFirst("1z"));
assertEquals(1, headers.get("abcdef").size());
assertEquals("abcdef-value", headers.getFirst("abcdef"));
}
@Test
public void validateCustomHeaderNamePatternsAndStandardResponseHeadersMappedToHttpHeaders() throws Exception {
DefaultHttpHeaderMapper mapper = new DefaultHttpHeaderMapper();
mapper.setOutboundHeaderNames(new String[] { "foo*", "HTTP_RESPONSE_HEADERS" });
mapper.setUserDefinedHeaderPrefix("X-");
Map<String, Object> messageHeaders = new HashMap<String, Object>();
messageHeaders.put("foobar", "abc");
messageHeaders.put("Accept", "text/html");
messageHeaders.put("Content-Type", "text/xml");
HttpHeaders headers = new HttpHeaders();
mapper.fromHeaders(new MessageHeaders(messageHeaders), headers);
assertEquals(2, headers.size());
assertTrue(headers.getAccept().isEmpty());
assertEquals(MediaType.TEXT_XML, headers.getContentType());
assertEquals(1, headers.get("X-foobar").size());
assertEquals("abc", headers.getFirst("X-foobar"));
}
@Test
public void validateCustomHeaderNamePatternsAndStandardResponseHeadersMappedToHttpHeadersWithCustomPrefix() throws Exception {
DefaultHttpHeaderMapper mapper = new DefaultHttpHeaderMapper();
mapper.setUserDefinedHeaderPrefix("Z-");
mapper.setOutboundHeaderNames(new String[] { "foo*", "HTTP_RESPONSE_HEADERS" });
Map<String, Object> messageHeaders = new HashMap<String, Object>();
messageHeaders.put("foobar", "abc");
messageHeaders.put("Accept", "text/html");
messageHeaders.put("Content-Type", "text/xml");
HttpHeaders headers = new HttpHeaders();
mapper.fromHeaders(new MessageHeaders(messageHeaders), headers);
assertEquals(2, headers.size());
assertTrue(headers.getAccept().isEmpty());
assertEquals(MediaType.TEXT_XML, headers.getContentType());
assertEquals(1, headers.get("Z-foobar").size());
assertEquals("abc", headers.getFirst("Z-foobar"));
}
@Test
public void validateCustomHeaderNamePatternsAndStandardResponseHeadersMappedToHttpHeadersWithCustomPrefixEmptyString() throws Exception {
DefaultHttpHeaderMapper mapper = new DefaultHttpHeaderMapper();
mapper.setUserDefinedHeaderPrefix("");
mapper.setOutboundHeaderNames(new String[] { "foo*", "HTTP_RESPONSE_HEADERS" });
Map<String, Object> messageHeaders = new HashMap<String, Object>();
messageHeaders.put("foobar", "abc");
messageHeaders.put("Accept", "text/html");
messageHeaders.put("Content-Type", "text/xml");
HttpHeaders headers = new HttpHeaders();
mapper.fromHeaders(new MessageHeaders(messageHeaders), headers);
assertEquals(2, headers.size());
assertTrue(headers.getAccept().isEmpty());
assertEquals(MediaType.TEXT_XML, headers.getContentType());
assertEquals(1, headers.get("foobar").size());
assertEquals("abc", headers.getFirst("foobar"));
}
@Test
public void validateCustomHeaderNamePatternsAndStandardResponseHeadersMappedToHttpHeadersWithCustomPrefixNull() throws Exception {
DefaultHttpHeaderMapper mapper = new DefaultHttpHeaderMapper();
mapper.setUserDefinedHeaderPrefix(null);
mapper.setOutboundHeaderNames(new String[] { "foo*", "HTTP_RESPONSE_HEADERS" });
Map<String, Object> messageHeaders = new HashMap<String, Object>();
messageHeaders.put("foobar", "abc");
messageHeaders.put("Accept", "text/html");
messageHeaders.put("Content-Type", "text/xml");
HttpHeaders headers = new HttpHeaders();
mapper.fromHeaders(new MessageHeaders(messageHeaders), headers);
assertEquals(2, headers.size());
assertTrue(headers.getAccept().isEmpty());
assertEquals(MediaType.TEXT_XML, headers.getContentType());
assertEquals(1, headers.get("foobar").size());
assertEquals("abc", headers.getFirst("foobar"));
}
@Test
public void validateCustomHeaderNamesMappedFromHttpHeaders() throws Exception {
DefaultHttpHeaderMapper mapper = new DefaultHttpHeaderMapper();
mapper.setInboundHeaderNames(new String[] { "foo", "bar" });
HttpHeaders headers = new HttpHeaders();
headers.set("foo", "abc");
headers.set("bar", "123");
Map<String, ?> result = mapper.toHeaders(headers);
assertEquals(2, result.size());
assertEquals("abc", result.get("foo"));
assertEquals("123", result.get("bar"));
}
@Test
public void validateCustomHeaderNamePatternsMappedFromHttpHeaders() throws Exception {
DefaultHttpHeaderMapper mapper = new DefaultHttpHeaderMapper();
mapper.setInboundHeaderNames(new String[] { "x*", "*z", "a*f" });
HttpHeaders headers = new HttpHeaders();
headers.set("x1", "x1-value");
headers.set("1x", "1x-value");
headers.set("z1", "z1-value");
headers.set("1z", "1z-value");
headers.set("abc", "abc-value");
headers.set("def", "def-value");
headers.set("abcdef", "abcdef-value");
Map<String, ?> result = mapper.toHeaders(headers);
assertEquals(3, result.size());
assertNull(result.get("1x"));
assertNull(result.get("z1"));
assertNull(result.get("abc"));
assertNull(result.get("def"));
assertEquals("x1-value", result.get("x1"));
assertEquals("1z-value", result.get("1z"));
assertEquals("abcdef-value", result.get("abcdef"));
}
@Test
public void validateCustomHeaderNamePatternsAndStandardRequestHeadersMappedFromHttpHeaders() throws Exception {
DefaultHttpHeaderMapper mapper = new DefaultHttpHeaderMapper();
mapper.setInboundHeaderNames(new String[] { "foo*", "HTTP_REQUEST_HEADERS" });
HttpHeaders headers = new HttpHeaders();
headers.set("foobar", "abc");
headers.setAccept(Collections.singletonList(MediaType.TEXT_XML));
headers.setLocation(new URI("http://example.org"));
Map<String, ?> result = mapper.toHeaders(headers);
assertEquals(2, result.size());
assertNull(result.get("Location"));
assertEquals("abc", result.get("foobar"));
assertEquals(MediaType.TEXT_XML, result.get("Accept"));
}
@Test
public void validateCustomHeadersWithNonStringValuesAndNoConverter() throws Exception {
DefaultHttpHeaderMapper mapper = new DefaultHttpHeaderMapper();
mapper.setOutboundHeaderNames(new String[] { "customHeader*" });
HttpHeaders headers = new HttpHeaders();
Map<String, Object> messageHeaders = new HashMap<String, Object>();
messageHeaders.put("customHeaderA", 123);
messageHeaders.put("customHeaderB", new TestClass());
mapper.fromHeaders(new MessageHeaders(messageHeaders), headers);
assertNull(headers.get("X-customHeaderA"));
assertNull(headers.get("X-customHeaderB"));
}
@Test
public void validateCustomHeadersWithNonStringValuesAndDefaultConverterOnly() throws Exception {
DefaultHttpHeaderMapper mapper = new DefaultHttpHeaderMapper();
mapper.setOutboundHeaderNames(new String[] { "customHeader*" });
ConversionService cs = new DefaultConversionService();
DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
beanFactory.registerSingleton("integrationConversionService", cs);
mapper.setBeanFactory(beanFactory);
mapper.afterPropertiesSet();
HttpHeaders headers = new HttpHeaders();
Map<String, Object> messageHeaders = new HashMap<String, Object>();
messageHeaders.put("customHeaderA", 123);
messageHeaders.put("customHeaderB", new TestClass());
mapper.fromHeaders(new MessageHeaders(messageHeaders), headers);
assertNotNull(headers.get("customHeaderA"));
assertEquals("123", headers.get("customHeaderA").get(0));
assertNull(headers.get("customHeaderB"));
}
@Test
public void validateCustomHeadersWithNonStringValuesAndDefaultConverterWithCustomConverter() throws Exception {
DefaultHttpHeaderMapper mapper = new DefaultHttpHeaderMapper();
mapper.setOutboundHeaderNames(new String[] { "customHeader*" });
GenericConversionService cs = new DefaultConversionService();
cs.addConverter(new TestClassConverter());
DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
beanFactory.registerSingleton("integrationConversionService", cs);
mapper.setBeanFactory(beanFactory);
mapper.afterPropertiesSet();
HttpHeaders headers = new HttpHeaders();
Map<String, Object> messageHeaders = new HashMap<String, Object>();
messageHeaders.put("customHeaderA", 123);
messageHeaders.put("customHeaderB", new TestClass());
mapper.fromHeaders(new MessageHeaders(messageHeaders), headers);
assertNotNull(headers.get("customHeaderA"));
assertEquals("123", headers.get("customHeaderA").get(0));
assertNotNull(headers.get("customHeaderB"));
assertEquals("TestClass.class", headers.get("customHeaderB").get(0));
}
@Test
public void dontPropagateContentLength() {
HeaderMapper<HttpHeaders> mapper = DefaultHttpHeaderMapper.inboundMapper();
HttpHeaders headers = new HttpHeaders();
// suppressed in response on inbound, by default
headers.put("Content-Length", Collections.singletonList("3"));
Map<String, Object> messageHeaders = mapper.toHeaders(headers);
headers = new HttpHeaders();
mapper.fromHeaders(new MessageHeaders(messageHeaders), headers);
assertNull(headers.get("Content-Length"));
}
@Test
public void testInt2995IfModifiedSince() throws Exception {
HeaderMapper<HttpHeaders> mapper = DefaultHttpHeaderMapper.inboundMapper();
Date ifModifiedSince = new Date();
long ifModifiedSinceTime = ifModifiedSince.getTime();
HttpHeaders headers = new HttpHeaders();
headers.setIfModifiedSince(ifModifiedSinceTime);
Map<String, ?> result = mapper.toHeaders(headers);
Calendar c = Calendar.getInstance();
c.setTime(ifModifiedSince);
c.set(Calendar.MILLISECOND, 0);
assertEquals(c.getTimeInMillis(), result.get("If-Modified-Since"));
}
@Test
public void testContentTypeHeader() throws Exception {
HeaderMapper<HttpHeaders> mapper = DefaultHttpHeaderMapper.inboundMapper();
Map<String, Object> map = new HashMap<String, Object>();
map.put(MessageHeaders.CONTENT_TYPE, "text/plain");
MessageHeaders messageHeaders = new MessageHeaders(map);
HttpHeaders httpHeaders = new HttpHeaders();
mapper.fromHeaders(messageHeaders, httpHeaders);
assertEquals(MediaType.valueOf("text/plain"), httpHeaders.getContentType());
}
@Test
public void testContentTypeInboundHeader() throws Exception {
HeaderMapper<HttpHeaders> mapper = DefaultHttpHeaderMapper.inboundMapper();
HttpHeaders headers = new HttpHeaders();
headers.add(HttpHeaders.CONTENT_TYPE.toLowerCase(), "text/plain");
Map<String, ?> result = mapper.toHeaders(headers);
assertEquals(MediaType.valueOf("text/plain"), result.get(MessageHeaders.CONTENT_TYPE));
}
public static class TestClass {
}
public static class TestClassConverter implements Converter<TestClass, String> {
@Override
public String convert(TestClass source) {
return "TestClass.class";
}
}
}