From af3f998b7f40b8ff1d22b4d4463b2f3a222776a4 Mon Sep 17 00:00:00 2001 From: Stephan Klevenz Date: Thu, 26 Jun 2014 08:53:18 +0200 Subject: [PATCH] [OLINGO-328] improve multi valued headers of ODataRequest --- .../olingo/server/api/ODataRequest.java | 23 ++++++++++--- .../olingo/server/api/ODataRequestTest.java | 33 +++++++++++++++---- 2 files changed, 45 insertions(+), 11 deletions(-) diff --git a/lib/server-api/src/main/java/org/apache/olingo/server/api/ODataRequest.java b/lib/server-api/src/main/java/org/apache/olingo/server/api/ODataRequest.java index 85883f0ba..5be8b96d7 100644 --- a/lib/server-api/src/main/java/org/apache/olingo/server/api/ODataRequest.java +++ b/lib/server-api/src/main/java/org/apache/olingo/server/api/ODataRequest.java @@ -19,6 +19,7 @@ package org.apache.olingo.server.api; import java.io.InputStream; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -44,14 +45,26 @@ public class ODataRequest { } /** - * Add header to request where name handled as case insensitive key. + * Add header to request where name handled as case insensitive key. If a header already exists then the list of + * values will just be extended. * @param name case insensitive header name * @param values */ public void addHeader(String name, List values) { - headers.put(name.toUpperCase(), values); + String key = name.toUpperCase(); + if (headers.containsKey(key)) { + List oldValues = headers.get(key); + + List newValues = new ArrayList(); + newValues.addAll(oldValues); + newValues.addAll(values); + + headers.put(name.toUpperCase(), newValues); + } else { + headers.put(name.toUpperCase(), values); + } } - + /** * Returns header value for name where name is a case insensitive key. * @return the header value or null if not found @@ -59,7 +72,7 @@ public class ODataRequest { public List getHeader(String name) { return headers.get(name.toUpperCase()); } - + public InputStream getBody() { return body; } @@ -94,7 +107,7 @@ public class ODataRequest { public void setRawODataPath(String rawODataPath) { this.rawODataPath = rawODataPath; - + } public void setRawBaseUri(String rawBaseUri) { diff --git a/lib/server-test/src/test/java/org/apache/olingo/server/api/ODataRequestTest.java b/lib/server-test/src/test/java/org/apache/olingo/server/api/ODataRequestTest.java index f25679883..d7407315c 100644 --- a/lib/server-test/src/test/java/org/apache/olingo/server/api/ODataRequestTest.java +++ b/lib/server-test/src/test/java/org/apache/olingo/server/api/ODataRequestTest.java @@ -25,21 +25,42 @@ import java.util.Arrays; import org.junit.Test; public class ODataRequestTest { - + @Test public void testHeader() { ODataRequest r = new ODataRequest(); - + r.addHeader("aa", Arrays.asList("cc")); - + assertEquals("cc", r.getHeader("aa").get(0)); assertEquals("cc", r.getHeader("aA").get(0)); assertEquals("cc", r.getHeader("AA").get(0)); - + + } + + @Test + public void testHeader2() { + ODataRequest r = new ODataRequest(); r.addHeader("AA", Arrays.asList("dd")); - + assertEquals("dd", r.getHeader("aa").get(0)); assertEquals("dd", r.getHeader("aA").get(0)); - assertEquals("dd", r.getHeader("AA").get(0)); + assertEquals("dd", r.getHeader("AA").get(0)); + } + + @Test + public void testMultiValueHeader() { + ODataRequest r = new ODataRequest(); + + r.addHeader("aa", Arrays.asList("a", "b")); + + assertEquals("a", r.getHeader("aa").get(0)); + assertEquals("b", r.getHeader("aA").get(1)); + + r.addHeader("Aa", Arrays.asList("c")); + + assertEquals("a", r.getHeader("aa").get(0)); + assertEquals("b", r.getHeader("aA").get(1)); + assertEquals("c", r.getHeader("aA").get(2)); } }