причина пользовательских тегов " PWC6033: не удалось скомпилировать класс для JSP"


Когда я пытаюсь использовать пользовательские taglibs в моем веб-приложении, он не работает на OS X (или Windows), используя Eclipse и Run Jetty Run. Когда я разогреваю файлы и запускаю их на своем linux-сервере под управлением apache-tomcat-6.0.20, нет никаких проблем. Я использую сторонние пользовательские taglibs без проблем в обеих средах.

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)
 ...

Пользовательские библиотеки тегов дву выглядит как

<?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">
<taglib>
 <tlib-version>1.0</tlib-version>
 <jsp-version>2.0</jsp-version>
 <short-name>test</short-name>
 <uri>http://test.com/test.tld</uri>
 <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>

И обработчик тегов

package com.test;

import javax.servlet.jsp.tagext.TagSupport;

public class CustomTag extends TagSupport {

 private static final long serialVersionUID = 1L;

}

И, наконец, темп.jsp

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

Я думаю, что мое определение / конфигурация taglib это правильно, так как все это работает, когда развернуто на tomcat, но я весь день пытался сделать так, чтобы это работало в Jetty безрезультатно.

3 3

3 ответа:

ОООООООООО раздражает!!!! Я надеюсь, что кто-то найдет это, и это сэкономит им все время, которое я потратил, пытаясь найти решение. Я считаю, что это проблема с причалом.

У меня также был тест класса в пакете com. Так что по какой-то причине Джетти отправится на поиски кома.тест.CustomTag и в конечном итоге ищет внутренний класс, возможно, внутри com.Тест? В любом случае, перемещение CustomTag в другой пакет (или перемещение или переименование com.Тест) Исправлена ошибка.

Получил решение. Хотя мое затмение не показало ошибки при компиляции. Jetty, когда бежал, не нашел новый атрибут класса, который я добавил. Поскольку Мэйвен еще не создал его.

Я выполнил эти 2 команды, и после этого все было хорошо. 1. mvn чистый 2. mvn install-DskipTests

У меня примерно такая же проблема. Джетти но пользовательские tag файлов (нет, например, теги)

Я сдамся здесь из-за поста Тайлера (июль 10 '10 в 0:45). Я мог бы изложить свое дело толпе на пристани. Я не могу переместить свой пользовательский тег в другой пакет, поскольку он является файлом тегов и не объявляет пакет.

В Eclipse это работает нормально. Все тесты Junit работают зеленым цветом. "mvn test" завершается неудачей с PWC6033, но более подробной информации нет. Я просто мог угадать tagfile, который, очевидно, работает правильно, когда развернуто на сервере.

Если импорт не разрешен правильно jetty / maven, то это звучит как ошибка для меня.

Для полноты картины, вот мой tagfile в /WEB-INF/tags/ognl.tag

<%@tag import="de.mypackage.WebUtils"
%><%@tag body-content="empty"
%><%@attribute name="value" required="true"
%><%=WebUtils.ognl(request, value)%>

Где WebUtils принимает HttpServletRequest для того, чтобы получить значение атрибута и другой параметр, который печатает некоторые вещи в стандартный out.