Return-Path: Delivered-To: apmail-cxf-commits-archive@www.apache.org Received: (qmail 97049 invoked from network); 1 Jul 2009 12:16:25 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.3) by minotaur.apache.org with SMTP; 1 Jul 2009 12:16:25 -0000 Received: (qmail 90427 invoked by uid 500); 1 Jul 2009 12:16:35 -0000 Delivered-To: apmail-cxf-commits-archive@cxf.apache.org Received: (qmail 90348 invoked by uid 500); 1 Jul 2009 12:16:35 -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 90338 invoked by uid 99); 1 Jul 2009 12:16:35 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 01 Jul 2009 12:16:35 +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; Wed, 01 Jul 2009 12:16:31 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id A625D23888E3; Wed, 1 Jul 2009 12:16:10 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r790134 - in /cxf/trunk: rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSInvoker.java systests/src/test/java/org/apache/cxf/systest/jaxrs/Chapter.java systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java Date: Wed, 01 Jul 2009 12:16:10 -0000 To: commits@cxf.apache.org From: sergeyb@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20090701121610.A625D23888E3@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: sergeyb Date: Wed Jul 1 12:16:10 2009 New Revision: 790134 URL: http://svn.apache.org/viewvc?rev=790134&view=rev Log: [CXF-2326] JAX-RS sub-resources can not access parent template variables Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSInvoker.java cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/Chapter.java cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSInvoker.java URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSInvoker.java?rev=790134&r1=790133&r2=790134&view=diff ============================================================================== --- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSInvoker.java (original) +++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSInvoker.java Wed Jul 1 12:16:10 2009 @@ -24,7 +24,6 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; -import java.util.Map; import java.util.ResourceBundle; import java.util.logging.Logger; @@ -44,6 +43,8 @@ import org.apache.cxf.jaxrs.model.MethodInvocationInfo; import org.apache.cxf.jaxrs.model.OperationResourceInfo; import org.apache.cxf.jaxrs.model.OperationResourceInfoStack; +import org.apache.cxf.jaxrs.model.Parameter; +import org.apache.cxf.jaxrs.model.ParameterType; import org.apache.cxf.jaxrs.model.URITemplate; import org.apache.cxf.jaxrs.provider.ProviderFactory; import org.apache.cxf.jaxrs.utils.InjectionUtils; @@ -138,7 +139,7 @@ if (ori.isSubResourceLocator()) { try { Message msg = exchange.getInMessage(); - MultivaluedMap values = new MetadataMap(); + MultivaluedMap values = getTemplateValues(msg); String subResourcePath = (String)msg.get(JAXRSInInterceptor.RELATIVE_PATH); String httpMethod = (String)msg.get(Message.HTTP_REQUEST_METHOD); String contentType = (String)msg.get(Message.CONTENT_TYPE); @@ -192,6 +193,17 @@ return result; } + @SuppressWarnings("unchecked") + protected MultivaluedMap getTemplateValues(Message msg) { + MultivaluedMap values = new MetadataMap(); + MultivaluedMap oldValues = + (MultivaluedMap)msg.get(URITemplate.TEMPLATE_PARAMETERS); + if (oldValues != null) { + values.putAll(oldValues); + } + return values; + } + private boolean setServiceLoaderAsContextLoader(Message inMessage) { Object en = inMessage.getContextualProperty(SERVICE_LOADER_AS_CONTEXT); return Boolean.TRUE.equals(en) || "true".equals(en); @@ -245,10 +257,13 @@ values = Collections.emptyList(); } else { values = new ArrayList(params.size() - 1); - // if we have {bar}/{foo}/{bar} then we have a problem - for (Map.Entry> entry : params.entrySet()) { - if (!entry.getKey().equals(URITemplate.FINAL_MATCH_GROUP)) { - values.addAll(entry.getValue()); + for (Parameter pm : ori.getParameters()) { + if (pm.getType() == ParameterType.PATH) { + List paramValues = params.get(pm.getName()); + if (paramValues != null) { + values.addAll(paramValues); + } + } } } Modified: cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/Chapter.java URL: http://svn.apache.org/viewvc/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/Chapter.java?rev=790134&r1=790133&r2=790134&view=diff ============================================================================== --- cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/Chapter.java (original) +++ cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/Chapter.java Wed Jul 1 12:16:10 2009 @@ -24,6 +24,7 @@ import javax.ws.rs.GET; import javax.ws.rs.Path; +import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.QueryParam; import javax.ws.rs.core.Context; @@ -71,6 +72,17 @@ public Chapter get() { return this; } + + @GET + @Path("/ids") + @Produces("application/xml;charset=ISO-8859-1") + public Chapter getWithBookId(@PathParam("bookId") int bookId, + @PathParam("chapterid") int chapterId) { + if (bookId != 123 || chapterId != 1) { + throw new RuntimeException(); + } + return this; + } @GET Modified: cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java URL: http://svn.apache.org/viewvc/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java?rev=790134&r1=790133&r2=790134&view=diff ============================================================================== --- cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java (original) +++ cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java Wed Jul 1 12:16:10 2009 @@ -487,6 +487,15 @@ } @Test + public void testGetChapterWithParentIds() throws Exception { + + getAndCompareAsStrings( + "http://localhost:9080/bookstore/booksubresource/123/chapters/sub/1/recurse2/ids", + "resources/expected_get_chapter1.txt", + "application/xml", "application/xml;charset=iso-8859-1", 200); + } + + @Test public void testGetBook123ReturnString() throws Exception { getAndCompareAsStrings("http://localhost:9080/bookstore/booknames/123", "resources/expected_get_book123_returnstring.txt",