You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by je...@apache.org on 2008/07/01 05:48:04 UTC
svn commit: r672982 - in /struts/struts2/trunk/plugins/codebehind/src:
main/java/org/apache/struts2/codebehind/CodebehindUnknownHandler.java
test/java/org/apache/struts2/codebehind/CodebehindUnknownHandlerTest.java
Author: jeromy
Date: Mon Jun 30 20:48:03 2008
New Revision: 672982
URL: http://svn.apache.org/viewvc?rev=672982&view=rev
Log:
WW-2701 Improved CodebehindUnknownHandler use of classpath leading slash & path concatenation
Modified:
struts/struts2/trunk/plugins/codebehind/src/main/java/org/apache/struts2/codebehind/CodebehindUnknownHandler.java
struts/struts2/trunk/plugins/codebehind/src/test/java/org/apache/struts2/codebehind/CodebehindUnknownHandlerTest.java
Modified: struts/struts2/trunk/plugins/codebehind/src/main/java/org/apache/struts2/codebehind/CodebehindUnknownHandler.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/codebehind/src/main/java/org/apache/struts2/codebehind/CodebehindUnknownHandler.java?rev=672982&r1=672981&r2=672982&view=diff
==============================================================================
--- struts/struts2/trunk/plugins/codebehind/src/main/java/org/apache/struts2/codebehind/CodebehindUnknownHandler.java (original)
+++ struts/struts2/trunk/plugins/codebehind/src/main/java/org/apache/struts2/codebehind/CodebehindUnknownHandler.java Mon Jun 30 20:48:03 2008
@@ -179,22 +179,73 @@
}
return sb.toString();
}
-
- protected String determinePath(String prefix, String ns) {
- if (ns == null || "/".equals(ns)) {
- ns = "";
+
+ protected String joinPaths(boolean leadingSlash, boolean trailingSlash, String... parts) {
+ StringBuilder sb = new StringBuilder();
+ if (leadingSlash) {
+ sb.append("/");
}
- if (ns.length() > 0) {
- if (ns.charAt(0) == '/') {
- ns = ns.substring(1);
+ for (String part : parts) {
+ if (sb.length() > 0 && sb.charAt(sb.length()-1) != '/') {
+ sb.append("/");
}
- if (ns.charAt(ns.length() - 1) != '/') {
- ns += "/";
+ sb.append(stripSlashes(part));
+ }
+ if (trailingSlash) {
+ if (sb.length() > 0 && sb.charAt(sb.length()-1) != '/') {
+ sb.append("/");
}
}
- return prefix + ns;
+ return sb.toString();
+ }
+
+ protected String determinePath(String prefix, String ns) {
+ return joinPaths(true, true, prefix, ns);
+ }
+
+ protected String stripLeadingSlash(String path) {
+ String result;
+ if (path != null) {
+ if (path.length() > 0) {
+ if (path.charAt(0) == '/') {
+ result = path.substring(1);
+ } else {
+ result = path;
+ }
+ } else {
+ result = path;
+ }
+ } else {
+ result = "";
+ }
+
+ return result;
}
-
+
+ protected String stripTrailingSlash(String path) {
+ String result;
+
+ if (path != null) {
+ if (path.length() > 0) {
+ if (path.charAt(path.length() - 1) == '/') {
+ result = path.substring(0, path.length()-1);
+ } else {
+ result = path;
+ }
+ } else {
+ result = path;
+ }
+ } else {
+ result = "";
+ }
+
+ return result;
+ }
+
+ protected String stripSlashes(String path) {
+ return stripLeadingSlash(stripTrailingSlash(path));
+ }
+
URL locateTemplate(String path) throws MalformedURLException {
URL template = servletContext.getResource(path);
if (template != null) {
@@ -202,9 +253,9 @@
LOG.debug("Loaded template '" + path + "' from servlet context.");
}
} else {
- template = ClassLoaderUtils.getResource(path, getClass());
+ template = ClassLoaderUtils.getResource(stripLeadingSlash(path), getClass());
if (template != null && LOG.isDebugEnabled()) {
- LOG.debug("Loaded template '" + path + "' from class path.");
+ LOG.debug("Loaded template '" + stripLeadingSlash(path) + "' from class path.");
}
}
return template;
Modified: struts/struts2/trunk/plugins/codebehind/src/test/java/org/apache/struts2/codebehind/CodebehindUnknownHandlerTest.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/codebehind/src/test/java/org/apache/struts2/codebehind/CodebehindUnknownHandlerTest.java?rev=672982&r1=672981&r2=672982&view=diff
==============================================================================
--- struts/struts2/trunk/plugins/codebehind/src/test/java/org/apache/struts2/codebehind/CodebehindUnknownHandlerTest.java (original)
+++ struts/struts2/trunk/plugins/codebehind/src/test/java/org/apache/struts2/codebehind/CodebehindUnknownHandlerTest.java Mon Jun 30 20:48:03 2008
@@ -76,6 +76,9 @@
assertEquals("/foo/", handler.determinePath("/", "/foo"));
assertEquals("/foo/", handler.determinePath("/", "/foo/"));
assertEquals("/foo/", handler.determinePath("/", "foo"));
+ assertEquals("/", handler.determinePath("", ""));
+ assertEquals("/foo/", handler.determinePath("", "foo"));
+ assertEquals("/foo/", handler.determinePath("", "/foo/"));
}
public void testLocateTemplate() throws MalformedURLException {