当前位置: 首页 > 知识库问答 >
问题:

使用嵌入式jetty11和jersey 3创建Rest API时出现问题[重复]

娄浩荡
2023-03-14

我在尝试将jersey3与jetty11嵌入式服务器连接时遇到麻烦。我的代码是

        ServletContextHandler servletContextHandler = new ServletContextHandler(ServletContextHandler.SESSIONS);

        servletContextHandler.setContextPath("/");
        
        ResourceConfig resourceCfg = new ResourceConfig();
        resourceCfg.packages(TestResource.class.getPackage().getName());      
        
        ServletContainer servletContainer = new ServletContainer(resourceCfg);
        
        ServletHolder servletHolder = new ServletHolder(servletContainer);
        servletContextHandler.addServlet(servletHolder, "/api/*");
        
        this.setHandler(servletContextHandler);

这段代码正好抛出了一个错误

Exception in thread "main" jakarta.servlet.ServletException: org.glassfish.jersey.servlet.ServletContainer-22356acd==org.glassfish.jersey.servlet.ServletContainer@d1f8ecbc{jsp=null,order=-1,inst=true,async=true,src=EMBEDDED:null,STARTED}
    at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:651)
    at org.eclipse.jetty.servlet.ServletHolder.initialize(ServletHolder.java:415)
    at org.eclipse.jetty.servlet.ServletHandler.lambda$initialize$2(ServletHandler.java:690)
    at java.base/java.util.stream.SortedOps$SizedRefSortingSink.end(SortedOps.java:357)
    at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:510)
    at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
    at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310)
    at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735)
    at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762)
    at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:714)
    at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:392)
    at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:896)
    at org.eclipse.jetty.servlet.ServletContextHandler.doStart(ServletContextHandler.java:306)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:93)
    at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:171)
    at org.eclipse.jetty.server.Server.start(Server.java:469)
    at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114)
    at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:89)
    at org.eclipse.jetty.server.Server.doStart(Server.java:414)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:93)
    at org.projectsanatan.restsanatan.RestSanatan.start(RestSanatan.java:27)
    at org.projectsanatan.restsanatan.Main.main(Main.java:21)
Caused by: java.lang.IllegalStateException: InjectionManagerFactory not found.
    at org.glassfish.jersey.internal.inject.Injections.lambda$lookupInjectionManagerFactory$0(Injections.java:74)
    at java.base/java.util.Optional.orElseThrow(Optional.java:403)
    at org.glassfish.jersey.internal.inject.Injections.lookupInjectionManagerFactory(Injections.java:74)
    at org.glassfish.jersey.internal.inject.Injections.createInjectionManager(Injections.java:69)
    at org.glassfish.jersey.server.ApplicationHandler.<init>(ApplicationHandler.java:261)
    at org.glassfish.jersey.servlet.WebComponent.<init>(WebComponent.java:311)
    at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:154)
    at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:339)
    at jakarta.servlet.GenericServlet.init(GenericServlet.java:178)
    at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:633)
    ... 21 more

但是,添加this.setHandler(new HandlerList())不会导致错误。我想这是因为. setHandler方法覆盖了其他处理程序。我仍然不知道导致错误的原因。请帮助!

共有1个答案

洪光霁
2023-03-14

您没有运行Jersey 3所需的所有依赖项。

你似乎错过了组织。玻璃鱼。运动衫内部的注射InjectionManagerFactory类。

在以下maven坐标中发现...

https://search.maven.org/search?q=fc:org.glassfish.jersey.internal.inject.InjectionManagerFactory

查看过去的答案,以帮助确定哪个工件适合您的需求...

  • Jersey已停止使用InjectionManagerFactory,但未找到
  • HTTP状态500-Servlet。(init)

顺便说一句,你可以在启动时让Servlet初始化,所以你不需要发送请求来触发这个设置问题。

ServletHolder servletHolder = new ServletHolder(servletContainer);
servletHolder.setInitOrder(1); // <-- this line
servletContextHandler.addServlet(servletHolder, "/api/*");
 类似资料:
  • 我正在尝试使用GLFW创建一个窗口。窗口已创建,但经过几次尝试,创建窗口需要很长时间。 https://drive.google.com/file/d/1zq4IEjcSIJxy5wnXWLrGe46ptHMbKM5R/view?usp=sharing 我找不到任何解决办法,也不知道这是由什么引起的。 这是我正在使用的代码: 程序输出为 所以看起来初始化glfw需要很长时间,但我不知道如何修复它。

  • 我正试图更好地理解Python以及为什么我会收到错误。 我有一个带有国家名称的数据框,我想过滤数据集,只显示那些没有重复项的数据。我进入: 然而,我得到一个错误 似乎创建了一个列表,该列表还显示了国家名称和布尔值,而不仅仅是我所期望的布尔值。 此外,我尝试只对一个国家进行过滤,即,,效果非常好。 我只是想理解为什么在一个场景中它起作用,而在另一个场景中它不起作用。我确实注意到后者有一个从0开始的索

  • 当我像这样创建时,它工作得很好: 但当我尝试发送消息创建if时,它会抛出一个异常: 发送功能: 函数有什么问题?

  • 我们正在将我们的事件系统迁移到函数式编程模型。我们遵循了下一个“指南”,它对消费者非常有效,但使用StreamBridge的生产者没有正确创建消息。 我们有下一个错误: 我们正在使用< code > 2021 . 0 . 0 spring-cloud版本。 通过简单的配置: 这是我们的自定义,它用于我们所有的微服务,因此,保持消息的格式很重要: 我们还使用< code>StreamBridge来生

  • 我希望得到一个Status204响应,这表明使用sd_MyPickList选项集在实体上创建了一个新的Picklist属性。 不幸的是,得到的回应是: github项目中已经存在一个问题(请参见https://github.com/microsoftdocs/dynamics-365-customer-engagement/issues/601),但是我想知道是否有解决这个问题的方法--我需要发送

  • 我想克隆git仓库与TortoiseGit的帮助下,但我得到错误: 错误:SSL证书问题,请验证CA证书是否正常。详细信息:错误:14090086:SSL例程:SSL3\u获取\u服务器\u证书:访问时证书验证失败https://git.assembla.com/pplconnect-PL.webserver.git/info/refs?service=git-上载包致命:HTTP请求失败 git