ActionDescriptor action = wf.getAction(actionId);
ActionDescriptor action = null;
    public void doAction(long id, int actionId, Map inputs) throws WorkflowException {        WorkflowStore store = getPersistence();        WorkflowEntry entry = store.findEntry(id);        WorkflowDescriptor wf = getWorkflow(entry.getWorkflowName());        List currentSteps = store.findCurrentSteps(id);        ActionDescriptor action = wf.getAction(actionId);        PropertySet ps = store.getPropertySet(id);        Map transientVars = new HashMap();        if (entry.getState() != WorkflowEntry.ACTIVATED) {            return;        }        if (inputs != null) {            transientVars.putAll(inputs);        }        populateTransientMap(entry, transientVars, wf.getRegisters(), new Integer(actionId), currentSteps);        boolean validAction = isActionAvailable(action, transientVars, ps);        if (!validAction) {            throw new InvalidActionException("Action " + actionId + " is invalid");        }        try {            transitionWorkflow(entry, currentSteps, store, wf, action, transientVars, inputs, ps);            completeEntry(id);        } catch (WorkflowException e) {            context.setRollbackOnly();            throw e;        }    }