You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@clerezza.apache.org by re...@apache.org on 2010/06/18 16:06:50 UTC

svn commit: r956007 - in /incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src: main/java/org/apache/clerezza/triaxrs/parameterinjectors/ test/java/org/apache/clerezza/triaxrs/blackbox/

Author: reto
Date: Fri Jun 18 14:06:50 2010
New Revision: 956007

URL: http://svn.apache.org/viewvc?rev=956007&view=rev
Log:
CLEREZZA-240: decoding PathParams

Modified:
    incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/main/java/org/apache/clerezza/triaxrs/parameterinjectors/PathParameterInjector.java
    incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/test/java/org/apache/clerezza/triaxrs/blackbox/TestPlainPathParam.java

Modified: incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/main/java/org/apache/clerezza/triaxrs/parameterinjectors/PathParameterInjector.java
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/main/java/org/apache/clerezza/triaxrs/parameterinjectors/PathParameterInjector.java?rev=956007&r1=956006&r2=956007&view=diff
==============================================================================
--- incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/main/java/org/apache/clerezza/triaxrs/parameterinjectors/PathParameterInjector.java (original)
+++ incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/main/java/org/apache/clerezza/triaxrs/parameterinjectors/PathParameterInjector.java Fri Jun 18 14:06:50 2010
@@ -29,6 +29,7 @@ import javax.ws.rs.ext.Providers;
 
 import org.apache.clerezza.triaxrs.WebRequest;
 import org.apache.clerezza.triaxrs.util.PathSegmentImpl;
+import org.apache.clerezza.triaxrs.util.uri.UriComponent;
 
 /**
  *
@@ -41,25 +42,38 @@ public class PathParameterInjector imple
 			Providers providers, Type parameterType, PathParam annotation,
 			final boolean encodingDisabled, String defaultValue)
 			throws UnsupportedFieldType {
-		
+
 		//TODO should allow multiple path-segments with same name
 		String value = pathParam.get(annotation.value());
 		List<String> stringValues = new ArrayList<String>();
-		if(value == null || value.equals("") && defaultValue != null){
+		if (value == null || value.equals("") && defaultValue != null) {
 			value = defaultValue;
 		}
+		
 		stringValues.add(value);
 
 		return (T) ConversionUtil.convert(stringValues, parameterType,
 				new ConversionUtil.Convertor<PathSegment>() {
 
-			@Override
-			public PathSegment convert(String string) {
-				if (string == null) return null;
-				return PathSegmentImpl.parse(string, encodingDisabled);
-			}
-
-		});
+					@Override
+					public PathSegment convert(String string) {
+						if (string == null) {
+							return null;
+							
+						}
+						return PathSegmentImpl.parse(string, encodingDisabled);
+					}
+				},
+				new ConversionUtil.Convertor<String>() {
+
+					@Override
+					public String convert(String string) {						
+						if (encodingDisabled) {
+							return string;
+						} else {
+							return UriComponent.decode(string, UriComponent.Type.PATH_SEGMENT);
+						}
+					}
+				});
 	}
-
 }

Modified: incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/test/java/org/apache/clerezza/triaxrs/blackbox/TestPlainPathParam.java
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/test/java/org/apache/clerezza/triaxrs/blackbox/TestPlainPathParam.java?rev=956007&r1=956006&r2=956007&view=diff
==============================================================================
--- incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/test/java/org/apache/clerezza/triaxrs/blackbox/TestPlainPathParam.java (original)
+++ incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/test/java/org/apache/clerezza/triaxrs/blackbox/TestPlainPathParam.java Fri Jun 18 14:06:50 2010
@@ -18,6 +18,7 @@
  */
 package org.apache.clerezza.triaxrs.blackbox;
 
+import java.net.URLEncoder;
 import static org.easymock.EasyMock.expect;
 import static org.easymock.EasyMock.replay;
 import static org.junit.Assert.assertEquals;
@@ -53,10 +54,9 @@ public class TestPlainPathParam {
 	}
 
 	@Test
-	public void testQueryParam() throws Exception {
+	public void testPathParam() throws Exception {
 
 		JaxRsHandler handler = HandlerCreator.getHandler(MyResource.class);
-
 		Request requestMock = EasyMock.createNiceMock(Request.class);
 		Response responseMock = EasyMock.createNiceMock(Response.class);
 		expect(requestMock.getMethod()).andReturn(Method.GET).anyTimes();
@@ -71,6 +71,26 @@ public class TestPlainPathParam {
 		handler.handle(requestMock, responseMock);
 		assertEquals(value1, handlePathParamValue1);
 		assertEquals(value2, handlePathParamValue2);
+	}
+	
+	@Test
+	public void testPathParamDecoding() throws Exception {
+
+		JaxRsHandler handler = HandlerCreator.getHandler(MyResource.class);
+		Request requestMock = EasyMock.createNiceMock(Request.class);
+		Response responseMock = EasyMock.createNiceMock(Response.class);
+		expect(requestMock.getMethod()).andReturn(Method.GET).anyTimes();
+		RequestURI requestURI = EasyMock.createNiceMock(RequestURI.class);
+		String value1 = "f#o";
+		String value2 = "b/a/r";
+		expect(requestURI.getPath()).andReturn("/prefix/"+URLEncoder.encode(value1,"utf-8")+"/"+URLEncoder.encode(value2, "utf-8")).anyTimes();
+		expect(requestMock.getRequestURI()).andReturn(requestURI).anyTimes();
+		replay(requestMock);
+		replay(requestURI);
+		replay(responseMock);
+		handler.handle(requestMock, responseMock);
+		assertEquals(value1, handlePathParamValue1);
+		assertEquals(value2, handlePathParamValue2);
 
 	}
 }