Author: mrdon
Date: Fri Jun 20 06:48:18 2008
New Revision: 669895

URL: http://svn.apache.org/viewvc?rev=669895&view=rev
Log:
Ensuring that the mapper sets the namespace to / when available and no other 
namespace is found
WW-2461

Modified:
    
struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapper.java
    
struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapperTest.java

Modified: 
struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapper.java
URL: 
http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapper.java?rev=669895&r1=669894&r2=669895&view=diff
==============================================================================
--- 
struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapper.java
 (original)
+++ 
struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapper.java
 Fri Jun 20 06:48:18 2008
@@ -400,18 +400,26 @@
             Configuration config = configManager.getConfiguration();
             String prefix = uri.substring(0, lastSlash);
             namespace = "";
+            boolean rootAvailable = false;
             // Find the longest matching namespace, defaulting to the default
-            for (Iterator i = config.getPackageConfigs().values().iterator(); i
-                    .hasNext();) {
-                String ns = ((PackageConfig) i.next()).getNamespace();
+            for (Object cfg : config.getPackageConfigs().values()) {
+                String ns = ((PackageConfig) cfg).getNamespace();
                 if (ns != null && prefix.startsWith(ns) && (prefix.length() == 
ns.length() || prefix.charAt(ns.length()) == '/')) {
                     if (ns.length() > namespace.length()) {
                         namespace = ns;
                     }
                 }
+                if ("/".equals(ns)) {
+                    rootAvailable = true;
+                }
             }
 
             name = uri.substring(namespace.length() + 1);
+
+            // Still none found, use root namespace if found
+            if (rootAvailable && "".equals(namespace)) {
+                namespace = "/";
+            }
         }
 
         if (!allowSlashesInActionNames && name != null) {

Modified: 
struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapperTest.java
URL: 
http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapperTest.java?rev=669895&r1=669894&r2=669895&view=diff
==============================================================================
--- 
struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapperTest.java
 (original)
+++ 
struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapperTest.java
 Fri Jun 20 06:48:18 2008
@@ -116,7 +116,7 @@
         assertNull(mapping.getMethod());
     }
 
-    public void testGetMappingWithSlashedNameAtRoot() throws Exception {
+    public void testGetMappingWithSlashedNameAtRootButNoSlashPackage() throws 
Exception {
 
         req.setupGetRequestURI("/foo/actionName.action");
         req.setupGetServletPath("/foo/actionName.action");
@@ -132,6 +132,37 @@
         assertNull(mapping.getMethod());
     }
 
+    public void testGetMappingWithSlashedNameAtRoot() throws Exception {
+        config = new DefaultConfiguration();
+        PackageConfig pkg = new PackageConfig.Builder("myns")
+            .namespace("/my/namespace").build();
+        PackageConfig pkg2 = new 
PackageConfig.Builder("my").namespace("/my").build();
+        PackageConfig pkg3 = new 
PackageConfig.Builder("root").namespace("/").build();
+        config.addPackageConfig("mvns", pkg);
+        config.addPackageConfig("my", pkg2);
+        config.addPackageConfig("root", pkg3);
+        configManager = new ConfigurationManager() {
+            public Configuration getConfiguration() {
+                return config;
+            }
+        };
+
+        req.setupGetRequestURI("/foo/actionName.action");
+        req.setupGetServletPath("/foo/actionName.action");
+        req.setupGetAttribute(null);
+        req.addExpectedGetAttributeName("javax.servlet.include.servlet_path");
+
+        DefaultActionMapper mapper = new DefaultActionMapper();
+        mapper.setSlashesInActionNames("true");
+        ActionMapping mapping = mapper.getMapping(req, configManager);
+
+        assertEquals("/", mapping.getNamespace());
+        assertEquals("foo/actionName", mapping.getName());
+        assertNull(mapping.getMethod());
+    }
+
+
+
     public void testGetMappingWithNamespaceSlash() throws Exception {
 
         req.setupGetRequestURI("/my.hh/abc.action");


Reply via email to