Return-Path: Delivered-To: apmail-cxf-commits-archive@www.apache.org Received: (qmail 12710 invoked from network); 21 Mar 2011 15:18:33 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.3) by minotaur.apache.org with SMTP; 21 Mar 2011 15:18:33 -0000 Received: (qmail 1987 invoked by uid 500); 21 Mar 2011 15:18:33 -0000 Delivered-To: apmail-cxf-commits-archive@cxf.apache.org Received: (qmail 1945 invoked by uid 500); 21 Mar 2011 15:18:33 -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 1938 invoked by uid 99); 21 Mar 2011 15:18:33 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 21 Mar 2011 15:18:33 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 21 Mar 2011 15:18:30 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 3EB83238899C; Mon, 21 Mar 2011 15:17:57 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1083826 - in /cxf/trunk: rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/ systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/ Date: Mon, 21 Mar 2011 15:17:57 -0000 To: commits@cxf.apache.org From: sergeyb@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20110321151757.3EB83238899C@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: sergeyb Date: Mon Mar 21 15:17:56 2011 New Revision: 1083826 URL: http://svn.apache.org/viewvc?rev=1083826&view=rev Log: [CXF-3408] Minor updates to the way custom response headers are handled Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSOutInterceptor.java cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/CustomOutInterceptor.java cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSOutInterceptor.java URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSOutInterceptor.java?rev=1083826&r1=1083825&r2=1083826&view=diff ============================================================================== --- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSOutInterceptor.java (original) +++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSOutInterceptor.java Mon Mar 21 15:17:56 2011 @@ -169,23 +169,23 @@ public class JAXRSOutInterceptor extends boolean responseHeadersCopied = isResponseHeadersCopied(message); setResponseStatus(message, status, responseHeadersCopied); - Map> theHeaders = - (Map>)message.get(Message.PROTOCOL_HEADERS); + Map> theHeaders = + (Map>)message.get(Message.PROTOCOL_HEADERS); if (firstTry && theHeaders != null) { // some headers might've been setup by custom cxf interceptors theHeaders.putAll((Map)response.getMetadata()); } else { - message.put(Message.PROTOCOL_HEADERS, response.getMetadata()); + theHeaders = response.getMetadata(); } - Map> rh = - (Map>)message.get(Message.PROTOCOL_HEADERS); MultivaluedMap responseHeaders; - if (!(rh instanceof MultivaluedMap)) { - responseHeaders = new MetadataMap(rh); + if (!(theHeaders instanceof MultivaluedMap)) { + responseHeaders = new MetadataMap(theHeaders); } else { - responseHeaders = (MultivaluedMap)rh; + responseHeaders = (MultivaluedMap)theHeaders; } - setResponseDate((MultivaluedMap)responseHeaders, firstTry); + message.put(Message.PROTOCOL_HEADERS, responseHeaders); + + setResponseDate(responseHeaders, firstTry); if (isResponseNull(responseObj)) { return; } Modified: cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/CustomOutInterceptor.java URL: http://svn.apache.org/viewvc/cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/CustomOutInterceptor.java?rev=1083826&r1=1083825&r2=1083826&view=diff ============================================================================== --- cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/CustomOutInterceptor.java (original) +++ cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/CustomOutInterceptor.java Mon Mar 21 15:17:56 2011 @@ -18,9 +18,16 @@ */ package org.apache.cxf.systest.jaxrs; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.MultivaluedMap; import org.apache.cxf.interceptor.Fault; +import org.apache.cxf.jaxrs.impl.HttpHeadersImpl; import org.apache.cxf.jaxrs.impl.MetadataMap; import org.apache.cxf.message.Message; import org.apache.cxf.phase.AbstractPhaseInterceptor; @@ -32,10 +39,28 @@ public class CustomOutInterceptor extend super(Phase.MARSHAL); } + @SuppressWarnings("unchecked") public void handleMessage(Message message) throws Fault { - MultivaluedMap headers = new MetadataMap(); - headers.putSingle("BookId", "123"); - message.put(Message.PROTOCOL_HEADERS, headers); + + HttpHeaders requestHeaders = new HttpHeadersImpl(message.getExchange().getInMessage()); + if (!requestHeaders.getRequestHeader("PLAIN-MAP").isEmpty()) { + Map> headers = (Map>) + message.get(Message.PROTOCOL_HEADERS); + if (headers == null) { + headers = new HashMap>(); + message.put(Message.PROTOCOL_HEADERS, headers); + } + headers.put("BookId", Arrays.asList("321")); + headers.put("MAP-NAME", Arrays.asList(Map.class.getName())); + message.put(Message.PROTOCOL_HEADERS, headers); + } else { + + MultivaluedMap headers = new MetadataMap(); + headers.putSingle("BookId", "123"); + headers.putSingle("MAP-NAME", MultivaluedMap.class.getName()); + message.put(Message.PROTOCOL_HEADERS, headers); + } + } } Modified: cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java URL: http://svn.apache.org/viewvc/cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java?rev=1083826&r1=1083825&r2=1083826&view=diff ============================================================================== --- cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java (original) +++ cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java Mon Mar 21 15:17:56 2011 @@ -68,6 +68,32 @@ public class JAXRSClientServerBookTest e } @Test + public void testGetBookWithCustomHeader() throws Exception { + + String endpointAddress = + "http://localhost:" + PORT + "/bookstore/books/123"; + WebClient wc = WebClient.create(endpointAddress); + Book b = wc.get(Book.class); + assertEquals(123L, b.getId()); + + MultivaluedMap headers = wc.getResponse().getMetadata(); + assertEquals("123", headers.getFirst("BookId")); + assertEquals(MultivaluedMap.class.getName(), headers.getFirst("MAP-NAME")); + + assertNotNull(headers.getFirst("Date")); + + wc.header("PLAIN-MAP", "true"); + b = wc.get(Book.class); + assertEquals(123L, b.getId()); + + headers = wc.getResponse().getMetadata(); + assertEquals("321", headers.getFirst("BookId")); + assertEquals(Map.class.getName(), headers.getFirst("MAP-NAME")); + + assertNotNull(headers.getFirst("Date")); + } + + @Test public void testGetBookWithNameInQuery() throws Exception { String endpointAddress =