luehe       2004/05/20 17:20:53

  Modified:    jasper2/src/share/org/apache/jasper/compiler Compiler.java
                        DefaultErrorHandler.java ErrorDispatcher.java
                        ErrorHandler.java
  Log:
  Removed the need for jsp.error.nojavac error code ("No Java compiler
  was found to compile the generated source for the JSP").
  
  In some cases (see Bugzilla 10499), this error message was reported
  even if a Java compiler was found, thereby misleading and confusing a
  lot of users.
  
  Improved error reporting by passing the
  org.apache.tools.ant.BuildException to the error dispatcher/handler if
  the compilation failed for reasons other than javac compile errors.
  
  Revision  Changes    Path
  1.85      +13 -5     
jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Compiler.java
  
  Index: Compiler.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Compiler.java,v
  retrieving revision 1.84
  retrieving revision 1.85
  diff -u -r1.84 -r1.85
  --- Compiler.java     12 May 2004 17:45:37 -0000      1.84
  +++ Compiler.java     21 May 2004 00:20:53 -0000      1.85
  @@ -308,7 +308,6 @@
           String sep = System.getProperty("path.separator");
   
           StringBuffer errorReport = new StringBuffer();
  -        boolean success = true;
   
           StringBuffer info=new StringBuffer();
           info.append("Compile: javaFileName=" + javaFileName + "\n" );
  @@ -373,6 +372,8 @@
           includes.setName(ctxt.getJavaPath());
           info.append("    include="+ ctxt.getJavaPath() + "\n" );
   
  +        BuildException be = null;
  +
           try {
               if (ctxt.getOptions().getFork()) {
                   javac.execute();
  @@ -382,9 +383,9 @@
                   }
               }
           } catch (BuildException e) {
  +            be = e;
               log.error( "Javac exception ", e);
               log.error( "Env: " + info.toString());
  -            success = false;
           }
   
           errorReport.append(logger.getReport());
  @@ -401,9 +402,16 @@
               javaFile.delete();
           }
   
  -        if (!success) {
  -            log.error( "Error compiling file: " + javaFileName + " " + errorReport);
  -            errDispatcher.javacError(errorReport.toString(), javaFileName, 
pageNodes);
  +        if (be != null) {
  +            log.error("Error compiling file: " + javaFileName + " "
  +                      + errorReport);
  +            JavacErrorDetail[] javacErrors = errDispatcher.parseJavacErrors(
  +                        errorReport.toString(), javaFileName, pageNodes);
  +            if (javacErrors != null) {
  +                errDispatcher.javacError(javacErrors);
  +            } else {
  +                errDispatcher.javacError(be);
  +            }
           }
   
           long t2=System.currentTimeMillis();
  
  
  
  1.10      +26 -17    
jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/DefaultErrorHandler.java
  
  Index: DefaultErrorHandler.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/DefaultErrorHandler.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- DefaultErrorHandler.java  17 Mar 2004 19:23:03 -0000      1.9
  +++ DefaultErrorHandler.java  21 May 2004 00:20:53 -0000      1.10
  @@ -58,29 +58,38 @@
        */
       public void javacError(JavacErrorDetail[] details) throws JasperException {
   
  +        if (details == null) {
  +            return;
  +        }
  +
        Object[] args = null;
           StringBuffer buf = new StringBuffer();
  -     
  -        if ((details.length == 1) 
  -            && (details[0].getJavaLineNumber() == -1)) {
  -            // Special case: No Java compiler found
  -            buf.append(Localizer.getMessage("jsp.error.nojavac"));
  +
  +        for (int i=0; i < details.length; i++) {
  +            args = new Object[] {
  +                        new Integer(details[i].getJspBeginLineNumber()), 
  +                        details[i].getJspFileName() };
  +            buf.append(Localizer.getMessage("jsp.error.single.line.number",
  +                                            args));
  +            buf.append(Localizer.getMessage("jsp.error.corresponding.servlet"));
  +            buf.append(details[i].getErrorMessage());
               buf.append('\n');
  -        } else {
  -            for (int i=0; i < details.length; i++) {
  -                args = new Object[] {
  -                    new Integer(details[i].getJspBeginLineNumber()), 
  -                    details[i].getJspFileName()
  -                };
  -                buf.append(Localizer.getMessage("jsp.error.single.line.number",
  -                                                args));
  -                buf.append(Localizer.getMessage("jsp.error.corresponding.servlet"));
  -                buf.append(details[i].getErrorMessage());
  -                buf.append('\n');
  -            }
           }
   
        throw new JasperException(Localizer.getMessage("jsp.error.unable.compile")
                                  + buf);
       }
  +
  +    /**
  +     * Processes the given javac compilation exception.
  +     *
  +     * @param exception Compilation exception
  +     */
  +    public void javacError(Exception exception)
  +            throws JasperException {
  +
  +     throw new JasperException(
  +            Localizer.getMessage("jsp.error.unable.compile"), exception);
  +    }
  +
   }
  
  
  
  1.18      +61 -35    
jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/ErrorDispatcher.java
  
  Index: ErrorDispatcher.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/ErrorDispatcher.java,v
  retrieving revision 1.17
  retrieving revision 1.18
  diff -u -r1.17 -r1.18
  --- ErrorDispatcher.java      12 May 2004 17:45:37 -0000      1.17
  +++ ErrorDispatcher.java      21 May 2004 00:20:53 -0000      1.18
  @@ -300,19 +300,48 @@
        dispatch(n.getStart(), errCode, new Object[] {arg}, e);
       }
   
  -    /*
  -     * Dispatches the given compilation error to the configured error handler.
  +    /**
  +     * Parses the given error message into an array of javac compilation error
  +     * messages (one per javac compilation error line number).
        *
  -     * @param errMsg Compilation error message that was generated by the
  -     * javac compiler
  +     * @param errMsg Error message
        * @param fname Name of Java source file whose compilation failed
        * @param page Node representation of JSP page from which the Java source
        * file was generated
  +     *
  +     * @return Array of javac compilation errors, or null if the given error
  +     * message does not contain any compilation error line numbers
  +     */
  +    public static JavacErrorDetail[] parseJavacErrors(String errMsg,
  +                                                      String fname,
  +                                                      Node.Nodes page)
  +            throws JasperException, IOException {
  +
  +     return parseJavacMessage(errMsg, fname, page);
  +    }
  +
  +    /*
  +     * Dispatches the given javac compilation errors to the configured error
  +     * handler.
  +     *
  +     * @param javacErrors Array of javac compilation errors
        */
  -    public void javacError(String errMsg, String fname, Node.Nodes page)
  -             throws JasperException, IOException {
  -     JavacErrorDetail[] errDetails = parseJavacMessage(errMsg, fname, page);
  -     errHandler.javacError(errDetails);
  +    public void javacError(JavacErrorDetail[] javacErrors)
  +            throws JasperException {
  +
  +        errHandler.javacError(javacErrors);
  +    }
  +
  +
  +    /*
  +     * Dispatches the given compilation exception to the configured error
  +     * handler.
  +     *
  +     * @param e Compilation exception
  +     */
  +    public void javacError(Exception e) throws JasperException {
  +
  +        errHandler.javacError(e);
       }
   
   
  @@ -395,8 +424,8 @@
        * @return Array of JavacErrorDetail instances corresponding to the
        * compilation errors
        */
  -    private JavacErrorDetail[] parseJavacMessage(String errMsg, String fname,
  -                                              Node.Nodes page)
  +    private static JavacErrorDetail[] parseJavacMessage(
  +                                String errMsg, String fname, Node.Nodes page)
                throws IOException, JasperException {
   
        Vector errVec = new Vector();
  @@ -406,15 +435,17 @@
   
           BufferedReader reader = new BufferedReader(new StringReader(errMsg));
   
  -        while (true) {
  -            String line = reader.readLine();
  -            if (line == null) {
  -             break;
  -         }
  +        /*
  +         * Parse compilation errors. Each compilation error consists of a file
  +         * path and error line number, followed by a number of lines describing
  +         * the error.
  +         */
  +        String line = null;
  +        while ((line = reader.readLine()) != null) {
   
               /*
             * Error line number is delimited by set of colons.
  -          * (Ignore colon following drive letter on Windows.)
  +          * Ignore colon following drive letter on Windows (fromIndex = 2).
             * XXX Handle deprecation warnings that don't have line info
             */
               int beginColon = line.indexOf(':', 2); 
  @@ -441,30 +472,25 @@
                ErrorVisitor errVisitor = new ErrorVisitor(lineNum);
                page.visit(errVisitor);
                errNode = errVisitor.getJspSourceNode();
  -                /* XXX Supress map exception to display the original error
  -             if (errNode == null) {
  -                 jspError("jsp.error.source.map", lineNumStr);
  -             }
  -                */
               }
  -         partialErrMsg.append(line);
  -         partialErrMsg.append('\n');
  +
  +            // Ignore messages preceding first error
  +            if (errNode != null) {
  +                partialErrMsg.append(line);
  +                partialErrMsg.append('\n');
  +            }
           }
   
           reader.close();
   
  -     // add last error to error vector
  -     String pageFile = null;
  -     int pageLine = -1;
  -     if (errNode != null) {
  -         pageFile = errNode.getStart().getFile();
  -         pageLine = errNode.getStart().getLineNumber();
  -     }
  -     errVec.add(new JavacErrorDetail(fname,
  -                                     lineNum,
  -                                     pageFile,
  -                                     pageLine,
  -                                     partialErrMsg.toString()));
  +        // Add last error to error vector
  +        if (errNode != null) {
  +            errVec.add(new JavacErrorDetail(fname,
  +                                            lineNum,
  +                                            errNode.getStart().getFile(),
  +                                            errNode.getStart().getLineNumber(),
  +                                            partialErrMsg.toString()));
  +        }
   
        JavacErrorDetail[] errDetails = null;
        if (errVec.size() > 0) {
  
  
  
  1.5       +8 -0      
jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/ErrorHandler.java
  
  Index: ErrorHandler.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/ErrorHandler.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- ErrorHandler.java 17 Mar 2004 19:23:03 -0000      1.4
  +++ ErrorHandler.java 21 May 2004 00:20:53 -0000      1.5
  @@ -60,4 +60,12 @@
        */
       public void javacError(JavacErrorDetail[] details)
        throws JasperException;
  +
  +    /**
  +     * Processes the given javac compilation exception.
  +     *
  +     * @param exception Compilation exception
  +     */
  +    public void javacError(Exception exception)
  +        throws JasperException;
   }
  
  
  

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

Reply via email to