diff --git a/xwork-core/src/main/java/com/opensymphony/xwork2/ObjectFactory.java b/xwork-core/src/main/java/com/opensymphony/xwork2/ObjectFactory.java index 3f0a6a258..d32feb580 100644 --- a/xwork-core/src/main/java/com/opensymphony/xwork2/ObjectFactory.java +++ b/xwork-core/src/main/java/com/opensymphony/xwork2/ObjectFactory.java @@ -20,6 +20,7 @@ import com.opensymphony.xwork2.config.entities.ActionConfig; import com.opensymphony.xwork2.config.entities.InterceptorConfig; import com.opensymphony.xwork2.config.entities.ResultConfig; import com.opensymphony.xwork2.conversion.TypeConverter; +import com.opensymphony.xwork2.factory.ResultBuilder; import com.opensymphony.xwork2.inject.Container; import com.opensymphony.xwork2.inject.Inject; import com.opensymphony.xwork2.interceptor.Interceptor; @@ -53,6 +54,8 @@ public class ObjectFactory implements Serializable { private Container container; protected ReflectionProvider reflectionProvider; + private ResultBuilder resultBuilder; + @Inject(value="objectFactory.classloader", required=false) public void setClassLoader(ClassLoader cl) { this.ccl = cl; @@ -75,6 +78,11 @@ public class ObjectFactory implements Serializable { this.container = container; } + @Inject(required = false) + public void setResultBuilder(ResultBuilder resultBuilder) { + this.resultBuilder = resultBuilder; + } + /** * @deprecated Since 2.1 */ @@ -221,6 +229,9 @@ public class ObjectFactory implements Serializable { * @param extraContext a Map of extra context which uses the same keys as the {@link com.opensymphony.xwork2.ActionContext} */ public Result buildResult(ResultConfig resultConfig, Map extraContext) throws Exception { + if (resultBuilder != null) { + return resultBuilder.buildResult(resultConfig, extraContext); + } String resultClassName = resultConfig.getClassName(); Result result = null; diff --git a/xwork-core/src/main/java/com/opensymphony/xwork2/factory/ResultBuilder.java b/xwork-core/src/main/java/com/opensymphony/xwork2/factory/ResultBuilder.java new file mode 100644 index 000000000..685d50717 --- /dev/null +++ b/xwork-core/src/main/java/com/opensymphony/xwork2/factory/ResultBuilder.java @@ -0,0 +1,15 @@ +package com.opensymphony.xwork2.factory; + +import com.opensymphony.xwork2.Result; +import com.opensymphony.xwork2.config.entities.ResultConfig; + +import java.util.Map; + +/** + * Used by {@link com.opensymphony.xwork2.ObjectFactory} to build {@link com.opensymphony.xwork2.Result} + */ +public interface ResultBuilder { + + Result buildResult(ResultConfig resultConfig, Map extraContext) throws Exception; + +}