tags:

views:

136

answers:

1

When I try to use custom taglibs in my webapp it doesn't work on OS X (or Windows), using Eclipse, and Run Jetty Run. When I WAR up the files and run them on my linux server running apache-tomcat-6.0.20, there is no problem. I'm using 3rd party custom taglibs without problems in both environments.

org.apache.jasper.JasperException: PWC6033: Unable to compile class for JSP

PWC6197: An error occurred at line: 6 in the jsp file: /temp.jsp
PWC6199: Generated servlet error:
com.test cannot be resolved to a type
 at org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:107)
 at org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:280)
 at org.apache.jasper.compiler.Compiler.generateClass(Compiler.java:350)
 at org.apache.jasper.compiler.Compiler.compile(Compiler.java:411)
 ...

The custom taglib tld looks like

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE taglib PUBLIC 
 "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
 "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd"&gt;
<taglib>
 <tlib-version>1.0</tlib-version>
 <jsp-version>2.0</jsp-version>
 <short-name>test</short-name>
 <uri>http://test.com/test.tld&lt;/uri&gt;
 <description>Test</description>

 <tag>
  <name>custom</name>
  <tag-class>com.test.CustomTag</tag-class>
  <body-content>empty</body-content>
  <description>Custom tag</description>
 </tag>
</taglib>

And the Tag handler

package com.test;

import javax.servlet.jsp.tagext.TagSupport;

public class CustomTag extends TagSupport {

 private static final long serialVersionUID = 1L;

}

And finally temp.jsp

<%@ taglib uri="http://test.com/test.tld" prefix="test" %>
Hi
<test:custom/>

I think my taglib definition / configuration is correct since the whole thing works when deployed to tomcat, but I've been trying things all day to make this work in Jetty to no avail.

+1  A: 

SOOOOOOOOOOO annoying!!!! I hope to GOD that someone finds this and it saves them all the time I wasted trying to figure out the solution. I believe this is a problem with Jetty.

I also had a class Test in the com package. So for whatever reason, Jetty would go looking for com.test.CustomTag and end up looking for an inner class maybe inside of com.Test? In any case, moving CustomTag to another package (or moving or renameing com.Test) fixed the issue.

Tyler