【问题标题】:Servlet class is not a javax.servlet.Servlet while deploying a bundle in felix jetty在 felix jetty 中部署包时,Servlet 类不是 javax.servlet.Servlet
【发布时间】:2018-12-19 10:57:00
【问题描述】:

我正在尝试在 felix jetty 中部署 OSGI 包。 BootStrap 是我的类,它扩展了 HttpServlet。

我在部署阶段遇到以下异常:

ins.server.servlet.HttpServlet30Dispatcher is not assignable from javax.servlet.http.HttpServlet
2018-07-11T07:46:55,044 WARN sure-rest-neo [] web-reactor - unavailable
javax.servlet.UnavailableException: Servlet class com.nokia.mdf.sure.neo.utils.Bootstrap is not a javax.servlet.Servlet
        at org.eclipse.jetty.servlet.ServletHolder.checkServletType(ServletHolder.java:519) ~[jetty-servlet-9.3.10.v20160621.jar:9.3.10.v20160621]
        at org.eclipse.jetty.servlet.ServletHolder.doStart(ServletHolder.java:379) ~[jetty-servlet-9.3.10.v20160621.jar:9.3.10.v20160621]
        at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) ~[jetty-util-9.3.10.v20160621.jar:9.3.10.v20160621]
        at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:874) ~[jetty-servlet-9.3.10.v20160621.jar:9.3.10.v20160621]
        at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:349) ~[jetty-servlet-9.3.10.v20160621.jar:9.3.10.v20160621]
        at org.eclipse.jetty.webapp.WebAppContext.startWebapp(WebAppContext.java:1404) ~[jetty-webapp-9.3.10.v20160621.jar:9.3.10.v20160621]
        at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1366) ~[jetty-webapp-9.3.10.v20160621.jar:9.3.10.v20160621]
        at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:778) ~[jetty-server-9.3.10.v20160621.jar:9.3.10.v20160621]
        at org.eclipse.jetty.servlet.ServletContextHandler.doStart(ServletContextHandler.java:262) ~[jetty-servlet-9.3.10.v20160621.jar:9.3.10.v20160621]
        at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:520) ~[jetty-webapp-9.3.10.v20160621.jar:9.3.10.v20160621]

我已经嵌入了所有依赖项,包括传递的依赖项。如何解决这个问题,我认为这是由于 jar 冲突?

【问题讨论】:

  • 您是否为此使用了 jetty osgi 工件?还是只是 osgi 的标准 http 服务器功能?

标签: servlets jetty osgi apache-felix osgi-bundle


【解决方案1】:

问题正是嵌入依赖项。当您嵌入 javax.servlet 包时,您的包将使用嵌入的类,而码头将使用导出包中可用的类。因此,虽然这些类的名称相同,但类加载器中有不同的实例,这会导致这种错误。

为了解决这个问题,您需要确保理想情况下每个包只导出一个包,而所有需要它的包都导入包。所以最简单的解决方案是不嵌入依赖项。

如果这对您不起作用,那么您可以尝试在您的包中导入和导出 javax.servlet 包。这允许 OSGi 环境决定它将实际连接哪个包,并避免在包中具有相同的类名和不同的实例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-05
    • 2011-06-29
    • 2013-01-15
    • 2023-03-22
    • 2021-04-18
    • 1970-01-01
    • 2012-05-31
    相关资源
    最近更新 更多