I have a webapp application which was running on embedded Jetty-7.6.8 (jdk-6), but due to Diffe-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
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" );
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
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
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] ------------------------------------------------------------------------
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
.