Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
Bug 314177 - JSTL support is broken
Summary: JSTL support is broken
Status: RESOLVED FIXED
Alias: None
Product: Jetty
Classification: RT
Component: server (show other bugs)
Version: 7.1.0   Edit
Hardware: All All
: P3 normal (vote)
Target Milestone: 7.0.2.RC0   Edit
Assignee: Michael Gorovoy CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2010-05-24 19:28 EDT by Michael Gorovoy CLA
Modified: 2010-05-25 12:08 EDT (History)
2 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Michael Gorovoy CLA 2010-05-24 19:28:13 EDT
Attempted to deploy a web application using JSTL on Jetty Hightide 7.1.2. Received the following error message when attempting to access the index page of the application.

HTTP ERROR 500

Problem accessing /. Reason:

    javax/servlet/jsp/jstl/core/ConditionalTagSupport
Caused by:

java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/core/ConditionalTagSupport
	at java.lang.ClassLoader.defineClass1(Native Method)
	at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
	at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
	at java.net.URLClassLoader.access$100(URLClassLoader.java:56)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
	at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
	at java.lang.ClassLoader.defineClass1(Native Method)
	at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
	at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
	at java.net.URLClassLoader.access$100(URLClassLoader.java:56)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
	at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:347)
	at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:300)
	at org.apache.jasper.compiler.Parser.parseCustomTag(Parser.java:1411)
	at org.apache.jasper.compiler.Parser.parseElements(Parser.java:1665)
	at org.apache.jasper.compiler.Parser.parseBody(Parser.java:1896)
	at org.apache.jasper.compiler.Parser.parseOptionalBody(Parser.java:1155)
	at org.apache.jasper.compiler.Parser.parseCustomTag(Parser.java:1466)
	at org.apache.jasper.compiler.Parser.parseElements(Parser.java:1665)
	at org.apache.jasper.compiler.Parser.parse(Parser.java:181)
	at org.apache.jasper.compiler.ParserController.doParse(ParserController.java:239)
	at org.apache.jasper.compiler.ParserController.parse(ParserController.java:156)
	at org.apache.jasper.compiler.Parser.processIncludeDirective(Parser.java:390)
	at org.apache.jasper.compiler.Parser.parseIncludeDirective(Parser.java:427)
	at org.apache.jasper.compiler.Parser.parseDirective(Parser.java:570)
	at org.apache.jasper.compiler.Parser.parseElements(Parser.java:1642)
	at org.apache.jasper.compiler.Parser.parse(Parser.java:181)
	at org.apache.jasper.compiler.ParserController.doParse(ParserController.java:239)
	at org.apache.jasper.compiler.ParserController.parse(ParserController.java:140)
	at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:199)
	at org.apache.jasper.compiler.Compiler.compile(Compiler.java:435)
	at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:608)
	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:360)
	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:486)
	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:380)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
	at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:527)
	at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:423)
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119)
	at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:493)
	at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:226)
	at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:924)
	at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:358)
	at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:183)
	at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:860)
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117)
	at org.eclipse.jetty.server.Dispatcher.forward(Dispatcher.java:346)
	at org.eclipse.jetty.server.Dispatcher.forward(Dispatcher.java:115)
	at org.eclipse.jetty.servlet.DefaultServlet.doGet(DefaultServlet.java:516)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
	at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:527)
	at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:423)
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119)
	at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:493)
	at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:226)
	at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:924)
	at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:358)
	at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:183)
	at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:860)
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117)
	at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:214)
	at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:126)
	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:113)
	at org.eclipse.jetty.server.Server.handle(Server.java:335)
	at org.eclipse.jetty.server.HttpConnection.handleRequest(HttpConnection.java:588)
	at org.eclipse.jetty.server.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:1029)
	at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:549)
	at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:211)
	at org.eclipse.jetty.server.HttpConnection.handle(HttpConnection.java:418)
	at org.eclipse.jetty.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:489)
	at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:436)
	at java.lang.Thread.run(Thread.java:595)
Comment 1 Michael Gorovoy CLA 2010-05-24 19:31:00 EDT
Comparison of JAR files loaded by Jetty 7.0.0 that this application is currently running on vs Jetty 7.1.2 yields the following results.

Jetty 7.0.0:
19:                1.6.5 | ${jetty.home}/lib/jsp/ant-1.6.5.jar
20:                3.1.1 | ${jetty.home}/lib/jsp/core-3.1.1.jar
21:      7.0.0.v20091005 | ${jetty.home}/lib/jsp/jetty-jsp-2.1-7.0.0.v20091005.jar
22:        9.1.1.B6025p2 | ${jetty.home}/lib/jsp/jsp-2.1-glassfish-9.1.1.B60.25.p2.jar
23:                  2.1 | ${jetty.home}/lib/jsp/jsp-api-2.1-glassfish-9.1.1.B60.25.p2.jar

32:                  1.1 | ${jetty.home}/lib/jndi/activation-1.1.jar
33:                  1.4 | ${jetty.home}/lib/jndi/mail-1.4.jar

Jetty 7.1.2
19:  1.0.0.v201004190952 | ${jetty.home}/lib/jsp/com.sun.el_1.0.0.v201004190952.jar
20: 3.6.0.I20100429-1549 | ${jetty.home}/lib/jsp/ecj-3.6M7.jar
21:  2.1.0.v201004190952 | ${jetty.home}/lib/jsp/javax.el_2.1.0.v201004190952.jar
22:  2.1.0.v201004190952 | ${jetty.home}/lib/jsp/javax.servlet.jsp_2.1.0.v201004190952.jar
23:      7.1.2.v20100523 | ${jetty.home}/lib/jsp/jetty-jsp-2.1-7.1.2.v20100523.jar
24:  2.1.0.v201004190952 | ${jetty.home}/lib/jsp/org.apache.jasper.glassfish_2.1.0.v201004190952.jar
25:  1.2.0.v201004190952 | ${jetty.home}/lib/jsp/org.apache.taglibs.standard.glassfish_1.2.0.v201004190952.jar

34:  1.1.0.v200906290531 | ${jetty.home}/lib/jndi/javax.activation_1.1.0.v200906290531.jar
35:  1.4.1.v200808130215 | ${jetty.home}/lib/jndi/javax.mail.glassfish_1.4.1.v200808130215.jar
Comment 2 Michael Gorovoy CLA 2010-05-24 19:35:54 EDT
Checking the JAR files in ${jetty.home}/lib/jsp finds the missing class file in one of the GlassFish JAR files that is found in Jetty 7.0.0.

$ for JAR in *.jar; do echo $JAR; jar -tvf $JAR | grep ConditionalTagSupport; done
ant-1.6.5.jar
core-3.1.1.jar
jetty-jsp-2.1-7.0.0.v20091005.jar
jsp-2.1-glassfish-9.1.1.B60.25.p2.jar
jsp-api-2.1-glassfish-9.1.1.B60.25.p2.jar
  1696 Thu Aug 27 17:49:54 CDT 2009 javax/servlet/jsp/jstl/core/ConditionalTagSupport.class
Comment 3 Jan Bartel CLA 2010-05-25 09:12:14 EDT
Looks like the jstl api jar got left out of the jetty-distribution pom.xml for the build.

Can you add appropriate entries for javax.servlet.jsp.jstl_1.2.0.v201004190952.jar from the orbit repo?

In the meanwhile, the work around would be for users to download either the above jar from orbit, or http://download.java.net/maven/glassfish/javax/servlet/jsp/jstl/jstl-api/1.2/jstl-api-1.2.jar and put it into $JETTY_HOME/lib/jsp.


thanks,
Jan
Comment 4 Michael Gorovoy CLA 2010-05-25 12:08:41 EDT
Committed r1866.