Ошибка Assertion в com.vaadin.server.VaadinService.loadSession в строке 2191 - PullRequest
1 голос
/ 30 октября 2019

Я пытаюсь запустить Vaadin 8.9.1 в тесте

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
@TestPropertySource(properties = "server.port=8000")
public class StartTest extends AbstractJUnit4SpringContextTests {
...

Он запускается правильно. Однако при попытке войти в приложение через http://127.0.0.1:8000/ я всегда получаю следующую ошибку:

...
2019-10-30 17:31:13 INFO  Vaadin4SpringServlet:85 - Using custom SystemMessagesProvider ch.sofgen.ast.controlpanel.ControlPanelApplication$1@1ee2b6c3
2019-10-30 17:31:13 INFO  Vaadin4SpringServlet:105 - Custom Vaadin4Spring servlet initialization completed
Oct 30, 2019 5:31:14 PM org.apache.catalina.core.ApplicationDispatcher invoke
SEVERE: Servlet.service() for servlet [vaadin4SpringServlet] threw exception
java.lang.AssertionError
    at com.vaadin.server.VaadinService.loadSession(VaadinService.java:2191)
    at com.vaadin.server.VaadinSession.getForSession(VaadinSession.java:436)
    at org.vaadin.spring.security.managed.SecurityContextVaadinRequestListener.onRequestStart(SecurityContextVaadinRequestListener.java:56)
    at org.vaadin.spring.servlet.Vaadin4SpringServletService.requestStart(Vaadin4SpringServletService.java:65)
    at com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1591)
    at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:445)  
    ...

Запуск Vaadin с Intellij или с помощью Spring Boot с использованием Maven works. Я интенсивно искал в Google и отлаживал приложение, но не знаю, как решить эту проблему. Любая идея? Спасибо.

1 Ответ

1 голос
/ 31 октября 2019

Очевидно, что ошибка Vaadin в том, что оператор Java Assert был забыт удалить. Просто отключите утверждения Java для класса VaadinSession с помощью

SpringBootMainClassName.class.getClassLoader().setClassAssertionStatus(VaadinSession.class.getName(), false);.

. Затем создайте экземпляр SpringBootMainClassName непосредственно через метод run и после удаления всех аннотаций теста из StartTest. Кроме того, не забудьте снова очистить статус подтверждения Java с помощью

SpringBootMainClassName.class.getClassLoader().clearAssertionStatus();

после создания экземпляра сервера Spring Boot.

...