Author: lukaszlenart Date: Mon Dec 5 08:31:39 2011 New Revision: 1210360 URL: http://svn.apache.org/viewvc?rev=1210360&view=rev Log: WW-3687 adds Context Path to the error message
Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/impl/StrutsActionProxy.java struts/struts2/trunk/core/src/main/resources/org/apache/struts2/struts-messages.properties struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/DefaultActionProxy.java Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/impl/StrutsActionProxy.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/impl/StrutsActionProxy.java?rev=1210360&r1=1210359&r2=1210360&view=diff ============================================================================== --- struts/struts2/trunk/core/src/main/java/org/apache/struts2/impl/StrutsActionProxy.java (original) +++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/impl/StrutsActionProxy.java Mon Dec 5 08:31:39 2011 @@ -26,8 +26,10 @@ package org.apache.struts2.impl; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.DefaultActionProxy; +import com.opensymphony.xwork2.util.LocalizedTextUtil; +import org.apache.struts2.ServletActionContext; -import java.util.Map; +import java.util.Locale; public class StrutsActionProxy extends DefaultActionProxy { @@ -48,7 +50,7 @@ public class StrutsActionProxy extends D // return invocation.invoke(); // } // }); - + return invocation.invoke(); } finally { if (cleanupContext) @@ -61,4 +63,18 @@ public class StrutsActionProxy extends D super.prepare(); } + @Override + protected String getErrorMessage() { + if ((namespace != null) && (namespace.trim().length() > 0)) { + String contextPath = ServletActionContext.getRequest().getContextPath(); + return LocalizedTextUtil.findDefaultText( + "struts.exception.missing-package-action.with-context", + Locale.getDefault(), + new String[]{namespace, actionName, contextPath} + ); + } else { + return super.getErrorMessage(); + } + } + } Modified: struts/struts2/trunk/core/src/main/resources/org/apache/struts2/struts-messages.properties URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/resources/org/apache/struts2/struts-messages.properties?rev=1210360&r1=1210359&r2=1210360&view=diff ============================================================================== --- struts/struts2/trunk/core/src/main/resources/org/apache/struts2/struts-messages.properties (original) +++ struts/struts2/trunk/core/src/main/resources/org/apache/struts2/struts-messages.properties Mon Dec 5 08:31:39 2011 @@ -32,3 +32,5 @@ struts.messages.error.content.type.not.a struts.messages.error.file.extension.not.allowed=File extension not allowed: {0} "{1}" "{2}" {3} devmode.notification=Developer Notification (set struts.devMode to false to disable this message):\n{0} + +struts.exception.missing-package-action.with-context = There is no Action mapped for namespace [{0}] and action name [{1}] associated with context path [{2}]. Modified: struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/DefaultActionProxy.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/DefaultActionProxy.java?rev=1210360&r1=1210359&r2=1210360&view=diff ============================================================================== --- struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/DefaultActionProxy.java (original) +++ struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/DefaultActionProxy.java Mon Dec 5 08:31:39 2011 @@ -41,15 +41,14 @@ import java.util.Locale; * @author Rainer Hermanns * @author Revised by <a href="mailto:hu_peng...@yahoo.com.cn">Henry Hu</a> * @author tmjee - * * @version $Date$ $Id$ * @since 2005-8-6 */ public class DefaultActionProxy implements ActionProxy, Serializable { - - private static final long serialVersionUID = 3293074152487468527L; - private static final Logger LOG = LoggerFactory.getLogger(DefaultActionProxy.class); + private static final long serialVersionUID = 3293074152487468527L; + + private static final Logger LOG = LoggerFactory.getLogger(DefaultActionProxy.class); protected Configuration configuration; protected ActionConfig config; @@ -65,7 +64,7 @@ public class DefaultActionProxy implemen protected ActionEventListener actionEventListener; - private boolean methodSpecified=true; + private boolean methodSpecified = true; /** * This constructor is private so the builder methods (create*) should be used to create an DefaultActionProxy. @@ -74,35 +73,35 @@ public class DefaultActionProxy implemen * (like a RMIActionProxy). */ protected DefaultActionProxy(ActionInvocation inv, String namespace, String actionName, String methodName, boolean executeResult, boolean cleanupContext) { - + this.invocation = inv; - this.cleanupContext = cleanupContext; - if (LOG.isDebugEnabled()) { - LOG.debug("Creating an DefaultActionProxy for namespace " + namespace + " and action name " + actionName); - } + this.cleanupContext = cleanupContext; + if (LOG.isDebugEnabled()) { + LOG.debug("Creating an DefaultActionProxy for namespace " + namespace + " and action name " + actionName); + } this.actionName = StringEscapeUtils.escapeHtml(actionName); this.namespace = namespace; this.executeResult = executeResult; this.method = StringEscapeUtils.escapeJavaScript(StringEscapeUtils.escapeHtml(methodName)); } - + @Inject public void setObjectFactory(ObjectFactory factory) { this.objectFactory = factory; } - + @Inject public void setConfiguration(Configuration config) { this.configuration = config; } - + @Inject public void setUnknownHandler(UnknownHandlerManager unknownHandlerManager) { this.unknownHandlerManager = unknownHandlerManager; } - - @Inject(required=false) + + @Inject(required = false) public void setActionEventListener(ActionEventListener listener) { this.actionEventListener = listener; } @@ -118,7 +117,7 @@ public class DefaultActionProxy implemen public ActionConfig getConfig() { return config; } - + public void setExecuteResult(boolean executeResult) { this.executeResult = executeResult; } @@ -143,8 +142,8 @@ public class DefaultActionProxy implemen String profileKey = "execute: "; try { - UtilTimerStack.push(profileKey); - + UtilTimerStack.push(profileKey); + retCode = invocation.invoke(); } finally { if (cleanupContext) { @@ -169,38 +168,27 @@ public class DefaultActionProxy implemen if (StringUtils.isEmpty(this.method)) { this.method = ActionConfig.DEFAULT_METHOD; } - methodSpecified=false; + methodSpecified = false; } } - protected void prepare() { + protected void prepare() { String profileKey = "create DefaultActionProxy: "; try { UtilTimerStack.push(profileKey); config = configuration.getRuntimeConfiguration().getActionConfig(namespace, actionName); - + if (config == null && unknownHandlerManager.hasUnknownHandlers()) { config = unknownHandlerManager.handleUnknownAction(namespace, actionName); } if (config == null) { - String message; - - if ((namespace != null) && (namespace.trim().length() > 0)) { - message = LocalizedTextUtil.findDefaultText(XWorkMessages.MISSING_PACKAGE_ACTION_EXCEPTION, Locale.getDefault(), new String[]{ - namespace, actionName - }); - } else { - message = LocalizedTextUtil.findDefaultText(XWorkMessages.MISSING_ACTION_EXCEPTION, Locale.getDefault(), new String[]{ - actionName - }); - } - throw new ConfigurationException(message); + throw new ConfigurationException(getErrorMessage()); } resolveMethod(); - + if (!config.isAllowedMethod(method)) { - throw new ConfigurationException("Invalid method: "+method+" for action "+actionName); + throw new ConfigurationException("Invalid method: " + method + " for action " + actionName); } invocation.init(this); @@ -210,6 +198,20 @@ public class DefaultActionProxy implemen } } + protected String getErrorMessage() { + if ((namespace != null) && (namespace.trim().length() > 0)) { + return LocalizedTextUtil.findDefaultText( + XWorkMessages.MISSING_PACKAGE_ACTION_EXCEPTION, + Locale.getDefault(), + new String[]{namespace, actionName}); + } else { + return LocalizedTextUtil.findDefaultText( + XWorkMessages.MISSING_ACTION_EXCEPTION, + Locale.getDefault(), + new String[]{actionName}); + } + } + public boolean isMethodSpecified() { return methodSpecified; }