Return-Path: Delivered-To: apmail-cxf-commits-archive@www.apache.org Received: (qmail 84741 invoked from network); 20 Jun 2009 16:25:02 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.3) by minotaur.apache.org with SMTP; 20 Jun 2009 16:25:02 -0000 Received: (qmail 4334 invoked by uid 500); 20 Jun 2009 16:25:13 -0000 Delivered-To: apmail-cxf-commits-archive@cxf.apache.org Received: (qmail 4244 invoked by uid 500); 20 Jun 2009 16:25:13 -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 4235 invoked by uid 99); 20 Jun 2009 16:25:13 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 20 Jun 2009 16:25:13 +0000 X-ASF-Spam-Status: No, hits=-1998.5 required=10.0 tests=ALL_TRUSTED,WEIRD_PORT 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; Sat, 20 Jun 2009 16:25:09 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 3E60A23888CC; Sat, 20 Jun 2009 16:24:48 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r786850 - in /cxf/trunk: rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/ systests/src/test/java/org/apache/cxf/systest/jaxrs/ Date: Sat, 20 Jun 2009 16:24:47 -0000 To: commits@cxf.apache.org From: sergeyb@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20090620162448.3E60A23888CC@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: sergeyb Date: Sat Jun 20 16:24:47 2009 New Revision: 786850 URL: http://svn.apache.org/viewvc?rev=786850&view=rev Log: JAXRS: avoiding loading model resource class if it is already been loaded elsewhere (ex, OSGI) Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/AbstractJAXRSFactoryBean.java cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSServiceFactoryBean.java cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/ResourceUtils.java cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerUserResourceTest.java Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/AbstractJAXRSFactoryBean.java URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/AbstractJAXRSFactoryBean.java?rev=786850&r1=786849&r2=786850&view=diff ============================================================================== --- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/AbstractJAXRSFactoryBean.java (original) +++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/AbstractJAXRSFactoryBean.java Sat Jun 20 16:24:47 2009 @@ -247,6 +247,10 @@ serviceFactory.setUserResources(resources); } + public void setModelBeansWithServiceClass(List resources, Class sClass) { + serviceFactory.setUserResourcesWithServiceClass(resources, sClass); + } + public void setModelRef(String modelRef) { List resources = ResourceUtils.getUserResources(modelRef); if (resources != null) { @@ -254,4 +258,12 @@ } } + public void setModelRefWithServiceClass(String modelRef, Class sClass) { + List resources = ResourceUtils.getUserResources(modelRef); + if (resources != null) { + serviceFactory.setUserResourcesWithServiceClass(resources, sClass); + } + } + + } Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSServiceFactoryBean.java URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSServiceFactoryBean.java?rev=786850&r1=786849&r2=786850&view=diff ============================================================================== --- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSServiceFactoryBean.java (original) +++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSServiceFactoryBean.java Sat Jun 20 16:24:47 2009 @@ -131,10 +131,7 @@ } public void setUserResources(List resources) { - Map map = new HashMap(); - for (UserResource ur : resources) { - map.put(ur.getName(), ur); - } + Map map = userResourcesAsMap(resources); for (UserResource ur : resources) { if (ur.getPath() != null) { ClassResourceInfo cri = ResourceUtils.createClassResourceInfo(map, ur, true); @@ -145,6 +142,22 @@ } } + public void setUserResourcesWithServiceClass(List resources, Class sClass) { + Map map = userResourcesAsMap(resources); + ClassResourceInfo cri = ResourceUtils.createServiceClassResourceInfo(map, sClass, true); + if (cri != null) { + classResourceInfos.add(cri); + } + } + + private Map userResourcesAsMap(List resources) { + Map map = new HashMap(); + for (UserResource ur : resources) { + map.put(ur.getName(), ur); + } + return map; + } + protected ClassResourceInfo createResourceInfo(Class cls, boolean isRoot) { ClassResourceInfo classResourceInfo = ResourceUtils.createClassResourceInfo(cls, cls, isRoot, enableStatic); Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/ResourceUtils.java URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/ResourceUtils.java?rev=786850&r1=786849&r2=786850&view=diff ============================================================================== --- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/ResourceUtils.java (original) +++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/ResourceUtils.java Sat Jun 20 16:24:47 2009 @@ -119,6 +119,46 @@ } + public static ClassResourceInfo createServiceClassResourceInfo( + Map resources, Class sClass, boolean isRoot) { + UserResource model = resources.get(sClass.getName()); + if (model == null) { + throw new RuntimeException("Resource class " + sClass.getName() + " has no model info"); + } + ClassResourceInfo cri = new ClassResourceInfo(sClass, sClass, isRoot, true, true); + URITemplate t = URITemplate.createTemplate(model.getPath()); + cri.setURITemplate(t); + MethodDispatcher md = new MethodDispatcher(); + Map ops = model.getOperationsAsMap(); + for (Method m : cri.getServiceClass().getMethods()) { + UserOperation op = ops.get(m.getName()); + if (op == null || op.getName() == null) { + continue; + } + OperationResourceInfo ori = + new OperationResourceInfo(m, cri, URITemplate.createTemplate(op.getPath()), + op.getVerb(), op.getConsumes(), op.getProduces(), + op.getParameters()); + String rClassName = m.getReturnType().getName(); + if (op.getVerb() == null) { + if (resources.containsKey(rClassName)) { + ClassResourceInfo subCri = rClassName.equals(model.getName()) ? cri + : createServiceClassResourceInfo(resources, m.getReturnType(), false); + if (subCri != null) { + cri.addSubClassResourceInfo(subCri); + md.bind(ori, m); + } + } + } else { + md.bind(ori, m); + } + } + cri.setMethodDispatcher(md); + return checkMethodDispatcher(cri) ? cri : null; + + } + + public static ClassResourceInfo createClassResourceInfo( final Class rClass, final Class sClass, boolean root, boolean enableStatic) { ClassResourceInfo cri = new ClassResourceInfo(rClass, sClass, root, enableStatic); Modified: cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerUserResourceTest.java URL: http://svn.apache.org/viewvc/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerUserResourceTest.java?rev=786850&r1=786849&r2=786850&view=diff ============================================================================== --- cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerUserResourceTest.java (original) +++ cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerUserResourceTest.java Sat Jun 20 16:24:47 2009 @@ -80,6 +80,9 @@ sf.setModelBeans(ur, ur2); + String modelRef = "classpath:/org/apache/cxf/systest/jaxrs/resources/resources2.xml"; + sf.setModelRefWithServiceClass(modelRef, BookStoreNoAnnotationsInterface.class); + sf.setServiceBeans(new BookStoreNoAnnotationsImpl()); sf.create(); } @@ -110,6 +113,12 @@ } @Test + public void testGetBookInterface123() throws Exception { + getAndCompare("http://localhost:9080/bookstore2/books/123", + "application/xml", 200); + } + + @Test public void testGetChapter() throws Exception { getAndCompareChapter("http://localhost:9080/bookstoreNoAnnotations/books/123/chapter",