Return-Path: X-Original-To: apmail-cxf-commits-archive@www.apache.org Delivered-To: apmail-cxf-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id B5F6E10BA5 for ; Wed, 11 Sep 2013 17:28:00 +0000 (UTC) Received: (qmail 61102 invoked by uid 500); 11 Sep 2013 17:28:00 -0000 Delivered-To: apmail-cxf-commits-archive@cxf.apache.org Received: (qmail 61033 invoked by uid 500); 11 Sep 2013 17:27: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 61024 invoked by uid 99); 11 Sep 2013 17:27:58 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 11 Sep 2013 17:27:58 +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; Wed, 11 Sep 2013 17:27:57 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id 44DCC238899C; Wed, 11 Sep 2013 17:27:37 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1521946 - in /cxf/branches/2.7.x-fixes: ./ rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ResponseImpl.java rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/ResponseImplTest.java Date: Wed, 11 Sep 2013 17:27:37 -0000 To: commits@cxf.apache.org From: sergeyb@apache.org X-Mailer: svnmailer-1.0.9 Message-Id: <20130911172737.44DCC238899C@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: sergeyb Date: Wed Sep 11 17:27:36 2013 New Revision: 1521946 URL: http://svn.apache.org/r1521946 Log: Merged revisions 1521943 via svnmerge from https://svn.apache.org/repos/asf/cxf/trunk ........ r1521943 | sergeyb | 2013-09-11 18:17:55 +0100 (Wed, 11 Sep 2013) | 1 line [CXF-5135] Resetting buffered streams after a client reader returns an object can have side-effects ........ Modified: cxf/branches/2.7.x-fixes/ (props changed) cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ResponseImpl.java cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/ResponseImplTest.java Propchange: cxf/branches/2.7.x-fixes/ ------------------------------------------------------------------------------ Merged /cxf/trunk:r1521943 Propchange: cxf/branches/2.7.x-fixes/ ------------------------------------------------------------------------------ Binary property 'svnmerge-integrated' - no diff available. Modified: cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ResponseImpl.java URL: http://svn.apache.org/viewvc/cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ResponseImpl.java?rev=1521946&r1=1521945&r2=1521946&view=diff ============================================================================== --- cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ResponseImpl.java (original) +++ cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ResponseImpl.java Wed Sep 11 17:27:36 2013 @@ -315,20 +315,20 @@ public final class ResponseImpl extends responseMessage.getExchange().getOutMessage()); if (readers != null) { try { + if (entityBufferred) { + InputStream.class.cast(entity).reset(); + } + responseMessage.put(Message.PROTOCOL_HEADERS, this.getMetadata()); lastEntity = JAXRSUtils.readFromMessageBodyReader(readers, cls, t, anns, InputStream.class.cast(entity), mediaType, responseMessage); - if (!entityBufferred) { - if (responseStreamCanBeClosed(cls)) { - InputStream.class.cast(entity).close(); - entity = null; - } - } else { - InputStream.class.cast(entity).reset(); - } + if (!entityBufferred && responseStreamCanBeClosed(cls)) { + InputStream.class.cast(entity).close(); + entity = null; + } return cls.cast(lastEntity); } catch (Exception ex) { Modified: cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/ResponseImplTest.java URL: http://svn.apache.org/viewvc/cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/ResponseImplTest.java?rev=1521946&r1=1521945&r2=1521946&view=diff ============================================================================== --- cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/ResponseImplTest.java (original) +++ cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/ResponseImplTest.java Wed Sep 11 17:27:36 2013 @@ -30,8 +30,22 @@ import javax.ws.rs.core.NewCookie; import javax.ws.rs.core.Response; import javax.ws.rs.core.Response.Status; import javax.ws.rs.core.Response.StatusType; +import javax.xml.transform.Source; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMResult; +import org.w3c.dom.Document; + +import org.apache.cxf.endpoint.Endpoint; +import org.apache.cxf.jaxrs.provider.ProviderFactory; import org.apache.cxf.jaxrs.utils.HttpUtils; +import org.apache.cxf.message.Exchange; +import org.apache.cxf.message.ExchangeImpl; +import org.apache.cxf.message.Message; +import org.apache.cxf.message.MessageImpl; +import org.apache.cxf.staxutils.StaxUtils; +import org.easymock.EasyMock; import org.junit.Assert; import org.junit.Test; @@ -40,6 +54,64 @@ import org.junit.Test; public class ResponseImplTest extends Assert { @Test + public void testReadBufferedStaxUtils() throws Exception { + ResponseImpl r = new ResponseImpl(200); + Source responseSource = readResponseSource(r); + Document doc = StaxUtils.read(responseSource); + assertEquals("Response", doc.getDocumentElement().getLocalName()); + } + + @Test + public void testReadBufferedStaxSource() throws Exception { + ResponseImpl r = new ResponseImpl(200); + Source responseSource = readResponseSource(r); + Transformer trans = TransformerFactory.newInstance().newTransformer(); + DOMResult res = new DOMResult(); + trans.transform(responseSource, res); + Document doc = (Document)res.getNode(); + assertEquals("Response", doc.getDocumentElement().getLocalName()); + } + + private Source readResponseSource(ResponseImpl r) { + String content = "" + + "Permit"; + + + MultivaluedMap headers = new MetadataMap(); + headers.putSingle("Content-Type", "text/xml"); + r.addMetadata(headers); + r.setEntity(new ByteArrayInputStream(content.getBytes()), null); + r.setMessage(createMessage()); + r.bufferEntity(); + return r.readEntity(Source.class); + } + + private Message createMessage() { + ProviderFactory factory = ProviderFactory.getInstance(); + Message m = new MessageImpl(); + m.put("org.apache.cxf.http.case_insensitive_queries", false); + Exchange e = new ExchangeImpl(); + m.setExchange(e); + e.setInMessage(m); + e.setOutMessage(new MessageImpl()); + Endpoint endpoint = EasyMock.createMock(Endpoint.class); + endpoint.getEndpointInfo(); + EasyMock.expectLastCall().andReturn(null).anyTimes(); + endpoint.size(); + EasyMock.expectLastCall().andReturn(0).anyTimes(); + endpoint.isEmpty(); + EasyMock.expectLastCall().andReturn(true).anyTimes(); + endpoint.get(ProviderFactory.class.getName()); + EasyMock.expectLastCall().andReturn(factory).anyTimes(); + EasyMock.replay(endpoint); + e.put(Endpoint.class, endpoint); + return m; + } + + @Test public void testResourceImpl() { String entity = "bar"; ResponseImpl ri = new ResponseImpl(200, entity);