Hi,

I'm getting the following NullPointerException in web flow:

No transition found on occurence of event 'processChanges' in state 'errorDisplay' of flow 'manageorder-flow' -- valid transitional criteria are array<TransitionCriteria>[[empty]] -- likely programmer error, check the set of TransitionCriteria for this state.

Here is the code:

Code:
	<view-state id="submitOrder" model="onlineAdoptions" view ="submitOrder">
	
	   <transition on="processOrderSubmit">
			<evaluate expression="changeActionFactory.createChangeActions(requestParameters.execution, requestParameters.uowXml)"  result="requestScope.uow" />
			<evaluate expression="unitOfWorkManager.applyChangeActionUOW(flowRequestContext, conversationScope.onlineAdoptionsPathScope)" />  
			<render   fragments="procesOrderSubmitResult" />
	   </transition>
	   
		<transition
			on-exception="com.follett.fheg.ecommerce.onlineadoptions.service.AdoptionServiceException" to="submitOrder">
			<evaluate
				expression="T(com.follett.fheg.ecommerce.onlineadoptions.util.ExceptionUtils).buildServerResponseMessage(flashScope.rootCauseException)"
				result="flashScope.serverResponseMessage" />
			<render fragments="procesOrderSubmitResult" />
		</transition>  
		
		<transition on="processOrderComplete" to="manageOrderComplete" />
		
		<transition on="back" to="reviewOrder" bind="false">
            <evaluate expression="ddcsLoaderAction.loadDDCSForOnlineAdoption(flowRequestContext, conversationScope.onlineAdoption, courseSearchScope)" />
        </transition>

    </view-state>
Here is the method code:

Code:
/**
 * Factory class for creating instances of Change Actions.  This class implements
 * BeanFactoryAware in order to inject the BeanFactory reference into the change
 * actions being created.
 *
 * @author mnolan
 */
public class OnlineAdoptionChangeActionFactory implements BeanFactoryAware {

	@SuppressWarnings("unused")
	private static final String cvsid = "$Id: OnlineAdoptionChangeActionFactory.java,v 1.5 2011/03/31 19:29:07 smukher Exp $";
	private static final String PACKAGE_PATH = OnlineAdoptionChangeActionFactory.class.getPackage().getName();

	private BeanFactory beanFactory = null ;
	private Unmarshaller unmarshaller = null ;

	/**
	 * Takes in the ChangeAction string generated from the browser and gives
	 * back a list of concrete <code>OnlineAdoptionChangeAction</code>.
	 * 
	 * @param xmlString
	 * @return
	 * @throws AdoptionChangeActionException
	 */
	public OnlineAdoptionChangeActionUnitOfWork createChangeActions ( final String executionId,  final String xmlString ) throws AdoptionChangeActionException {

		if (StringUtils.isBlank(xmlString)) {
			throw new AdoptionChangeActionException(LogicalErrorCode.CHANGE_ACTION_FACTORY_TRANSFORMATION_ERROR);
		}

		ChangeActions changeActionsDataList = null ;

		try {

			final Source source = new StreamSource(org.apache.commons.io.IOUtils.toInputStream(xmlString));
			changeActionsDataList = (ChangeActions) this.unmarshaller.unmarshal(source) ;

		} catch (final IOException e) {
			throw new AdoptionChangeActionException(LogicalErrorCode.CHANGE_ACTION_FACTORY_TRANSFORMATION_ERROR, e) ;
		}

		return this.createChangeActions(executionId, changeActionsDataList) ;
	}

	/**
	 * Creates ChangeActions on the fly taking in the <code>ChangeActions</code>
	 * JAXB class.
	 * 
	 * @param changeActionsDataList
	 *            Input list of ChangeAction
	 * @return List of class that implements OnlineAdoptionChangeAction
	 * @throws AdoptionChangeActionException
	 */
	public OnlineAdoptionChangeActionUnitOfWork createChangeActions ( final String executionId,  final ChangeActions changeActionsDataList )
	throws AdoptionChangeActionException {

		final List < OnlineAdoptionChangeAction<?> > changeActionResultList = new LinkedList < OnlineAdoptionChangeAction<?> >() ;

		if (CollectionUtils.isNotEmpty(changeActionsDataList.getChangeAction())) {

			for (final ChangeAction changeActionData : changeActionsDataList.getChangeAction()) {

				try {
					final ChangeActionType changeActionType = changeActionData.getActionName() ;
					final Class < ? > changeActionClass = Class.forName(PACKAGE_PATH + "." + changeActionType.value()) ;

					@SuppressWarnings("unchecked")
					final Constructor < OnlineAdoptionChangeAction > constructor = ConstructorUtils.getAccessibleConstructor(
							changeActionClass, new Class[0]) ;

					@SuppressWarnings("unchecked")
					final OnlineAdoptionChangeAction<ChangeAction> changeAction = constructor.newInstance() ;

					if (changeAction instanceof BeanFactoryAware) {

						final BeanFactoryAware beanFactoryAwareChangeAction = (BeanFactoryAware) changeAction ;
						beanFactoryAwareChangeAction.setBeanFactory(this.beanFactory) ;
					}

					changeAction.init(changeActionData);

					changeActionResultList.add(changeAction) ;
				} catch (final Exception e) {
					// mnolan - We are handling exception generically as we want
					// to treat them all in the same manner
					if (!(e instanceof AdoptionChangeActionException)) {
						throw new AdoptionChangeActionException(LogicalErrorCode.CHANGE_ACTION_FACTORY_CHANGE_ACTION_CONSTRUCTION_ERROR, e) ;
					} else {
						throw (AdoptionChangeActionException) e;
					}
				}
			}
		}

		return new OnlineAdoptionChangeActionUnitOfWork(executionId, changeActionResultList) ;
	}