You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by mr...@apache.org on 2007/09/08 12:56:11 UTC

svn commit: r573816 - in /struts/struts2/trunk/plugins/codebehind/src: main/java/org/apache/struts2/codebehind/CodebehindUnknownHandler.java test/java/org/apache/struts2/codebehind/CodebehindUnknownHandlerTest.java

Author: mrdon
Date: Sat Sep  8 03:56:10 2007
New Revision: 573816

URL: http://svn.apache.org/viewvc?rev=573816&view=rev
Log:
Adding ability to load templates from classpath, in addition to web context
WW-2146

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=573816&r1=573815&r2=573816&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 Sat Sep  8 03:56:10 2007
@@ -21,6 +21,7 @@
 package org.apache.struts2.codebehind;
 
 import java.net.MalformedURLException;
+import java.net.URL;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
@@ -32,6 +33,7 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.struts2.util.ClassLoaderUtils;
 
 import com.opensymphony.xwork2.Action;
 import com.opensymphony.xwork2.ActionContext;
@@ -107,7 +109,7 @@
             }
             String path = string(pathPrefix, actionName, "." , ext);
             try {
-                if (servletContext.getResource(path) != null) {
+                if (locateTemplate(path) != null) {
                     actionConfig = buildActionConfig(path, namespace, actionName, resultsByExtension.get(ext));
                     break;
                 }
@@ -148,7 +150,7 @@
             }
             String path = string(pathPrefix, actionName, "-", resultCode, "." , ext);
             try {
-                if (servletContext.getResource(path) != null) {
+                if (locateTemplate(path) != null) {
                     result = buildResult(path, resultCode, resultsByExtension.get(ext), actionContext);
                     break;
                 }
@@ -158,7 +160,7 @@
             
             path = string(pathPrefix, actionName, "." , ext);
             try {
-                if (servletContext.getResource(path) != null) {
+                if (locateTemplate(path) != null) {
                     result = buildResult(path, resultCode, resultsByExtension.get(ext), actionContext);
                     break;
                 }
@@ -209,6 +211,22 @@
         }
         return prefix + ns;
     }
+    
+    URL locateTemplate(String path) throws MalformedURLException {
+        URL template = servletContext.getResource(path);
+        if (template != null) {
+            if (LOG.isDebugEnabled()) {
+                LOG.debug("Loaded template '" + path + "' from servlet context.");
+            }
+        } else {
+            template = ClassLoaderUtils.getResource(path, getClass());
+            if (template != null && LOG.isDebugEnabled()) {
+                LOG.debug("Loaded template '" + path + "' from class path.");                
+            }
+        }
+        return template;
+    }
+
 
     /**
      * Not used

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=573816&r1=573815&r2=573816&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 Sat Sep  8 03:56:10 2007
@@ -20,6 +20,8 @@
  */
 package org.apache.struts2.codebehind;
 
+import java.net.MalformedURLException;
+import java.net.URL;
 import java.util.HashMap;
 
 import javax.servlet.ServletContext;
@@ -28,6 +30,7 @@
 import org.apache.struts2.config.NullResult;
 import org.apache.struts2.dispatcher.ServletDispatcherResult;
 
+import com.mockobjects.dynamic.C;
 import com.mockobjects.dynamic.Mock;
 import com.opensymphony.xwork2.ActionContext;
 import com.opensymphony.xwork2.ActionInvocation;
@@ -71,6 +74,22 @@
         assertEquals("/foo/", handler.determinePath("/", "/foo"));
         assertEquals("/foo/", handler.determinePath("/", "/foo/"));
         assertEquals("/foo/", handler.determinePath("/", "foo"));
+    }
+    
+    public void testLocateTemplate() throws MalformedURLException {
+        URL url = new URL("file:/foo.xml");
+        mockServletContext.expectAndReturn("getResource", C.args(C.eq("/foo.xml")), url);
+        assertEquals(url, handler.locateTemplate("/foo.xml"));
+        mockServletContext.verify();
+        
+    }
+    
+    public void testLocateTemplateFromClasspath() throws MalformedURLException {
+        mockServletContext.expectAndReturn("getResource", C.args(C.eq("struts-plugin.xml")), null);
+        URL url = handler.locateTemplate("struts-plugin.xml");
+        assertNotNull(url);
+        assertTrue(url.toString().endsWith("struts-plugin.xml"));
+        mockServletContext.verify();
     }
     
     public static class SomeResult implements Result {