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 79E2A200B6B for ; Thu, 25 Aug 2016 18:07:04 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id 78678160AA5; Thu, 25 Aug 2016 16:07:04 +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 99B72160AA4 for ; Thu, 25 Aug 2016 18:07:03 +0200 (CEST) Received: (qmail 53199 invoked by uid 500); 25 Aug 2016 16:07:02 -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 53187 invoked by uid 99); 25 Aug 2016 16:07:02 -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; Thu, 25 Aug 2016 16:07:02 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id A9DCFE0243; Thu, 25 Aug 2016 16:07:02 +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: <7048da8de5194ba9b6b1815cbcfdcac9@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: cxf git commit: [CXF-7017] Supporting BeanParam in subresources Date: Thu, 25 Aug 2016 16:07:02 +0000 (UTC) archived-at: Thu, 25 Aug 2016 16:07:04 -0000 Repository: cxf Updated Branches: refs/heads/master 7ca70dcb7 -> 05b8f86dc [CXF-7017] Supporting BeanParam in subresources Project: http://git-wip-us.apache.org/repos/asf/cxf/repo Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/05b8f86d Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/05b8f86d Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/05b8f86d Branch: refs/heads/master Commit: 05b8f86dcdaa17370d601ac5c96df35e578373cd Parents: 7ca70dc Author: Sergey Beryozkin Authored: Thu Aug 25 17:06:43 2016 +0100 Committer: Sergey Beryozkin Committed: Thu Aug 25 17:06:43 2016 +0100 ---------------------------------------------------------------------- .../cxf/jaxrs/model/ClassResourceInfo.java | 48 +++++++++++--------- .../jaxrs/provider/ServerProviderFactory.java | 3 +- .../org/apache/cxf/systest/jaxrs/BookStore.java | 24 +++++++++- .../jaxrs/JAXRSClientServerBookTest.java | 6 +++ 4 files changed, 57 insertions(+), 24 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cxf/blob/05b8f86d/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/ClassResourceInfo.java ---------------------------------------------------------------------- diff --git a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/ClassResourceInfo.java b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/ClassResourceInfo.java index 67959d2..61e240b 100644 --- a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/ClassResourceInfo.java +++ b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/ClassResourceInfo.java @@ -136,13 +136,12 @@ public class ClassResourceInfo extends BeanResourceInfo { } public ClassResourceInfo getSubResource(Class typedClass, Class instanceClass) { - instanceClass = enableStatic ? typedClass : instanceClass; return getSubResource(typedClass, instanceClass, null, enableStatic, null); } public ClassResourceInfo getSubResource(Class typedClass, Class instanceClass, Object instance) { instanceClass = enableStatic ? typedClass : instanceClass; - return getSubResource(typedClass, instanceClass, instance, enableStatic, null); + return getSubResource(typedClass, instanceClass, instance, enableStatic, JAXRSUtils.getCurrentMessage()); } public ClassResourceInfo getSubResource(Class typedClass, @@ -157,6 +156,9 @@ public class ClassResourceInfo extends BeanResourceInfo { cri = ResourceUtils.createClassResourceInfo(typedClass, instanceClass, this, false, resolveContexts, getBus()); if (cri != null) { + if (message != null) { + cri.initBeanParamInfo(ServerProviderFactory.getInstance(message)); + } subResources.putIfAbsent(key, cri); } } @@ -297,29 +299,31 @@ public class ClassResourceInfo extends BeanResourceInfo { } public void initBeanParamInfo(ServerProviderFactory factory) { - Set oris = getMethodDispatcher().getOperationResourceInfos(); - for (OperationResourceInfo ori : oris) { - List params = ori.getParameters(); - for (Parameter param : params) { - if (param.getType() == ParameterType.BEAN) { - Class cls = ori.getMethodToInvoke().getParameterTypes()[param.getIndex()]; - BeanParamInfo bpi = new BeanParamInfo(cls, getBus()); - factory.addBeanParamInfo(bpi); + if (factory != null) { + Set oris = getMethodDispatcher().getOperationResourceInfos(); + for (OperationResourceInfo ori : oris) { + List params = ori.getParameters(); + for (Parameter param : params) { + if (param.getType() == ParameterType.BEAN) { + Class cls = ori.getMethodToInvoke().getParameterTypes()[param.getIndex()]; + BeanParamInfo bpi = new BeanParamInfo(cls, getBus()); + factory.addBeanParamInfo(bpi); + } } } - } - List methods = super.getParameterMethods(); - for (Method m : methods) { - if (m.getAnnotation(BeanParam.class) != null) { - BeanParamInfo bpi = new BeanParamInfo(m.getParameterTypes()[0], getBus()); - factory.addBeanParamInfo(bpi); + List methods = super.getParameterMethods(); + for (Method m : methods) { + if (m.getAnnotation(BeanParam.class) != null) { + BeanParamInfo bpi = new BeanParamInfo(m.getParameterTypes()[0], getBus()); + factory.addBeanParamInfo(bpi); + } } - } - List fields = super.getParameterFields(); - for (Field f : fields) { - if (f.getAnnotation(BeanParam.class) != null) { - BeanParamInfo bpi = new BeanParamInfo(f.getType(), getBus()); - factory.addBeanParamInfo(bpi); + List fields = super.getParameterFields(); + for (Field f : fields) { + if (f.getAnnotation(BeanParam.class) != null) { + BeanParamInfo bpi = new BeanParamInfo(f.getType(), getBus()); + factory.addBeanParamInfo(bpi); + } } } } http://git-wip-us.apache.org/repos/asf/cxf/blob/05b8f86d/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ServerProviderFactory.java ---------------------------------------------------------------------- diff --git a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ServerProviderFactory.java b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ServerProviderFactory.java index 97311af..8354f13 100644 --- a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ServerProviderFactory.java +++ b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ServerProviderFactory.java @@ -31,6 +31,7 @@ import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; import javax.ws.rs.BeanParam; import javax.ws.rs.Priorities; @@ -91,7 +92,7 @@ public final class ServerProviderFactory extends ProviderFactory { private ApplicationInfo application; private Set dynamicFeatures = new LinkedHashSet(); - private Map, BeanParamInfo> beanParams = new HashMap, BeanParamInfo>(); + private Map, BeanParamInfo> beanParams = new ConcurrentHashMap, BeanParamInfo>(); private ProviderInfo wadlGenerator; private ServerProviderFactory(Bus bus) { http://git-wip-us.apache.org/repos/asf/cxf/blob/05b8f86d/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java ---------------------------------------------------------------------- diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java index c3c9683..6e9c6c4 100644 --- a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java +++ b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java @@ -111,6 +111,7 @@ import org.junit.Assert; @Path("/bookstore") @GZIP(threshold = 1) public class BookStore { + private Map books = new HashMap(); private Map cds = new HashMap(); private long bookId = 123; @@ -352,6 +353,11 @@ public class BookStore { return books.get(id); } + @Path("/beanparamsub") + public BookStoreSub getBeanParamBookSub() { + return new BookStoreSub(this); + } + @GET @Path("/twoBeanParams/{id}") @Produces("application/xml") @@ -1839,6 +1845,10 @@ public class BookStore { } + public static class BookBeanExtended extends BookBean { + + } + public static class BookBeanNested { private long id4; @@ -2046,7 +2056,19 @@ public class BookStore { arg6.write(sb.toString().getBytes()); } - } + } + public static class BookStoreSub { + BookStore bookStore; + public BookStoreSub(BookStore bookStore) { + this.bookStore = bookStore; + } + @GET + @Path("/beanparam/{id}") + @Produces("application/xml") + public Book getBeanParamBook(@BeanParam BookBeanExtended bean) { + return bookStore.getBeanParamBook(bean); + } + } } http://git-wip-us.apache.org/repos/asf/cxf/blob/05b8f86d/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java ---------------------------------------------------------------------- diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java index 648c1ca..8726685 100644 --- a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java +++ b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java @@ -394,6 +394,12 @@ public class JAXRSClientServerBookTest extends AbstractBusClientServerTestBase { } @Test + public void testUseParamBeanWebClientSubResource() { + String address = "http://localhost:" + PORT + "/bookstore/beanparamsub/beanparam"; + doTestUseParamBeanWebClient(address); + } + + @Test public void testUseParamBeanWebClient2() { String address = "http://localhost:" + PORT + "/bookstore/beanparam2"; doTestUseParamBeanWebClient(address);