What's the bug?

You can't instanciate an abstract class in java.
You can't instanciate an array in java without dimensioning it.







On Tuesday 20 January 2004 12:15 pm, Andrew Schwimmer wrote:
> Summary:
> Code that worked in Tomcat4 throws a compile time exception in Tomcat5.
>
>
> My Jsp file consists of one line.
> <jsp:useBean scope="request" id="l" class="java.util.List"/>
>
> In Tomcat 4 a line like this was legal. If "l" did not exist in the request
> scope it would try to instantiate it and throw a runtime
> java.lang.InstantiationException. However in Tomcat 5 it causes this
> compile time exception.
>
> org.apache.jasper.JasperException: Unable to compile class for JSP
>
> An error occurred at line: 1 in the jsp file: /useBeanTest.jsp
>
> Generated servlet error:
>     [javac] Compiling 1 source file
>
> C:\jakarta-tomcat-5.0.16\work\Catalina\localhost\jsp-examples\org\apache\js
>p \useBeanTest_jsp.java:44: java.util.List is abstract; cannot be
> instantiated l = new java.util.List();
>               ^
> 1 error
>
>
>
> org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandl
>e r.java:127)
>
> org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:
>3 51)
>       org.apache.jasper.compiler.Compiler.generateClass(Compiler.java:415)
>       org.apache.jasper.compiler.Compiler.compile(Compiler.java:458)
>       org.apache.jasper.compiler.Compiler.compile(Compiler.java:439)
>
> org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:
>5 52)
>
> org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:
>2 91)
>       org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:301)
>       org.apache.jasper.servlet.JspServlet.service(JspServlet.java:248)
>       javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
>
> The  code generated in Tomcat5 is
>
>       java.util.List l = null;
>       synchronized (request) {
>         l = (java.util.List) pageContext.getAttribute("l",
> PageContext.REQUEST_SCOPE);
>         if (l == null){
>           l = new java.util.List();
>           pageContext.setAttribute("l", l, PageContext.REQUEST_SCOPE);
>         }
>       }
>
> The code generated in Tomcat4 is
>
>       java.util.List l = null;
>       synchronized (request) {
>         l = (java.util.List) pageContext.getAttribute("l",
> PageContext.REQUEST_SCOPE);
>         if (l == null){
>           try {
>             l = (java.util.List)
> java.beans.Beans.instantiate(this.getClass().getClassLoader(),
> "java.util.List");
>           } catch (ClassNotFoundException exc) {
>             throw new InstantiationException(exc.getMessage());
>           } catch (Exception exc) {
>             throw new ServletException("Cannot create bean of class " +
> "java.util.List", exc);
>           }
>           pageContext.setAttribute("l", l, PageContext.REQUEST_SCOPE);
>         }
>       }
>
>
> Which throws the exception because you aren't allowed to instantiate an
> abstract class.
>
> --------------------------------------------------------------------
>
> A similar exception is being thrown if you attempt to retrieve an array.
>
> A line in a jsp...
> <jsp:useBean scope="request" id="l" class="java.util.ArrayList[]"/>
>
> Yields an exception...
>
> org.apache.jasper.JasperException: Unable to compile class for JSP
>
> An error occurred at line: 1 in the jsp file: /useBeanTest2.jsp
>
> Generated servlet error:
>     [javac] Compiling 1 source file
>
> C:\jakarta-tomcat-5.0.16\work\Catalina\localhost\jsp-examples\org\apache\js
>p \useBeanTest2_jsp.java:44: array dimension missing
>           l = new java.util.ArrayList[]();
>                                        ^
> 1 error
>
>
>
> org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandl
>e r.java:127)
>
> org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:
>3 51)
>       org.apache.jasper.compiler.Compiler.generateClass(Compiler.java:415)
>       org.apache.jasper.compiler.Compiler.compile(Compiler.java:458)
>       org.apache.jasper.compiler.Compiler.compile(Compiler.java:439)
>
> org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:
>5 52)
>
> org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:
>2 91)
>       org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:301)
>       org.apache.jasper.servlet.JspServlet.service(JspServlet.java:248)
>       javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
>
> In this case the code generated in Tomcat5 is
>       java.util.ArrayList[] l = null;
>       synchronized (request) {
>         l = (java.util.ArrayList[]) pageContext.getAttribute("l",
> PageContext.REQUEST_SCOPE);
>         if (l == null){
>           l = new java.util.ArrayList[]();
>           pageContext.setAttribute("l", l, PageContext.REQUEST_SCOPE);
>         }
>       }
>
> The code generated in Tomcat4 is
>
>       java.util.ArrayList[] l = null;
>       synchronized (request) {
>         l = (java.util.ArrayList[]) pageContext.getAttribute("l",
> PageContext.REQUEST_SCOPE);
>         if (l == null){
>           try {
>             l = (java.util.ArrayList[])
> java.beans.Beans.instantiate(this.getClass().getClassLoader(),
> "java.util.ArrayList[]");
>           } catch (ClassNotFoundException exc) {
>             throw new InstantiationException(exc.getMessage());
>           } catch (Exception exc) {
>             throw new ServletException("Cannot create bean of class " +
> "java.util.ArrayList[]", exc);
>           }
>           pageContext.setAttribute("l", l, PageContext.REQUEST_SCOPE);
>         }
>       }
>
>
> If this should be in the Tomcat-Dev list, I'm sorry and I'll move it there.
> If this has already been brought up as I bug in Tomcat5, sorry for bringing
> it up again but I couldn't find any mention of it in Bugzilla.
>
> Thanks for reading.
>
> -Andrew.
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]

-- 
Ben Souther
F.W. Davison & Company, Inc.



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to