// Path: src/main/java/org/springframework/extensions/workflow/context/TransitionActionContext.java
// public final class TransitionActionContext implements Serializable{
//     private static final long serialVersionUID = -2438974871913081078L;
//     private String targetStateId;
//     private Object[] arguments;
// 
//     public TransitionActionContext(String targetStateId, Object[] arguments) {
//         this.targetStateId = targetStateId;
//         this.arguments = arguments;
//     }
// 
//     public Object[] getArguments() {
//         return arguments;
//     }
// 
//     public String getTargetStateId() {
//         return targetStateId;
//     }
// 
//     public void setTargetStateId(String targetStateId) {
//         this.targetStateId = targetStateId;
//     }
// }
// 
// Path: src/main/java/org/springframework/extensions/workflow/TransitionAction.java
// public interface TransitionAction {
// 
//     void perform(TransitionActionContext actionContext) throws Exception;
//     
// }


import org.springframework.extensions.workflow.context.TransitionActionContext;
import org.springframework.extensions.workflow.TransitionAction;
import org.springframework.util.Assert;
package org.springframework.extensions.workflow.support;


/**
 * @author janm
 */
public class MethodInvokingTransitionAction implements TransitionAction {
    private transient TransitionMethodInvoker transitionMethodInvoker;

    public MethodInvokingTransitionAction(Object target, String methodName) throws NoSuchMethodException, ClassNotFoundException {
        Assert.notNull(target, "The 'target' argument must not be null.");
        Assert.notNull(methodName, "The 'methodName' argument must not be null.");

        this.transitionMethodInvoker = new TransitionMethodInvoker(target,  methodName);
    }

// Path: src/main/java/org/springframework/extensions/workflow/context/TransitionActionContext.java
// public final class TransitionActionContext implements Serializable{
//     private static final long serialVersionUID = -2438974871913081078L;
//     private String targetStateId;
//     private Object[] arguments;
// 
//     public TransitionActionContext(String targetStateId, Object[] arguments) {
//         this.targetStateId = targetStateId;
//         this.arguments = arguments;
//     }
// 
//     public Object[] getArguments() {
//         return arguments;
//     }
// 
//     public String getTargetStateId() {
//         return targetStateId;
//     }
// 
//     public void setTargetStateId(String targetStateId) {
//         this.targetStateId = targetStateId;
//     }
// }
// 
// Path: src/main/java/org/springframework/extensions/workflow/TransitionAction.java
// public interface TransitionAction {
// 
//     void perform(TransitionActionContext actionContext) throws Exception;
//     
// }


// Path: src/main/java/org/springframework/extensions/workflow/support/MethodInvokingTransitionAction.java
import org.springframework.extensions.workflow.context.TransitionActionContext;
import org.springframework.extensions.workflow.TransitionAction;
import org.springframework.util.Assert;

package org.springframework.extensions.workflow.support;


/**
 * @author janm
 */
public class MethodInvokingTransitionAction implements TransitionAction {
    private transient TransitionMethodInvoker transitionMethodInvoker;

    public MethodInvokingTransitionAction(Object target, String methodName) throws NoSuchMethodException, ClassNotFoundException {
        Assert.notNull(target, "The 'target' argument must not be null.");
        Assert.notNull(methodName, "The 'methodName' argument must not be null.");

        this.transitionMethodInvoker = new TransitionMethodInvoker(target,  methodName);
    }

    public void perform(TransitionActionContext actionContext) throws Exception {