Author: mir
Date: Tue Mar 2 12:49:20 2010
New Revision: 918006
URL: http://svn.apache.org/viewvc?rev=918006&view=rev
Log:
CLEREZZA-129: removed problematic code from sun. Now using the
org.apache.clerezza.utils.UriUtil for encoding
Added:
incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/test/java/org/apache/clerezza/triaxrs/util/TemplateEncoderTest.java
- copied, changed from r915817,
incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/test/java/org/apache/clerezza/triaxrs/util/TestTemplateEncoder.java
Removed:
incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/test/java/org/apache/clerezza/triaxrs/util/TestTemplateEncoder.java
Modified:
incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/
(props changed)
incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs.tests/pom.xml
incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs.tests/src/test/java/org/apache/clerezza/triaxrs/blackbox/osgi/AbstractServiceRootResourceTest.java
incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs.tests/src/test/java/org/apache/clerezza/triaxrs/blackbox/osgi/FelixServiceRootResourceTest.java
incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs.tests/src/test/java/org/apache/clerezza/triaxrs/blackbox/osgi/SimpleRootResource.java
incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/pom.xml
incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/main/java/org/apache/clerezza/triaxrs/JaxRsHandler.java
incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/main/java/org/apache/clerezza/triaxrs/RootResourceExecutorImpl.java
incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/main/java/org/apache/clerezza/triaxrs/RootResources.java
incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/main/java/org/apache/clerezza/triaxrs/util/TemplateEncoder.java
incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/main/java/org/apache/clerezza/triaxrs/util/URITemplate.java
incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/test/java/org/apache/clerezza/triaxrs/TestTemplate.java
incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/test/java/org/apache/clerezza/triaxrs/blackbox/FormParamTest.java
incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/test/java/org/apache/clerezza/triaxrs/blackbox/ResourcePathTest.java
Propchange: incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Mar 2 12:49:20 2010
@@ -3,3 +3,4 @@
/incubator/clerezza/issues/CLEREZZA-48/org.apache.clerezza.triaxrs:893435-898896
/incubator/clerezza/issues/CLEREZZA-86/org.apache.clerezza.triaxrs:903135-910335
/incubator/clerezza/issues/CLEREZZA-94/org.apache.clerezza.triaxrs:905562-905566
+/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.triaxrs:910457-917940
Modified:
incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs.tests/pom.xml
URL:
http://svn.apache.org/viewvc/incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs.tests/pom.xml?rev=918006&r1=918005&r2=918006&view=diff
==============================================================================
---
incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs.tests/pom.xml
(original)
+++
incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs.tests/pom.xml
Tue Mar 2 12:49:20 2010
@@ -69,7 +69,17 @@
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient-osgi</artifactId>
<scope>provided</scope>
- <version>4.0</version>
+ <version>4.0.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.clerezza</groupId>
+ <artifactId>org.apache.clerezza.utils</artifactId>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.httpcomponents</groupId>
+ <artifactId>httpcore-osgi</artifactId>
+ <scope>provided</scope>
</dependency>
<!-- pax exam related stuff -->
<dependency>
@@ -86,15 +96,7 @@
<groupId>org.ops4j.pax.exam</groupId>
<artifactId>pax-exam-container-default</artifactId>
<scope>test</scope>
- </dependency>
-
- <dependency>
- <groupId>org.apache.httpcomponents</groupId>
- <artifactId>httpcore-osgi</artifactId>
- <version>4.0.1</version>
- <scope>test</scope>
- </dependency>
-
+ </dependency>
</dependencies>
<build>
<plugins>
@@ -111,7 +113,6 @@
<plugin>
<groupId>org.ops4j.pax.exam</groupId>
<artifactId>maven-paxexam-plugin</artifactId>
- <version>1.2.0</version>
<executions>
<execution>
<id>generate-depends-file</id>
Modified:
incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs.tests/src/test/java/org/apache/clerezza/triaxrs/blackbox/osgi/AbstractServiceRootResourceTest.java
URL:
http://svn.apache.org/viewvc/incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs.tests/src/test/java/org/apache/clerezza/triaxrs/blackbox/osgi/AbstractServiceRootResourceTest.java?rev=918006&r1=918005&r2=918006&view=diff
==============================================================================
---
incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs.tests/src/test/java/org/apache/clerezza/triaxrs/blackbox/osgi/AbstractServiceRootResourceTest.java
(original)
+++
incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs.tests/src/test/java/org/apache/clerezza/triaxrs/blackbox/osgi/AbstractServiceRootResourceTest.java
Tue Mar 2 12:49:20 2010
@@ -69,6 +69,8 @@
@Test
public void getHello() throws Exception {
URL serverURL = new URL("http://localhost:" + testHttpPort +
"/foo");
+ System.out.println("I AM HERE!");
+ Thread.sleep(40000);
HttpURLConnection connection = (HttpURLConnection)
serverURL.openConnection();
Assert.assertEquals("text/plain",
connection.getHeaderField("Content-Type"));
Reader reader = new
InputStreamReader(connection.getInputStream());
Modified:
incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs.tests/src/test/java/org/apache/clerezza/triaxrs/blackbox/osgi/FelixServiceRootResourceTest.java
URL:
http://svn.apache.org/viewvc/incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs.tests/src/test/java/org/apache/clerezza/triaxrs/blackbox/osgi/FelixServiceRootResourceTest.java?rev=918006&r1=918005&r2=918006&view=diff
==============================================================================
---
incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs.tests/src/test/java/org/apache/clerezza/triaxrs/blackbox/osgi/FelixServiceRootResourceTest.java
(original)
+++
incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs.tests/src/test/java/org/apache/clerezza/triaxrs/blackbox/osgi/FelixServiceRootResourceTest.java
Tue Mar 2 12:49:20 2010
@@ -50,11 +50,20 @@
/*dsProfile(),*/
configProfile(),
webProfile(),
+ profile("felix.webconsole"),
junitBundles(),
frameworks(
felix()),
systemProperty("org.osgi.service.http.port").value(
- Integer.toString(testHttpPort)));
+ Integer.toString(testHttpPort))
+ // this just adds all what you write here to
java vm argumenents of the (new) osgi process.
+
//,vmOption("-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5006"),
+ // this is necessary to let junit runner not
timout the remote process before attaching debugger
+ // setting timeout to 0 means wait as long as
the remote service comes available.
+ // starting with version 0.5.0 of PAx Exam this
is no longer required as by default the framework tests
+ // will not be triggered till the framework is
not started
+ //waitForFrameworkStartup()
+ );
}
Modified:
incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs.tests/src/test/java/org/apache/clerezza/triaxrs/blackbox/osgi/SimpleRootResource.java
URL:
http://svn.apache.org/viewvc/incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs.tests/src/test/java/org/apache/clerezza/triaxrs/blackbox/osgi/SimpleRootResource.java?rev=918006&r1=918005&r2=918006&view=diff
==============================================================================
---
incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs.tests/src/test/java/org/apache/clerezza/triaxrs/blackbox/osgi/SimpleRootResource.java
(original)
+++
incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs.tests/src/test/java/org/apache/clerezza/triaxrs/blackbox/osgi/SimpleRootResource.java
Tue Mar 2 12:49:20 2010
@@ -26,7 +26,7 @@
*
* @author reto
*/
-...@path("foo")
+...@path("/foo")
public class SimpleRootResource {
static final public String greeting = "hello";
Modified:
incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/pom.xml
URL:
http://svn.apache.org/viewvc/incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/pom.xml?rev=918006&r1=918005&r2=918006&view=diff
==============================================================================
---
incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/pom.xml
(original)
+++
incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/pom.xml
Tue Mar 2 12:49:20 2010
@@ -29,6 +29,10 @@
<artifactId>org.apache.clerezza.jaxrs.extensions</artifactId>
</dependency>
<dependency>
+ <groupId>org.apache.clerezza</groupId>
+ <artifactId>org.apache.clerezza.utils</artifactId>
+ </dependency>
+ <dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
Modified:
incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/main/java/org/apache/clerezza/triaxrs/JaxRsHandler.java
URL:
http://svn.apache.org/viewvc/incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/main/java/org/apache/clerezza/triaxrs/JaxRsHandler.java?rev=918006&r1=918005&r2=918006&view=diff
==============================================================================
---
incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/main/java/org/apache/clerezza/triaxrs/JaxRsHandler.java
(original)
+++
incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/main/java/org/apache/clerezza/triaxrs/JaxRsHandler.java
Tue Mar 2 12:49:20 2010
@@ -24,7 +24,6 @@
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.StringWriter;
-import java.io.UnsupportedEncodingException;
import java.lang.annotation.Annotation;
import java.nio.channels.Channels;
import java.nio.channels.ReadableByteChannel;
@@ -60,7 +59,6 @@
import org.apache.clerezza.triaxrs.providers.ProvidersImpl;
import org.apache.clerezza.triaxrs.util.MethodUtil;
import org.apache.clerezza.triaxrs.util.PathMatching;
-import org.apache.clerezza.triaxrs.util.TemplateEncoder;
import org.wymiwyg.wrhapi.Handler;
import org.wymiwyg.wrhapi.HandlerException;
import org.wymiwyg.wrhapi.HeaderName;
Modified:
incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/main/java/org/apache/clerezza/triaxrs/RootResourceExecutorImpl.java
URL:
http://svn.apache.org/viewvc/incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/main/java/org/apache/clerezza/triaxrs/RootResourceExecutorImpl.java?rev=918006&r1=918005&r2=918006&view=diff
==============================================================================
---
incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/main/java/org/apache/clerezza/triaxrs/RootResourceExecutorImpl.java
(original)
+++
incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/main/java/org/apache/clerezza/triaxrs/RootResourceExecutorImpl.java
Tue Mar 2 12:49:20 2010
@@ -18,17 +18,16 @@
*/
package org.apache.clerezza.triaxrs;
-import java.io.StringWriter;
import java.util.Iterator;
import org.apache.clerezza.jaxrs.extensions.ResourceMethodException;
import org.apache.clerezza.jaxrs.extensions.HttpRequest;
import org.apache.clerezza.jaxrs.extensions.MethodResponse;
import org.apache.clerezza.jaxrs.extensions.RootResourceExecutor;
-import java.io.UnsupportedEncodingException;
import java.lang.annotation.Annotation;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Type;
+import java.security.AccessControlException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
@@ -60,6 +59,7 @@
import org.apache.clerezza.triaxrs.util.PathMatching;
import org.apache.clerezza.triaxrs.util.TemplateEncoder;
import org.apache.clerezza.triaxrs.util.URITemplate;
+import org.apache.clerezza.utils.UriException;
import org.wymiwyg.wrhapi.HandlerException;
import org.wymiwyg.wrhapi.HeaderName;
@@ -546,6 +546,9 @@
throw new WebApplicationException(500);
} catch (InvocationTargetException ex) {
logger.error("Exception {}", ex);
+ if (ex.getCause() instanceof AccessControlException) {
+ throw (AccessControlException) ex.getCause();
+ }
throw new WebApplicationException(500);
}
}
@@ -589,7 +592,7 @@
private String templateUrlEncode(String value) {
try {
return TemplateEncoder.encode(value, "utf-8");
- } catch (UnsupportedEncodingException e) {
+ } catch (UriException e) {
throw new RuntimeException(e);
}
}
Modified:
incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/main/java/org/apache/clerezza/triaxrs/RootResources.java
URL:
http://svn.apache.org/viewvc/incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/main/java/org/apache/clerezza/triaxrs/RootResources.java?rev=918006&r1=918005&r2=918006&view=diff
==============================================================================
---
incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/main/java/org/apache/clerezza/triaxrs/RootResources.java
(original)
+++
incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/main/java/org/apache/clerezza/triaxrs/RootResources.java
Tue Mar 2 12:49:20 2010
@@ -16,131 +16,140 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.clerezza.triaxrs;
-
+package org.apache.clerezza.triaxrs;
+
import java.util.Iterator;
import java.util.SortedSet;
import java.util.TreeSet;
import org.apache.clerezza.triaxrs.util.PathMatching;
+import org.apache.clerezza.triaxrs.util.TemplateEncoder;
+import org.apache.clerezza.utils.UriException;
+import org.apache.clerezza.utils.UriUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.wymiwyg.wrhapi.HandlerException;
-
-/**
- * Manages a set of root-resources delivering a suitable root-resource given a
- * path.
- *
- * @author reto
- */
-public class RootResources {
-
- /**
- * @author mir
- *
- */
- public static class ResourceAndPathMatching {
-
- private Object rootResource;
- private PathMatching pathMatching;
-
- public ResourceAndPathMatching(Object rootResource,
- PathMatching pathMatching) {
- this.rootResource = rootResource;
- this.pathMatching = pathMatching;
- }
-
- public Object getRootResource() {
- return rootResource;
- }
-
- public PathMatching getPathMatching() {
- return pathMatching;
- }
-
- }
-
- private static ThreadLocal<String> requestUri = new
ThreadLocal<String>() {
- };
-
- public static String getCurrentRequestUri() {
- return requestUri.get();
- }
-
- final static private Logger logger = LoggerFactory
- .getLogger(RootResources.class);
-
- /**
- * we store the resource descriptors
- */
- SortedSet<RootResourceDescriptor> rootResourceDescriptors = new
TreeSet<RootResourceDescriptor>();
-
- /**
- * adds a {...@link RootResourceDescriptor}
- *
- * @param descriptor
- */
- public void add(RootResourceDescriptor descriptor) {
- // TODO Flag an error if the set includes more than one instance
- // of the same class.
- rootResourceDescriptors.add(descriptor);
- }
-
- /**
- * removes a {...@link RootResourceDescriptor}
- *
- * @param descriptor
- */
- public void remove(RootResourceDescriptor descriptor) {
- rootResourceDescriptors.remove(descriptor);
- }
-
- /**
- *
- * @return the number of available root resources
- */
- public int size() {
- return rootResourceDescriptors.size();
- }
-
- /**
- * Get the best matching root-resource for a path
- *
- * @param uriPath
- * @return the matching root-resource or null if no root resources
matches
- */
- public RootResourceDescriptor getDescriptor(String uriPath) {
- for (RootResourceDescriptor descriptor :
rootResourceDescriptors) {
-
- PathMatching pathMatching =
descriptor.getUriTemplate().match(
- uriPath);
- if (pathMatching != null) {
- return descriptor;
- }
- }
- return null;
- }
-
- ResourceAndPathMatching getResourceAndPathMatching(WebRequest request)
- throws HandlerException,
NoMatchingRootResourceException {
- String uriPath =
request.getWrhapiRequest().getRequestURI().getPath();
- requestUri.set(uriPath);
- PathMatching pathMatching = null;
- RootResourceDescriptor descriptor = null;
- Iterator<RootResourceDescriptor> descriptorIter =
rootResourceDescriptors
- .iterator();
- while (descriptorIter.hasNext()) {
- descriptor = descriptorIter.next();
- pathMatching =
descriptor.getUriTemplate().match(uriPath);
- if (pathMatching != null) {
- break;
- }
- }
-
- if (pathMatching == null) {
- throw new NoMatchingRootResourceException();
- }
- return new
ResourceAndPathMatching(descriptor.getInstance(request,
- pathMatching.getParameters()), pathMatching);
- }
-}
+
+/**
+ * Manages a set of root-resources delivering a suitable root-resource given a
+ * path.
+ *
+ * @author reto
+ */
+public class RootResources {
+
+ /**
+ * @author mir
+ *
+ */
+ public static class ResourceAndPathMatching {
+
+ private Object rootResource;
+ private PathMatching pathMatching;
+
+ public ResourceAndPathMatching(Object rootResource,
+ PathMatching pathMatching) {
+ this.rootResource = rootResource;
+ this.pathMatching = pathMatching;
+ }
+
+ public Object getRootResource() {
+ return rootResource;
+ }
+
+ public PathMatching getPathMatching() {
+ return pathMatching;
+ }
+
+ }
+
+ private static ThreadLocal<String> requestUri = new
ThreadLocal<String>() {
+ };
+
+ public static String getCurrentRequestUri() {
+ return requestUri.get();
+ }
+
+ final static private Logger logger = LoggerFactory
+ .getLogger(RootResources.class);
+
+ /**
+ * we store the resource descriptors
+ */
+ SortedSet<RootResourceDescriptor> rootResourceDescriptors = new
TreeSet<RootResourceDescriptor>();
+
+ /**
+ * adds a {...@link RootResourceDescriptor}
+ *
+ * @param descriptor
+ */
+ public void add(RootResourceDescriptor descriptor) {
+ // TODO Flag an error if the set includes more than one instance
+ // of the same class.
+ rootResourceDescriptors.add(descriptor);
+ }
+
+ /**
+ * removes a {...@link RootResourceDescriptor}
+ *
+ * @param descriptor
+ */
+ public void remove(RootResourceDescriptor descriptor) {
+ rootResourceDescriptors.remove(descriptor);
+ }
+
+ /**
+ *
+ * @return the number of available root resources
+ */
+ public int size() {
+ return rootResourceDescriptors.size();
+ }
+
+ /**
+ * Get the best matching root-resource for a path
+ *
+ * @param uriPath
+ * @return the matching root-resource or null if no root resources
matches
+ */
+ public RootResourceDescriptor getDescriptor(String uriPath) {
+ for (RootResourceDescriptor descriptor :
rootResourceDescriptors) {
+
+ PathMatching pathMatching =
descriptor.getUriTemplate().match(
+ uriPath);
+ if (pathMatching != null) {
+ return descriptor;
+ }
+ }
+ return null;
+ }
+
+ ResourceAndPathMatching getResourceAndPathMatching(WebRequest request)
+ throws HandlerException,
NoMatchingRootResourceException {
+ String uriPath;
+ try {
+ uriPath =
UriUtil.encodePartlyEncodedPath(request.getWrhapiRequest().getRequestURI().getPath(),
"UTF-8");
+ } catch (UriException ex) {
+ throw new RuntimeException(ex);
+ }
+ requestUri.set(uriPath);
+
+ PathMatching pathMatching = null;
+ RootResourceDescriptor descriptor = null;
+ Iterator<RootResourceDescriptor> descriptorIter =
rootResourceDescriptors
+ .iterator();
+ while (descriptorIter.hasNext()) {
+ descriptor = descriptorIter.next();
+ pathMatching =
descriptor.getUriTemplate().match(uriPath);
+ if (pathMatching != null) {
+ break;
+ }
+ }
+
+ if (pathMatching == null) {
+ throw new NoMatchingRootResourceException();
+ }
+ return new
ResourceAndPathMatching(descriptor.getInstance(request,
+ pathMatching.getParameters()), pathMatching);
+ }
+}
Modified:
incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/main/java/org/apache/clerezza/triaxrs/util/TemplateEncoder.java
URL:
http://svn.apache.org/viewvc/incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/main/java/org/apache/clerezza/triaxrs/util/TemplateEncoder.java?rev=918006&r1=918005&r2=918006&view=diff
==============================================================================
---
incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/main/java/org/apache/clerezza/triaxrs/util/TemplateEncoder.java
(original)
+++
incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/main/java/org/apache/clerezza/triaxrs/util/TemplateEncoder.java
Tue Mar 2 12:49:20 2010
@@ -1,126 +1,12 @@
package org.apache.clerezza.triaxrs.util;
-//copied and modified from java.net.URLEncoder
-
-/*
- * @(#)URLEncoder.java 1.32 06/04/22
- *
- * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
- * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
- */
-
-import java.io.CharArrayWriter;
-import java.io.UnsupportedEncodingException;
+import java.io.StringWriter;
import java.net.URLDecoder;
-import java.nio.charset.Charset;
-import java.nio.charset.IllegalCharsetNameException;
-import java.nio.charset.UnsupportedCharsetException;
-import java.util.BitSet;
+import org.apache.clerezza.utils.UriException;
+import org.apache.clerezza.utils.UriUtil;
-/**
- * Utility class for HTML form encoding. This class contains static methods for
- * converting a String to the <CODE>application/x-www-form-urlencoded</CODE>
- * MIME format. For more information about HTML form encoding, consult the HTML
- * <A HREF="http://www.w3.org/TR/html4/">specification</A>.
- *
- * <p>
- * When encoding a String, the following rules apply:
- *
- * <p>
- * <ul>
- * <li>The alphanumeric characters "<code>a</code>" through "
- * <code>z</code>", "<code>A</code>" through
"<code>Z</code>
- * " and "<code>0</code>" through "<code>9</code>"
- * remain the same.
- * <li>The special characters "<code>.</code>", "<code>-</code>
- * ", "<code>*</code>", and "<code>_</code>" remain
the
- * same.
- * <li>All other characters are unsafe and are first converted into one or more
- * bytes using some encoding scheme. Then each byte is represented by the
- * 3-character string "<code>%<i>xy</i></code>", where <i>xy</i> is
- * the two-digit hexadecimal representation of the byte. The recommended
- * encoding scheme to use is UTF-8. However, for compatibility reasons, if an
- * encoding is not specified, then the default encoding of the platform is
used.
- * </ul>
- *
- * <p>
- * For example using UTF-8 as the encoding scheme the string "The string
- * ü@foo-bar" would get converted to
- * "The+string+%C3%BC%40foo-bar" because in UTF-8 the character
ü
- * is encoded as two bytes C3 (hex) and BC (hex), and the character @ is
encoded
- * as one byte 40 (hex).
- *
- * @author Herb Jellinek
- * @version 1.32, 04/22/06
- * @since JDK1.0
- */
public class TemplateEncoder {
- static BitSet dontNeedEncoding;
- static final int caseDiff = ('a' - 'A');
- static String dfltEncName = "utf-8";
-
- static {
-
- /*
- * The list of characters that are not encoded has been
determined as
- * follows:
- *
- * RFC 2396 states: ----- Data characters that are allowed in a
URI but
- * do not have a reserved purpose are called unreserved. These
include
- * upper and lower case letters, decimal digits, and a limited
set of
- * punctuation marks and symbols.
- *
- * unreserved = alphanum | mark
- *
- * mark = "-" | "_" | "." | "!" | "~" | "*" | "'" | "(" | ")"
- *
- * Unreserved characters can be escaped without changing the
semantics
- * of the URI, but this should not be done unless the URI is
being used
- * in a context that does not allow the unescaped character to
appear.
- * -----
- *
- * It appears that both Netscape and Internet Explorer escape
all
- * special characters from this list with the exception of "-",
"_",
- * ".", "*". While it is not clear why they are escaping the
other
- * characters, perhaps it is safest to assume that there might
be
- * contexts in which the others are unsafe if not escaped.
Therefore, we
- * will use the same list. It is also noteworthy that this is
consistent
- * with O'Reilly's "HTML: The Definitive Guide" (page 164).
- *
- * As a last note, Intenet Explorer does not encode the "@"
character
- * which is clearly not unreserved according to the RFC. We are
being
- * consistent with the RFC in this matter, as is Netscape.
- */
-
- dontNeedEncoding = new BitSet(256);
- int i;
- for (i = 'a'; i <= 'z'; i++) {
- dontNeedEncoding.set(i);
- }
- for (i = 'A'; i <= 'Z'; i++) {
- dontNeedEncoding.set(i);
- }
- for (i = '0'; i <= '9'; i++) {
- dontNeedEncoding.set(i);
- }
-
- dontNeedEncoding.set('-');
- dontNeedEncoding.set('_');
- dontNeedEncoding.set('.');
- dontNeedEncoding.set('*');
- dontNeedEncoding.set('{');
- dontNeedEncoding.set('}');
- dontNeedEncoding.set('/');
- /*
- *
https://jsr311.dev.java.net/nonav/releases/0.10/javax/ws/rs/Path.html:
- * Note that percent encoded values are allowed in the literal
part of
- * the value, an implementation will recognize such values and
will not
- * double encode the '%' character.
- */
- dontNeedEncoding.set('%');
-
- }
-
+
/**
* You can't call the constructor.
*/
@@ -128,31 +14,6 @@
}
/**
- * Translates a string into <code>x-www-form-urlencoded</code> format.
This
- * method uses the platform's default encoding as the encoding scheme to
- * obtain the bytes for unsafe characters.
- *
- * @param s
- * <code>String</code> to be translated.
- * @deprecated The resulting string may vary depending on the platform's
- * default encoding. Instead, use the encode(String,String)
- * method to specify the encoding.
- * @return the translated <code>String</code>.
- */
- public static String encode(String s) {
-
- String str = null;
-
- try {
- str = encode(s, dfltEncName);
- } catch (UnsupportedEncodingException e) {
- // The system should always have the platform default
- }
-
- return str;
- }
-
- /**
* Translates a string into
<code>application/x-www-form-urlencoded</code>
* format using a specific encoding scheme. This method uses the
supplied
* encoding scheme to obtain the bytes for unsafe characters.
@@ -163,7 +24,7 @@
* UTF-8 should be used. Not doing so may introduce
* incompatibilites.</em>
*
- * @param s
+ * @param pathTemplate
* <code>String</code> to be translated.
* @param enc
* The name of a supported <a
@@ -175,111 +36,25 @@
* @see URLDecoder#decode(java.lang.String, java.lang.String)
* @since 1.4
*/
- public static String encode(String s, String enc)
- throws UnsupportedEncodingException {
-
- boolean needToChange = false;
- StringBuffer out = new StringBuffer(s.length());
- Charset charset;
- CharArrayWriter charArrayWriter = new CharArrayWriter();
-
- if (enc == null)
- throw new NullPointerException("charsetName");
-
- try {
- charset = Charset.forName(enc);
- } catch (IllegalCharsetNameException e) {
- throw new UnsupportedEncodingException(enc);
- } catch (UnsupportedCharsetException e) {
- throw new UnsupportedEncodingException(enc);
- }
- boolean inVariableName = false;
- for (int i = 0; i < s.length();) {
- int c = (int) s.charAt(i);
- if (c == '{') {
- out.append((char) c);
- inVariableName = true;
- i++;
- continue;
+ public static String encode(String pathTemplate, String enc)
+ throws UriException {
+ StringWriter sw = new StringWriter();
+ int index = 0;
+ while(true) {
+ int openCurlyIndex = pathTemplate.indexOf('{', index);
+ if (openCurlyIndex == -1) {
+ break;
}
- if (inVariableName) {
- out.append((char) c);
- i++;
- if (c == '}') {
- inVariableName = false;
- }
- continue;
- }
- // System.out.println("Examining character: " + c);
- if (dontNeedEncoding.get(c)) {
- if (c == ' ') {
- c = '+';
- needToChange = true;
- }
- // System.out.println("Storing: " + c);
- out.append((char) c);
- i++;
- } else {
- // convert to external encoding before hex
conversion
- do {
- charArrayWriter.write(c);
- /*
- * If this character represents the
start of a Unicode
- * surrogate pair, then pass in two
characters. It's not
- * clear what should be done if a bytes
reserved in the
- * surrogate pairs range occurs outside
of a legal surrogate
- * pair. For now, just treat it as if
it were any other
- * character.
- */
- if (c >= 0xD800 && c <= 0xDBFF) {
- /*
- *
System.out.println(Integer.toHexString(c) +
- * " is high surrogate");
- */
- if ((i + 1) < s.length()) {
- int d = (int)
s.charAt(i + 1);
- /*
- *
System.out.println("\tExamining " +
- *
Integer.toHexString(d));
- */
- if (d >= 0xDC00 && d <=
0xDFFF) {
- /*
- *
System.out.println("\t" +
- *
Integer.toHexString(d) +
- * " is low
surrogate");
- */
-
charArrayWriter.write(d);
- i++;
- }
- }
- }
- i++;
- } while (i < s.length()
- && !dontNeedEncoding.get((c =
(int) s.charAt(i))));
-
- charArrayWriter.flush();
- String str = new
String(charArrayWriter.toCharArray());
- byte[] ba = str.getBytes(charset);
- for (int j = 0; j < ba.length; j++) {
- out.append('%');
- char ch = Character.forDigit((ba[j] >>
4) & 0xF, 16);
- // converting to use uppercase letter
as part of
- // the hex value if ch is a letter.
- if (Character.isLetter(ch)) {
- ch -= caseDiff;
- }
- out.append(ch);
- ch = Character.forDigit(ba[j] & 0xF,
16);
- if (Character.isLetter(ch)) {
- ch -= caseDiff;
- }
- out.append(ch);
- }
- charArrayWriter.reset();
- needToChange = true;
+ int closeCurlyIndex = pathTemplate.indexOf('}',
openCurlyIndex);
+ if (closeCurlyIndex == -1) {
+ break;
}
+
sw.append(UriUtil.encodePartlyEncodedPath(pathTemplate.substring(index,
openCurlyIndex), enc));
+ sw.append(pathTemplate.substring(openCurlyIndex,
closeCurlyIndex + 1));
+ index = closeCurlyIndex + 1;
}
-
- return (needToChange ? out.toString() : s);
+
sw.append(UriUtil.encodePartlyEncodedPath(pathTemplate.substring(index,
pathTemplate.length()),enc));
+ return sw.toString();
}
+
}
Modified:
incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/main/java/org/apache/clerezza/triaxrs/util/URITemplate.java
URL:
http://svn.apache.org/viewvc/incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/main/java/org/apache/clerezza/triaxrs/util/URITemplate.java?rev=918006&r1=918005&r2=918006&view=diff
==============================================================================
---
incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/main/java/org/apache/clerezza/triaxrs/util/URITemplate.java
(original)
+++
incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/main/java/org/apache/clerezza/triaxrs/util/URITemplate.java
Tue Mar 2 12:49:20 2010
@@ -21,13 +21,13 @@
import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;
-import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import org.apache.clerezza.utils.UriException;
public class URITemplate implements Comparable<URITemplate> {
@@ -70,7 +70,7 @@
public URITemplate(String rawTemplateString) {
try {
rawTemplateString =
TemplateEncoder.encode(rawTemplateString, "UTF-8");
- } catch (UnsupportedEncodingException ex) {
+ } catch (UriException ex) {
throw new RuntimeException(ex);
}
if ((rawTemplateString.length() > 0) &&
(rawTemplateString.charAt(0) == '/')) {
Modified:
incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/test/java/org/apache/clerezza/triaxrs/TestTemplate.java
URL:
http://svn.apache.org/viewvc/incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/test/java/org/apache/clerezza/triaxrs/TestTemplate.java?rev=918006&r1=918005&r2=918006&view=diff
==============================================================================
---
incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/test/java/org/apache/clerezza/triaxrs/TestTemplate.java
(original)
+++
incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/test/java/org/apache/clerezza/triaxrs/TestTemplate.java
Tue Mar 2 12:49:20 2010
@@ -23,7 +23,6 @@
import org.junit.Before;
import org.junit.Test;
-import org.apache.clerezza.triaxrs.JaxRsHandler;
import org.apache.clerezza.triaxrs.delegate.RuntimeDelegateImpl;
import org.apache.clerezza.triaxrs.mock.RequestImpl;
import org.apache.clerezza.triaxrs.mock.RequestURIImpl;
Modified:
incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/test/java/org/apache/clerezza/triaxrs/blackbox/FormParamTest.java
URL:
http://svn.apache.org/viewvc/incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/test/java/org/apache/clerezza/triaxrs/blackbox/FormParamTest.java?rev=918006&r1=918005&r2=918006&view=diff
==============================================================================
---
incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/test/java/org/apache/clerezza/triaxrs/blackbox/FormParamTest.java
(original)
+++
incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/test/java/org/apache/clerezza/triaxrs/blackbox/FormParamTest.java
Tue Mar 2 12:49:20 2010
@@ -25,7 +25,6 @@
import java.nio.channels.Channels;
import java.nio.channels.WritableByteChannel;
-import javax.ws.rs.DefaultValue;
import javax.ws.rs.FormParam;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
Modified:
incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/test/java/org/apache/clerezza/triaxrs/blackbox/ResourcePathTest.java
URL:
http://svn.apache.org/viewvc/incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/test/java/org/apache/clerezza/triaxrs/blackbox/ResourcePathTest.java?rev=918006&r1=918005&r2=918006&view=diff
==============================================================================
---
incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/test/java/org/apache/clerezza/triaxrs/blackbox/ResourcePathTest.java
(original)
+++
incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/test/java/org/apache/clerezza/triaxrs/blackbox/ResourcePathTest.java
Tue Mar 2 12:49:20 2010
@@ -75,6 +75,15 @@
}
}
+ @Path("test+resource")
+ public static class MyResource4 {
+
+ @GET
+ public void handleGet() {
+ methodInvokedForGet = true;
+ }
+ }
+
@Before
public void reset() {
methodInvokedForGet = false;
@@ -105,6 +114,18 @@
}
@Test
+ public void requestOnResourcePathContainingPlusTest() throws Exception {
+ JaxRsHandler handler =
HandlerCreator.getHandler(MyResource4.class);
+ RequestImpl requestMock = new RequestImpl();
+ RequestURIImpl requestUri = new RequestURIImpl();
+ requestUri.setPath("/test+resource");
+ requestMock.setRequestURI(requestUri);
+ requestMock.setMethod(Method.GET);
+ handler.handle(requestMock, new ResponseImpl());
+ assertTrue(methodInvokedForGet);
+ }
+
+ @Test
public void requestOnResourcePathContainingSpaceTest() throws Exception
{
JaxRsHandler handler =
HandlerCreator.getHandler(MyResource3.class);
RequestImpl requestMock = new RequestImpl();
Copied:
incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/test/java/org/apache/clerezza/triaxrs/util/TemplateEncoderTest.java
(from r915817,
incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/test/java/org/apache/clerezza/triaxrs/util/TestTemplateEncoder.java)
URL:
http://svn.apache.org/viewvc/incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/test/java/org/apache/clerezza/triaxrs/util/TemplateEncoderTest.java?p2=incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/test/java/org/apache/clerezza/triaxrs/util/TemplateEncoderTest.java&p1=incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/test/java/org/apache/clerezza/triaxrs/util/TestTemplateEncoder.java&r1=915817&r2=918006&rev=918006&view=diff
==============================================================================
---
incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/test/java/org/apache/clerezza/triaxrs/util/TestTemplateEncoder.java
(original)
+++
incubator/clerezza/issues/CLEREZZA-129/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/test/java/org/apache/clerezza/triaxrs/util/TemplateEncoderTest.java
Tue Mar 2 12:49:20 2010
@@ -22,12 +22,13 @@
import org.junit.Test;
-public class TestTemplateEncoder {
+public class TemplateEncoderTest {
@Test
public void simpleEncoding() throws Exception {
- String s = "/föö/{blüü}/blä";
+ String s = "/föö/{blüü}/blä{euo}+{";
String encoded = TemplateEncoder.encode(s, "utf-8");
- Assert.assertTrue(encoded.indexOf("{blüü}") != -1);
+ System.out.println(encoded);
+
Assert.assertEquals("/f%C3%B6%C3%B6/{blüü}/bl%C3%A4{euo}%2B%7B", encoded);
}
@Test
@@ -36,4 +37,11 @@
String encoded = TemplateEncoder.encode(s, "utf-8");
Assert.assertEquals("/foo%20bar", encoded);
}
+
+ @Test
+ public void containsAlreadyEncodedCharsTest() throws Exception {
+ String s = "/++/%20 %20/äöü%GG";
+ String encoded = TemplateEncoder.encode(s, "utf-8");
+
Assert.assertEquals("/%2B%2B/%20%20%20/%C3%A4%C3%B6%C3%BC%25GG", encoded);
+ }
}