Eva*_*van 6 vaadin vaadin-flow vaadin14
我正在将 Vaadin 8 应用程序升级到 Vaadin 14。我必须手动定义 的扩展,VaadinServlet而不是使用 Vaadin 14 的自动 servlet 注册,因为我需要将其映射到特定的 URL 模式。我使用web.xml与为 Vaadin 8 成功配置 servlet 相同的方式配置 servlet。
当我的 servlet 初始化时,我得到一个来自 Vaadin 代码的ServletException错误。我查看了源代码,可以看到当 Vaadin 尝试从 servletNullPointerException获取实例并且返回 null 时发生异常。我发现该实例应该添加到 中的上下文中,但在我的情况下似乎没有发生这种情况。LookupServletContextLookupLookupServletContainerInitializer
有谁知道可能导致此问题的原因是什么?下面是堆栈跟踪NullPointerException。
引起原因:java.lang.NullPointerException
在com.vaadin.flow.server.DeploymentConfigurationFactory.getTokenFileFromClassloader(DeploymentConfigurationFactory.java:341)
在 com.vaadin.flow.server.DeploymentConfigurationFactory.getTokenFileContents(DeploymentConfigurationFactory.java:311)
在 com.vaadin.flow.server.DeploymentConfigurationFactory.readBuildInfo(DeploymentConfigurationFactory.java:181)
在 com.vaadin.flow.server.DeploymentConfigurationFactory.createInitParameters(DeploymentConfigurationFactory.java:174)
在com.vaadin.flow.server.VaadinServlet.createDeploymentConfiguration(VaadinServlet.java:152)
在 com.vaadin.flow.server.VaadinServlet.createServletService(VaadinServlet.java:190)
在 com.vaadin.flow.server.VaadinServlet.init(VaadinServlet.java:77)
在 org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:602)
... 28 更多
LookupServletContainerInitializerjavax.servlet.ServletContainerInitializer是servlet 容器在初始化期间自动运行的一个。
有两种典型情况会跳过这部分初始化:
web.xml配置为跳过某些步骤,例如因为metadata-complete设置为 true 或存在空<absolute-ordering>。AnnotationConfiguration模块,并且可能还需要设置ContainerIncludeJarPattern属性以至少包含包含VaadinServlet相关类的 .jar 文件。第三种选择是ServletContainerInitializer通过手动实例化和调用 Vaadin 使用的初始化程序来进行模拟。需要进行一些尝试和错误才能准确发现哪些初始化程序需要使用哪些参数运行。我在https://github.com/Legioth/vaadin-without-classpath-scanning中创建了一个示例,但这是之前LookupServletContainerInitializer介绍的,因此您必须单独处理该示例。