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 C2A4818CB4 for ; Mon, 14 Dec 2015 12:23:46 +0000 (UTC) Received: (qmail 12487 invoked by uid 500); 14 Dec 2015 12:23:46 -0000 Delivered-To: apmail-cxf-commits-archive@cxf.apache.org Received: (qmail 12424 invoked by uid 500); 14 Dec 2015 12:23:46 -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 12415 invoked by uid 99); 14 Dec 2015 12:23:46 -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, 14 Dec 2015 12:23:46 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 7D8A0E04BE; Mon, 14 Dec 2015 12:23:46 +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: <6c9e828a775045b6b50a1ab103ba02de@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: cxf git commit: [CXF-6709] The best effort at returning the original IS Date: Mon, 14 Dec 2015 12:23:46 +0000 (UTC) Repository: cxf Updated Branches: refs/heads/3.1.x-fixes f3646c600 -> 16c42c7e8 [CXF-6709] The best effort at returning the original IS Project: http://git-wip-us.apache.org/repos/asf/cxf/repo Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/16c42c7e Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/16c42c7e Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/16c42c7e Branch: refs/heads/3.1.x-fixes Commit: 16c42c7e8ff5190eb9c7277b41ad6f3a524116ae Parents: f3646c6 Author: Sergey Beryozkin Authored: Mon Dec 14 12:17:26 2015 +0000 Committer: Sergey Beryozkin Committed: Mon Dec 14 12:23:28 2015 +0000 ---------------------------------------------------------------------- .../jaxrs/impl/HttpServletRequestFilter.java | 51 ++++++++++++++++++++ .../org/apache/cxf/jaxrs/utils/JAXRSUtils.java | 4 +- .../cxf/jaxrs/ext/MessageContextImplTest.java | 8 ++- .../apache/cxf/jaxrs/utils/JAXRSUtilsTest.java | 21 +++++--- .../cxf/systest/jaxrs/BookStoreSpring.java | 13 ++++- .../jaxrs/JAXRSClientServerSpringBookTest.java | 12 ++++- 6 files changed, 96 insertions(+), 13 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cxf/blob/16c42c7e/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/HttpServletRequestFilter.java ---------------------------------------------------------------------- diff --git a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/HttpServletRequestFilter.java b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/HttpServletRequestFilter.java new file mode 100644 index 0000000..9d393d4 --- /dev/null +++ b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/HttpServletRequestFilter.java @@ -0,0 +1,51 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.apache.cxf.jaxrs.impl; + +import java.io.IOException; +import java.io.InputStream; + +import javax.servlet.ServletInputStream; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletRequestWrapper; + +import org.apache.cxf.io.DelegatingInputStream; +import org.apache.cxf.message.Message; + +public class HttpServletRequestFilter extends HttpServletRequestWrapper { + + private Message m; + public HttpServletRequestFilter(HttpServletRequest request, Message message) { + super(request); + m = message; + } + @Override + public ServletInputStream getInputStream() throws IOException { + InputStream is = m.getContent(InputStream.class); + if (is instanceof DelegatingInputStream) { + is = ((DelegatingInputStream)is).getInputStream(); + } + if (is instanceof ServletInputStream) { + return (ServletInputStream)is; + } else { + return super.getInputStream(); + } + } +} + http://git-wip-us.apache.org/repos/asf/cxf/blob/16c42c7e/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java ---------------------------------------------------------------------- diff --git a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java index 26120ec..5b3a808 100644 --- a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java +++ b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java @@ -103,6 +103,7 @@ import org.apache.cxf.jaxrs.impl.AsyncResponseImpl; import org.apache.cxf.jaxrs.impl.ContainerRequestContextImpl; import org.apache.cxf.jaxrs.impl.ContainerResponseContextImpl; import org.apache.cxf.jaxrs.impl.HttpHeadersImpl; +import org.apache.cxf.jaxrs.impl.HttpServletRequestFilter; import org.apache.cxf.jaxrs.impl.HttpServletResponseFilter; import org.apache.cxf.jaxrs.impl.MediaTypeHeaderProvider; import org.apache.cxf.jaxrs.impl.MetadataMap; @@ -1155,7 +1156,8 @@ public final class JAXRSUtils { Object value = null; if (clazz == HttpServletRequest.class) { - value = m.get(AbstractHTTPDestination.HTTP_REQUEST); + HttpServletRequest request = (HttpServletRequest)m.get(AbstractHTTPDestination.HTTP_REQUEST); + value = request != null ? new HttpServletRequestFilter(request, m) : null; } else if (clazz == HttpServletResponse.class) { HttpServletResponse response = (HttpServletResponse)m.get(AbstractHTTPDestination.HTTP_RESPONSE); value = response != null ? new HttpServletResponseFilter(response, m) : null; http://git-wip-us.apache.org/repos/asf/cxf/blob/16c42c7e/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/ext/MessageContextImplTest.java ---------------------------------------------------------------------- diff --git a/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/ext/MessageContextImplTest.java b/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/ext/MessageContextImplTest.java index b40c669..64fcd48 100644 --- a/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/ext/MessageContextImplTest.java +++ b/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/ext/MessageContextImplTest.java @@ -34,6 +34,7 @@ import javax.xml.bind.JAXBContext; import org.apache.cxf.endpoint.Endpoint; import org.apache.cxf.jaxrs.impl.HttpHeadersImpl; +import org.apache.cxf.jaxrs.impl.HttpServletRequestFilter; import org.apache.cxf.jaxrs.impl.HttpServletResponseFilter; import org.apache.cxf.jaxrs.impl.ProvidersImpl; import org.apache.cxf.jaxrs.impl.RequestImpl; @@ -126,8 +127,11 @@ public class MessageContextImplTest extends Assert { MessageContext mc = new MessageContextImpl(m); HttpServletRequest request = EasyMock.createMock(HttpServletRequest.class); m.put(AbstractHTTPDestination.HTTP_REQUEST, request); - assertSame(request.getClass(), mc.getHttpServletRequest().getClass()); - assertSame(request.getClass(), mc.getContext(HttpServletRequest.class).getClass()); + + assertSame(request.getClass(), + ((HttpServletRequestFilter)mc.getHttpServletRequest()).getRequest().getClass()); + assertSame(request.getClass(), + ((HttpServletRequestFilter)mc.getContext(HttpServletRequest.class)).getRequest().getClass()); } @Test http://git-wip-us.apache.org/repos/asf/cxf/blob/16c42c7e/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/JAXRSUtilsTest.java ---------------------------------------------------------------------- diff --git a/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/JAXRSUtilsTest.java b/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/JAXRSUtilsTest.java index 856d02f..0cd52fc 100644 --- a/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/JAXRSUtilsTest.java +++ b/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/JAXRSUtilsTest.java @@ -75,6 +75,7 @@ import org.apache.cxf.jaxrs.SimpleFactory; import org.apache.cxf.jaxrs.Timezone; import org.apache.cxf.jaxrs.ext.ContextProvider; import org.apache.cxf.jaxrs.impl.HttpHeadersImpl; +import org.apache.cxf.jaxrs.impl.HttpServletRequestFilter; import org.apache.cxf.jaxrs.impl.HttpServletResponseFilter; import org.apache.cxf.jaxrs.impl.MetadataMap; import org.apache.cxf.jaxrs.impl.PathSegmentImpl; @@ -1719,7 +1720,7 @@ public class JAXRSUtilsTest extends Assert { List params = JAXRSUtils.processParameters(ori, new MetadataMap(), m); assertEquals("4 parameters expected", 4, params.size()); - assertSame(request.getClass(), params.get(0).getClass()); + assertSame(request.getClass(), ((HttpServletRequestFilter)params.get(0)).getRequest().getClass()); assertSame(response.getClass(), params.get(1).getClass()); assertSame(context.getClass(), params.get(2).getClass()); assertSame(config.getClass(), params.get(3).getClass()); @@ -1790,8 +1791,10 @@ public class JAXRSUtilsTest extends Assert { ((ThreadLocalProxy)c.getServletContext()).get()); assertSame(servletContextMock, ((ThreadLocalProxy)c.getSuperServletContext()).get()); - assertSame(httpRequest, - ((ThreadLocalProxy)c.getServletRequest()).get()); + HttpServletRequest currentReq = + ((ThreadLocalProxy)c.getServletRequest()).get(); + assertSame(httpRequest, + ((HttpServletRequestFilter)currentReq).getRequest()); HttpServletResponseFilter filter = ( HttpServletResponseFilter)((ThreadLocalProxy)c.getServletResponse()).get(); assertSame(httpResponse, filter.getResponse()); @@ -1816,8 +1819,10 @@ public class JAXRSUtilsTest extends Assert { InjectionUtils.injectContextFields(c, cri, m); assertSame(servletContextMock, ((ThreadLocalProxy)c.getServletContextResource()).get()); - assertSame(httpRequest, - ((ThreadLocalProxy)c.getServletRequestResource()).get()); + HttpServletRequest currentReq = + ((ThreadLocalProxy)c.getServletRequestResource()).get(); + assertSame(httpRequest, + ((HttpServletRequestFilter)currentReq).getRequest()); HttpServletResponseFilter filter = ( HttpServletResponseFilter)((ThreadLocalProxy)c.getServletResponseResource()) .get(); @@ -1961,7 +1966,8 @@ public class JAXRSUtilsTest extends Assert { m.put(AbstractHTTPDestination.HTTP_CONTEXT, context); InjectionUtils.injectContextFields(c, ori.getClassResourceInfo(), m); - assertSame(request.getClass(), c.getServletRequestResource().getClass()); + assertSame(request.getClass(), + ((HttpServletRequestFilter)c.getServletRequestResource()).getRequest().getClass()); HttpServletResponseFilter filter = (HttpServletResponseFilter)c.getServletResponseResource(); assertSame(response.getClass(), filter.getResponse().getClass()); assertSame(context.getClass(), c.getServletContextResource().getClass()); @@ -1971,7 +1977,8 @@ public class JAXRSUtilsTest extends Assert { assertNotNull(c.getServletRequestResource()); assertNotNull(c.getServletResponseResource()); assertNotNull(c.getServletContextResource()); - assertSame(request.getClass(), c.getServletRequest().getClass()); + assertSame(request.getClass(), + ((HttpServletRequestFilter)c.getServletRequestResource()).getRequest().getClass()); filter = (HttpServletResponseFilter)c.getServletResponse(); assertSame(response.getClass(), filter.getResponse().getClass()); assertSame(context.getClass(), c.getServletContext().getClass()); http://git-wip-us.apache.org/repos/asf/cxf/blob/16c42c7e/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStoreSpring.java ---------------------------------------------------------------------- diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStoreSpring.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStoreSpring.java index 8ae6bff..a367733 100644 --- a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStoreSpring.java +++ b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStoreSpring.java @@ -21,6 +21,8 @@ package org.apache.cxf.systest.jaxrs; import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; import java.net.URI; import java.util.Collections; import java.util.HashMap; @@ -51,13 +53,12 @@ import javax.xml.stream.XMLStreamException; import javax.xml.transform.Source; import javax.xml.transform.dom.DOMSource; -import org.apache.cxf.annotations.Logging; +import org.apache.cxf.helpers.IOUtils; import org.apache.cxf.staxutils.DepthExceededStaxException; import org.apache.cxf.staxutils.StaxUtils; @Path("/") @Produces("application/json") -@Logging public class BookStoreSpring { private Map books = new HashMap(); @@ -91,6 +92,14 @@ public class BookStoreSpring { long id = Long.valueOf(req.getParameter("id")); return new Book(name, id); } + @POST + @Path("/bookform") + @Consumes("application/xml") + @Produces("application/xml") + public String echoBookFormXml(@Context HttpServletRequest req) throws IOException { + InputStream is = req.getInputStream(); + return IOUtils.readStringFromStream(is); + } @GET @Path("/books/webex") http://git-wip-us.apache.org/repos/asf/cxf/blob/16c42c7e/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerSpringBookTest.java ---------------------------------------------------------------------- diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerSpringBookTest.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerSpringBookTest.java index 6ae9f4e..eb515d7 100644 --- a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerSpringBookTest.java +++ b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerSpringBookTest.java @@ -100,13 +100,23 @@ public class JAXRSClientServerSpringBookTest extends AbstractBusClientServerTest public void testEchoBookForm() throws Exception { String address = "http://localhost:" + PORT + "/bus/thebooksform/bookform"; WebClient wc = WebClient.create(address); - WebClient.getConfig(wc).getHttpConduit().getClient().setReceiveTimeout(10000000L); Book b = wc.form(new Form().param("name", "CXFForm").param("id", "125")) .readEntity(Book.class); assertEquals("CXFForm", b.getName()); assertEquals(125L, b.getId()); } + @Test + public void testEchoBookFormXml() throws Exception { + String address = "http://localhost:" + PORT + "/bus/thebooksform/bookform"; + WebClient wc = WebClient.create(address); + WebClient.getConfig(wc).getHttpConduit().getClient().setReceiveTimeout(10000000L); + Book b = + wc.type("application/xml").post(new Book("CXFFormXml", 125L)) + .readEntity(Book.class); + assertEquals("CXFFormXml", b.getName()); + assertEquals(125L, b.getId()); + } @Test public void testGetBookWebEx4() throws Exception {