Will you commit to trunk as well?

salu2

On Mon, 2005-08-01 at 16:52 +0000, [EMAIL PROTECTED] wrote:
> Author: sylvain
> Date: Mon Aug  1 09:52:50 2005
> New Revision: 226838
> 
> URL: http://svn.apache.org/viewcvs?rev=226838&view=rev
> Log:
> Yeah! Real exceptions with Xalan rather than a useless RuntimeException!
> 
> Modified:
>     
> cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/transformation/TraxTransformer.java
>     cocoon/branches/BRANCH_2_1_X/status.xml
> 
> Modified: 
> cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/transformation/TraxTransformer.java
> URL: 
> http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/transformation/TraxTransformer.java?rev=226838&r1=226837&r2=226838&view=diff
> ==============================================================================
> --- 
> cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/transformation/TraxTransformer.java
>  (original)
> +++ 
> cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/transformation/TraxTransformer.java
>  Mon Aug  1 09:52:50 2005
> @@ -26,6 +26,8 @@
>  import java.util.Set;
>  import java.util.Map.Entry;
>  
> +import javax.xml.transform.ErrorListener;
> +import javax.xml.transform.TransformerException;
>  import javax.xml.transform.sax.SAXResult;
>  import javax.xml.transform.sax.TransformerHandler;
>  
> @@ -47,6 +49,10 @@
>  import org.apache.cocoon.environment.Request;
>  import org.apache.cocoon.environment.Session;
>  import org.apache.cocoon.environment.SourceResolver;
> +import org.apache.cocoon.util.ExceptionUtils;
> +import org.apache.cocoon.util.TraxErrorHandler;
> +import org.apache.cocoon.util.location.LocatedRuntimeException;
> +import org.apache.cocoon.util.location.Location;
>  import org.apache.cocoon.xml.XMLConsumer;
>  import org.apache.commons.lang.BooleanUtils;
>  
> @@ -201,6 +207,32 @@
>  
>      /** Exception that might occur during setConsumer */
>      private SAXException exceptionDuringSetConsumer;
> +    
> +    private TransformerException transformerException;
> +    
> +    private ErrorListener errorListener = new ErrorListener() {
> +
> +        public void warning(TransformerException ex) throws 
> TransformerException {
> +            if (getLogger().isWarnEnabled()) {
> +                Location loc = ExceptionUtils.getLocation(ex);
> +                getLogger().warn("Warning at " + loc == null ? 
> inputSource.getURI() : loc.toString(), ex);
> +            }
> +        }
> +
> +        public void error(TransformerException ex) throws 
> TransformerException {
> +            if (getLogger().isWarnEnabled()) {
> +                Location loc = ExceptionUtils.getLocation(ex);
> +                getLogger().error("Error at " + loc == null ? 
> inputSource.getURI() : loc.toString(), ex);
> +            }
> +        }
> +
> +        public void fatalError(TransformerException ex) throws 
> TransformerException {
> +            // Keep it for later use
> +            transformerException = ex;
> +            // and rethrow it
> +            throw ex;
> +        }
> +    };
>  
>      /**
>       * Configure this transformer.
> @@ -413,6 +445,8 @@
>          final SAXResult result = new SAXResult(consumer);
>          result.setLexicalHandler(consumer);
>          this.transformerHandler.setResult(result);
> +        
> +        
> this.transformerHandler.getTransformer().setErrorListener(this.errorListener);
>      }
>  
>      /**
> @@ -567,6 +601,7 @@
>          this.transformerHandler = null;
>          this.transformerValidity = null;
>          this.exceptionDuringSetConsumer = null;
> +        this.transformerException = null;
>          super.recycle();
>      }
>  
> @@ -575,7 +610,30 @@
>       */
>      public void endDocument()
>      throws SAXException {
> -        super.endDocument();
> +        try {
> +            super.endDocument();
> +        } catch(SAXException se) {
> +            // Rethrow
> +            throw se;
> +        } catch(Exception e) {
> +            if (transformerException != null) {
> +                // Ignore the fake RuntimeException sent by Xalan
> +                Location loc = 
> ExceptionUtils.getLocation(transformerException);
> +                if (loc == null) {
> +                    // No location: if it's just a wrapper, consider only 
> the wrapped exception.
> +                    Throwable realEx = transformerException.getCause();
> +                    if (realEx == null) realEx = transformerException;
> +                    
> +                    // Now throw an exception locating the current stylesheet
> +                    throw new LocatedRuntimeException("Error during 
> transformation", realEx, new Location(this.inputSource.getURI()));
> +                } else {
> +                    throw new SAXException(transformerException);
> +                }
> +            } else {
> +                // It's not a fake exception
> +                throw new SAXException(e);
> +            }
> +        }
>          this.finishedDocument = true;
>      }
>      
> 
> Modified: cocoon/branches/BRANCH_2_1_X/status.xml
> URL: 
> http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/status.xml?rev=226838&r1=226837&r2=226838&view=diff
> ==============================================================================
> --- cocoon/branches/BRANCH_2_1_X/status.xml (original)
> +++ cocoon/branches/BRANCH_2_1_X/status.xml Mon Aug  1 09:52:50 2005
> @@ -196,6 +196,11 @@
>  
>    <changes>
>    <release version="@version@" date="@date@">
> +    <action dev="SW" type="fix">
> +      Add a specific ErrorListener in TraxTransformer to track exceptions 
> raised during XSLT transformations.
> +      This allows this transformer to throw the exception that actually 
> occured, rather than a useless RuntimeException
> +      as reported by Xalan.
> +    </action>
>      <action dev="AN" type="add">
>        XSP block: Extend {#expr} interpolation parser to understand {}, "}", 
> '}'
>        as not being the closing brace.
> 
> 
-- 
thorsten

"Together we stand, divided we fall!" 
Hey you (Pink Floyd)

Reply via email to