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);
 
        }
 }


Reply via email to