diff --git a/spring-webflow/src/main/java/org/springframework/webflow/engine/builder/xml/XmlFlowBuilder.java b/spring-webflow/src/main/java/org/springframework/webflow/engine/builder/xml/XmlFlowBuilder.java index 28ca760a..15619bc4 100644 --- a/spring-webflow/src/main/java/org/springframework/webflow/engine/builder/xml/XmlFlowBuilder.java +++ b/spring-webflow/src/main/java/org/springframework/webflow/engine/builder/xml/XmlFlowBuilder.java @@ -147,6 +147,8 @@ public class XmlFlowBuilder extends AbstractFlowBuilder implements ResourceHolde private static final String METHOD_RESULT_ELEMENT = "method-result"; + private static final String RESULT_TYPE_ATTRIBUTE = "result-type"; + private static final String EVALUATE_ACTION_ELEMENT = "evaluate-action"; private static final String SET_ELEMENT = "set"; @@ -754,7 +756,8 @@ public class XmlFlowBuilder extends AbstractFlowBuilder implements ResourceHolde String beanId = element.getAttribute(BEAN_ATTRIBUTE); String methodName = element.getAttribute(METHOD_ATTRIBUTE); Parameters parameters = parseMethodParameters(element); - MethodSignature methodSignature = new MethodSignature(methodName, parameters); + Class desiredResultType = parseMethodResultType(element); + MethodSignature methodSignature = new MethodSignature(methodName, parameters, desiredResultType); ActionResultExposer resultExposer = parseMethodResultExposer(element); return getLocalContext().getBeanInvokingActionFactory().createBeanInvokingAction(beanId, getLocalContext().getBeanFactory(), methodSignature, resultExposer, @@ -783,6 +786,17 @@ public class XmlFlowBuilder extends AbstractFlowBuilder implements ResourceHolde return parameters; } + private Class parseMethodResultType(Element element) { + Element resultElement = DomUtils.getChildElementByTagName(element, METHOD_RESULT_ELEMENT); + Class type = null; + if (resultElement != null) { + if (resultElement.hasAttribute(RESULT_TYPE_ATTRIBUTE)) { + type = (Class) fromStringTo(Class.class).execute(resultElement.getAttribute(RESULT_TYPE_ATTRIBUTE)); + } + } + return type; + } + private ActionResultExposer parseMethodResultExposer(Element element) { Element resultElement = DomUtils.getChildElementByTagName(element, METHOD_RESULT_ELEMENT); if (resultElement != null) { diff --git a/spring-webflow/src/main/java/org/springframework/webflow/engine/builder/xml/spring-webflow-2.0.xsd b/spring-webflow/src/main/java/org/springframework/webflow/engine/builder/xml/spring-webflow-2.0.xsd index 6e2951c7..f315652f 100644 --- a/spring-webflow/src/main/java/org/springframework/webflow/engine/builder/xml/spring-webflow-2.0.xsd +++ b/spring-webflow/src/main/java/org/springframework/webflow/engine/builder/xml/spring-webflow-2.0.xsd @@ -1012,8 +1012,8 @@ parameter type, a type conversion will be attempted. @@ -1035,6 +1035,16 @@ If not specified the default scope type is used ('request' by default). ]]> + + + + + + +