Я получаю странную ошибку в весеннем веб-потоке.
2019-06-07 15:04:39.026 ERROR 29470 --- [nio-8096-exec-8] o.a.c.c.C.[.[.[.[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause
java.lang.NullPointerException: null
at org.springframework.webflow.execution.repository.support.AbstractFlowExecutionRepository.getConversation(AbstractFlowExecutionRepository.java:170) ~[spring-webflow-2.4.4.RELEASE.jar:2.4.4.RELEASE]
at org.springframework.webflow.execution.repository.support.AbstractFlowExecutionRepository.getLock(AbstractFlowExecutionRepository.java:125) ~[spring-webflow-2.4.4.RELEASE.jar:2.4.4.RELEASE]
at org.springframework.webflow.executor.FlowExecutorImpl.launchExecution(FlowExecutorImpl.java:142) ~[spring-webflow-2.4.4.RELEASE.jar:2.4.4.RELEASE]
at org.springframework.webflow.mvc.servlet.FlowHandlerAdapter.handle(FlowHandlerAdapter.java:263) ~[spring-webflow-2.4.4.RELEASE.jar:2.4.4.RELEASE]
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:967) ~[spring-webmvc-4.3.12.RELEASE.jar:4.3.12.RELEASE]
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901) ~[spring-webmvc-4.3.12.RELEASE.jar:4.3.12.RELEASE]
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) ~[spring-webmvc-4.3.12.RELEASE.jar:4.3.12.RELEASE]
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872) ~[spring-webmvc-4.3.12.RELEASE.jar:4.3.12.RELEASE]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:661) ~[tomcat-embed-core-8.5.23.jar:8.5.23]
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) ~[spring-webmvc-4.3.12.RELEASE.jar:4.3.12.RELEASE]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:742) ~[tomcat-embed-core-8.5.23.jar:8.5.23]
Это происходит внутри весенней библиотеки webflow, и я совершенно не знаю, почему.
Мой поток выглядит так:
<action-state id="checkProductAvailable">
<evaluate expression="knowledgeSourceService.test(requestParameters.productUUid, requestParameters._eventId)"/>
<transition on="internet" to="validateAndProceedToSummary">
<evaluate expression="knowledgeSourceService.extractCustomerSelectedSourceFromRequest(requestParameters)"
result="flowScope.customerSelectedSource"/>
<evaluate expression="knowledgeSourceService.enhanceProductData(requestParameters.productUUid)"
result="conversationScope.selectedProduct"/>
</transition>
<transition on="requireProducts" to="products" />
</action-state>
<decision-state id="validateAndProceedToSummary">
<if test="knowledgeSourceService.updateCustomerSelection(flowScope.customerSelectedSource, flowScope.productList.selectedProduct.customerSelectedSource)"
then="proceedToSummary" else="invalidateFormState"/>
</decision-state>
Когда я меняю переход с validateAndProceedToSummary
на products
, он работает без ошибок. Но с этим validateAndProceedToSummary
состоянием решения оно терпит неудачу.
products
- это состояние просмотра:
<view-state id="products" view="invest-flow-products" model="productList">
Можете ли вы помочь мне?
knowledgeSourceService.updateCustomerSelection(flowScope.customerSelectedSource, flowScope.productList.selectedProduct.customerSelectedSource)
вызывает метод:
public boolean updateCustomerSelection(String old, String new) {
Но, насколько я вижу, этот метод (точка прерывания) не будет достигнут для успешного пути (proceedToSummary
). Достигается только при сбое пути (invalidateFormState
). Так что какое-то предварительное условие не заполнено. Но не знаю какой. Можем ли мы как-то это отладить?