I am running Jetty 12.0.3 Embedded Deployment.

The POM has reference to both EE8 and EE10 WebAppContext Modules.

While deploying two WAR files that are based on EE8 and EE10, I am getting the exception shown below. Also, I have added a code snippet that shows this error.

javax.servlet.UnavailableException: Servlet class org.eclipse.jetty.ee8.jsp.JettyJspServlet is not a javax.servlet.Servlet
    at org.eclipse.jetty.ee8.servlet.ServletHolder.checkServletType(ServletHolder.java:445)
    at org.eclipse.jetty.ee8.servlet.ServletHolder.doStart(ServletHolder.java:349)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:93)
    at org.eclipse.jetty.ee8.servlet.ServletHandler.lambda$initialize$2(ServletHandler.java:616)
    at org.eclipse.jetty.util.ExceptionUtil$MultiException.callAndCatch(ExceptionUtil.java:262)
    at org.eclipse.jetty.ee8.servlet.ServletHandler.lambda$initialize$3(ServletHandler.java:615)
    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.ee8.servlet.ServletHandler.initialize(ServletHandler.java:633)
    at org.eclipse.jetty.ee8.servlet.ServletContextHandler.startContext(ServletContextHandler.java:326)
    at org.eclipse.jetty.ee8.webapp.WebAppContext.startContext(WebAppContext.java:1148)
    at org.eclipse.jetty.ee8.nested.ContextHandler.doStartInContext(ContextHandler.java:594)
    at org.eclipse.jetty.server.handler.ContextHandler$ScopedContext.call(ContextHandler.java:1200)
    at org.eclipse.jetty.ee8.nested.ContextHandler.doStart(ContextHandler.java:583)
    at org.eclipse.jetty.ee8.servlet.ServletContextHandler.doStart(ServletContextHandler.java:258)
    at org.eclipse.jetty.ee8.webapp.WebAppContext.doStart(WebAppContext.java:501)
    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.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114)
    at org.eclipse.jetty.server.Handler$Abstract.doStart(Handler.java:472)
    at org.eclipse.jetty.server.handler.ContextHandler.lambda$doStart$0(ContextHandler.java:658)
    at org.eclipse.jetty.server.handler.ContextHandler$ScopedContext.call(ContextHandler.java:1206)
    at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:658)
    at org.eclipse.jetty.ee8.nested.ContextHandler$CoreContextHandler.doStart(ContextHandler.java:2135)
    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.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:121)
    at org.eclipse.jetty.server.Handler$Abstract.doStart(Handler.java:472)
    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:622)
    at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:121)
    at org.eclipse.jetty.server.Handler$Abstract.doStart(Handler.java:472)
    at org.eclipse.jetty.server.Server.doStart(Server.java:563)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:93)

POM File includes the one shown below,

    <dependency>
      <groupId>org.eclipse.jetty.ee10</groupId>
      <artifactId>jetty-ee10-webapp</artifactId>
      <version>${jetty.version}</version>
    </dependency>
    <dependency>
      <groupId>org.eclipse.jetty.ee10</groupId>
      <artifactId>jetty-ee10-annotations</artifactId>
      <version>${jetty.version}</version>
    </dependency>
    <dependency>
      <groupId>org.eclipse.jetty.ee10</groupId>
      <artifactId>jetty-ee10-apache-jsp</artifactId>
      <version>${jetty.version}</version>
    </dependency>
    <dependency>
        <groupId>org.eclipse.jetty.ee10</groupId>
        <artifactId>jetty-ee10-glassfish-jstl</artifactId>
        <version>${jetty.version}</version>
    </dependency>


    <dependency>
      <groupId>org.eclipse.jetty.ee8</groupId>
      <artifactId>jetty-ee8-webapp</artifactId>
      <version>${jetty.version}</version>
    </dependency>
    <dependency>
      <groupId>org.eclipse.jetty.ee8</groupId>
      <artifactId>jetty-ee8-annotations</artifactId>
      <version>${jetty.version}</version>
    </dependency>
    <dependency>
      <groupId>org.eclipse.jetty.ee8</groupId>
      <artifactId>jetty-ee8-apache-jsp</artifactId>
      <version>${jetty.version}</version>
    </dependency>
    <dependency>
        <groupId>org.eclipse.jetty.ee8</groupId>
        <artifactId>jetty-ee8-glassfish-jstl</artifactId>
        <version>${jetty.version}</version>
    </dependency>
    <dependency>
      <groupId>javax.annotation</groupId>
      <artifactId>javax.annotation-api</artifactId>
      <version>1.3.2</version>
    </dependency>

Sample Code,

String webapp1 = "webapps/myappee10.war"; // ee10
String webapp2 = "webapps/myappee8.war"; // ee8
String suffix = UUID.randomUUID().toString();
String webappName = null;

ContextHandlerCollection handlers = new ContextHandlerCollection();

org.eclipse.jetty.ee10.webapp.WebAppContext context1 = new org.eclipse.jetty.ee10.webapp.WebAppContext();
context1.setWar(webapp1);
webappName = webapp1.substring(0, webapp1.indexOf(".war")) + "_" + suffix;
context1.setVirtualHosts(Arrays.asList("foo.test.com"));
context1.setContextPath("/");
context1.setParentLoaderPriority(true);
context1.setTempDirectory(new File("c:/tmp" + File.separator + webappName));
context1.setAttribute("org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern", ".*/[^/]*jstl.*\\.jar$");
// context1.setErrorHandler(customEE8ErrorHandler);
handlers.addHandler(context1);

org.eclipse.jetty.ee8.webapp.WebAppContext context2 = new org.eclipse.jetty.ee8.webapp.WebAppContext();
context2.setWar(webapp2);
webappName = webapp2.substring(0, webapp2.indexOf(".war")) + "_" + suffix;
context2.setVirtualHosts(new String[] { "bar.test.com" });
context2.setContextPath("/");
context2.setParentLoaderPriority(true); 
context2.setTempDirectory(new File("c:/tmp" + File.separator + webappName));
context2.setAttribute("org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern", ".*/[^/]*jstl.*\\.jar$");
// context2.setErrorHandler(customEE10ErrorHandler);
handlers.addHandler(context2);


main()
QueuedThreadPool threadPool = new QueuedThreadPool(500, 50, 60000);
Server server = new Server(threadPool);
server.addBean(new AppContextLeakPreventer());
server.setAttribute("org.eclipse.jetty.server.Request.maxFormContentSize", String.valueOf(524288000));

HttpConfiguration http_config = new HttpConfiguration();
http_config.setOutputBufferSize(32768);
http_config.setSendServerVersion(false);
http_config.setSendXPoweredBy(false);
http_config.setSendDateHeader(true);

ServerConnector http = new ServerConnector(server, new HttpConnectionFactory(http_config));
http.setPort(80);
http.setIdleTimeout(30000);

server.setConnectors(new Connector[] { http });
server.setHandler(MyServer.getWebAppContexts());
server.start();
server.join();
0

There are 0 best solutions below