Announcement Announcement Module
Collapse
No announcement yet.
NullPointerException issue in Web Flow Page Title Module
Move Remove Collapse
X
Conversation Detail Module
Collapse
  • Filter
  • Time
  • Show
Clear All
new posts

  • NullPointerException issue in Web Flow

    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) ;
    	}
Working...
X