You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by mr...@apache.org on 2007/09/20 14:51:45 UTC

svn commit: r577728 [1/2] - in /struts/struts2/trunk: apps/showcase/src/main/java/org/apache/struts2/showcase/freemarker/ apps/showcase/src/main/resources/ core/src/main/java/org/apache/struts2/ core/src/main/java/org/apache/struts2/components/ core/sr...

Author: mrdon
Date: Thu Sep 20 05:51:41 2007
New Revision: 577728

URL: http://svn.apache.org/viewvc?rev=577728&view=rev
Log:
Changes necessary for XWork 2.1:
 * New EL abstraction to allow ONGL to be replaced
 * Got rid of static factories and state, in favor of dep injection
 * New plugin API points for the EL abstraction

XW-566 XW-461 XW-561

Removed:
    struts/struts2/trunk/core/src/main/java/org/apache/struts2/util/Sorter.java
Modified:
    struts/struts2/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/freemarker/CustomFreemarkerManager.java
    struts/struts2/trunk/apps/showcase/src/main/resources/struts.xml
    struts/struts2/trunk/core/src/main/java/org/apache/struts2/StrutsConstants.java
    struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/ActionComponent.java
    struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/Bean.java
    struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/Component.java
    struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/Debug.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/Include.java
    struts/struts2/trunk/core/src/main/java/org/apache/struts2/config/BeanSelectionProvider.java
    struts/struts2/trunk/core/src/main/java/org/apache/struts2/config/MethodConfigurationProvider.java
    struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java
    struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/FilterDispatcher.java
    struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/ServletActionRedirectResult.java
    struts/struts2/trunk/core/src/main/java/org/apache/struts2/impl/StrutsActionProxy.java
    struts/struts2/trunk/core/src/main/java/org/apache/struts2/impl/StrutsActionProxyFactory.java
    struts/struts2/trunk/core/src/main/java/org/apache/struts2/impl/StrutsObjectFactory.java
    struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/debugging/DebuggingInterceptor.java
    struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/debugging/ObjectToHTMLWriter.java
    struts/struts2/trunk/core/src/main/java/org/apache/struts2/util/StrutsTestCaseHelper.java
    struts/struts2/trunk/core/src/main/java/org/apache/struts2/util/StrutsUtil.java
    struts/struts2/trunk/core/src/main/java/org/apache/struts2/validators/DWRValidator.java
    struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/jsp/TagUtils.java
    struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/OgnlTool.java
    struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/util/ContextUtil.java
    struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/util/UrlHelper.java
    struts/struts2/trunk/core/src/main/resources/struts-default.xml
    struts/struts2/trunk/core/src/test/java/org/apache/struts2/components/FormButtonTest.java
    struts/struts2/trunk/core/src/test/java/org/apache/struts2/components/FormTest.java
    struts/struts2/trunk/core/src/test/java/org/apache/struts2/components/PropertyTest.java
    struts/struts2/trunk/core/src/test/java/org/apache/struts2/components/UIBeanTest.java
    struts/struts2/trunk/core/src/test/java/org/apache/struts2/config/MethodConfigurationProviderTest.java
    struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/DispatcherTest.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/HttpHeaderResultTest.java
    struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/PlainTextResultTest.java
    struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/ServletRedirectResultTest.java
    struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/StreamResultTest.java
    struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/StrutsResultSupportTest.java
    struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/VelocityResultTest.java
    struts/struts2/trunk/core/src/test/java/org/apache/struts2/interceptor/StrutsConversionErrorInterceptorTest.java
    struts/struts2/trunk/core/src/test/java/org/apache/struts2/interceptor/TokenInterceptorTest.java
    struts/struts2/trunk/core/src/test/java/org/apache/struts2/interceptor/validation/AnnotationValidationInterceptorTest.java
    struts/struts2/trunk/core/src/test/java/org/apache/struts2/interceptor/validation/JSONValidationInterceptorTest.java
    struts/struts2/trunk/core/src/test/java/org/apache/struts2/util/InvocationSessionStoreTest.java
    struts/struts2/trunk/core/src/test/java/org/apache/struts2/util/StrutsUtilTest.java
    struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/freemarker/FreeMarkerResultTest.java
    struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/freemarker/FreemarkerTest.java
    struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/freemarker/tags/TagModelTest.java
    struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/jsp/AbstractTagTest.java
    struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/jsp/ActionTagTest.java
    struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/jsp/ElseIfTagTest.java
    struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/jsp/ElseTagTest.java
    struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/jsp/IfTagTest.java
    struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/jsp/PropertyTagTest.java
    struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/jsp/TextTagTest.java
    struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/FormTagTest.java
    struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/util/ContextUtilTest.java
    struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/util/UrlHelperTest.java
    struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/xslt/XSLTResultTest.java
    struts/struts2/trunk/plugins/config-browser/src/main/java/org/apache/struts2/config_browser/ListValidatorsAction.java
    struts/struts2/trunk/plugins/config-browser/src/main/java/org/apache/struts2/config_browser/ShowConfigAction.java
    struts/struts2/trunk/plugins/config-browser/src/main/java/org/apache/struts2/config_browser/ShowValidatorAction.java
    struts/struts2/trunk/plugins/dojo/src/test/java/org/apache/struts2/dojo/views/jsp/ui/AbstractTagTest.java
    struts/struts2/trunk/plugins/jsf/src/main/java/org/apache/struts2/jsf/StrutsVariableResolver.java
    struts/struts2/trunk/plugins/plexus/src/main/java/org/apache/struts2/plexus/PlexusObjectFactory.java
    struts/struts2/trunk/plugins/sitemesh/src/main/java/org/apache/struts2/sitemesh/TemplatePageFilter.java
    struts/struts2/trunk/plugins/struts1/src/main/java/org/apache/struts2/s1/Struts1Action.java

Modified: struts/struts2/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/freemarker/CustomFreemarkerManager.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/freemarker/CustomFreemarkerManager.java?rev=577728&r1=577727&r2=577728&view=diff
==============================================================================
--- struts/struts2/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/freemarker/CustomFreemarkerManager.java (original)
+++ struts/struts2/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/freemarker/CustomFreemarkerManager.java Thu Sep 20 05:51:41 2007
@@ -26,7 +26,7 @@
 import org.apache.struts2.views.freemarker.FreemarkerManager;
 import org.apache.struts2.views.freemarker.ScopesHashModel;
 
-import com.opensymphony.xwork2.util.OgnlValueStack;
+import com.opensymphony.xwork2.ognl.OgnlValueStack;
 import com.opensymphony.xwork2.util.ValueStack;
 
 /**

Modified: struts/struts2/trunk/apps/showcase/src/main/resources/struts.xml
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/apps/showcase/src/main/resources/struts.xml?rev=577728&r1=577727&r2=577728&view=diff
==============================================================================
--- struts/struts2/trunk/apps/showcase/src/main/resources/struts.xml (original)
+++ struts/struts2/trunk/apps/showcase/src/main/resources/struts.xml Thu Sep 20 05:51:41 2007
@@ -12,6 +12,7 @@
     <constant name="struts.devMode" value="true" />
     <constant name="struts.configuration.xml.reload" value="false" />
     <constant name="struts.custom.i18n.resources" value="globalMessages" />
+    <constant name="struts.action.extension" value="action,," />
 
     <constant name="struts.codebehind.defaultPackage" value="person" />
     <constant name="struts.freemarker.manager.classname" value="customFreemarkerManager" />

Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/StrutsConstants.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/StrutsConstants.java?rev=577728&r1=577727&r2=577728&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/main/java/org/apache/struts2/StrutsConstants.java (original)
+++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/StrutsConstants.java Thu Sep 20 05:51:41 2007
@@ -165,4 +165,16 @@
 	/** The name of the parameter to determine whether static method access will be allowed in OGNL expressions or not */
 	public static final String STRUTS_ALLOW_STATIC_METHOD_ACCESS = "struts.ognl.allowStaticMethodAccess";
 
+	/** The com.opensymphony.xwork2.validator.ActionValidatorManager implementation class */
+    public static final String STRUTS_ACTIONVALIDATORMANAGER = "struts.actionValidatorManager";
+
+    /** The {@link com.opensymphony.xwork2.util.ValueStackFactory} implementation class */
+    public static final String STRUTS_VALUESTACKFACTORY = "struts.valueStackFactory";
+
+    /** The {@link com.opensymphony.xwork2.reflection.ReflectionProvider} implementation class */
+    public static final String STRUTS_REFLECTIONPROVIDER = "struts.reflectionProvider";
+
+    /** The {@link com.opensymphony.xwork2.reflection.ReflectionContextFactory} implementation class */
+    public static final String STRUTS_REFLECTIONCONTEXTFACTORY = "struts.reflectionContextFactory";
+
 }

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=577728&r1=577727&r2=577728&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 Thu Sep 20 05:51:41 2007
@@ -120,6 +120,7 @@
     protected HttpServletResponse res;
     protected HttpServletRequest req;
 
+    protected ValueStackFactory valueStackFactory;
     protected ActionProxyFactory actionProxyFactory;
     protected ActionProxy proxy;
     protected String name;
@@ -141,6 +142,11 @@
     public void setActionProxyFactory(ActionProxyFactory actionProxyFactory) {
         this.actionProxyFactory = actionProxyFactory;
     }
+    
+    @Inject
+    public void setValueStackFactory(ValueStackFactory valueStackFactory) {
+        this.valueStackFactory = valueStackFactory;
+    }
 
     public boolean end(Writer writer, String body) {
         boolean end = super.end(writer, "", false);
@@ -192,7 +198,7 @@
                 res,
                 servletContext);
 
-        ValueStack newStack = ValueStackFactory.getFactory().createValueStack(stack);
+        ValueStack newStack = valueStackFactory.createValueStack(stack);
         extraContext.put(ActionContext.VALUE_STACK, newStack);
 
         // add page context, such that ServletDispatcherResult will do an include

Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/Bean.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/Bean.java?rev=577728&r1=577727&r2=577728&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/Bean.java (original)
+++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/Bean.java Thu Sep 20 05:51:41 2007
@@ -30,8 +30,8 @@
 import com.opensymphony.xwork2.inject.Inject;
 import com.opensymphony.xwork2.util.ClassLoaderUtil;
 import com.opensymphony.xwork2.ObjectFactory;
-import com.opensymphony.xwork2.util.OgnlUtil;
 import com.opensymphony.xwork2.util.ValueStack;
+import com.opensymphony.xwork2.util.reflection.ReflectionProvider;
 
 /**
  * <!-- START SNIPPET: javadoc -->
@@ -101,6 +101,7 @@
     protected Object bean;
     protected String name;
     protected ObjectFactory objectFactory;
+    protected ReflectionProvider reflectionProvider;
 
     public Bean(ValueStack stack) {
         super(stack);
@@ -110,6 +111,11 @@
     public void setObjectFactory(ObjectFactory objectFactory) {
         this.objectFactory = objectFactory;
     }
+    
+    @Inject
+    public void setReflectionProvider(ReflectionProvider prov) {
+        this.reflectionProvider = prov;
+    }
 
     public boolean start(Writer writer) {
         boolean result = super.start(writer);
@@ -142,7 +148,7 @@
     }
 
     public void addParameter(String key, Object value) {
-        OgnlUtil.setProperty(key, value, bean, getStack().getContext());
+        reflectionProvider.setProperty(key, value, bean, getStack().getContext());
     }
 
     @StrutsTagAttribute(description="The class name of the bean to be instantiated (must respect JavaBean specification)",

Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/Component.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/Component.java?rev=577728&r1=577727&r2=577728&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/Component.java (original)
+++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/Component.java Thu Sep 20 05:51:41 2007
@@ -342,7 +342,7 @@
                                         boolean includeContext, boolean encodeResult, boolean forceAddSchemeHostAndPort,
                                         boolean escapeAmp) {
         String finalAction = findString(action);
-	String finalMethod = method != null ? findString(method) : method;
+        String finalMethod = method != null ? findString(method) : method;
         String finalNamespace = determineNamespace(namespace, getStack(), req);
         ActionMapping mapping = new ActionMapping(finalAction, finalNamespace, finalMethod, parameters);
         String uri = actionMapper.getUriFromActionMapping(mapping);

Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/Debug.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/Debug.java?rev=577728&r1=577727&r2=577728&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/Debug.java (original)
+++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/Debug.java Thu Sep 20 05:51:41 2007
@@ -20,8 +20,9 @@
  */
 package org.apache.struts2.components;
 
+import com.opensymphony.xwork2.inject.Inject;
 import com.opensymphony.xwork2.util.ValueStack;
-import com.opensymphony.xwork2.util.OgnlUtil;
+import com.opensymphony.xwork2.util.reflection.ReflectionProvider;
 
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpServletRequest;
@@ -38,11 +39,20 @@
         description="Prints debugging information")
 public class Debug extends UIBean {
     public static final String TEMPLATE = "debug";
+    
+    protected ReflectionProvider reflectionProvider;
+
+    
 
     public Debug(ValueStack stack, HttpServletRequest request, HttpServletResponse response) {
         super(stack, request, response);
     }
 
+    @Inject
+    public void setReflectionProvider(ReflectionProvider prov) {
+        this.reflectionProvider = prov;
+    }
+    
     protected String getDefaultTemplate() {
         return TEMPLATE;
     }
@@ -57,7 +67,7 @@
             Object o = iter.next();
             Map values;
             try {
-                values = OgnlUtil.getBeanMap(o);
+                values = reflectionProvider.getBeanMap(o);
             } catch (Exception e) {
                 throw new StrutsException("Caught an exception while getting the property values of " + o, e);
             }

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=577728&r1=577727&r2=577728&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 Thu Sep 20 05:51:41 2007
@@ -28,7 +28,7 @@
 import com.opensymphony.xwork2.inject.Inject;
 import com.opensymphony.xwork2.interceptor.MethodFilterInterceptorUtil;
 import com.opensymphony.xwork2.util.ValueStack;
-import com.opensymphony.xwork2.validator.ActionValidatorManagerFactory;
+import com.opensymphony.xwork2.validator.ActionValidatorManager;
 import com.opensymphony.xwork2.validator.FieldValidator;
 import com.opensymphony.xwork2.validator.ValidationInterceptor;
 import com.opensymphony.xwork2.validator.Validator;
@@ -107,6 +107,7 @@
     protected Configuration configuration;
     protected ObjectFactory objectFactory;
     protected UrlRenderer urlRenderer;
+    protected ActionValidatorManager actionValidatorManager;
 
     public Form(ValueStack stack, HttpServletRequest request, HttpServletResponse response) {
         super(stack, request, response);
@@ -143,6 +144,11 @@
     public void setUrlRenderer(UrlRenderer urlRenderer) {
     	this.urlRenderer = urlRenderer;
     }
+    
+    @Inject
+    public void setActionValidatorManager(ActionValidatorManager mgr) {
+        this.actionValidatorManager = mgr;
+    }
 
 
     /*
@@ -264,7 +270,7 @@
             return Collections.EMPTY_LIST;
         }
 
-        List<Validator> all = ActionValidatorManagerFactory.getInstance().getValidators(actionClass, (String) getParameters().get("actionName"));
+        List<Validator> all = actionValidatorManager.getValidators(actionClass, (String) getParameters().get("actionName"));
         List<Validator> validators = new ArrayList<Validator>();
         for (Validator validator : all) {
             if (validator instanceof FieldValidator) {

Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/Include.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/Include.java?rev=577728&r1=577727&r2=577728&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/Include.java (original)
+++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/Include.java Thu Sep 20 05:51:41 2007
@@ -115,7 +115,7 @@
     }
 
     @Inject(StrutsConstants.STRUTS_I18N_ENCODING)
-    public static void setDefaultEncoding(String encoding) {
+    public void setDefaultEncoding(String encoding) {
         defaultEncoding = encoding;
     }
 

Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/config/BeanSelectionProvider.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/config/BeanSelectionProvider.java?rev=577728&r1=577727&r2=577728&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/main/java/org/apache/struts2/config/BeanSelectionProvider.java (original)
+++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/config/BeanSelectionProvider.java Thu Sep 20 05:51:41 2007
@@ -47,7 +47,11 @@
 import com.opensymphony.xwork2.inject.Scope;
 import com.opensymphony.xwork2.util.ClassLoaderUtil;
 import com.opensymphony.xwork2.util.LocalizedTextUtil;
+import com.opensymphony.xwork2.util.ValueStackFactory;
 import com.opensymphony.xwork2.util.location.LocatableProperties;
+import com.opensymphony.xwork2.util.reflection.ReflectionContextFactory;
+import com.opensymphony.xwork2.util.reflection.ReflectionProvider;
+import com.opensymphony.xwork2.validator.ActionValidatorManager;
 
 /**
  * Selects the implementations of key framework extension points, using the loaded
@@ -161,6 +165,10 @@
         alias(FreemarkerManager.class, StrutsConstants.STRUTS_FREEMARKER_MANAGER_CLASSNAME, builder, props);
         alias(VelocityManager.class, StrutsConstants.STRUTS_VELOCITY_MANAGER_CLASSNAME, builder, props);
         alias(UrlRenderer.class, StrutsConstants.STRUTS_URL_RENDERER, builder, props);
+        alias(ActionValidatorManager.class, StrutsConstants.STRUTS_ACTIONVALIDATORMANAGER, builder, props);
+        alias(ValueStackFactory.class, StrutsConstants.STRUTS_VALUESTACKFACTORY, builder, props);
+        alias(ReflectionProvider.class, StrutsConstants.STRUTS_REFLECTIONPROVIDER, builder, props);
+        alias(ReflectionContextFactory.class, StrutsConstants.STRUTS_REFLECTIONCONTEXTFACTORY, builder, props);
         
         if ("true".equalsIgnoreCase(props.getProperty(StrutsConstants.STRUTS_DEVMODE))) {
             props.setProperty(StrutsConstants.STRUTS_I18N_RELOAD, "true");

Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/config/MethodConfigurationProvider.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/config/MethodConfigurationProvider.java?rev=577728&r1=577727&r2=577728&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/main/java/org/apache/struts2/config/MethodConfigurationProvider.java (original)
+++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/config/MethodConfigurationProvider.java Thu Sep 20 05:51:41 2007
@@ -27,6 +27,7 @@
 import com.opensymphony.xwork2.config.entities.ActionConfig;
 import com.opensymphony.xwork2.config.entities.PackageConfig;
 import com.opensymphony.xwork2.inject.ContainerBuilder;
+import com.opensymphony.xwork2.inject.Inject;
 import com.opensymphony.xwork2.util.location.LocatableProperties;
 import com.opensymphony.xwork2.ObjectFactory;
 
@@ -141,25 +142,12 @@
      * Updates ObjectFactory property.
      * @param factory
      */
+    @Inject
     public void setObjectFactory(ObjectFactory factory) {
         this.factory = factory;
     }
 
     /**
-     * Provides ObjectFactory property.
-     * @return
-     * @throws ConfigurationException if ObjectFactory has not been set.
-     */
-    private ObjectFactory getObjectFactory() throws ConfigurationException {
-        if (factory == null) {
-            factory = ObjectFactory.getObjectFactory();
-            if (factory == null) throw new
-                    ConfigurationException("MethodConfigurationProvider.getObjectFactory: ObjectFactory==null");
-        }
-        return factory;
-    }
-
-    /**
      * Verifies that character at a String position is upper case.
      * @param pos Position to test
      * @param string Text containing position
@@ -205,7 +193,6 @@
         String className = actionConfig.getClassName();
         Set actionMethods = new HashSet();
         Class actionClass;
-        ObjectFactory factory = getObjectFactory();
         try {
             actionClass = factory.getClassInstance(className);
         } catch (ClassNotFoundException e) {

Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java?rev=577728&r1=577727&r2=577728&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java (original)
+++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java Thu Sep 20 05:51:41 2007
@@ -40,7 +40,11 @@
 import org.apache.struts2.ServletActionContext;
 import org.apache.struts2.StrutsConstants;
 import org.apache.struts2.StrutsStatics;
-import org.apache.struts2.config.*;
+import org.apache.struts2.config.BeanSelectionProvider;
+import org.apache.struts2.config.ClasspathConfigurationProvider;
+import org.apache.struts2.config.DefaultPropertiesProvider;
+import org.apache.struts2.config.LegacyPropertiesConfigurationProvider;
+import org.apache.struts2.config.StrutsXmlConfigurationProvider;
 import org.apache.struts2.config.ClasspathConfigurationProvider.ClasspathPageLocator;
 import org.apache.struts2.config.ClasspathConfigurationProvider.PageLocator;
 import org.apache.struts2.dispatcher.mapper.ActionMapping;
@@ -51,25 +55,26 @@
 import org.apache.struts2.util.ObjectFactoryDestroyable;
 import org.apache.struts2.views.freemarker.FreemarkerManager;
 
-import com.opensymphony.xwork2.util.FileManager;
-import com.opensymphony.xwork2.*;
+import com.opensymphony.xwork2.ActionContext;
+import com.opensymphony.xwork2.ActionProxy;
+import com.opensymphony.xwork2.ActionProxyFactory;
+import com.opensymphony.xwork2.ObjectFactory;
 import com.opensymphony.xwork2.Result;
 import com.opensymphony.xwork2.config.Configuration;
 import com.opensymphony.xwork2.config.ConfigurationException;
 import com.opensymphony.xwork2.config.ConfigurationManager;
 import com.opensymphony.xwork2.config.ConfigurationProvider;
 import com.opensymphony.xwork2.config.providers.XmlConfigurationProvider;
-import com.opensymphony.xwork2.conversion.ObjectTypeDeterminer;
-import com.opensymphony.xwork2.conversion.ObjectTypeDeterminerFactory;
 import com.opensymphony.xwork2.inject.Container;
 import com.opensymphony.xwork2.inject.ContainerBuilder;
 import com.opensymphony.xwork2.inject.Inject;
+import com.opensymphony.xwork2.util.FileManager;
 import com.opensymphony.xwork2.util.LocalizedTextUtil;
 import com.opensymphony.xwork2.util.ValueStack;
 import com.opensymphony.xwork2.util.ValueStackFactory;
+import com.opensymphony.xwork2.util.location.LocatableProperties;
 import com.opensymphony.xwork2.util.location.Location;
 import com.opensymphony.xwork2.util.location.LocationUtils;
-import com.opensymphony.xwork2.util.location.LocatableProperties;
 import com.opensymphony.xwork2.util.profiling.UtilTimerStack;
 
 import freemarker.template.Template;
@@ -155,18 +160,6 @@
      */
     public static void setInstance(Dispatcher instance) {
         Dispatcher.instance.set(instance);
-
-        // Tie the ObjectFactory threadlocal instance to this Dispatcher instance
-        if (instance != null) {
-            Container cont = instance.getContainer();
-            if (cont != null) {
-                ObjectFactory.setObjectFactory(cont.getInstance(ObjectFactory.class));
-            } else {
-                LOG.warn("This dispatcher instance doesn't have a container, so the object factory won't be set.");
-            }
-        } else {
-            ObjectFactory.setObjectFactory(null);
-        }
     }
 
     /**
@@ -190,6 +183,8 @@
     private ServletContext servletContext;
     private Map<String, String> initParams;
 
+    private ValueStackFactory valueStackFactory;
+
 
     /**
      * Create the Dispatcher instance for a given ServletContext and set of initialization parameters.
@@ -207,7 +202,7 @@
      * @param mode New setting
      */
     @Inject(StrutsConstants.STRUTS_DEVMODE)
-    public static void setDevMode(String mode) {
+    public void setDevMode(String mode) {
         devMode = "true".equals(mode);
     }
 
@@ -216,7 +211,7 @@
      * @param val New setting
      */
     @Inject(value=StrutsConstants.STRUTS_LOCALE, required=false)
-    public static void setDefaultLocale(String val) {
+    public void setDefaultLocale(String val) {
         defaultLocale = val;
     }
 
@@ -225,7 +220,7 @@
      * @param val New setting
      */
     @Inject(StrutsConstants.STRUTS_I18N_ENCODING)
-    public static void setDefaultEncoding(String val) {
+    public void setDefaultEncoding(String val) {
         defaultEncoding = val;
     }
 
@@ -234,9 +229,14 @@
      * @param val New setting
      */
     @Inject(StrutsConstants.STRUTS_MULTIPART_SAVEDIR)
-    public static void setMultipartSaveDir(String val) {
+    public void setMultipartSaveDir(String val) {
         multipartSaveDir = val;
     }
+    
+    @Inject
+    public void setValueStackFactory(ValueStackFactory valueStackFactory) {
+        this.valueStackFactory = valueStackFactory;
+    }
 
     /**
      * Releases all instances bound to this dispatcher instance.
@@ -392,9 +392,6 @@
         boolean reloadi18n = Boolean.valueOf(container.getInstance(String.class, StrutsConstants.STRUTS_I18N_RELOAD));
         LocalizedTextUtil.setReloadBundles(reloadi18n);
 
-        ObjectTypeDeterminer objectTypeDeterminer = container.getInstance(ObjectTypeDeterminer.class);
-        ObjectTypeDeterminerFactory.setInstance(objectTypeDeterminer);
-
         return container;
     }
 
@@ -444,6 +441,7 @@
         init_AliasStandardObjects() ; // [7]
 
         Container container = init_PreloadConfiguration();
+        container.inject(this);
         init_CheckConfigurationReloading(container);
         init_CheckWebLogicWorkaround(container);
 
@@ -474,7 +472,7 @@
         // If there was a previous value stack, then create a new copy and pass it in to be used by the new Action
         ValueStack stack = (ValueStack) request.getAttribute(ServletActionContext.STRUTS_VALUESTACK_KEY);
         if (stack != null) {
-            extraContext.put(ActionContext.VALUE_STACK, ValueStackFactory.getFactory().createValueStack(stack));
+            extraContext.put(ActionContext.VALUE_STACK, valueStackFactory.createValueStack(stack));
         }
 
         String timerKey = "Handling request from Dispatcher";

Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/FilterDispatcher.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/FilterDispatcher.java?rev=577728&r1=577727&r2=577728&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/FilterDispatcher.java (original)
+++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/FilterDispatcher.java Thu Sep 20 05:51:41 2007
@@ -161,22 +161,22 @@
     /**
      * Store state of StrutsConstants.STRUTS_SERVE_STATIC_CONTENT setting.
      */
-    private static boolean serveStatic;
+    private boolean serveStatic;
 
     /**
      * Store state of StrutsConstants.STRUTS_SERVE_STATIC_BROWSER_CACHE setting.
      */
-    private static boolean serveStaticBrowserCache;
+    private boolean serveStaticBrowserCache;
 
     /**
      * Store state of StrutsConstants.STRUTS_I18N_ENCODING setting.
      */
-    private static String encoding;
+    private String encoding;
 
     /**
      * Provide ActionMapper instance, set by injection.
      */
-    private static ActionMapper actionMapper;
+    private ActionMapper actionMapper;
 
     /**
      * Provide FilterConfig instance, set on init.
@@ -199,6 +199,7 @@
 
         dispatcher = createDispatcher(filterConfig);
         dispatcher.init();
+        dispatcher.getContainer().inject(this);
 
         String param = filterConfig.getInitParameter("packages");
         String packages = "org.apache.struts2.static template org.apache.struts2.interceptor.debugging";
@@ -244,7 +245,7 @@
      * @param val New setting
      */
     @Inject(StrutsConstants.STRUTS_SERVE_STATIC_CONTENT)
-    public static void setServeStaticContent(String val) {
+    public void setServeStaticContent(String val) {
         serveStatic = "true".equals(val);
     }
 
@@ -253,7 +254,7 @@
      * @param val New setting
      */
     @Inject(StrutsConstants.STRUTS_SERVE_STATIC_BROWSER_CACHE)
-    public static void setServeStaticBrowserCache(String val) {
+    public void setServeStaticBrowserCache(String val) {
         serveStaticBrowserCache = "true".equals(val);
     }
 
@@ -262,7 +263,7 @@
      * @param val New setting
      */
     @Inject(StrutsConstants.STRUTS_I18N_ENCODING)
-    public static void setEncoding(String val) {
+    public void setEncoding(String val) {
         encoding = val;
     }
 
@@ -271,7 +272,7 @@
      * @param mapper New instance
      */
     @Inject
-    public static void setActionMapper(ActionMapper mapper) {
+    public void setActionMapper(ActionMapper mapper) {
         actionMapper = mapper;
     }
 

Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/ServletActionRedirectResult.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/ServletActionRedirectResult.java?rev=577728&r1=577727&r2=577728&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/ServletActionRedirectResult.java (original)
+++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/ServletActionRedirectResult.java Thu Sep 20 05:51:41 2007
@@ -27,6 +27,8 @@
 import java.util.List;
 import java.util.Map;
 
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 import org.apache.struts2.dispatcher.mapper.ActionMapper;
 import org.apache.struts2.dispatcher.mapper.ActionMapping;
 import org.apache.struts2.views.util.UrlHelper;
@@ -34,6 +36,8 @@
 import com.opensymphony.xwork2.ActionInvocation;
 import com.opensymphony.xwork2.config.entities.ResultConfig;
 import com.opensymphony.xwork2.inject.Inject;
+import com.opensymphony.xwork2.util.reflection.ReflectionException;
+import com.opensymphony.xwork2.util.reflection.ReflectionExceptionHandler;
 
 /**
  * <!-- START SNIPPET: description -->
@@ -111,12 +115,14 @@
  *
  * @see ActionMapper
  */
-public class ServletActionRedirectResult extends ServletRedirectResult {
+public class ServletActionRedirectResult extends ServletRedirectResult implements ReflectionExceptionHandler {
 
     private static final long serialVersionUID = -9042425229314584066L;
 
     /** The default parameter */
     public static final String DEFAULT_PARAM = "actionName";
+    
+    private static final Log LOG = LogFactory.getLog(ServletActionRedirectResult.class);
 
     protected String actionName;
     protected String namespace;
@@ -223,6 +229,11 @@
     public ServletActionRedirectResult addParameter(String key, Object value) {
         requestParameters.put(key, String.valueOf(value));
         return this;
+    }
+
+    public void handle(ReflectionException ex) {
+        // Only log as debug as they are probably parameters to be appended to the url
+        LOG.debug(ex.getMessage(), ex);
     }
 
 }

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=577728&r1=577727&r2=577728&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 Thu Sep 20 05:51:41 2007
@@ -23,6 +23,7 @@
 package org.apache.struts2.impl;
 
 import com.opensymphony.xwork2.ActionContext;
+import com.opensymphony.xwork2.ActionInvocation;
 import com.opensymphony.xwork2.DefaultActionProxy;
 
 import java.util.Map;
@@ -31,9 +32,9 @@
 
     private static final long serialVersionUID = -2434901249671934080L;
 
-    public StrutsActionProxy(String namespace, String actionName, Map extraContext,
+    public StrutsActionProxy(ActionInvocation inv, String namespace, String actionName, Map extraContext,
                              boolean executeResult, boolean cleanupContext) throws Exception {
-        super(namespace, actionName, extraContext, executeResult, cleanupContext);
+        super(inv, namespace, actionName, extraContext, executeResult, cleanupContext);
     }
 
     public String execute() throws Exception {

Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/impl/StrutsActionProxyFactory.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/impl/StrutsActionProxyFactory.java?rev=577728&r1=577727&r2=577728&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/main/java/org/apache/struts2/impl/StrutsActionProxyFactory.java (original)
+++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/impl/StrutsActionProxyFactory.java Thu Sep 20 05:51:41 2007
@@ -24,19 +24,17 @@
 
 import java.util.Map;
 
+import com.opensymphony.xwork2.ActionInvocation;
 import com.opensymphony.xwork2.ActionProxy;
+import com.opensymphony.xwork2.DefaultActionInvocation;
+import com.opensymphony.xwork2.DefaultActionProxy;
 import com.opensymphony.xwork2.DefaultActionProxyFactory;
 
 public class StrutsActionProxyFactory extends DefaultActionProxyFactory {
 
-    public ActionProxy createActionProxy(String namespace, String actionName, Map extraContext)
-            throws Exception {
-        return createActionProxy(namespace, actionName, extraContext, true, true);
-    }
-
-    public ActionProxy createActionProxy(String namespace, String actionName, Map extraContext,
-            boolean executeResult, boolean cleanupContext) throws Exception {
-        ActionProxy proxy = new StrutsActionProxy(namespace, actionName, extraContext, executeResult, cleanupContext);
+    public ActionProxy createActionProxy(ActionInvocation inv, String namespace, String actionName, Map extraContext, boolean executeResult, boolean cleanupContext) throws Exception {
+        
+        ActionProxy proxy = new StrutsActionProxy(inv, namespace, actionName, extraContext, executeResult, cleanupContext);
         container.inject(proxy);
         proxy.prepare();
         return proxy;

Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/impl/StrutsObjectFactory.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/impl/StrutsObjectFactory.java?rev=577728&r1=577727&r2=577728&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/main/java/org/apache/struts2/impl/StrutsObjectFactory.java (original)
+++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/impl/StrutsObjectFactory.java Thu Sep 20 05:51:41 2007
@@ -28,7 +28,6 @@
 import com.opensymphony.xwork2.config.entities.InterceptorConfig;
 import com.opensymphony.xwork2.config.entities.ResultConfig;
 import com.opensymphony.xwork2.interceptor.Interceptor;
-import com.opensymphony.xwork2.util.OgnlUtil;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -51,7 +50,7 @@
             // interceptor instances are long-lived and used across user sessions, so don't try to pass in any extra
             // context
             Object o = buildBean(className, null);
-            OgnlUtil.setProperties(params, o);
+            reflectionProvider.setProperties(params, o);
 
             if (o instanceof Interceptor) {
                 Interceptor interceptor = (Interceptor) o;
@@ -92,7 +91,7 @@
             return null;
 
         Object result = buildBean(resultClassName, extraContext);
-        OgnlUtil.setProperties(resultConfig.getParams(), result, extraContext);
+        reflectionProvider.setProperties(resultConfig.getParams(), result, extraContext);
 
         if (result instanceof Result)
             return (Result) result;

Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/debugging/DebuggingInterceptor.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/debugging/DebuggingInterceptor.java?rev=577728&r1=577727&r2=577728&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/debugging/DebuggingInterceptor.java (original)
+++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/debugging/DebuggingInterceptor.java Thu Sep 20 05:51:41 2007
@@ -50,6 +50,7 @@
 import com.opensymphony.xwork2.interceptor.Interceptor;
 import com.opensymphony.xwork2.interceptor.PreResultListener;
 import com.opensymphony.xwork2.util.ValueStack;
+import com.opensymphony.xwork2.util.reflection.ReflectionProvider;
 
 /**
  * <!-- START SNIPPET: description -->
@@ -116,6 +117,7 @@
     private FreemarkerManager freemarkerManager;
     
     private boolean consoleEnabled = false;
+    private ReflectionProvider reflectionProvider;
 
     @Inject(StrutsConstants.STRUTS_DEVMODE)
     public void setDevMode(String mode) {
@@ -126,6 +128,11 @@
     public void setFreemarkerManager(FreemarkerManager mgr) {
         this.freemarkerManager = mgr;
     }
+    
+    @Inject
+    public void setReflectionProvider(ReflectionProvider reflectionProvider) {
+        this.reflectionProvider = reflectionProvider;
+    }
 
     /**
      * Unused.
@@ -226,7 +233,7 @@
                             try {
                                 StringWriter writer = new StringWriter();
                                 ObjectToHTMLWriter htmlWriter = new ObjectToHTMLWriter(writer);
-                                htmlWriter.write(rootObject, rootObjectExpression);
+                                htmlWriter.write(reflectionProvider, rootObject, rootObjectExpression);
                                 String html = writer.toString();
                                 writer.close();
                                 

Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/debugging/ObjectToHTMLWriter.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/debugging/ObjectToHTMLWriter.java?rev=577728&r1=577727&r2=577728&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/debugging/ObjectToHTMLWriter.java (original)
+++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/debugging/ObjectToHTMLWriter.java Thu Sep 20 05:51:41 2007
@@ -28,9 +28,8 @@
 import java.util.Map;
 import java.util.Set;
 
-import ognl.OgnlException;
-
-import com.opensymphony.xwork2.util.OgnlUtil;
+import com.opensymphony.xwork2.util.reflection.ReflectionException;
+import com.opensymphony.xwork2.util.reflection.ReflectionProvider;
 
 /**
  * Writes an object as a table, where each field can be expanded if it is an Object/Collection/Array
@@ -45,8 +44,8 @@
     }
 
     @SuppressWarnings("unchecked")
-    public void write(Object root, String expr) throws IntrospectionException,
-        OgnlException {
+    public void write(ReflectionProvider reflectionProvider, Object root, String expr) throws IntrospectionException,
+        ReflectionException {
         prettyWriter.startNode("table");
         prettyWriter.addAttribute("class", "debugTable");
 
@@ -76,7 +75,7 @@
             }
         } else {
             //print properties
-            Map<String, Object> properties = OgnlUtil.getBeanMap(root);
+            Map<String, Object> properties = reflectionProvider.getBeanMap(root);
             for (Map.Entry<String, Object> property : properties.entrySet()) {
                 String name = property.getKey();
                 Object value = property.getValue();

Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/util/StrutsTestCaseHelper.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/util/StrutsTestCaseHelper.java?rev=577728&r1=577727&r2=577728&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/main/java/org/apache/struts2/util/StrutsTestCaseHelper.java (original)
+++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/util/StrutsTestCaseHelper.java Thu Sep 20 05:51:41 2007
@@ -26,7 +26,10 @@
 import org.apache.struts2.dispatcher.Dispatcher;
 import org.springframework.mock.web.MockServletContext;
 
+import com.opensymphony.xwork2.ActionContext;
 import com.opensymphony.xwork2.util.LocalizedTextUtil;
+import com.opensymphony.xwork2.util.ValueStack;
+import com.opensymphony.xwork2.util.ValueStackFactory;
 
 /**
  * Generic test setup methods to be used with any unit testing framework. 
@@ -48,10 +51,17 @@
         Dispatcher du = new Dispatcher(new MockServletContext(), params);
         du.init();
         Dispatcher.setInstance(du);
+        
+        // Reset the value stack
+        ValueStack stack = du.getContainer().getInstance(ValueStackFactory.class).createValueStack();
+        stack.getContext().put(ActionContext.CONTAINER, du.getContainer());
+        ActionContext.setContext(new ActionContext(stack.getContext()));
+        
         return du;
     }
 
     public static void tearDown() throws Exception {
         Dispatcher.setInstance(null);
+        ActionContext.setContext(null);
     }
 }

Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/util/StrutsUtil.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/util/StrutsUtil.java?rev=577728&r1=577727&r2=577728&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/main/java/org/apache/struts2/util/StrutsUtil.java (original)
+++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/util/StrutsUtil.java Thu Sep 20 05:51:41 2007
@@ -44,8 +44,10 @@
 import org.apache.struts2.views.jsp.ui.OgnlTool;
 import org.apache.struts2.views.util.UrlHelper;
 
+import com.opensymphony.xwork2.inject.Container;
 import com.opensymphony.xwork2.util.TextUtils;
 import com.opensymphony.xwork2.util.ValueStack;
+import com.opensymphony.xwork2.ActionContext;
 import com.opensymphony.xwork2.ObjectFactory;
 
 
@@ -61,7 +63,7 @@
     protected HttpServletRequest request;
     protected HttpServletResponse response;
     protected Map classes = new Hashtable();
-    protected OgnlTool ognl = OgnlTool.getInstance();
+    protected OgnlTool ognl;
     protected ValueStack stack;
 
 
@@ -69,6 +71,7 @@
         this.stack = stack;
         this.request = request;
         this.response = response;
+        this.ognl = ((Container)stack.getContext().get(ActionContext.CONTAINER)).getInstance(OgnlTool.class);
     }
 
 

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=577728&r1=577727&r2=577728&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 Thu Sep 20 05:51:41 2007
@@ -37,7 +37,9 @@
 import uk.ltd.getahead.dwr.WebContextFactory;
 
 import com.opensymphony.xwork2.Action;
+import com.opensymphony.xwork2.ActionInvocation;
 import com.opensymphony.xwork2.ActionProxy;
+import com.opensymphony.xwork2.ActionProxyFactory;
 import com.opensymphony.xwork2.DefaultActionInvocation;
 import com.opensymphony.xwork2.DefaultActionProxy;
 import com.opensymphony.xwork2.ObjectFactory;
@@ -46,6 +48,7 @@
 import com.opensymphony.xwork2.ValidationAwareSupport;
 import com.opensymphony.xwork2.config.Configuration;
 import com.opensymphony.xwork2.config.entities.ActionConfig;
+import com.opensymphony.xwork2.inject.Inject;
 
 /**
  * <p/>
@@ -66,6 +69,13 @@
  */
 public class DWRValidator {
     private static final Log LOG = LogFactory.getLog(DWRValidator.class);
+    
+    private ActionProxyFactory actionProxyFactory;
+    
+    @Inject
+    public void setActionProxyFactory(ActionProxyFactory fac) {
+        this.actionProxyFactory = fac;
+    }
 
     public ValidationAwareSupport doPost(String namespace, String action, Map params) throws Exception {
         HttpServletRequest req = WebContextFactory.get().getHttpServletRequest();
@@ -92,9 +102,8 @@
 
         try {
             Configuration cfg = du.getConfigurationManager().getConfiguration();
-            ValidatorActionProxy proxy = new ValidatorActionProxy(namespace, action, ctx);
-            cfg.getContainer().inject(proxy);
-            proxy.prepare();
+            ActionInvocation inv = new ValidatorActionInvocation(ctx, true);
+            ActionProxy proxy = actionProxyFactory.createActionProxy(inv, namespace, action, ctx, true, true);
             proxy.execute();
             Object a = proxy.getAction();
 
@@ -118,8 +127,8 @@
     public static class ValidatorActionInvocation extends DefaultActionInvocation {
         private static final long serialVersionUID = -7645433725470191275L;
 
-        protected ValidatorActionInvocation(ObjectFactory objectFactory, UnknownHandler handler, ActionProxy proxy, Map extraContext) throws Exception {
-            super(objectFactory, handler, proxy, extraContext, true);
+        protected ValidatorActionInvocation(Map extraContext, boolean pushAction) throws Exception {
+            super(extraContext, pushAction);
         }
 
         protected String invokeAction(Object action, ActionConfig actionConfig) throws Exception {
@@ -127,16 +136,4 @@
         }
     }
 
-    public static class ValidatorActionProxy extends DefaultActionProxy {
-        private static final long serialVersionUID = 5754781916414047963L;
-
-        protected ValidatorActionProxy(String namespace, String actionName, Map extraContext) throws Exception {
-            super(namespace, actionName, extraContext, false, true);
-        }
-
-        public void prepare() throws Exception {
-            super.prepare();
-            invocation = new ValidatorActionInvocation(objectFactory, unknownHandler, this, extraContext);
-        }
-    }
 }

Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/jsp/TagUtils.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/jsp/TagUtils.java?rev=577728&r1=577727&r2=577728&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/jsp/TagUtils.java (original)
+++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/jsp/TagUtils.java Thu Sep 20 05:51:41 2007
@@ -52,7 +52,7 @@
         ValueStack stack = (ValueStack) req.getAttribute(ServletActionContext.STRUTS_VALUESTACK_KEY);
 
         if (stack == null) {
-            stack = ValueStackFactory.getFactory().createValueStack();
+            stack = Dispatcher.getInstance().getContainer().getInstance(ValueStackFactory.class).createValueStack();
 
             HttpServletResponse res = (HttpServletResponse) pageContext.getResponse();
             Dispatcher du = Dispatcher.getInstance();

Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/OgnlTool.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/OgnlTool.java?rev=577728&r1=577727&r2=577728&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/OgnlTool.java (original)
+++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/jsp/ui/OgnlTool.java Thu Sep 20 05:51:41 2007
@@ -23,24 +23,30 @@
 import ognl.Ognl;
 import ognl.OgnlException;
 
-import com.opensymphony.xwork2.util.OgnlUtil;
+import com.opensymphony.xwork2.inject.Inject;
+import com.opensymphony.xwork2.ognl.OgnlUtil;
 
 
 /**
  */
 public class OgnlTool {
-    private static OgnlTool instance = new OgnlTool();
 
-    private OgnlTool() {
+    private OgnlUtil ognlUtil;
+    
+    public OgnlTool() {
     }
-
-    public static OgnlTool getInstance() {
-        return instance;
+    
+    @Inject
+    public void setOgnlUtil(OgnlUtil ognlUtil) {
+        this.ognlUtil = ognlUtil;
     }
+    
+    
+
 
     public Object findValue(String expr, Object context) {
         try {
-            return Ognl.getValue(OgnlUtil.compile(expr), context);
+            return Ognl.getValue(ognlUtil.compile(expr), context);
         } catch (OgnlException e) {
             return null;
         }

Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/util/ContextUtil.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/util/ContextUtil.java?rev=577728&r1=577727&r2=577728&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/util/ContextUtil.java (original)
+++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/util/ContextUtil.java Thu Sep 20 05:51:41 2007
@@ -32,6 +32,8 @@
 
 import com.opensymphony.xwork2.ActionContext;
 import com.opensymphony.xwork2.ActionInvocation;
+import com.opensymphony.xwork2.conversion.impl.XWorkConverter;
+import com.opensymphony.xwork2.inject.Container;
 import com.opensymphony.xwork2.inject.Inject;
 import com.opensymphony.xwork2.util.ValueStack;
 
@@ -51,13 +53,6 @@
     public static final String STRUTS = "struts";
     public static final String ACTION = "action";
     
-    public static boolean altSyntax;
-    
-    @Inject(StrutsConstants.STRUTS_TAG_ALTSYNTAX)
-    public static void setAltSyntax(String val) {
-        altSyntax = "true".equals(val);
-    }
-
     public static Map getStandardContext(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
         HashMap map = new HashMap();
         map.put(REQUEST, req);
@@ -67,7 +62,7 @@
         map.put(SESSION, req.getSession(false));
         map.put(BASE, req.getContextPath());
         map.put(STACK, stack);
-        map.put(OGNL, OgnlTool.getInstance());
+        map.put(OGNL, ((Container)stack.getContext().get(ActionContext.CONTAINER)).getInstance(OgnlTool.class));
         map.put(STRUTS, new StrutsUtil(stack, req, res));
 
         ActionInvocation invocation = (ActionInvocation) stack.getContext().get(ActionContext.ACTION_INVOCATION);
@@ -86,12 +81,12 @@
         // We didn't make altSyntax static cause, if so, struts.configuration.xml.reload will not work
         // plus the Configuration implementation should cache the properties, which the framework's
         // configuration implementation does
-        return altSyntax ||(
+        return "true".equals(((Container)context.get(ActionContext.CONTAINER)).getInstance(String.class, StrutsConstants.STRUTS_TAG_ALTSYNTAX)) ||(
                 (context.containsKey("useAltSyntax") &&
                         context.get("useAltSyntax") != null &&
                         "true".equals(context.get("useAltSyntax").toString())));
     }
-
+    
     /**
      * Returns a String for overriding the default templateSuffix if templateSuffix is on the stack
      * @param context stack's context

Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/util/UrlHelper.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/util/UrlHelper.java?rev=577728&r1=577727&r2=577728&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/util/UrlHelper.java (original)
+++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/util/UrlHelper.java Thu Sep 20 05:51:41 2007
@@ -38,6 +38,8 @@
 import org.apache.struts2.ServletActionContext;
 import org.apache.struts2.StrutsConstants;
 
+import com.opensymphony.xwork2.ActionContext;
+import com.opensymphony.xwork2.inject.Container;
 import com.opensymphony.xwork2.inject.Inject;
 import com.opensymphony.xwork2.util.TextParseUtil;
 import com.opensymphony.xwork2.util.ValueStack;
@@ -62,25 +64,6 @@
 
     private static final String AMP = "&amp;";
 
-    private static int httpPort = DEFAULT_HTTP_PORT;
-    private static int httpsPort = DEFAULT_HTTPS_PORT;
-    private static String customEncoding;
-
-    @Inject(StrutsConstants.STRUTS_URL_HTTP_PORT)
-    public static void setHttpPort(String val) {
-        httpPort = Integer.parseInt(val);
-    }
-
-    @Inject(StrutsConstants.STRUTS_URL_HTTPS_PORT)
-    public static void setHttpsPort(String val) {
-        httpsPort = Integer.parseInt(val);
-    }
-
-    @Inject(StrutsConstants.STRUTS_I18N_ENCODING)
-    public static void setCustomEncoding(String val) {
-        customEncoding = val;
-    }
-
     public static String buildUrl(String action, HttpServletRequest request, HttpServletResponse response, Map params) {
         return buildUrl(action, request, response, params, null, true, true);
     }
@@ -97,6 +80,11 @@
         StringBuffer link = new StringBuffer();
 
         boolean changedScheme = false;
+        
+        // FIXME: temporary hack until class is made a properly injected bean
+        Container cont = ActionContext.getContext().getContainer();
+        int httpPort = Integer.parseInt(cont.getInstance(String.class, StrutsConstants.STRUTS_URL_HTTP_PORT));
+        int httpsPort = Integer.parseInt(cont.getInstance(String.class, StrutsConstants.STRUTS_URL_HTTPS_PORT));
 
         // only append scheme if it is different to the current scheme *OR*
         // if we explicity want it to be appended by having forceAddSchemeHostAndPort = true
@@ -301,6 +289,11 @@
 
     private static String getEncodingFromConfiguration() {
         final String encoding;
+        
+        // FIXME: temporary hack until class is made a properly injected bean
+        Container cont = ActionContext.getContext().getContainer();
+        String customEncoding = cont.getInstance(String.class, StrutsConstants.STRUTS_I18N_ENCODING);
+        
         if (customEncoding != null) {
             encoding = customEncoding;
         } else {

Modified: struts/struts2/trunk/core/src/main/resources/struts-default.xml
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/resources/struts-default.xml?rev=577728&r1=577727&r2=577728&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/main/resources/struts-default.xml (original)
+++ struts/struts2/trunk/core/src/main/resources/struts-default.xml Thu Sep 20 05:51:41 2007
@@ -57,22 +57,45 @@
 
     <bean type="com.opensymphony.xwork2.conversion.impl.XWorkConverter" name="struts" class="com.opensymphony.xwork2.conversion.impl.XWorkConverter" />
     <bean type="com.opensymphony.xwork2.conversion.impl.XWorkConverter" name="xwork1" class="com.opensymphony.xwork2.conversion.impl.XWorkConverter" />
+    <bean class="com.opensymphony.xwork2.conversion.impl.XWorkBasicConverter" />
 
     <bean type="com.opensymphony.xwork2.TextProvider" name="xwork1" class="com.opensymphony.xwork2.TextProviderSupport" />
     <bean type="com.opensymphony.xwork2.TextProvider" name="struts" class="com.opensymphony.xwork2.TextProviderSupport" />
 
 	<bean type="org.apache.struts2.components.UrlRenderer" name="struts" class="org.apache.struts2.components.ServletUrlRenderer"/>
-	
-    <!--  Only have static injections -->
-    <bean class="com.opensymphony.xwork2.ObjectFactory" static="true" />
-    <bean class="com.opensymphony.xwork2.conversion.impl.XWorkConverter" static="true" />
-    <bean class="com.opensymphony.xwork2.util.OgnlValueStack" static="true" />
-    <bean class="org.apache.struts2.dispatcher.Dispatcher" static="true" />
-    <bean class="org.apache.struts2.components.Include" static="true" />
-    <bean class="org.apache.struts2.dispatcher.FilterDispatcher" static="true" />
-    <bean class="org.apache.struts2.views.util.ContextUtil" static="true" />
-    <bean class="org.apache.struts2.views.util.UrlHelper" static="true" />
 
+	<bean type="com.opensymphony.xwork2.util.ValueStackFactory" name="struts" class="com.opensymphony.xwork2.ognl.OgnlValueStackFactory" />
+	<bean type="com.opensymphony.xwork2.util.reflection.ReflectionProvider" name="struts" class="com.opensymphony.xwork2.ognl.OgnlReflectionProvider" />	
+	<bean type="com.opensymphony.xwork2.util.reflection.ReflectionContextFactory" name="struts" class="com.opensymphony.xwork2.ognl.OgnlReflectionContextFactory" />
+	
+	<bean type="com.opensymphony.xwork2.TextProvider" name="system" class="com.opensymphony.xwork2.DefaultTextProvider" />
+	<bean type="com.opensymphony.xwork2.conversion.NullHandler" name="java.lang.Object" class="com.opensymphony.xwork2.conversion.impl.InstantiatingNullHandler" />
+	
+	<bean type="com.opensymphony.xwork2.validator.ActionValidatorManager" name="struts" class="com.opensymphony.xwork2.validator.AnnotationActionValidatorManager" />
+	<bean type="com.opensymphony.xwork2.validator.ActionValidatorManager" name="no-annotations" class="com.opensymphony.xwork2.validator.DefaultActionValidatorManager" />
+	
+	<bean class="com.opensymphony.xwork2.ognl.OgnlUtil" />
+	
+	<bean type="ognl.PropertyAccessor" name="com.opensymphony.xwork2.util.CompoundRoot" class="com.opensymphony.xwork2.ognl.accessor.CompoundRootAccessor" />
+	<bean type="ognl.PropertyAccessor" name="java.lang.Object" class="com.opensymphony.xwork2.ognl.accessor.ObjectAccessor" />
+	<bean type="ognl.PropertyAccessor" name="java.util.Iterator" class="com.opensymphony.xwork2.ognl.accessor.XWorkIteratorPropertyAccessor" />
+	<bean type="ognl.PropertyAccessor" name="java.util.Enumeration" class="com.opensymphony.xwork2.ognl.accessor.XWorkEnumerationAccessor" />
+	<bean type="ognl.PropertyAccessor" name="java.util.List" class="com.opensymphony.xwork2.ognl.accessor.XWorkListPropertyAccessor" />
+	<bean type="ognl.PropertyAccessor" name="java.util.Set" class="com.opensymphony.xwork2.ognl.accessor.XWorkCollectionPropertyAccessor" />
+	<bean type="ognl.PropertyAccessor" name="java.util.Map" class="com.opensymphony.xwork2.ognl.accessor.XWorkMapPropertyAccessor" />
+	<bean type="ognl.PropertyAccessor" name="java.util.Collection" class="com.opensymphony.xwork2.ognl.accessor.XWorkCollectionPropertyAccessor" />
+	<bean type="ognl.PropertyAccessor" name="com.opensymphony.xwork2.ognl.ObjectProxy" class="com.opensymphony.xwork2.ognl.accessor.ObjectProxyPropertyAccessor" />
+	
+	<bean type="ognl.MethodAccessor" name="java.lang.Object" class="com.opensymphony.xwork2.ognl.accessor.XWorkMethodAccessor" />
+	<bean type="ognl.MethodAccessor" name="com.opensymphony.xwork2.util.CompoundRoot" class="com.opensymphony.xwork2.ognl.accessor.CompoundRootAccessor" />
+	
+	<bean class="org.apache.struts2.views.jsp.ui.OgnlTool" />
+	
+	<!--  Silly workarounds for OGNL since there is currently no way to flush its internal caches -->
+	<bean type="ognl.PropertyAccessor" name="java.util.ArrayList" class="com.opensymphony.xwork2.ognl.accessor.XWorkListPropertyAccessor" />
+	<bean type="ognl.PropertyAccessor" name="java.util.HashSet" class="com.opensymphony.xwork2.ognl.accessor.XWorkCollectionPropertyAccessor" />
+	<bean type="ognl.PropertyAccessor" name="java.util.HashMap" class="com.opensymphony.xwork2.ognl.accessor.XWorkMapPropertyAccessor" />
+               
     <package name="struts-default" abstract="true">
         <result-types>
             <result-type name="chain" class="com.opensymphony.xwork2.ActionChainResult"/>

Modified: struts/struts2/trunk/core/src/test/java/org/apache/struts2/components/FormButtonTest.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/test/java/org/apache/struts2/components/FormButtonTest.java?rev=577728&r1=577727&r2=577728&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/test/java/org/apache/struts2/components/FormButtonTest.java (original)
+++ struts/struts2/trunk/core/src/test/java/org/apache/struts2/components/FormButtonTest.java Thu Sep 20 05:51:41 2007
@@ -24,6 +24,7 @@
 import org.springframework.mock.web.MockHttpServletRequest;
 import org.springframework.mock.web.MockHttpServletResponse;
 
+import com.opensymphony.xwork2.ActionContext;
 import com.opensymphony.xwork2.util.ValueStack;
 import com.opensymphony.xwork2.util.ValueStackFactory;
 
@@ -36,7 +37,7 @@
     public void testPopulateComponentHtmlId1() throws Exception {
         MockHttpServletRequest req = new MockHttpServletRequest();
         MockHttpServletResponse res = new MockHttpServletResponse();
-        ValueStack stack = ValueStackFactory.getFactory().createValueStack();
+        ValueStack stack = ActionContext.getContext().getValueStack();
 
         Form form = new Form(stack, req, res);
         form.getParameters().put("id", "formId");
@@ -52,7 +53,7 @@
     public void testPopulateComponentHtmlId2() throws Exception {
         MockHttpServletRequest req = new MockHttpServletRequest();
         MockHttpServletResponse res = new MockHttpServletResponse();
-        ValueStack stack = ValueStackFactory.getFactory().createValueStack();
+        ValueStack stack = ActionContext.getContext().getValueStack();
 
         Form form = new Form(stack, req, res);
         form.getParameters().put("id", "formId");
@@ -68,7 +69,7 @@
     public void testPopulateComponentHtmlId3() throws Exception {
         MockHttpServletRequest req = new MockHttpServletRequest();
         MockHttpServletResponse res = new MockHttpServletResponse();
-        ValueStack stack = ValueStackFactory.getFactory().createValueStack();
+        ValueStack stack = ActionContext.getContext().getValueStack();
 
         Form form = new Form(stack, req, res);
         form.getParameters().put("id", "formId");
@@ -85,7 +86,7 @@
     public void testPopulateComponentHtmlId4() throws Exception {
         MockHttpServletRequest req = new MockHttpServletRequest();
         MockHttpServletResponse res = new MockHttpServletResponse();
-        ValueStack stack = ValueStackFactory.getFactory().createValueStack();
+        ValueStack stack = ActionContext.getContext().getValueStack();
 
         Submit submit = new Submit(stack, req, res);
         submit.setId("submitId");
@@ -98,7 +99,7 @@
     public void testPopulateComponentHtmlId5() throws Exception {
         MockHttpServletRequest req = new MockHttpServletRequest();
         MockHttpServletResponse res = new MockHttpServletResponse();
-        ValueStack stack = ValueStackFactory.getFactory().createValueStack();
+        ValueStack stack = ActionContext.getContext().getValueStack();
 
         Submit submit = new Submit(stack, req, res);
         submit.setName("submitName");
@@ -111,7 +112,7 @@
     public void testPopulateComponentHtmlId6() throws Exception {
         MockHttpServletRequest req = new MockHttpServletRequest();
         MockHttpServletResponse res = new MockHttpServletResponse();
-        ValueStack stack = ValueStackFactory.getFactory().createValueStack();
+        ValueStack stack = ActionContext.getContext().getValueStack();
 
         Submit submit = new Submit(stack, req, res);
         submit.setAction("submitAction");

Modified: struts/struts2/trunk/core/src/test/java/org/apache/struts2/components/FormTest.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/test/java/org/apache/struts2/components/FormTest.java?rev=577728&r1=577727&r2=577728&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/test/java/org/apache/struts2/components/FormTest.java (original)
+++ struts/struts2/trunk/core/src/test/java/org/apache/struts2/components/FormTest.java Thu Sep 20 05:51:41 2007
@@ -36,6 +36,7 @@
 
     public void testTestFormGetValidators() {
         Form form = new Form(stack, request, response);
+        container.inject(form);
         form.getParameters().put("actionClass", TestAction.class);
         List v = form.getValidators("foo");
         assertEquals(1, v.size());

Modified: struts/struts2/trunk/core/src/test/java/org/apache/struts2/components/PropertyTest.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/test/java/org/apache/struts2/components/PropertyTest.java?rev=577728&r1=577727&r2=577728&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/test/java/org/apache/struts2/components/PropertyTest.java (original)
+++ struts/struts2/trunk/core/src/test/java/org/apache/struts2/components/PropertyTest.java Thu Sep 20 05:51:41 2007
@@ -26,8 +26,10 @@
 import junit.framework.TestCase;
 import ognl.Ognl;
 
+import org.apache.struts2.StrutsTestCase;
 import org.apache.struts2.util.StrutsTypeConverter;
 
+import com.opensymphony.xwork2.ActionContext;
 import com.opensymphony.xwork2.conversion.impl.XWorkConverter;
 import com.opensymphony.xwork2.util.ValueStack;
 import com.opensymphony.xwork2.util.ValueStackFactory;
@@ -35,9 +37,9 @@
 /**
  *
  */
-public class PropertyTest extends TestCase {
+public class PropertyTest extends StrutsTestCase {
     public void testNormalBehaviour() {
-        final ValueStack stack = ValueStackFactory.getFactory().createValueStack();
+        final ValueStack stack = ActionContext.getContext().getValueStack();
         stack.push(new FooBar("foo-value", "bar-value"));
         final Property property = new Property(stack);
         property.setDefault("default");
@@ -46,7 +48,7 @@
     }
 
     public void testDefaultShouldBeOutputIfBeanNotAvailable() {
-        final ValueStack stack = ValueStackFactory.getFactory().createValueStack();
+        final ValueStack stack = ActionContext.getContext().getValueStack();
         final Property property = new Property(stack);
         property.setDefault("default");
         property.setValue("foo");
@@ -54,7 +56,7 @@
     }
 
     public void testDefaultShouldBeOutputIfPropertyIsNull() {
-        final ValueStack stack = ValueStackFactory.getFactory().createValueStack();
+        final ValueStack stack = ActionContext.getContext().getValueStack();
         stack.push(new FooBar(null, "bar-value"));
         final Property property = new Property(stack);
         property.setDefault("default");
@@ -63,7 +65,7 @@
     }
 
     public void testTopValueShouldReturnTopOfValueStack() {
-        final ValueStack stack = ValueStackFactory.getFactory().createValueStack();
+        final ValueStack stack = ActionContext.getContext().getValueStack();
         stack.push(new FooBar("foo-value", "bar-value"));
         final Property property = new Property(stack);
         property.setDefault("default");
@@ -72,7 +74,7 @@
     }
 
     public void testTypeConverterShouldBeUsed() {
-        final ValueStack stack = ValueStackFactory.getFactory().createValueStack();
+        final ValueStack stack = ActionContext.getContext().getValueStack();
         Ognl.setTypeConverter(stack.getContext(), new TestDefaultConverter());
 
         stack.push(new FooBar("foo-value", "bar-value"));
@@ -83,7 +85,7 @@
     }
 
     public void testTypeConverterReturningNullShouldLeadToDisplayOfDefaultValue() {
-        final ValueStack stack = ValueStackFactory.getFactory().createValueStack();
+        final ValueStack stack = ActionContext.getContext().getValueStack();
         Ognl.setTypeConverter(stack.getContext(), new TestDefaultConverter());
 
         stack.push(new FooBar("foo-value", null));

Modified: struts/struts2/trunk/core/src/test/java/org/apache/struts2/components/UIBeanTest.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/test/java/org/apache/struts2/components/UIBeanTest.java?rev=577728&r1=577727&r2=577728&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/test/java/org/apache/struts2/components/UIBeanTest.java (original)
+++ struts/struts2/trunk/core/src/test/java/org/apache/struts2/components/UIBeanTest.java Thu Sep 20 05:51:41 2007
@@ -24,6 +24,7 @@
 import org.springframework.mock.web.MockHttpServletRequest;
 import org.springframework.mock.web.MockHttpServletResponse;
 
+import com.opensymphony.xwork2.ActionContext;
 import com.opensymphony.xwork2.util.ValueStack;
 import com.opensymphony.xwork2.util.ValueStackFactory;
 
@@ -34,7 +35,7 @@
 public class UIBeanTest extends StrutsTestCase {
 
     public void testPopulateComponentHtmlId1() throws Exception {
-        ValueStack stack = ValueStackFactory.getFactory().createValueStack();
+        ValueStack stack = ActionContext.getContext().getValueStack();
         MockHttpServletRequest req = new MockHttpServletRequest();
         MockHttpServletResponse res = new MockHttpServletResponse();
 
@@ -50,7 +51,7 @@
     }
     
     public void testPopulateComponentHtmlIdWithOgnl() throws Exception {
-        ValueStack stack = ValueStackFactory.getFactory().createValueStack();
+        ValueStack stack = ActionContext.getContext().getValueStack();
         MockHttpServletRequest req = new MockHttpServletRequest();
         MockHttpServletResponse res = new MockHttpServletResponse();
 
@@ -66,7 +67,7 @@
     }
 
     public void testPopulateComponentHtmlId2() throws Exception {
-        ValueStack stack = ValueStackFactory.getFactory().createValueStack();
+        ValueStack stack = ActionContext.getContext().getValueStack();
         MockHttpServletRequest req = new MockHttpServletRequest();
         MockHttpServletResponse res = new MockHttpServletResponse();
 

Modified: struts/struts2/trunk/core/src/test/java/org/apache/struts2/config/MethodConfigurationProviderTest.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/test/java/org/apache/struts2/config/MethodConfigurationProviderTest.java?rev=577728&r1=577727&r2=577728&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/test/java/org/apache/struts2/config/MethodConfigurationProviderTest.java (original)
+++ struts/struts2/trunk/core/src/test/java/org/apache/struts2/config/MethodConfigurationProviderTest.java Thu Sep 20 05:51:41 2007
@@ -29,6 +29,7 @@
 import com.opensymphony.xwork2.config.entities.*;
 import com.opensymphony.xwork2.config.impl.DefaultConfiguration;
 import com.opensymphony.xwork2.ActionSupport;
+import com.opensymphony.xwork2.ObjectFactory;
 
 import junit.framework.TestCase;
 
@@ -61,7 +62,6 @@
      * Creates a mock Dispatcher and seeds Configuration.
      */
     public void setUp() {
-
         InternalConfigurationManager configurationManager = new InternalConfigurationManager();
         dispatcher = new Dispatcher(new MockServletContext(), new HashMap<String, String>());
         dispatcher.setConfigurationManager(configurationManager);
@@ -93,6 +93,7 @@
 
         provider = new MethodConfigurationProvider();
         provider.init(configuration);
+        provider.setObjectFactory(new ObjectFactory());
         provider.loadPackages();
     }
 

Modified: struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/DispatcherTest.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/DispatcherTest.java?rev=577728&r1=577727&r2=577728&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/DispatcherTest.java (original)
+++ struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/DispatcherTest.java Thu Sep 20 05:51:41 2007
@@ -23,16 +23,31 @@
 import java.util.HashMap;
 import java.util.Locale;
 
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletContext;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
 import org.apache.struts2.StrutsConstants;
 import org.apache.struts2.StrutsTestCase;
+import org.apache.struts2.dispatcher.FilterDispatcherTest.InnerActionMapper;
+import org.apache.struts2.dispatcher.FilterDispatcherTest.InnerDestroyableObjectFactory;
+import org.apache.struts2.dispatcher.FilterDispatcherTest.InnerDispatcher;
+import org.springframework.mock.web.MockFilterConfig;
 import org.springframework.mock.web.MockHttpServletRequest;
 import org.springframework.mock.web.MockHttpServletResponse;
 import org.springframework.mock.web.MockServletContext;
 
+import com.mockobjects.dynamic.C;
+import com.mockobjects.dynamic.Mock;
+import com.mockobjects.servlet.MockFilterChain;
+import com.opensymphony.xwork2.ObjectFactory;
+import com.opensymphony.xwork2.config.Configuration;
 import com.opensymphony.xwork2.config.ConfigurationManager;
+import com.opensymphony.xwork2.inject.Container;
+import com.opensymphony.xwork2.inject.ContainerBuilder;
+import com.opensymphony.xwork2.inject.Context;
+import com.opensymphony.xwork2.inject.Factory;
 import com.opensymphony.xwork2.util.LocalizedTextUtil;
 
 /**
@@ -129,6 +144,27 @@
     	finally {
     		du.setInstance(null);
     	}
+    }
+    
+    public void testObjectFactoryDestroy() throws Exception {
+
+        final InnerDestroyableObjectFactory destroyedObjectFactory = new InnerDestroyableObjectFactory();
+        Dispatcher du = new Dispatcher(new MockServletContext(), new HashMap<String, String>());
+        ConfigurationManager cm = new ConfigurationManager();
+        Mock mockConfiguration = new Mock(Configuration.class);
+        cm.setConfiguration((Configuration)mockConfiguration.proxy());
+        
+        Mock mockContainer = new Mock(Container.class);
+        mockConfiguration.expectAndReturn("getContainer", mockContainer.proxy());
+        mockContainer.expectAndReturn("getInstance", C.args(C.eq(ObjectFactory.class)), destroyedObjectFactory);
+        mockConfiguration.expect("destroy");
+        
+        du.setConfigurationManager(cm);
+        assertFalse(destroyedObjectFactory.destroyed);
+        du.cleanup();
+        assertTrue(destroyedObjectFactory.destroyed);
+        mockConfiguration.verify();
+        mockContainer.verify();
     }
     
     class InternalConfigurationManager extends ConfigurationManager {

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=577728&r1=577727&r2=577728&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 Thu Sep 20 05:51:41 2007
@@ -83,32 +83,7 @@
         assertEquals(result4[3], "foo/bar/package4/");
     }
 
-    public void testObjectFactoryDestroy() throws Exception {
-
-        final InnerDestroyableObjectFactory destroyedObjectFactory = new InnerDestroyableObjectFactory();
-        FilterDispatcher filterDispatcher = new FilterDispatcher() {
-            @Override
-            protected Dispatcher createDispatcher(FilterConfig cfg) {
-                return new Dispatcher(cfg.getServletContext(), new HashMap()) {
-                    Container cont = new ContainerBuilder()
-                        .factory(ObjectFactory.class, new Factory() {
-                            public Object create(Context context) throws Exception { return destroyedObjectFactory; }
-                        })
-                        .create(false);
-                    
-                    @Override
-                    public Container getContainer() {
-                        return cont;
-                    }
-                };
-            }
-        };
-        filterDispatcher.init(new MockFilterConfig((ServletContext) null));
-        
-        assertFalse(destroyedObjectFactory.destroyed);
-        filterDispatcher.destroy();
-        assertTrue(destroyedObjectFactory.destroyed);
-    }
+    
 
     public void testIfActionMapperIsNullDontServiceAction() throws Exception {
         MockServletContext servletContext = new MockServletContext();
@@ -125,8 +100,6 @@
         
 
 
-        ObjectFactory.setObjectFactory(new InnerObjectFactory());
-
         FilterDispatcher filter = new FilterDispatcher() {
             protected Dispatcher createDispatcher() {
                 return _dispatcher;
@@ -138,7 +111,7 @@
 
         assertFalse(_dispatcher.serviceRequest);
     }
-
+    
     public void testCharacterEncodingSetBeforeRequestWrappingAndActionService() throws Exception {
         MockServletContext servletContext = new MockServletContext();
         MockFilterConfig filterConfig = new MockFilterConfig(servletContext);
@@ -148,20 +121,6 @@
         final InnerDispatcher _dispatcher = new InnerDispatcher(servletContext);
         Dispatcher.setInstance(null);
 
-        DefaultConfiguration conf = new DefaultConfiguration() {
-        	@Override
-        	public Container getContainer() {
-        		return new ContainerBuilder().create(false);
-        	}
-        };
-       
-        ConfigurationManager confManager = new ConfigurationManager();
-        confManager.setConfiguration(conf);
-        _dispatcher.setConfigurationManager(confManager);
-
-
-        ObjectFactory.setObjectFactory(new InnerObjectFactory());
-
         _dispatcher.setDefaultEncoding("UTF-16_DUMMY");
 
         FilterDispatcher filter = new FilterDispatcher() {
@@ -171,13 +130,13 @@
         };
         filter.setActionMapper(new InnerActionMapper());
         filter.init(filterConfig);
+        _dispatcher.setDefaultEncoding("UTF-16_DUMMY");
         filter.doFilter(req, res, chain);
 
         assertTrue(_dispatcher.wrappedRequest);
         assertTrue(_dispatcher.serviceRequest);
     }
 
-
     // === inner class ========
     public static class InnerObjectFactory extends ObjectFactory {
 
@@ -217,7 +176,7 @@
             // if we set the chracter encoding AFTER we do wrap request, we will get
             // a failing test
             assertNotNull(request.getCharacterEncoding());
-            assertEquals(request.getCharacterEncoding(), "UTF-16_DUMMY");
+            assertEquals("UTF-16_DUMMY", request.getCharacterEncoding());
 
             return request;
         }
@@ -227,7 +186,7 @@
             // if we set the chracter encoding AFTER we do wrap request, we will get
             // a failing test
             assertNotNull(request.getCharacterEncoding());
-            assertEquals(request.getCharacterEncoding(), "UTF-16_DUMMY");
+            assertEquals("UTF-16_DUMMY", request.getCharacterEncoding());
         }
     }
 

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=577728&r1=577727&r2=577728&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 Thu Sep 20 05:51:41 2007
@@ -33,6 +33,7 @@
 
 import junit.framework.TestCase;
 
+import org.apache.struts2.StrutsTestCase;
 import org.apache.struts2.dispatcher.mapper.ActionMapper;
 import org.apache.struts2.dispatcher.mapper.ActionMapping;
 import org.springframework.mock.web.MockFilterConfig;
@@ -50,7 +51,7 @@
  *
  * @version $Date$ $Id$
  */
-public class FilterTest extends TestCase {
+public class FilterTest extends StrutsTestCase {
 
     protected MockFilterConfig filterConfig;
     protected MockHttpServletRequest request;
@@ -70,6 +71,7 @@
 
     @Override
     protected void tearDown() throws Exception {
+        super.tearDown();
         filterConfig = null;
         request = null;
         response = null;
@@ -84,6 +86,7 @@
 
     @Override
     protected void setUp() throws Exception {
+        super.setUp();
         Dispatcher.setInstance(null);
 
         filterConfig = new MockFilterConfig();
@@ -145,7 +148,7 @@
         assertFalse(_dispatcher2.service);
 
         filterDispatcher.init(filterConfig);
-        FilterDispatcher.setActionMapper(new FilterTest.InnerMapper());
+        filterDispatcher.setActionMapper(new FilterTest.InnerMapper());
         filterDispatcher.doFilter(request, response, filterChain2);
         filterDispatcher.destroy();
 
@@ -180,7 +183,7 @@
         assertFalse(_dispatcher2.cleanUp);
 
         filterDispatcher.init(filterConfig);
-        FilterDispatcher.setActionMapper(new FilterTest.InnerMapper());
+        filterDispatcher.setActionMapper(new FilterTest.InnerMapper());
         filterDispatcher.doFilter(request, response, filterChain2);
         filterDispatcher.doFilter(request, response, filterChain2);
         filterDispatcher.destroy();
@@ -296,7 +299,7 @@
         
         @Override 
         public Container getContainer() {
-            return null;
+            return container;
         }
 
         @Override

Modified: struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/HttpHeaderResultTest.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/HttpHeaderResultTest.java?rev=577728&r1=577727&r2=577728&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/HttpHeaderResultTest.java (original)
+++ struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/HttpHeaderResultTest.java Thu Sep 20 05:51:41 2007
@@ -32,7 +32,8 @@
 import com.mockobjects.dynamic.Mock;
 import com.opensymphony.xwork2.ActionContext;
 import com.opensymphony.xwork2.ActionInvocation;
-import com.opensymphony.xwork2.util.OgnlUtil;
+import com.opensymphony.xwork2.ognl.OgnlUtil;
+import com.opensymphony.xwork2.util.reflection.ReflectionProvider;
 
 
 /**
@@ -45,6 +46,7 @@
     HttpHeaderResult result;
     HttpServletResponse response;
     Mock responseMock;
+    ReflectionProvider reflectionProvider;
 
 
     public void testHeaderValuesAreNotParsedWhenParseIsFalse() throws Exception {
@@ -56,7 +58,7 @@
         values.put("bar", "abc");
         ActionContext.getContext().getValueStack().push(values);
 
-        OgnlUtil.setProperties(params, result);
+        reflectionProvider.setProperties(params, result);
 
         responseMock.expect("addHeader", C.args(C.eq("foo"), C.eq("${bar}")));
         responseMock.expect("addHeader", C.args(C.eq("baz"), C.eq("baz")));
@@ -74,7 +76,7 @@
         values.put("bar", "abc");
         ActionContext.getContext().getValueStack().push(values);
 
-        OgnlUtil.setProperties(params, result);
+        reflectionProvider.setProperties(params, result);
 
         responseMock.expect("addHeader", C.args(C.eq("foo"), C.eq("abc")));
         responseMock.expect("addHeader", C.args(C.eq("baz"), C.eq("baz")));
@@ -123,12 +125,12 @@
         responseMock = new Mock(HttpServletResponse.class);
         response = (HttpServletResponse) responseMock.proxy();
         invocation = (ActionInvocation) new Mock(ActionInvocation.class).proxy();
+        reflectionProvider = container.getInstance(ReflectionProvider.class);
         ServletActionContext.setResponse(response);
     }
 
     protected void tearDown() throws Exception {
         super.tearDown();
-        ServletActionContext.setResponse(null);
         ActionContext.setContext(null);
     }
 }