You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by se...@apache.org on 2009/07/01 14:16:10 UTC
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
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<String, String> values = new MetadataMap<String, String>();
+ MultivaluedMap<String, String> 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<String, String> values = new MetadataMap<String, String>();
+ MultivaluedMap<String, String> oldValues =
+ (MultivaluedMap<String, String>)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<String>(params.size() - 1);
- // if we have {bar}/{foo}/{bar} then we have a problem
- for (Map.Entry<String, List<String>> 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<String> 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",