You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by co...@apache.org on 2003/04/06 05:04:27 UTC

cvs commit: cocoon-2.1/src/scratchpad/src/org/apache/cocoon/generation FlowVelocityGenerator.java

coliver     2003/04/05 19:04:27

  Modified:    src/scratchpad/src/org/apache/cocoon/generation
                        FlowVelocityGenerator.java
  Log:
  Attempt to give meaningful error information when generated xml document is invalid
  
  Revision  Changes    Path
  1.3       +37 -2     cocoon-2.1/src/scratchpad/src/org/apache/cocoon/generation/FlowVelocityGenerator.java
  
  Index: FlowVelocityGenerator.java
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/scratchpad/src/org/apache/cocoon/generation/FlowVelocityGenerator.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- FlowVelocityGenerator.java	27 Mar 2003 19:54:09 -0000	1.2
  +++ FlowVelocityGenerator.java	6 Apr 2003 03:04:27 -0000	1.3
  @@ -77,12 +77,14 @@
   import org.apache.velocity.runtime.log.LogSystem;
   import org.xml.sax.InputSource;
   import org.xml.sax.SAXException;
  +import org.xml.sax.SAXParseException;
   import org.mozilla.javascript.*;
   import org.apache.velocity.util.introspection.*;
   import java.beans.PropertyDescriptor;
   import java.io.IOException;
   import java.io.InputStream;
   import java.io.StringReader;
  +import java.io.BufferedReader;
   import java.io.StringWriter;
   import java.util.ArrayList;
   import java.util.HashMap;
  @@ -812,6 +814,7 @@
           }
   
           SAXParser parser = null;
  +        StringWriter w = new StringWriter();
           try {
               parser = (SAXParser) this.manager.lookup(SAXParser.ROLE);
               if (getLogger().isDebugEnabled()) {
  @@ -819,15 +822,47 @@
               }
   
               /* lets render a template */
  -            StringWriter w = new StringWriter();
               this.tmplEngine.mergeTemplate(super.source, velocityContext, w);
   
               InputSource xmlInput =
                       new InputSource(new StringReader(w.toString()));
  +            xmlInput.setSystemId(super.source);
               parser.parse(xmlInput, this.xmlConsumer);
           } catch (IOException e) {
               getLogger().warn("VelocityGenerator.generate()", e);
               throw new ResourceNotFoundException("Could not get Resource for VelocityGenerator", e);
  +        } catch (SAXParseException e) {
  +            int line = e.getLineNumber();
  +            int column = e.getColumnNumber();
  +            if (line <= 0) {
  +                line = Integer.MAX_VALUE;
  +            }
  +            BufferedReader reader = 
  +                new BufferedReader(new StringReader(w.toString()));
  +            String message = e.getMessage() +" In generated document:\n";
  +            for (int i = 0; i < line; i++) {
  +                String lineStr = reader.readLine();
  +                if (lineStr == null) {
  +                    break;
  +                }
  +                message += lineStr + "\n";
  +            }
  +            String columnIndicator = "";
  +            if (column > 0) {
  +                for (int i = 1; i < column; i++) {
  +                    columnIndicator += " ";
  +                }
  +                columnIndicator += "^" + "\n";
  +                message += columnIndicator;
  +            }
  +            SAXException pe = new SAXParseException(message, 
  +                                                    e.getPublicId(),
  +                                                    "(Document generated from template "+e.getSystemId() + ")",
  +                                                    e.getLineNumber(),
  +                                                    e.getColumnNumber(),
  +                                                    null);
  +            getLogger().error("VelocityGenerator.generate()", pe);
  +            throw pe;
           } catch (SAXException e) {
               getLogger().error("VelocityGenerator.generate()", e);
               throw e;