[jboss-user] [JBoss Seam] - Complex EL Expressions in JPDL decisions aren't being evalua

dheggie do-not-reply at jboss.com
Wed Sep 19 11:47:46 EDT 2007


Since upgrading to 2.0.0 CR1 (from BETA1) some of the el expressions in my jpdl decisions are causing exceptions. Example:


  | org.jbpm.JbpmException: couldn't evaluate expression '#{simpleStateMachine.addressValid and empty simpleStateMachine.addressList}'
  | 	org.jbpm.jpdl.el.impl.JbpmExpressionEvaluator.evaluate(JbpmExpressionEvaluator.java:43)
  | 	org.jbpm.jpdl.el.impl.JbpmExpressionEvaluator.evaluate(JbpmExpressionEvaluator.java:30)
  | 	org.jbpm.graph.node.Decision.execute(Decision.java:95)
  | 	org.jbpm.graph.def.Node.enter(Node.java:318)
  | 	org.jbpm.graph.def.Transition.take(Transition.java:151)
  | 	org.jbpm.graph.def.Node.leave(Node.java:393)
  | 	org.jbpm.graph.exe.Token.signal(Token.java:194)
  | 	org.jbpm.graph.exe.Token.signal(Token.java:157)
  | 	org.jbpm.graph.exe.ProcessInstance.signal(ProcessInstance.java:282)
  | 	org.jboss.seam.pageflow.Pageflow.signal(Pageflow.java:477)
  | 	org.jboss.seam.pageflow.Pageflow.navigate(Pageflow.java:336)
  | 	org.jboss.seam.jsf.SeamNavigationHandler.handleNavigation(SeamNavigationHandler.java:40)
  | 	org.test.navigation.BackNavigationHandler.handleNavigation(BackNavigationHandler.java:30)
  | 	com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:119)
  | 	javax.faces.component.UICommand.broadcast(UICommand.java:383)
  | 	org.ajax4jsf.component.AjaxViewRoot.processEvents(AjaxViewRoot.java:186)
  | 	org.ajax4jsf.component.AjaxViewRoot.broadcastEvents(AjaxViewRoot.java:164)
  | 	org.ajax4jsf.component.AjaxViewRoot.processApplication(AjaxViewRoot.java:352)
  | 	com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:97)
  | 	com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
  | 	com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)
  | 	javax.faces.webapp.FacesServlet.service(FacesServlet.java:244)
  | 	org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:307)
  | 	org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:100)
  | 	org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:83)
  | 	org.jboss.seam.web.MultipartFilter.doFilter(MultipartFilter.java:85)
  | 	org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
  | 	org.jboss.seam.web.ExceptionFilter.doFilter(ExceptionFilter.java:64)
  | 	org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
  | 	org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:44)
  | 	org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
  | 	org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:141)
  | 	org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:281)
  | 	org.jboss.seam.web.Ajax4jsfFilter.doFilter(Ajax4jsfFilter.java:60)
  | 	org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
  | 	org.jboss.seam.web.LoggingFilter.doFilter(LoggingFilter.java:58)
  | 	org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
  | 	org.jboss.seam.servlet.SeamFilter.doFilter(SeamFilter.java:150)
  | 	org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:147)
  | 
  | root cause
  | 
  | javax.el.ELException: Not a Valid Method Expression: ${simpleStateMachine.addressValid and empty simpleStateMachine.addressList}
  | 	org.jboss.el.lang.ExpressionBuilder.createMethodExpression(ExpressionBuilder.java:210)
  | 	org.jboss.el.ExpressionFactoryImpl.createMethodExpression(ExpressionFactoryImpl.java:57)
  | 	org.jboss.seam.bpm.SeamExpressionEvaluator$1.initMethodExpression(SeamExpressionEvaluator.java:54)
  | 	org.jboss.seam.bpm.SeamExpressionEvaluator$1.evaluate(SeamExpressionEvaluator.java:69)
  | 	org.jboss.seam.bpm.SeamExpressionEvaluator.evaluate(SeamExpressionEvaluator.java:35)
  | 	org.jbpm.jpdl.el.impl.JbpmExpressionEvaluator.evaluate(JbpmExpressionEvaluator.java:39)
  | 	org.jbpm.jpdl.el.impl.JbpmExpressionEvaluator.evaluate(JbpmExpressionEvaluator.java:30)
  | 	org.jbpm.graph.node.Decision.execute(Decision.java:95)
  | 	org.jbpm.graph.def.Node.enter(Node.java:318)
  | 	org.jbpm.graph.def.Transition.take(Transition.java:151)
  | 	org.jbpm.graph.def.Node.leave(Node.java:393)
  | 	org.jbpm.graph.exe.Token.signal(Token.java:194)
  | 	org.jbpm.graph.exe.Token.signal(Token.java:157)
  | 	org.jbpm.graph.exe.ProcessInstance.signal(ProcessInstance.java:282)
  | 	org.jboss.seam.pageflow.Pageflow.signal(Pageflow.java:477)
  | 	org.jboss.seam.pageflow.Pageflow.navigate(Pageflow.java:336)
  | 	org.jboss.seam.jsf.SeamNavigationHandler.handleNavigation(SeamNavigationHandler.java:40)
  | 	org.test.navigation.BackNavigationHandler.handleNavigation(BackNavigationHandler.java:30)
  | 	com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:119)
  | 	javax.faces.component.UICommand.broadcast(UICommand.java:383)
  | 	org.ajax4jsf.component.AjaxViewRoot.processEvents(AjaxViewRoot.java:186)
  | 	org.ajax4jsf.component.AjaxViewRoot.broadcastEvents(AjaxViewRoot.java:164)
  | 	org.ajax4jsf.component.AjaxViewRoot.processApplication(AjaxViewRoot.java:352)
  | 	com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:97)
  | 	com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
  | 	com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)
  | 	javax.faces.webapp.FacesServlet.service(FacesServlet.java:244)
  | 	org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:307)
  | 	org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:100)
  | 	org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:83)
  | 	org.jboss.seam.web.MultipartFilter.doFilter(MultipartFilter.java:85)
  | 	org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
  | 	org.jboss.seam.web.ExceptionFilter.doFilter(ExceptionFilter.java:64)
  | 	org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
  | 	org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:44)
  | 	org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
  | 	org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:141)
  | 	org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:281)
  | 	org.jboss.seam.web.Ajax4jsfFilter.doFilter(Ajax4jsfFilter.java:60)
  | 	org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
  | 	org.jboss.seam.web.LoggingFilter.doFilter(LoggingFilter.java:58)
  | 	org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
  | 	org.jboss.seam.servlet.SeamFilter.doFilter(SeamFilter.java:150)
  | 	org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:147)
  | 

Looking into this further I noticed that the culprit is this method in the org.jboss.seam.bpm.SeamExpressionResolver


  | public Object evaluate(VariableResolver resolver) throws ELException
  |          {
  |             try
  |             {
  |                try
  |                {
  |                   if (me==null && ve==null) initMethodExpression();
  |                   if (me!=null && ve==null) return me.invoke( createELContext(resolver, mapper), new Object[0] );
  |                }
  |                catch (javax.el.MethodNotFoundException mnfe)
  |                {
  |                   if (ve==null) initValueExpression();
  |                   if (ve!=null) return ve.getValue( createELContext(resolver, mapper) );
  |                }
  |                throw new ELException();
  |             }
  |             catch (javax.el.ELException vele)
  |             {
  |                throw new ELException(vele);
  |             }
  |          }
  | 

The initMethodExpression() method call tries to create a method expression and fails, throwing a ELException which causes us to miss trying to create a value expression. What I think should be changed is rather than catching the javax.el.MethodNotFoundException  we should just catch a javax.el.ELException so we have 2 goes at evaluating the expression.

What do people think?

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4086210#4086210

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4086210



More information about the jboss-user mailing list