JDK 1.4에서 컴파일된 어플리케이션을 JDK 1.5에서 사용할 때 종종 JSP 컴파일 오류가 발생하는 경우가 있다. 아래와 같은 generic type에 대한 오류 메시지가 출력된다.
org.apache.jasper.JasperException: Unable to compile class for JSP:
An error occurred at line: 1 in the generated java file
The type Collection is not generic; it cannot be parameterized with arguments <? extends E>
Stacktrace:
org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:92)
org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:330)
org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:415)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:316)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:294)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:281)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:566)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:311)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:121)
com.gauce.filter.GauceFilter.doFilter(Unknown Source)
org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
이럴 경우에는
$SERVER_NAME/deploy/jboss-web.deployer/conf/web.xml
파일에 아래 컴파일러 소스, 컴파일러 타겟 버전을 지정하여 해결할 수 있다.
물론 가장 좋은 방법은 개발환경을 1.5로 모두 변경하여 JDK 1.5에서 모두 컴파일 하는 것이다.
<init-param>
<param-name>compilerTargetVM</param-name>
<param-value>1.5</param-value>
</init-param>
<init-param>
<param-name>compilerSourceVM</param-name>
<param-value>1.4</param-value>
</init-param>