Author: mrdon Date: Fri Jan 25 03:02:08 2008 New Revision: 615173 URL: http://svn.apache.org/viewvc?rev=615173&view=rev Log: Ensuring all action name parsing happens in ActionMapper, adding parsing to DWRValidator WW-2217 WW-2323
Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/ActionComponent.java struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/Form.java struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/FormButton.java struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/ServletUrlRenderer.java struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/ActionMapper.java struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/CompositeActionMapper.java struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapper.java struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/RestfulActionMapper.java struts/struts2/trunk/core/src/main/java/org/apache/struts2/validators/DWRValidator.java struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/FilterDispatcherTest.java struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/FilterTest.java struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/NullActionMapper.java struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/mapper/CompositeActionMapperTest.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/components/ActionComponent.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/ActionComponent.java?rev=615173&r1=615172&r2=615173&view=diff ============================================================================== --- struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/ActionComponent.java (original) +++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/ActionComponent.java Fri Jan 25 03:02:08 2008 @@ -35,6 +35,8 @@ import org.apache.struts2.StrutsException; import org.apache.struts2.dispatcher.Dispatcher; import org.apache.struts2.dispatcher.RequestMap; +import org.apache.struts2.dispatcher.mapper.ActionMapper; +import org.apache.struts2.dispatcher.mapper.ActionMapping; import org.apache.struts2.views.annotations.StrutsTag; import org.apache.struts2.views.annotations.StrutsTagAttribute; import org.apache.struts2.views.jsp.TagUtils; @@ -124,6 +126,7 @@ protected ValueStackFactory valueStackFactory; protected ActionProxyFactory actionProxyFactory; protected ActionProxy proxy; + protected ActionMapper actionMapper; protected String name; protected String namespace; protected boolean executeResult; @@ -149,6 +152,11 @@ this.valueStackFactory = valueStackFactory; } + @Inject + public void setActionMapper(ActionMapper mapper) { + this.actionMapper = mapper; + } + public boolean end(Writer writer, String body) { boolean end = super.end(writer, "", false); try { @@ -255,14 +263,9 @@ final String actionName; final String methodName; - int exclamation = actualName.lastIndexOf("!"); - if (exclamation != -1) { - actionName = actualName.substring(0, exclamation); - methodName = actualName.substring(exclamation + 1); - } else { - actionName = actualName; - methodName = null; - } + ActionMapping mapping = actionMapper.getMappingFromActionName(actualName); + actionName = mapping.getName(); + methodName = mapping.getMethod(); String namespace; Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/Form.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/Form.java?rev=615173&r1=615172&r2=615173&view=diff ============================================================================== --- struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/Form.java (original) +++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/Form.java Fri Jan 25 03:02:08 2008 @@ -103,7 +103,6 @@ protected String acceptcharset; protected String focusElement; - protected boolean enableDynamicMethodInvocation = true; protected Configuration configuration; protected ObjectFactory objectFactory; protected UrlRenderer urlRenderer; @@ -123,11 +122,6 @@ protected String getDefaultTemplate() { return TEMPLATE; - } - - @Inject(StrutsConstants.STRUTS_ENABLE_DYNAMIC_METHOD_INVOCATION) - public void setEnableDynamicMethodInvocation(String enable) { - enableDynamicMethodInvocation = "true".equals(enable); } @Inject Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/FormButton.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/FormButton.java?rev=615173&r1=615172&r2=615173&view=diff ============================================================================== --- struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/FormButton.java (original) +++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/FormButton.java Fri Jan 25 03:02:08 2008 @@ -24,8 +24,11 @@ import javax.servlet.http.HttpServletResponse; import org.apache.struts2.views.annotations.StrutsTagAttribute; +import org.apache.struts2.dispatcher.mapper.ActionMapper; +import org.apache.struts2.dispatcher.mapper.ActionMapping; import com.opensymphony.xwork2.util.ValueStack; +import com.opensymphony.xwork2.inject.Inject; /** * FormButton. @@ -40,6 +43,7 @@ protected String method; protected String align; protected String type; + protected ActionMapper actionMapper; public FormButton(ValueStack stack, HttpServletRequest request, HttpServletResponse response) { super(stack, request, response); @@ -70,11 +74,13 @@ String name; if (action != null) { - name = "action:" + findString(action); - + ActionMapping mapping = new ActionMapping(); + mapping.setName(findString(action)); if (method != null) { - name += "!" + findString(method); + mapping.setMethod(findString(method)); } + mapping.setExtension(""); + name = "action:" + actionMapper.getUriFromActionMapping(mapping); } else { name = "method:" + findString(method); } @@ -140,6 +146,11 @@ * @return <tt>true</tt> if type image is supported. */ protected abstract boolean supportsImageType(); + + @Inject + public void setActionMapper(ActionMapper mapper) { + this.actionMapper = mapper; + } @StrutsTagAttribute(description="Set action attribute.") public void setAction(String action) { Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/ServletUrlRenderer.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/ServletUrlRenderer.java?rev=615173&r1=615172&r2=615173&view=diff ============================================================================== --- struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/ServletUrlRenderer.java (original) +++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/ServletUrlRenderer.java Fri Jan 25 03:02:08 2008 @@ -25,10 +25,12 @@ import org.apache.struts2.StrutsException; import org.apache.struts2.dispatcher.mapper.ActionMapping; +import org.apache.struts2.dispatcher.mapper.ActionMapper; import org.apache.struts2.views.util.UrlHelper; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionInvocation; +import com.opensymphony.xwork2.inject.Inject; import com.opensymphony.xwork2.config.entities.ActionConfig; import com.opensymphony.xwork2.util.logging.Logger; import com.opensymphony.xwork2.util.logging.LoggerFactory; @@ -43,8 +45,15 @@ */ private static final Logger LOG = LoggerFactory.getLogger(ServletUrlRenderer.class); + private ActionMapper actionMapper; - /** + @Inject + public void setActionMapper(ActionMapper mapper) { + this.actionMapper = mapper; + } + + + /** * [EMAIL PROTECTED] */ public void renderUrl(Writer writer, URL urlComponent) { @@ -112,21 +121,12 @@ } } - String actionMethod = ""; - // FIXME: our implementation is flawed - the only concept of ! should be - // in DefaultActionMapper - // handle "name!method" convention. - if (formComponent.enableDynamicMethodInvocation) { - if (action.indexOf("!") != -1) { - int endIdx = action.lastIndexOf("!"); - actionMethod = action.substring(endIdx + 1, action.length()); - action = action.substring(0, endIdx); - } - } + ActionMapping nameMapping = actionMapper.getMappingFromActionName(action); + String actionName = nameMapping.getName(); + String actionMethod = nameMapping.getMethod(); final ActionConfig actionConfig = formComponent.configuration.getRuntimeConfiguration().getActionConfig( namespace, action); - String actionName = action; if (actionConfig != null) { ActionMapping mapping = new ActionMapping(action, namespace, actionMethod, formComponent.parameters); Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/ActionMapper.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/ActionMapper.java?rev=615173&r1=615172&r2=615173&view=diff ============================================================================== --- struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/ActionMapper.java (original) +++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/ActionMapper.java Fri Jan 25 03:02:08 2008 @@ -55,6 +55,15 @@ ActionMapping getMapping(HttpServletRequest request, ConfigurationManager configManager); /** + * Expose the ActionMapping for the specified action name + * + * @param actionName The name of the action that may have other information embedded in it + * @return The appropriate action mapping + * @since 2.1.1 + */ + ActionMapping getMappingFromActionName(String actionName); + + /** * Convert an ActionMapping into a URI string * * @param mapping The action mapping Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/CompositeActionMapper.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/CompositeActionMapper.java?rev=615173&r1=615172&r2=615173&view=diff ============================================================================== --- struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/CompositeActionMapper.java (original) +++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/CompositeActionMapper.java Fri Jan 25 03:02:08 2008 @@ -76,9 +76,7 @@ * <!-- END SNIPPET: description --> * * @see ActionMapper - * @see ActionMapperFactory * @see ActionMapping - * @see IndividualActionMapperEntry * * @version $Date$ $Id$ */ @@ -113,6 +111,28 @@ for (ActionMapper actionMapper : actionMappers) { ActionMapping actionMapping = actionMapper.getMapping(request, configManager); + if (LOG.isDebugEnabled()) { + LOG.debug("Using ActionMapper "+actionMapper); + } + if (actionMapping == null) { + if (LOG.isDebugEnabled()) { + LOG.debug("ActionMapper "+actionMapper+" failed to return an ActionMapping (null)"); + } + } + else { + return actionMapping; + } + } + if (LOG.isDebugEnabled()) { + LOG.debug("exhausted from ActionMapper that could return an ActionMapping"); + } + return null; + } + + public ActionMapping getMappingFromActionName(String actionName) { + + for (ActionMapper actionMapper : actionMappers) { + ActionMapping actionMapping = actionMapper.getMappingFromActionName(actionName); if (LOG.isDebugEnabled()) { LOG.debug("Using ActionMapper "+actionMapper); } 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=615173&r1=615172&r2=615173&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 Jan 25 03:02:08 2008 @@ -279,6 +279,12 @@ this.extensions = null; } } + + public ActionMapping getMappingFromActionName(String actionName) { + ActionMapping mapping = new ActionMapping(); + mapping.setName(actionName); + return parseActionName(mapping); + } /* * (non-Javadoc) @@ -306,6 +312,15 @@ return null; } + parseActionName(mapping); + + return mapping; + } + + protected ActionMapping parseActionName(ActionMapping mapping) { + if (mapping.getName() == null) { + return mapping; + } if (allowDynamicMethodCalls) { // handle "name!method" convention. String name = mapping.getName(); @@ -315,7 +330,6 @@ mapping.setMethod(name.substring(exclamation + 1)); } } - return mapping; } @@ -494,9 +508,11 @@ public String getUriFromActionMapping(ActionMapping mapping) { StringBuffer uri = new StringBuffer(); - uri.append(mapping.getNamespace()); - if (!"/".equals(mapping.getNamespace())) { - uri.append("/"); + if (mapping.getNamespace() != null) { + uri.append(mapping.getNamespace()); + if (!"/".equals(mapping.getNamespace())) { + uri.append("/"); + } } String name = mapping.getName(); String params = ""; @@ -510,16 +526,19 @@ uri.append("!").append(mapping.getMethod()); } - String extension = getDefaultExtension(); - - // Look for the current extension, if available - ActionContext context = ActionContext.getContext(); - if (context != null) { - ActionMapping orig = (ActionMapping) context.get(ServletActionContext.ACTION_MAPPING); - if (orig != null) { - extension = orig.getExtension(); + String extension = mapping.getExtension(); + if (extension == null) { + extension = getDefaultExtension(); + // Look for the current extension, if available + ActionContext context = ActionContext.getContext(); + if (context != null) { + ActionMapping orig = (ActionMapping) context.get(ServletActionContext.ACTION_MAPPING); + if (orig != null) { + extension = orig.getExtension(); + } } } + if (extension != null) { if (extension.length() == 0 || (extension.length() > 0 && uri.indexOf('.' + extension) == -1)) { Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/RestfulActionMapper.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/RestfulActionMapper.java?rev=615173&r1=615172&r2=615173&view=diff ============================================================================== --- struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/RestfulActionMapper.java (original) +++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/RestfulActionMapper.java Fri Jan 25 03:02:08 2008 @@ -111,6 +111,10 @@ return new ActionMapping(actionName, "", "", parameters); } + public ActionMapping getMappingFromActionName(String actionName) { + return new ActionMapping(actionName, null, null, null); + } + /* (non-Javadoc) * @see org.apache.struts2.dispatcher.mapper.ActionMapper#getUriFromActionMapping(org.apache.struts2.dispatcher.mapper.ActionMapping) */ Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/validators/DWRValidator.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/validators/DWRValidator.java?rev=615173&r1=615172&r2=615173&view=diff ============================================================================== --- struts/struts2/trunk/core/src/main/java/org/apache/struts2/validators/DWRValidator.java (original) +++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/validators/DWRValidator.java Fri Jan 25 03:02:08 2008 @@ -31,6 +31,8 @@ import org.apache.struts2.dispatcher.Dispatcher; import org.apache.struts2.dispatcher.RequestMap; import org.apache.struts2.dispatcher.SessionMap; +import org.apache.struts2.dispatcher.mapper.ActionMapper; +import org.apache.struts2.dispatcher.mapper.ActionMapping; import uk.ltd.getahead.dwr.WebContextFactory; @@ -68,7 +70,13 @@ private static final Logger LOG = LoggerFactory.getLogger(DWRValidator.class); private ActionProxyFactory actionProxyFactory; - + private ActionMapper actionMapper; + + @Inject + public void setActionMapper(ActionMapper actionMapper) { + this.actionMapper = actionMapper; + } + @Inject public void setActionProxyFactory(ActionProxyFactory fac) { this.actionProxyFactory = fac; @@ -98,9 +106,9 @@ servletContext); try { - Configuration cfg = du.getConfigurationManager().getConfiguration(); + ActionMapping mapping = actionMapper.getMappingFromActionName(action); ActionInvocation inv = new ValidatorActionInvocation(ctx, true); - ActionProxy proxy = actionProxyFactory.createActionProxy(inv, namespace, action, null, true, true); + ActionProxy proxy = actionProxyFactory.createActionProxy(inv, namespace, mapping.getName(), mapping.getMethod(), true, true); proxy.execute(); Object a = proxy.getAction(); Modified: struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/FilterDispatcherTest.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/FilterDispatcherTest.java?rev=615173&r1=615172&r2=615173&view=diff ============================================================================== --- struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/FilterDispatcherTest.java (original) +++ struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/FilterDispatcherTest.java Fri Jan 25 03:02:08 2008 @@ -196,6 +196,10 @@ return new ActionMapping(); } + public ActionMapping getMappingFromActionName(String actionName) { + return null; //To change body of implemented methods use File | Settings | File Templates. + } + public String getUriFromActionMapping(ActionMapping mapping) { return null; } @@ -204,6 +208,10 @@ public static class NullActionMapper implements ActionMapper { public ActionMapping getMapping(HttpServletRequest request, ConfigurationManager config) { return null; + } + + public ActionMapping getMappingFromActionName(String actionName) { + return null; //To change body of implemented methods use File | Settings | File Templates. } public String getUriFromActionMapping(ActionMapping mapping) { Modified: struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/FilterTest.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/FilterTest.java?rev=615173&r1=615172&r2=615173&view=diff ============================================================================== --- struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/FilterTest.java (original) +++ struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/FilterTest.java Fri Jan 25 03:02:08 2008 @@ -329,6 +329,10 @@ return null; } + public ActionMapping getMappingFromActionName(String actionName) { + return null; //To change body of implemented methods use File | Settings | File Templates. + } + public String getUriFromActionMapping(ActionMapping mapping) { return null; } @@ -340,6 +344,10 @@ public ActionMapping getMapping(HttpServletRequest request, ConfigurationManager configManager) { return new ActionMapping(); + } + + public ActionMapping getMappingFromActionName(String actionName) { + return null; //To change body of implemented methods use File | Settings | File Templates. } public String getUriFromActionMapping(ActionMapping mapping) { Modified: struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/NullActionMapper.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/NullActionMapper.java?rev=615173&r1=615172&r2=615173&view=diff ============================================================================== --- struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/NullActionMapper.java (original) +++ struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/NullActionMapper.java Fri Jan 25 03:02:08 2008 @@ -33,19 +33,24 @@ */ public class NullActionMapper implements ActionMapper { - private static ActionMapping _actionMapping; + private static ActionMapping _actionMapping; - public NullActionMapper() {} + public NullActionMapper() { + } - public static void setActionMapping(ActionMapping actionMappingToBeRetrned) { - _actionMapping = actionMappingToBeRetrned; - } + public static void setActionMapping(ActionMapping actionMappingToBeRetrned) { + _actionMapping = actionMappingToBeRetrned; + } - public ActionMapping getMapping(HttpServletRequest request, ConfigurationManager config) { - return _actionMapping; - } + public ActionMapping getMapping(HttpServletRequest request, ConfigurationManager config) { + return _actionMapping; + } - public String getUriFromActionMapping(ActionMapping mapping) { - throw new UnsupportedOperationException("operation not supported"); - } + public ActionMapping getMappingFromActionName(String actionName) { + return null; //To change body of implemented methods use File | Settings | File Templates. + } + + public String getUriFromActionMapping(ActionMapping mapping) { + throw new UnsupportedOperationException("operation not supported"); + } } Modified: struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/mapper/CompositeActionMapperTest.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/mapper/CompositeActionMapperTest.java?rev=615173&r1=615172&r2=615173&view=diff ============================================================================== --- struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/mapper/CompositeActionMapperTest.java (original) +++ struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/mapper/CompositeActionMapperTest.java Fri Jan 25 03:02:08 2008 @@ -97,6 +97,11 @@ public ActionMapping getMapping(HttpServletRequest request, ConfigurationManager configManager) { return null; } + + public ActionMapping getMappingFromActionName(String actionName) { + return null; //To change body of implemented methods use File | Settings | File Templates. + } + public String getUriFromActionMapping(ActionMapping mapping) { return null; } @@ -108,6 +113,11 @@ public ActionMapping getMapping(HttpServletRequest request, ConfigurationManager configManager) { return null; } + + public ActionMapping getMappingFromActionName(String actionName) { + return null; //To change body of implemented methods use File | Settings | File Templates. + } + public String getUriFromActionMapping(ActionMapping mapping) { return null; } @@ -119,6 +129,11 @@ public ActionMapping getMapping(HttpServletRequest request, ConfigurationManager configManager) { return actionMapping; } + + public ActionMapping getMappingFromActionName(String actionName) { + return null; //To change body of implemented methods use File | Settings | File Templates. + } + public String getUriFromActionMapping(ActionMapping mapping) { return uri; } 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=615173&r1=615172&r2=615173&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 Jan 25 03:02:08 2008 @@ -171,6 +171,35 @@ assertNull(mapping.getMethod()); } + public void testGetMappingWithActionName_methodAndName() throws Exception { + DefaultActionMapper mapper = new DefaultActionMapper(); + ActionMapping mapping = mapper.getMappingFromActionName("actionName!add"); + assertEquals("actionName", mapping.getName()); + assertEquals("add", mapping.getMethod()); + } + + public void testGetMappingWithActionName_name() throws Exception { + DefaultActionMapper mapper = new DefaultActionMapper(); + ActionMapping mapping = mapper.getMappingFromActionName("actionName"); + assertEquals("actionName", mapping.getName()); + assertEquals(null, mapping.getMethod()); + } + + public void testGetMappingWithActionName_noDynamicMethod() throws Exception { + DefaultActionMapper mapper = new DefaultActionMapper(); + mapper.setAllowDynamicMethodCalls("false"); + ActionMapping mapping = mapper.getMappingFromActionName("actionName!add"); + assertEquals("actionName!add", mapping.getName()); + assertEquals(null, mapping.getMethod()); + } + + public void testGetMappingWithActionName_null() throws Exception { + DefaultActionMapper mapper = new DefaultActionMapper(); + ActionMapping mapping = mapper.getMappingFromActionName(null); + assertEquals(null, mapping.getName()); + assertEquals(null, mapping.getMethod()); + } + public void testGetUri() throws Exception { req.setupGetParameterMap(new HashMap()); req.setupGetRequestURI("/my/namespace/actionName.action"); @@ -598,6 +627,17 @@ String uri = mapper.getUriFromActionMapping(actionMapping); assertEquals("/myActionName.action", uri); + } + + public void testGetUriFromActionMapper_justActionAndMethod() throws Exception { + DefaultActionMapper mapper = new DefaultActionMapper(); + ActionMapping actionMapping = new ActionMapping(); + actionMapping.setMethod("myMethod"); + actionMapping.setName("myActionName"); + actionMapping.setExtension(""); + String uri = mapper.getUriFromActionMapping(actionMapping); + + assertEquals("myActionName!myMethod", uri); } public void testGetUriFromActionMapperWhenBlankExtension() throws Exception {