Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id EA80E200BDB for ; Mon, 12 Dec 2016 11:04:00 +0100 (CET) Received: by cust-asf.ponee.io (Postfix) id E8F45160B22; Mon, 12 Dec 2016 10:04:00 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 19AE3160B0D for ; Mon, 12 Dec 2016 11:03:59 +0100 (CET) Received: (qmail 55010 invoked by uid 500); 12 Dec 2016 10:03:59 -0000 Mailing-List: contact commits-help@cxf.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@cxf.apache.org Delivered-To: mailing list commits@cxf.apache.org Received: (qmail 55000 invoked by uid 99); 12 Dec 2016 10:03:59 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 12 Dec 2016 10:03:59 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 2E04EE2F11; Mon, 12 Dec 2016 10:03:59 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: sergeyb@apache.org To: commits@cxf.apache.org Message-Id: X-Mailer: ASF-Git Admin Mailer Subject: cxf git commit: [CXF-7174] Avoid NPE when content-type not set in http request, patch from Andy McCright applied, This closes #213 Date: Mon, 12 Dec 2016 10:03:59 +0000 (UTC) archived-at: Mon, 12 Dec 2016 10:04:01 -0000 Repository: cxf Updated Branches: refs/heads/master 45bc2219b -> de9c7ecd7 [CXF-7174] Avoid NPE when content-type not set in http request, patch from Andy McCright applied, This closes #213 Project: http://git-wip-us.apache.org/repos/asf/cxf/repo Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/de9c7ecd Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/de9c7ecd Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/de9c7ecd Branch: refs/heads/master Commit: de9c7ecd7a4d205aa26d893889235468797e87bb Parents: 45bc221 Author: Sergey Beryozkin Authored: Mon Dec 12 10:03:39 2016 +0000 Committer: Sergey Beryozkin Committed: Mon Dec 12 10:03:39 2016 +0000 ---------------------------------------------------------------------- .../org/apache/cxf/transport/http/Headers.java | 2 +- .../apache/cxf/transport/http/HeadersTest.java | 60 +++++++++++++++----- 2 files changed, 48 insertions(+), 14 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cxf/blob/de9c7ecd/rt/transports/http/src/main/java/org/apache/cxf/transport/http/Headers.java ---------------------------------------------------------------------- diff --git a/rt/transports/http/src/main/java/org/apache/cxf/transport/http/Headers.java b/rt/transports/http/src/main/java/org/apache/cxf/transport/http/Headers.java index 3d58112..8aecbd3 100644 --- a/rt/transports/http/src/main/java/org/apache/cxf/transport/http/Headers.java +++ b/rt/transports/http/src/main/java/org/apache/cxf/transport/http/Headers.java @@ -373,7 +373,7 @@ public class Headers { public String determineContentType() { String ct = null; List ctList = CastUtils.cast(headers.get(Message.CONTENT_TYPE)); - if (ctList != null && ctList.size() == 1) { + if (ctList != null && ctList.size() == 1 && ctList.get(0) != null) { ct = ctList.get(0).toString(); } else { ct = (String)message.get(Message.CONTENT_TYPE); http://git-wip-us.apache.org/repos/asf/cxf/blob/de9c7ecd/rt/transports/http/src/test/java/org/apache/cxf/transport/http/HeadersTest.java ---------------------------------------------------------------------- diff --git a/rt/transports/http/src/test/java/org/apache/cxf/transport/http/HeadersTest.java b/rt/transports/http/src/test/java/org/apache/cxf/transport/http/HeadersTest.java index bf5cf84..bcb4228 100755 --- a/rt/transports/http/src/test/java/org/apache/cxf/transport/http/HeadersTest.java +++ b/rt/transports/http/src/test/java/org/apache/cxf/transport/http/HeadersTest.java @@ -36,29 +36,17 @@ import org.apache.cxf.message.MessageImpl; import org.easymock.EasyMock; import org.easymock.IMocksControl; -import org.junit.AfterClass; import org.junit.Assert; -import org.junit.BeforeClass; import org.junit.Test; /** * */ public class HeadersTest extends Assert { - private static IMocksControl control; - - @BeforeClass - public static void setUpClass() { - control = EasyMock.createNiceControl(); - } - - @AfterClass - public static void tearDown() { - control.verify(); - } @Test public void setHeadersTest() throws Exception { + IMocksControl control = EasyMock.createNiceControl(); String[] headerNames = {"Content-Type", "authorization", "soapAction"}; String[] headerValues = {"text/xml", "Basic Zm9vOmJhcg==", "foo"}; Map> inmap = new HashMap>(); @@ -102,6 +90,7 @@ public class HeadersTest extends Assert { assertEquals("unexpected header", protocolHeaders.get("SOAPACTION").get(0), headerValues[2]); assertEquals("unexpected header", protocolHeaders.get("soapAction").get(0), headerValues[2]); + control.verify(); } @Test @@ -173,4 +162,49 @@ public class HeadersTest extends Assert { Headers.logProtocolHeaders(logger, Level.INFO, headerMap, false); } + + @Test + public void nullContentTypeTest() { + IMocksControl control = EasyMock.createNiceControl(); + + Message message = new MessageImpl(); + + // first check - content-type==null in message, nothing specified in request + // expect that determineContentType will return the default value of text/xml + message.put(Message.CONTENT_TYPE, null); + Headers headers = new Headers(message); + assertEquals("Unexpected content-type determined - expected text/xml", "text/xml", + headers.determineContentType()); + + // second check - null specified in request, valid content-type specified in message + // expect that determineContentType returns the content-type specified in the message + HttpServletRequest req = control.createMock(HttpServletRequest.class); + EasyMock.expect(req.getHeaderNames()).andReturn(Collections.emptyEnumeration()); + EasyMock.expect(req.getContentType()).andReturn(null).anyTimes(); + control.replay(); + message = new MessageImpl(); + message.put(Message.CONTENT_TYPE, "application/json"); + headers = new Headers(message); + headers.copyFromRequest(req); + assertEquals("Unexpected content-type determined - expected application/json", "application/json", + headers.determineContentType()); + + control.verify(); + + // third check - content-type==null in message, null in request + // expect that determineContentType returns the default value of text/xml + control = EasyMock.createNiceControl(); + req = control.createMock(HttpServletRequest.class); + EasyMock.expect(req.getHeaderNames()).andReturn(Collections.emptyEnumeration()); + EasyMock.expect(req.getContentType()).andReturn(null).anyTimes(); + control.replay(); + message = new MessageImpl(); + message.put(Message.CONTENT_TYPE, null); + headers = new Headers(message); + headers.copyFromRequest(req); + assertEquals("Unexpected content-type determined - expected text/xml", "text/xml", + headers.determineContentType()); + + control.verify(); + } }