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 2008/11/23 22:55:00 UTC
svn commit: r720053 - in /cxf/trunk:
rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/
rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/
rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/
systests/src/test/java/org/apache/cxf...
Author: sergeyb
Date: Sun Nov 23 13:55:00 2008
New Revision: 720053
URL: http://svn.apache.org/viewvc?rev=720053&view=rev
Log:
JAXRS : support for PathSegment path parameters
Added:
cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/PathSegmentImplTest.java
Modified:
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/PathSegmentImpl.java
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java
cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.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/impl/PathSegmentImpl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/PathSegmentImpl.java?rev=720053&r1=720052&r2=720053&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/PathSegmentImpl.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/PathSegmentImpl.java Sun Nov 23 13:55:00 2008
@@ -29,23 +29,22 @@
public class PathSegmentImpl implements PathSegment {
private String path;
- private boolean decode;
-
+
public PathSegmentImpl(String path) {
this(path, true);
}
public PathSegmentImpl(String path, boolean decode) {
- this.path = path;
- this.decode = decode;
+ this.path = decode ? JAXRSUtils.uriDecode(path) : path;
}
public MultivaluedMap<String, String> getMatrixParameters() {
- return JAXRSUtils.getMatrixParams(path, decode);
+ return JAXRSUtils.getMatrixParams(path, false);
}
public String getPath() {
- return path;
+ int index = path.indexOf(';');
+ return index != -1 ? path.substring(0, index) : path;
}
}
Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java?rev=720053&r1=720052&r2=720053&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java Sun Nov 23 13:55:00 2008
@@ -552,12 +552,17 @@
return InjectionUtils.handleBean(paramType, values);
} else {
List<String> results = values.get(parameterName);
- return InjectionUtils.createParameterObject(results,
+ if (PathSegment.class.isAssignableFrom(paramType)
+ && results != null && results.size() > 0) {
+ return new PathSegmentImpl(results.get(0), decoded);
+ } else {
+ return InjectionUtils.createParameterObject(results,
paramType,
genericType,
defaultValue,
true,
decoded);
+ }
}
}
Added: cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/PathSegmentImplTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/PathSegmentImplTest.java?rev=720053&view=auto
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/PathSegmentImplTest.java (added)
+++ cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/PathSegmentImplTest.java Sun Nov 23 13:55:00 2008
@@ -0,0 +1,58 @@
+/**
+ * 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 javax.ws.rs.core.MultivaluedMap;
+import javax.ws.rs.core.PathSegment;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+public class PathSegmentImplTest extends Assert {
+
+ @Test
+ public void testPlainPathSegment() {
+ PathSegment ps = new PathSegmentImpl("bar");
+ assertEquals("bar", ps.getPath());
+ assertEquals(0, ps.getMatrixParameters().size());
+ }
+
+ @Test
+ public void testPathSegmentWithMatrixParams() {
+ PathSegment ps = new PathSegmentImpl("bar;a=1;a=2;b=3%202", false);
+ assertEquals("bar", ps.getPath());
+ MultivaluedMap<String, String> params = ps.getMatrixParameters();
+ assertEquals(2, params.size());
+ assertEquals(2, params.get("a").size());
+ assertEquals("1", params.get("a").get(0));
+ assertEquals("2", params.get("a").get(1));
+ assertEquals("3%202", params.getFirst("b"));
+ }
+
+ @Test
+ public void testPathSegmentWithDecodedMatrixParams() {
+ PathSegment ps = new PathSegmentImpl("bar%20foo;a=1%202");
+ assertEquals("bar foo", ps.getPath());
+ MultivaluedMap<String, String> params = ps.getMatrixParameters();
+ assertEquals(1, params.size());
+ assertEquals(1, params.get("a").size());
+ assertEquals("1 2", params.get("a").get(0));
+ }
+}
Modified: cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java?rev=720053&r1=720052&r2=720053&view=diff
==============================================================================
--- cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java (original)
+++ cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java Sun Nov 23 13:55:00 2008
@@ -37,6 +37,8 @@
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.core.MultivaluedMap;
+import javax.ws.rs.core.PathSegment;
import javax.ws.rs.core.Response;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.annotation.adapters.XmlAdapter;
@@ -94,6 +96,18 @@
}
@GET
+ @Path("/segment/{pathsegment}/")
+ public Book getBookBySegment(@PathParam("pathsegment") PathSegment segment) throws Exception {
+ if (!"matrix".equals(segment.getPath())) {
+ throw new RuntimeException();
+ }
+ MultivaluedMap<String, String> map = segment.getMatrixParameters();
+ String s1 = map.getFirst("first").toString();
+ String s2 = map.getFirst("second").toString();
+ return doGetBook(s1 + s2);
+ }
+
+ @GET
@Path("/bookquery")
public Book getBookByURLQuery(@QueryParam("urlid") String urlValue) throws Exception {
String url2 = new URL(urlValue).toString();
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=720053&r1=720052&r2=720053&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 Sun Nov 23 13:55:00 2008
@@ -206,6 +206,14 @@
}
@Test
+ public void testGetBookBySegment() throws Exception {
+ getAndCompareAsStrings("http://localhost:9080/bookstore/segment/matrix;first=12;second=3",
+ "resources/expected_get_book123.txt",
+ "application/xml", 200);
+
+ }
+
+ @Test
public void testGetBookElement() throws Exception {
getAndCompareAsStrings("http://localhost:9080/bookstore/books/element",
"resources/expected_get_book123.txt",