Author: mrdon Date: Sat Sep 8 02:16:43 2007 New Revision: 573805 URL: http://svn.apache.org/viewvc?rev=573805&view=rev Log: Fix handling of empty extension during url creation WW-2163
Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/StrutsResultSupport.java 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/StrutsResultSupport.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/StrutsResultSupport.java?rev=573805&r1=573804&r2=573805&view=diff ============================================================================== --- struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/StrutsResultSupport.java (original) +++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/StrutsResultSupport.java Sat Sep 8 02:16:43 2007 @@ -137,6 +137,13 @@ public void setLocation(String location) { this.location = location; } + + /** + * Gets the location it was created with, mainly for testing + */ + public String getLocation() { + return location; + } /** * Returns the last parsed and encoded location value 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=573805&r1=573804&r2=573805&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 Sat Sep 8 02:16:43 2007 @@ -228,7 +228,7 @@ ServletRedirectResult redirect = new ServletRedirectResult(); container.inject(redirect); String extension = getDefaultExtension(); - if (extension != null) { + if (extension != null && extension.length() > 0) { location += "." + extension; } redirect.setLocation(location); @@ -499,8 +499,11 @@ String extension = getDefaultExtension(); if (extension != null) { - if (uri.indexOf('.' + extension) == -1) { - uri.append(".").append(extension); + + if (extension.length() == 0 || (extension.length() > 0 && uri.indexOf('.' + extension) == -1)) { + if (extension.length() > 0) { + uri.append(".").append(extension); + } if (params.length() > 0) { uri.append(params); } 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=573805&r1=573804&r2=573805&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 Sat Sep 8 02:16:43 2007 @@ -27,6 +27,7 @@ import org.apache.struts2.StrutsTestCase; import org.apache.struts2.ServletActionContext; import org.apache.struts2.dispatcher.ServletRedirectResult; +import org.apache.struts2.dispatcher.StrutsResultSupport; import org.apache.struts2.views.jsp.StrutsMockHttpServletRequest; import org.apache.struts2.views.jsp.StrutsMockHttpServletResponse; @@ -376,9 +377,34 @@ ActionMapping actionMapping = defaultActionMapper.getMapping(request, configManager); - Result result = actionMapping.getResult(); + StrutsResultSupport result = (StrutsResultSupport) actionMapping.getResult(); assertNotNull(result); assertTrue(result instanceof ServletRedirectResult); + + assertEquals("myAction.action", result.getLocation()); + + // TODO: need to test location but there's noaccess to the property/method, unless we use reflection + } + + public void testRedirectActionPrefixWithEmptyExtension() throws Exception { + Map parameterMap = new HashMap(); + parameterMap.put(DefaultActionMapper.REDIRECT_ACTION_PREFIX + "myAction", ""); + + StrutsMockHttpServletRequest request = new StrutsMockHttpServletRequest(); + request.setupGetServletPath("/someServletPath"); + request.setParameterMap(parameterMap); + + DefaultActionMapper defaultActionMapper = new DefaultActionMapper(); + defaultActionMapper.setContainer(container); + defaultActionMapper.setExtensions(",,"); + ActionMapping actionMapping = defaultActionMapper.getMapping(request, configManager); + + + StrutsResultSupport result = (StrutsResultSupport) actionMapping.getResult(); + assertNotNull(result); + assertTrue(result instanceof ServletRedirectResult); + + assertEquals("myAction", result.getLocation()); // TODO: need to test location but there's noaccess to the property/method, unless we use reflection } @@ -550,6 +576,18 @@ String uri = mapper.getUriFromActionMapping(actionMapping); assertEquals("/myActionName.action", uri); + } + + public void testGetUriFromActionMapperWhenBlankExtension() throws Exception { + DefaultActionMapper mapper = new DefaultActionMapper(); + mapper.setExtensions(",,"); + ActionMapping actionMapping = new ActionMapping(); + actionMapping.setMethod("myMethod"); + actionMapping.setName("myActionName"); + actionMapping.setNamespace("/myNamespace"); + String uri = mapper.getUriFromActionMapping(actionMapping); + + assertEquals("/myNamespace/myActionName!myMethod", uri); } }