Modified:
trunk/servlet/src/com/google/inject/servlet/ServletDefinition.java
trunk/servlet/src/com/google/inject/servlet/UriPatternMatcher.java
trunk/servlet/src/com/google/inject/servlet/UriPatternType.java
trunk/servlet/test/com/google/inject/servlet/ServletDefinitionPathsTest.java
Log:
Integrated David You's patch for reading pathInfo better from regex mapped
servlets. Tests passing.
Modified: trunk/servlet/src/com/google/inject/servlet/ServletDefinition.java
==============================================================================
--- trunk/servlet/src/com/google/inject/servlet/ServletDefinition.java
(original)
+++ trunk/servlet/src/com/google/inject/servlet/ServletDefinition.java Sun
Apr 12 03:34:07 2009
@@ -200,11 +200,12 @@
// Memoizer pattern.
private String computePath() {
if (!pathComputed) {
- path = patternMatcher.extractPath(pattern);
+ String servletPath = super.getServletPath();
+ path = patternMatcher.extractPath(servletPath);
pathComputed = true;
if (null == path) {
- path = super.getServletPath();
+ path = servletPath;
}
}
@@ -222,4 +223,4 @@
String getPattern() {
return pattern;
}
-}
\ No newline at end of file
+}
Modified: trunk/servlet/src/com/google/inject/servlet/UriPatternMatcher.java
==============================================================================
--- trunk/servlet/src/com/google/inject/servlet/UriPatternMatcher.java
(original)
+++ trunk/servlet/src/com/google/inject/servlet/UriPatternMatcher.java Sun
Apr 12 03:34:07 2009
@@ -30,7 +30,7 @@
boolean matches(String uri);
/**
- * @param pattern A String containing some pattern that this service can
match against.
+ * @param pattern The Path that this service pattern can match against.
* @return Returns a canonical servlet path from this pattern. For
instance, if the pattern is
* {@code /home/*} then the path extracted will be {@code
/home}. Each pattern matcher
* implementation must decide and publish what a canonical path
represents.
Modified: trunk/servlet/src/com/google/inject/servlet/UriPatternType.java
==============================================================================
--- trunk/servlet/src/com/google/inject/servlet/UriPatternType.java
(original)
+++ trunk/servlet/src/com/google/inject/servlet/UriPatternType.java Sun Apr
12 03:34:07 2009
@@ -15,6 +15,7 @@
*/
package com.google.inject.servlet;
+import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
@@ -73,11 +74,11 @@
return pattern.equals(uri);
}
- public String extractPath(String pattern) {
- if (pattern.startsWith("*")) {
+ public String extractPath(String path) {
+ if (patternKind == Kind.PREFIX) {
return null;
- } else if (pattern.endsWith("*")) {
- String extract = pattern.substring(0, pattern.length() - 1);
+ } else if (patternKind == Kind.SUFFIX) {
+ String extract = pattern;
//trim the trailing '/'
if (extract.endsWith("/")) {
@@ -88,7 +89,7 @@
}
//else treat as literal
- return pattern;
+ return path;
}
}
@@ -109,7 +110,11 @@
return null != uri && this.pattern.matcher(uri).matches();
}
- public String extractPath(String pattern) {
+ public String extractPath(String path) {
+ Matcher matcher = pattern.matcher(path);
+ if (matcher.matches() && matcher.groupCount() >= 1) {
+ return path.substring(0, matcher.start(1));
+ }
return null;
}
}
Modified:
trunk/servlet/test/com/google/inject/servlet/ServletDefinitionPathsTest.java
==============================================================================
---
trunk/servlet/test/com/google/inject/servlet/ServletDefinitionPathsTest.java
(original)
+++
trunk/servlet/test/com/google/inject/servlet/ServletDefinitionPathsTest.java
Sun Apr 12 03:34:07 2009
@@ -199,11 +199,15 @@
pathInfoWithRegexMatching("/path/thing", "/path", "/thing/(.)*",
null, "/thing");
// *.xx style mapping
-
pathInfoWithRegexMatching("/path/thing.thing", "/path", "(.)*\\.thing",
null, "/thing.thing");
- pathInfoWithRegexMatching("/path///h.thing", "/path", "(.)*\\.thing",
null, "/h.thing");
-
pathInfoWithRegexMatching("/path///...//h.thing", "/path", "(.)*\\.thing",
null,
+ pathInfoWithRegexMatching("/path/thing.thing", "/path", ".*\\.thing",
null, "/thing.thing");
+ pathInfoWithRegexMatching("/path///h.thing", "/path", ".*\\.thing",
null, "/h.thing");
+
pathInfoWithRegexMatching("/path///...//h.thing", "/path", ".*\\.thing",
null,
"/.../h.thing");
- pathInfoWithRegexMatching("/path/my/h.thing", "/path", "(.)*\\.thing",
null, "/my/h.thing");
+ pathInfoWithRegexMatching("/path/my/h.thing", "/path", ".*\\.thing",
null, "/my/h.thing");
+
+ // path
+
pathInfoWithRegexMatching("/path/test.com/com.test.MyServletModule", "", "/path/[^/]+/(.*)",
+ "com.test.MyServletModule", "/path/test.com/com.test.MyServletModule");
}
public final void pathInfoWithRegexMatching(final String requestUri,
final String contextPath,