JSP compilation error after upgrade to jetty-9.3.3
Asked Answered
M

5

5

I have a webapp application which was running on embedded Jetty-7.6.8 (jdk-6), but due to Diffie-Hellman error on the browser we decided to move to newer version of Jetty. So, we moved to Jetty-9.3.3. As Jetty-9.x needs jdk-8, I upgraded jdk also. Right now jetty is starting up with no error but when I try to access my login page I get an unable compile jsp error.

These are the dependencies:

-org.eclipse.jetty.apache-jsp-9.3.3.v20150827.jar
-org.mortbay.jasper.apache-el-8.0.23.M1.jar 
-org.mortbay.jasper.apache-jsp-8.0.23.M1.jar
-org.eclipse.jetty.orbit.org.eclipse.jdt.core-3.8.2.v20130121.jar
-jetty-continuation-9.3.3.v20150827.jar 
-jetty-http-9.3.3.v20150827.jar
-jetty-io-9.3.3.v20150827.jar 
-jetty-security-9.3.3.v20150827.jar
-jetty-server-9.3.3.v20150827.jar 
-jetty-servlet-9.3.3.v20150827.jar
-jetty-util-9.3.3.v20150827.jar 
-jetty-webapp-9.3.3.v20150827.jar
-jetty-xml-9.3.3.v20150827.jar
-servlet-api-3.1.jar

The error which comes on the log/browser:

HTTP ERROR 500

Problem accessing /xdadm/test.jsp. Reason:

Server Error

Caused by:

org.apache.jasper.JasperException: Unable to compile class for JSP
at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:600)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:363)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:816)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1686)
at com.xcom.filter.RequestHandler.doFilter(RequestHandler.java:91)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1669)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:581)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:548)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:226)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1156)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:511)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1088)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:213)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:119)
at org.eclipse.jetty.server.Server.handle(Server.java:517)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:306)
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:242)
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:245)
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:95)
at org.eclipse.jetty.io.ssl.SslConnection.onFillable(SslConnection.java:192)
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:245)
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:95)
at org.eclipse.jetty.io.SelectChannelEndPoint$2.run(SelectChannelEndPoint.java:75)
at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.produceAndRun(ExecuteProduceConsume.java:213)
at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.run(ExecuteProduceConsume.java:147)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:654)
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:572)
at java.lang.Thread.run(Thread.java:745)

Caused by: java.lang.NullPointerException
at org.apache.jasper.compiler.Validator$ValidateVisitor.<init>(Validator.java:515)
at org.apache.jasper.compiler.Validator.validateExDirectives(Validator.java:1853)
at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:217)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:356)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:336)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:323)
at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:585)
... 33 more

Please, any clue or suggestion on what's going wrong. TIA

Microelement answered 15/9, 2015 at 9:59 Comment(5)
How are you managing your dependencies? That list doesn't seem right. If you were using a build tool (maven, gradle, grails, buildr, groovy grape, sbt, or leiningen) you would have different results.Circinate
I have a manifest.mf in which all these dependencies are mentioned. I make a jar of my jetty embedded class and other classes alongwith this manifest.Microelement
all of the mentioned build tools can manage the manifest.mf references as well (using normal java references, or osgi references, or even Java 9 jigsaw/module references) based on your defined transitive dependency graphs.Circinate
@devd, hi, do you solve your problem?Epaminondas
@wawa: Please check below I've posted how I solved, just now.Microelement
M
4

The problem was solved after I added all these dependencies:

 jetty-lib/apache-jsp/org.eclipse.jetty.apache-jsp-9.3.8.v20160314.jar
 jetty-lib/apache-jsp/org.mortbay.jasper.apache-jsp-8.0.27.jar
 jetty-lib/apache-jsp/org.eclipse.jdt.core.compiler.ecj-4.4.2.jar
 jetty-lib/apache-jsp/org.mortbay.jasper.apache-el-8.0.27.jar
 jetty-lib/jetty-annotations-9.3.8.v20160314.jar jetty-lib/jetty-continuation-9.3.8.v20160314.jar
 jetty-lib/jetty-http-9.3.8.v20160314.jar jetty-lib/jetty-io-9.3.8.v20160314.jar
 jetty-lib/jetty-plus-9.3.8.v20160314.jar jetty-lib/jetty-security-9.3.8.v20160314.jar
 jetty-lib/jetty-server-9.3.8.v20160314.jar jetty-lib/jetty-servlet-9.3.8.v20160314.jar
 jetty-lib/jetty-util-9.3.8.v20160314.jar jetty-lib/jetty-webapp-9.3.8.v20160314.jar
 jetty-lib/jetty-xml-9.3.8.v20160314.jar  jetty-lib/servlet-api-3.1.jar
 jetty-lib/setuid/jetty-setuid-java-1.0.3.jar

This how it looks like:

jetty-lib/
├── apache-jsp
│   |── org.eclipse.jdt.core.compiler.ecj-4.4.2.jar
│   ├── org.eclipse.jetty.apache-jsp-9.3.8.v20160314.jar
│   ├── org.mortbay.jasper.apache-el-8.0.27.jar
│   └── org.mortbay.jasper.apache-jsp-8.0.27.jar
├── jetty-annotations-9.3.8.v20160314.jar
├── jetty-continuation-9.3.8.v20160314.jar
├── jetty-http-9.3.8.v20160314.jar
├── jetty-io-9.3.8.v20160314.jar
├── jetty-plus-9.3.8.v20160314.jar
├── jetty-security-9.3.8.v20160314.jar
├── jetty-server-9.3.8.v20160314.jar
├── jetty-servlet-9.3.8.v20160314.jar
├── jetty-util-9.3.8.v20160314.jar
├── jetty-webapp-9.3.8.v20160314.jar
├── jetty-xml-9.3.8.v20160314.jar
├── servlet-api-3.1.jar
└── setuid
    ├── 32libsetuid-linux.so
    ├── jetty-setuid-java-1.0.3.jar
    └── libsetuid-linux.so

PS: I've moved to 9.3.8 from 9.3.3

Microelement answered 6/1, 2017 at 7:30 Comment(2)
I find add jetty-lib/jsp replace jetty-lib/apache-jsp , It works.Epaminondas
Thanks, adding jetty-annotations fixed it for me.Wickner
G
3

I had the same problem with Embedded Jetty Server 9.4.15 and JSP support. The solution is pretty simple : https://www.eclipse.org/jetty/documentation/current/embedded-examples.html#embedded-webapp-jsp

You have to enable AnnotationConfiguration :

// This webapp will use jsps and jstl. We need to enable the
// AnnotationConfiguration in order to correctly
// set up the jsp container
Configuration.ClassList classlist = Configuration.ClassList
            .setServerDefault( server );
classlist.addBefore(
            "org.eclipse.jetty.webapp.JettyWebXmlConfiguration",
            "org.eclipse.jetty.annotations.AnnotationConfiguration" );
Gleeson answered 15/5, 2019 at 15:1 Comment(0)
M
2

I have been stuck with the same error for sometime. So for anyone who comes across the same error, the answer is exactly what others pointed out - dependency management.

If you see the Caused by: java.lang.NullPointerException at org.apache.jasper.compiler.Validator$ValidateVisitor.<init>(Validator.java:515) it is caused by failure to detect/load taglibs by Apache Jasper engine.

In other words you're missing the taglibs dependency or its API or its implementation somewhere.

Make sure all the following dependencies/JARs are in your POM

    <dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-jsp</artifactId>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>org.mortbay.jasper</groupId>
        <artifactId>apache-el</artifactId>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>org.mortbay.jasper</groupId>
        <artifactId>apache-jsp</artifactId>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>org.mortbay.jasper</groupId>
        <artifactId>jasper-jsp</artifactId>
        <type>pom</type>
    </dependency>
    <dependency>
        <groupId>org.apache.taglibs</groupId>
        <artifactId>taglibs-standard-impl</artifactId>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.taglibs</groupId>
        <artifactId>taglibs-standard-spec</artifactId>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>apache-jsp</artifactId>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>apache-jstl</artifactId>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-annotations</artifactId>
        <scope>compile</scope>
    </dependency>

And if you're shading the WAR into a FAT jar, you're in for another world of pain if dependencies are scoped differently (compile vs runtime), then the order of dependencies matter or otherwise you'll start getting the same NullPointerException.

Magnetize answered 26/8, 2016 at 16:12 Comment(0)
H
2

I faced exactly the same issue when upgrading from Jetty 8.1 to 9.4. In my case, it was not about missing dependencies, but too many or conflicting ones. The issue went away after I removed the following artifacts from the classpath:

  • org.mortbay.jasper.apache-jsp
  • org.mortbay.jasper.apache-el
Howarth answered 20/1, 2017 at 10:9 Comment(0)
C
1

The Jetty Project maintains an example project for JSP use in embedded-jetty.

See: github.com/jetty-project/embedded-jetty-jsp

What you need to fix:

  • Use a Build Tool! (this is the most important aspect of this answer, this alone would have solved 3/4 of your issues)
  • Fix your dependencies

Example:

[embedded-jetty-jsp]$ mvn dependency:tree
[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building embedded-jetty-jsp 1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ embedded-jetty-jsp ---
[INFO] org.eclipse.jetty.demo:embedded-jetty-jsp:jar:1-SNAPSHOT
[INFO] +- javax.servlet:javax.servlet-api:jar:3.1.0:compile
[INFO] +- org.eclipse.jetty:jetty-annotations:jar:9.3.3.v20150827:compile
[INFO] |  +- org.eclipse.jetty:jetty-plus:jar:9.3.3.v20150827:compile
[INFO] |  |  \- org.eclipse.jetty:jetty-jndi:jar:9.3.3.v20150827:compile
[INFO] |  +- javax.annotation:javax.annotation-api:jar:1.2:compile
[INFO] |  +- org.ow2.asm:asm:jar:5.0.1:compile
[INFO] |  \- org.ow2.asm:asm-commons:jar:5.0.1:compile
[INFO] |     \- org.ow2.asm:asm-tree:jar:5.0.1:compile
[INFO] +- org.eclipse.jetty:jetty-webapp:jar:9.3.3.v20150827:compile
[INFO] |  +- org.eclipse.jetty:jetty-xml:jar:9.3.3.v20150827:compile
[INFO] |  \- org.eclipse.jetty:jetty-servlet:jar:9.3.3.v20150827:compile
[INFO] |     \- org.eclipse.jetty:jetty-security:jar:9.3.3.v20150827:compile
[INFO] +- org.eclipse.jetty:apache-jsp:jar:9.3.3.v20150827:compile
[INFO] |  +- org.eclipse.jetty:jetty-util:jar:9.3.3.v20150827:compile
[INFO] |  +- org.eclipse.jetty:jetty-server:jar:9.3.3.v20150827:compile
[INFO] |  |  +- org.eclipse.jetty:jetty-http:jar:9.3.3.v20150827:compile
[INFO] |  |  \- org.eclipse.jetty:jetty-io:jar:9.3.3.v20150827:compile
[INFO] |  +- org.eclipse.jetty.toolchain:jetty-schemas:jar:3.1.M0:compile
[INFO] |  +- org.mortbay.jasper:apache-jsp:jar:8.0.23.M1:compile
[INFO] |  |  \- org.mortbay.jasper:apache-el:jar:8.0.23.M1:compile
[INFO] |  \- org.eclipse.jetty.orbit:org.eclipse.jdt.core:jar:3.8.2.v20130121:compile
[INFO] \- org.eclipse.jetty:apache-jstl:pom:9.3.3.v20150827:compile
[INFO]    +- org.apache.taglibs:taglibs-standard-spec:jar:1.2.1:compile
[INFO]    \- org.apache.taglibs:taglibs-standard-impl:jar:1.2.1:compile
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.884 s
[INFO] Finished at: 2015-09-15T05:37:53-07:00
[INFO] Final Memory: 13M/481M
[INFO] ------------------------------------------------------------------------
  • Setup your JSP environment properly.

    Pay attention to:

    • Instance Manager Setup
    • Temp / Scratch Dir
    • ContainerIncludeJarPattern
    • Container Initializers
    • JettyJasperInitializer
    • non-System ClassLoader requirement
    • Setup of JasperServlet
    • Setup of DefaultServlet
Circinate answered 15/9, 2015 at 12:48 Comment(3)
Thanks but I've been using this webapp in jetty-7.6.8 without any maven support. Actually, I have no idea how to use maven.Microelement
I have tried with a simple jsp page, there also the compilation fails. Taglibs I am not using.Microelement
You have many many options, maven is just one of them. (see the list of options in the comments below your question)Circinate

© 2022 - 2024 — McMap. All rights reserved.