Index: com/opensymphony/xwork2/config/entities/ActionConfig.java =================================================================== --- com/opensymphony/xwork2/config/entities/ActionConfig.java (revision 1715) +++ com/opensymphony/xwork2/config/entities/ActionConfig.java (working copy) @@ -4,6 +4,7 @@ */ package com.opensymphony.xwork2.config.entities; +import com.opensymphony.xwork2.util.TextUtils; import com.opensymphony.xwork2.util.location.Located; import com.opensymphony.xwork2.util.location.Location; @@ -226,6 +227,13 @@ return this; } + public Builder defaultClassName(String name) { + if (!TextUtils.stringSet(target.className)) { + target.className = name; + } + return this; + } + public Builder methodName(String method) { target.methodName = method; return this; Index: com/opensymphony/xwork2/config/entities/PackageConfig.java =================================================================== --- com/opensymphony/xwork2/config/entities/PackageConfig.java (revision 1715) +++ com/opensymphony/xwork2/config/entities/PackageConfig.java (working copy) @@ -197,7 +197,16 @@ } public String getDefaultClassRef() { - return defaultClassRef; + if((defaultClassRef == null) && !parents.isEmpty()) { + for (Iterator iterator = parents.iterator(); iterator.hasNext();) { + PackageConfig parent = iterator.next(); + String parentDefault = parent.getDefaultClassRef(); + if (parentDefault != null) { + return parentDefault; + } + } + } + return defaultClassRef; } /** Index: com/opensymphony/xwork2/config/impl/DefaultConfiguration.java =================================================================== --- com/opensymphony/xwork2/config/impl/DefaultConfiguration.java (revision 1715) +++ com/opensymphony/xwork2/config/impl/DefaultConfiguration.java (working copy) @@ -252,7 +252,9 @@ ActionConfig baseConfig = (ActionConfig) actionConfigs.get(actionName); configs.put(actionName, buildFullActionConfig(packageConfig, baseConfig)); } - + + + namespaceActionConfigs.put(namespace, configs); if (packageConfig.getFullDefaultActionRef() != null) { namespaceConfigs.put(namespace, packageConfig.getFullDefaultActionRef()); @@ -310,12 +312,16 @@ } } + + ActionConfig config = new ActionConfig.Builder(baseConfig) .addParams(params) .addResultConfigs(results) + .defaultClassName(packageContext.getDefaultClassRef()) // fill in default if non class has been provided .interceptors(interceptors) .addExceptionMappings(packageContext.getAllExceptionMappingConfigs()) .build(); + return config; } Index: com/opensymphony/xwork2/config/providers/XmlConfigurationProvider.java =================================================================== --- com/opensymphony/xwork2/config/providers/XmlConfigurationProvider.java (revision 1715) +++ com/opensymphony/xwork2/config/providers/XmlConfigurationProvider.java (working copy) @@ -348,16 +348,19 @@ // use the default-class-ref from the if (!TextUtils.stringSet(className)) { // if there is a package default-class-ref use that, otherwise use action support - if (TextUtils.stringSet(packageContext.getDefaultClassRef())) { + /* if (TextUtils.stringSet(packageContext.getDefaultClassRef())) { className = packageContext.getDefaultClassRef(); } else { className = ActionSupport.class.getName(); + }*/ + + } else { + if (!verifyAction(className, name, location)) { + return; } } - if (!verifyAction(className, name, location)) { - return; - } + Map results; try {