Thymeleaf/Webflow SpelParseException: EL1051E:(pos 34): 意外 运行 参数不足

Thymeleaf/Webflow SpelParseException: EL1051E:(pos 34): Unexpected ran out of arguments

任何人都可以提示我应该在此处查找什么以便进行调试吗?该错误提供了一些可理解的指针(对我而言)。

我几乎可以肯定错误是我 flow.xml 的输入。

注意:这发生在一个网络流的入口处。所有其他 webflows 工作正常。

<on-start>
   <evaluate expression="testTypeViewService.getVwNewTestType(requestParameters.businessId,false)" result="flowScope.vwNewTestType" />
   <evaluate expression="testTypeViewService.generateTutMap(flowRequestContext,flowScope.vwNewTestType)"
   result="flowScope.vwNewTestType" />
   <evaluate expression="testTypeViewService.generateTtMap(flowRequestContext,flowScope.vwNewTestType, 2)"
   result="flowScope.vwNewTestType" />
  
</on-start>

日志文件中的关键点似乎是这样的:

[DEBUG] 2015-09-10 11:02:21,622: org.springframework.web.servlet.DispatcherServlet.processHandlerException(DispatcherServlet.java:1198) Handler execution resulted in exception - forwarding to resolved error view: ModelAndView: reference to view with name 'error'; model is {exception=org.springframework.expression.spel.SpelParseException: EL1051E:(pos 34): Unexpected ran out of arguments} org.springframework.expression.spel.SpelParseException: EL1051E:(pos 34): Unexpected ran out of arguments at org.springframework.expression.spel.standard.InternalSpelExpressionParser.raiseInternalException(InternalSpelExpressionParser.java:976) at org.springframework.expression.spel.standard.InternalSpelExpressionParser.consumeArguments(InternalSpelExpressionParser.java:476) at org.springframework.expression.spel.standard.InternalSpelExpressionParser.maybeEatMethodArgs(InternalSpelExpressionParser.java:443)

更完整的日志数据如下:

[DEBUG] 2015-09-10 11:02:21,567: org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:150) Looking up JNDI object with name [spring.liveBeansView.mbeanDomai [DEBUG] 2015-09-10 11:02:21,569: org.springframework.jndi.JndiPropertySource.getProperty(JndiPropertySource.java:90) JNDI lookup for name [spring.liveBeansView.mbeanDomain] threw NamingException with message: Name [spring.liveBeansView.mbeanDomain] is not bound in this Context. Unable to find [spring.liveBeansView.mbeanDomain].. Returning null. [DEBUG] 2015-09-10 11:02:21,575: org.springframework.core.env.PropertySourcesPropertyResolver.getProperty(PropertySourcesPropertyResolver.java:81) Searching for key 'spring.liveBeansView.mbeanDomain' in [systemProperties] [DEBUG] 2015-09-10 11:02:21,578: org.springframework.core.env.PropertySourcesPropertyResolver.getProperty(PropertySourcesPropertyResolver.java:81) Searching for key 'spring.liveBeansView.mbeanDomain' in [systemEnvironment] [DEBUG] 2015-09-10 11:02:21,582: org.springframework.core.env.PropertySourcesPropertyResolver.getProperty(PropertySourcesPropertyResolver.java:103) Could not find key 'spring.liveBeansView.mbeanDomain' in any property source. Returning [null] [DEBUG] 2015-09-10 11:02:21,604: org.springframework.web.servlet.handler.AbstractHandlerExceptionResolver.resolveException(AbstractHandlerExceptionResolver.java:134) Resolving exception from handler [[FlowHandlerMapping.DefaultFlowHandler@76eba396]]: org.springframework.expression.spel.SpelParseException: EL1051E:(pos 34): Unexpected ran out of arguments [DEBUG] 2015-09-10 11:02:21,605: org.springframework.web.servlet.handler.AbstractHandlerExceptionResolver.resolveException(AbstractHandlerExceptionResolver.java:134) Resolving exception from handler [[FlowHandlerMapping.DefaultFlowHandler@76eba396]]: org.springframework.expression.spel.SpelParseException: EL1051E:(pos 34): Unexpected ran out of arguments [DEBUG] 2015-09-10 11:02:21,606: org.springframework.web.servlet.handler.AbstractHandlerExceptionResolver.resolveException(AbstractHandlerExceptionResolver.java:134) Resolving exception from handler [[FlowHandlerMapping.DefaultFlowHandler@76eba396]]: org.springframework.expression.spel.SpelParseException: EL1051E:(pos 34): Unexpected ran out of arguments [DEBUG] 2015-09-10 11:02:21,609: org.springframework.web.servlet.handler.AbstractHandlerExceptionResolver.resolveException(AbstractHandlerExceptionResolver.java:134) Resolving exception from handler [[FlowHandlerMapping.DefaultFlowHandler@76eba396]]: org.springframework.expression.spel.SpelParseException: EL1051E:(pos 34): Unexpected ran out of arguments [DEBUG] 2015-09-10 11:02:21,610: org.springframework.web.servlet.handler.AbstractHandlerExceptionResolver.resolveException(AbstractHandlerExceptionResolver.java:134) Resolving exception from handler [[FlowHandlerMapping.DefaultFlowHandler@76eba396]]: org.springframework.expression.spel.SpelParseException: EL1051E:(pos 34): Unexpected ran out of arguments [DEBUG] 2015-09-10 11:02:21,613: org.springframework.web.servlet.handler.SimpleMappingExceptionResolver.determineViewName(SimpleMappingExceptionResolver.java:219) Resolving to default view 'error' for exception of type [org.springframework.expression.spel.SpelParseException] [DEBUG] 2015-09-10 11:02:21,615: org.springframework.web.servlet.handler.SimpleMappingExceptionResolver.getModelAndView(SimpleMappingExceptionResolver.java:341) Exposing Exception as model attribute 'exception' [DEBUG] 2015-09-10 11:02:21,622: org.springframework.web.servlet.DispatcherServlet.processHandlerException(DispatcherServlet.java:1198) Handler execution resulted in exception - forwarding to resolved error view: ModelAndView: reference to view with name 'error'; model is {exception=org.springframework.expression.spel.SpelParseException: EL1051E:(pos 34): Unexpected ran out of arguments} org.springframework.expression.spel.SpelParseException: EL1051E:(pos 34): Unexpected ran out of arguments at org.springframework.expression.spel.standard.InternalSpelExpressionParser.raiseInternalException(InternalSpelExpressionParser.java:976) at org.springframework.expression.spel.standard.InternalSpelExpressionParser.consumeArguments(InternalSpelExpressionParser.java:476) at org.springframework.expression.spel.standard.InternalSpelExpressionParser.maybeEatMethodArgs(InternalSpelExpressionParser.java:443) at org.springframework.expression.spel.standard.InternalSpelExpressionParser.maybeEatMethodOrProperty(InternalSpelExpressionParser.java:738) at org.springframework.expression.spel.standard.InternalSpelExpressionParser.eatDottedNode(InternalSpelExpressionParser.java:397) at org.springframework.expression.spel.standard.InternalSpelExpressionParser.maybeEatNode(InternalSpelExpressionParser.java:360) at org.springframework.expression.spel.standard.InternalSpelExpressionParser.eatPrimaryExpression(InternalSpelExpressionParser.java:345) at org.springframework.expression.spel.standard.InternalSpelExpressionParser.eatUnaryExpression(InternalSpelExpressionParser.java:337) at org.springframework.expression.spel.standard.InternalSpelExpressionParser.eatPowerIncDecExpression(InternalSpelExpressionParser.java:293) at org.springframework.expression.spel.standard.InternalSpelExpressionParser.eatProductExpression(InternalSpelExpressionParser.java:272) at org.springframework.expression.spel.standard.InternalSpelExpressionParser.eatSumExpression(InternalSpelExpressionParser.java:255) at org.springframework.expression.spel.standard.InternalSpelExpressionParser.eatRelationalExpression(InternalSpelExpressionParser.java:210) at org.springframework.expression.spel.standard.InternalSpelExpressionParser.eatLogicalAndExpression(InternalSpelExpressionParser.java:198) at org.springframework.expression.spel.standard.InternalSpelExpressionParser.eatLogicalOrExpression(InternalSpelExpressionParser.java:186) at org.springframework.expression.spel.standard.InternalSpelExpressionParser.eatExpression(InternalSpelExpressionParser.java:146) at org.springframework.expression.spel.standard.InternalSpelExpressionParser.doParseExpression(InternalSpelExpressionParser.java:127) at org.springframework.expression.spel.standard.SpelExpressionParser.doParseExpression(SpelExpressionParser.java:60) at org.springframework.expression.spel.standard.SpelExpressionParser.doParseExpression(SpelExpressionParser.java:32) at org.springframework.expression.common.TemplateAwareExpressionParser.parseExpression(TemplateAwareExpressionParser.java:76) at org.springframework.binding.expression.spel.SpringELExpressionParser.parseSpelExpression(SpringELExpressionParser.java:96) at org.springframework.binding.expression.spel.SpringELExpressionParser.parseExpression(SpringELExpressionParser.java:77) at org.springframework.webflow.engine.builder.model.FlowModelFlowBuilder.parseEvaluateAction(FlowModelFlowBuilder.java:870) at org.springframework.webflow.engine.builder.model.FlowModelFlowBuilder.parseActions(FlowModelFlowBuilder.java:845) at org.springframework.webflow.engine.builder.model.FlowModelFlowBuilder.parseTransition(FlowModelFlowBuilder.java:817) at org.springframework.webflow.engine.builder.model.FlowModelFlowBuilder.parseTransitions(FlowModelFlowBuilder.java:802) at org.springframework.webflow.engine.builder.model.FlowModelFlowBuilder.parseAndAddViewState(FlowModelFlowBuilder.java:555) at org.springframework.webflow.engine.builder.model.FlowModelFlowBuilder.buildStates(FlowModelFlowBuilder.java:214) at org.springframework.webflow.engine.builder.FlowAssembler.directAssembly(FlowAssembler.java:106) at org.springframework.webflow.engine.builder.FlowAssembler.assembleFlow(FlowAssembler.java:91) at org.springframework.webflow.engine.builder.DefaultFlowHolder.assembleFlow(DefaultFlowHolder.java:109) at org.springframework.webflow.engine.builder.DefaultFlowHolder.getFlowDefinition(DefaultFlowHolder.java:84) at org.springframework.webflow.definition.registry.FlowDefinitionRegistryImpl.getFlowDefinition(FlowDefinitionRegistryImpl.java:60) at org.springframework.webflow.executor.FlowExecutorImpl.launchExecution(FlowExecutorImpl.java:138) at org.springframework.webflow.mvc.servlet.FlowHandlerAdapter.handle(FlowHandlerAdapter.java:238) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966) at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857) at javax.servlet.http.HttpServlet.service(HttpServlet.java:622) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842) at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:85) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:518) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1091) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:673) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1526) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1482) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:745)

抱歉,这是一个基本错误。我以为它是在入口处。我错了。

Webflow 在输入时解析整个 xml 文件。我的错误更进一步,我缺少请求参数参数的右括号(在 "businessId" 之后):

<transition on="doedittesttype" to="restart">
  <evaluate
    expression="testTypeViewService.updateTestType(vwNewTestType, sessionParameters.businessId"
    result="flowScope.vwNewTestType" />    
  </transition>