[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