You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by vg...@apache.org on 2001/09/08 06:31:11 UTC

cvs commit: xml-cocoon2/src/org/apache/cocoon/xml XMLizable.java

vgritsenko    01/09/07 21:31:11

  Modified:    src/org/apache/cocoon/components/language/markup/xsp
                        XSPObjectHelper.java
               src/org/apache/cocoon/components/source SitemapSource.java
                        URLSource.java
               src/org/apache/cocoon/generation FileGenerator.java
               src/org/apache/cocoon/xml XMLizable.java
  Log:
  exception handling in XMLizable and sources
  
  Revision  Changes    Path
  1.5       +9 -3      xml-cocoon2/src/org/apache/cocoon/components/language/markup/xsp/XSPObjectHelper.java
  
  Index: XSPObjectHelper.java
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/src/org/apache/cocoon/components/language/markup/xsp/XSPObjectHelper.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- XSPObjectHelper.java	2001/08/24 10:03:45	1.4
  +++ XSPObjectHelper.java	2001/09/08 04:31:10	1.5
  @@ -10,6 +10,8 @@
   import org.apache.cocoon.xml.XMLFragment;
   import org.apache.cocoon.xml.XMLizable;
   import org.apache.cocoon.xml.dom.DOMStreamer;
  +import org.apache.cocoon.ProcessingException;
  +
   import org.w3c.dom.Node;
   import org.xml.sax.ContentHandler;
   import org.xml.sax.SAXException;
  @@ -24,7 +26,7 @@
    * @author <a href="mailto:ricardo@apache.org">Ricardo Rocha</a>
    * @author <a href="sylvain.wallez@anyware-tech.com">Sylvain Wallez</a>
    *         (Cocoon1 <code>xspExpr()</code> methods port)
  - * @version CVS $Revision: 1.4 $ $Date: 2001/08/24 10:03:45 $
  + * @version CVS $Revision: 1.5 $ $Date: 2001/09/08 04:31:10 $
    */
   public class XSPObjectHelper {
     /**
  @@ -281,7 +283,11 @@
     {
       if (v != null)
       {
  -      v.toSAX(contentHandler);
  +      try{
  +        v.toSAX(contentHandler);
  +      }catch(ProcessingException e){
  +        throw new SAXException(e);
  +      }
       }
     }
   
  @@ -352,7 +358,7 @@
       }
   
       // Check handled object types in case they were not typed in the XSP
  -    
  +
       // XMLizable
       if (v instanceof XMLizable)
       {
  
  
  
  1.21      +29 -15    xml-cocoon2/src/org/apache/cocoon/components/source/SitemapSource.java
  
  Index: SitemapSource.java
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/src/org/apache/cocoon/components/source/SitemapSource.java,v
  retrieving revision 1.20
  retrieving revision 1.21
  diff -u -r1.20 -r1.21
  --- SitemapSource.java	2001/09/06 14:04:11	1.20
  +++ SitemapSource.java	2001/09/08 04:31:10	1.21
  @@ -3,7 +3,7 @@
    * ------------------------------------------------------------------------- *
    * This software is published under the terms of the Apache Software License *
    * version 1.1, a copy of which has been included  with this distribution in *
  - * the LICENSE file.                               s                          *
  + * the LICENSE file.                                                         *
    *****************************************************************************/
   
   package org.apache.cocoon.components.source;
  @@ -48,7 +48,7 @@
    * Description of a source which is defined by a pipeline.
    *
    * @author <a href="mailto:cziegeler@apache.org">Carsten Ziegeler</a>
  - * @version CVS $Revision: 1.20 $ $Date: 2001/09/06 14:04:11 $
  + * @version CVS $Revision: 1.21 $ $Date: 2001/09/08 04:31:10 $
    */
   
   public final class SitemapSource
  @@ -86,7 +86,7 @@
       private Source redirectSource;
   
       /** The <code>SAXException</code> if unable to get resource */
  -    private SAXException exception;
  +    private ProcessingException exception;
   
       /** Do I need a refresh ? */
       private boolean needsRefresh;
  @@ -110,7 +110,7 @@
           }
   
           // does the uri point to this sitemap or to the root sitemap?
  -        if (uri.startsWith("//") == true) {
  +        if (uri.startsWith("//")) {
               uri = uri.substring(2);
               Processor processor = null;
               try {
  @@ -120,7 +120,7 @@
               }
               this.prefix = ""; // start at the root
               this.processor = processor;
  -        } else if (uri.startsWith("/") == true) {
  +        } else if (uri.startsWith("/")) {
               this.prefix = null;
               uri = uri.substring(1);
               this.processor = sitemap;
  @@ -155,7 +155,9 @@
        * is not possible to determine the date.
        */
       public long getLastModified() {
  -        if (this.needsRefresh == true) this.refresh();
  +        if (this.needsRefresh) {
  +            this.refresh();
  +        }
           return this.lastModificationDate;
       }
   
  @@ -172,11 +174,13 @@
        */
       public InputStream getInputStream()
       throws ProcessingException, IOException {
  +        if (this.needsRefresh) {
  +            this.refresh();
  +        }
           // VG: Why exception is not thrown in constructor?
           if (this.exception != null) {
  -            throw new ProcessingException(this.exception);
  +            throw this.exception;
           }
  -        if (this.needsRefresh == true) this.refresh();
           SitemapComponentSelector serializerSelector = null;
           Serializer serializer = null;
           try {
  @@ -191,6 +195,8 @@
               return new ByteArrayInputStream(os.toByteArray());
           } catch (ComponentException cme) {
               throw new ProcessingException("could not lookup pipeline components", cme);
  +        } catch (ProcessingException e) {
  +            throw e;
           } catch (Exception e) {
               throw new ProcessingException("Exception during processing of " + this.systemId, e);
           } finally {
  @@ -248,10 +254,13 @@
                       this.redirectSource = this.environment.resolve(redirectURL);
                       this.lastModificationDate = this.redirectSource.getLastModified();
                   }
  +        } catch (ProcessingException e) {
  +            reset();
  +            this.exception = e;
           } catch (Exception e) {
               reset();
  -            this.exception = new SAXException("Could not get sitemap source "
  -                                              + this.systemId, e);
  +            this.exception = new ProcessingException("Could not get sitemap source "
  +                                                     + this.systemId, e);
           }
           this.needsRefresh = false;
       }
  @@ -270,11 +279,13 @@
        * Stream content to the content handler
        */
       public void toSAX(ContentHandler contentHandler)
  -    throws SAXException {
  +    throws SAXException, ProcessingException {
  +        if (this.needsRefresh) {
  +            this.refresh();
  +        }
           if (this.exception != null) {
               throw this.exception;
           }
  -        if (this.needsRefresh == true) this.refresh();
           try {
               XMLConsumer consumer;
               if (contentHandler instanceof XMLConsumer) {
  @@ -291,10 +302,13 @@
                   eventPipeline.process(this.environment);
               }
           } catch (ComponentException cme) {
  -            throw new SAXException("could not lookup pipeline components", cme);
  +            throw new ProcessingException("Could not lookup pipeline components", cme);
  +        } catch (ProcessingException e) {
  +            // Preserve original exception
  +            throw e;
           } catch (Exception e) {
  -            throw new SAXException("Exception during processing of "
  -                                   + this.systemId, e);
  +            throw new ProcessingException("Exception during processing of "
  +                                          + this.systemId, e);
           } finally {
               reset();
           }
  
  
  
  1.13      +58 -39    xml-cocoon2/src/org/apache/cocoon/components/source/URLSource.java
  
  Index: URLSource.java
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/src/org/apache/cocoon/components/source/URLSource.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- URLSource.java	2001/09/06 14:04:11	1.12
  +++ URLSource.java	2001/09/08 04:31:10	1.13
  @@ -11,6 +11,7 @@
   import org.apache.avalon.framework.component.ComponentException;
   import org.apache.avalon.framework.component.ComponentManager;
   import org.apache.cocoon.ProcessingException;
  +import org.apache.cocoon.ResourceNotFoundException;
   import org.apache.cocoon.components.parser.Parser;
   import org.apache.cocoon.environment.ModifiableSource;
   import org.apache.cocoon.xml.XMLConsumer;
  @@ -22,6 +23,7 @@
   import java.io.File;
   import java.io.FileInputStream;
   import java.io.IOException;
  +import java.io.FileNotFoundException;
   import java.io.InputStream;
   import java.lang.reflect.Method;
   import java.net.URL;
  @@ -31,7 +33,7 @@
    * Description of a source which is described by an URL.
    *
    * @author <a href="mailto:cziegeler@apache.org">Carsten Ziegeler</a>
  - * @version CVS $Revision: 1.12 $ $Date: 2001/09/06 14:04:11 $
  + * @version CVS $Revision: 1.13 $ $Date: 2001/09/08 04:31:10 $
    */
   
   public final class URLSource implements ModifiableSource {
  @@ -125,27 +127,36 @@
   
       /**
        * Return an <code>InputStream</code> object to read from the source.
  +     *
  +     * @throws ResourceNotFoundException if file not found or 
  +     *         HTTP location does not exist.
  +     * @throws IOException if I/O error occured.
        */
       public InputStream getInputStream()
  -    throws IOException {
  +    throws IOException, ProcessingException {
           this.getInfos();
  -        InputStream input = null;
  -        if (this.isFile == true) {
  -            input = new FileInputStream(this.systemId.substring(FILE.length()));
  -        } else {
  -            if (this.connection == null) {
  -                this.connection = this.url.openConnection();
  -                /* The following requires a jdk 1.3 */
  -                String userInfo = this.getUserInfo();
  -                if (this.url.getProtocol().startsWith("http") == true && userInfo != null) {
  -                    this.connection.setRequestProperty("Authorization","Basic "+encodeBASE64(userInfo));
  +        try{
  +            InputStream input = null;
  +            if (this.isFile == true) {
  +                input = new FileInputStream(this.systemId.substring(FILE.length()));
  +            } else {
  +                if (this.connection == null) {
  +                    this.connection = this.url.openConnection();
  +                    /* The following requires a jdk 1.3 */
  +                    String userInfo = this.getUserInfo();
  +                    if (this.url.getProtocol().startsWith("http") == true && userInfo != null) {
  +                        this.connection.setRequestProperty("Authorization","Basic "+encodeBASE64(userInfo));
  +                    }
                   }
  -            }
   
  -            input = this.connection.getInputStream();
  -            this.connection = null; // make sure a new connection is created next time
  +                input = this.connection.getInputStream();
  +                this.connection = null; // make sure a new connection is created next time
  +            }
  +            return input;
  +        }catch(FileNotFoundException e){
  +            throw new ResourceNotFoundException("Resource not found "
  +                                                + this.systemId);
           }
  -        return input;
       }
   
       private static boolean checkedURLClass = false;
  @@ -203,9 +214,13 @@
   
       /**
        * Return a new <code>InputSource</code> object
  +     *
  +     * @throws ResourceNotFoundException if file not found or 
  +     *         HTTP location does not exist.
  +     * @throws IOException if I/O error occured.
        */
       public InputSource getInputSource()
  -    throws IOException {
  +    throws IOException, ProcessingException {
           InputSource newObject = new InputSource(this.getInputStream());
           newObject.setSystemId(this.systemId);
           return newObject;
  @@ -292,33 +307,37 @@
            return new String ( out );
        }
   
  -  /**
  -   * Stream content to a content handler or to an XMLConsumer
  -   */
  -  public void toSAX(ContentHandler handler)
  -    throws SAXException {
  -    Parser parser = null;
  -    try {
  -      parser = (Parser)this.manager.lookup(Parser.ROLE);
  +    /**
  +     * Stream content to a content handler or to an XMLConsumer
  +     */
  +    public void toSAX(ContentHandler handler)
  +        throws SAXException, ProcessingException
  +    {
  +        Parser parser = null;
  +        try {
  +            parser = (Parser)this.manager.lookup(Parser.ROLE);
   
               if (handler instanceof XMLConsumer) {
  -        parser.setConsumer((XMLConsumer)handler);
  +                parser.setConsumer((XMLConsumer)handler);
               } else {
  -        parser.setContentHandler(handler);
  +                parser.setContentHandler(handler);
                   if (handler instanceof LexicalHandler) {
                       parser.setLexicalHandler((LexicalHandler)handler);
                   }
               }
  -      parser.parse(this.getInputSource());
  -    } catch (Exception e){
  -      throw new SAXException("Exception in URLSource.stream()", e);
  -    } finally {
  -      if (parser != null) this.manager.release(parser);
  -    }
  -  }
  -
  -  public void recycle()
  -  {
  -  }
  -}
  +            parser.parse(this.getInputSource());
  +        } catch (ProcessingException e){
  +            // Preserve original exception
  +            throw e;
  +        } catch (Exception e){
  +            throw new ProcessingException("Exception during processing of "
  +                                          + this.systemId, e);
  +        } finally {
  +            if (parser != null) this.manager.release(parser);
  +        }
  +    }
   
  +    public void recycle()
  +    {
  +    }
  +}
  
  
  
  1.23      +6 -4      xml-cocoon2/src/org/apache/cocoon/generation/FileGenerator.java
  
  Index: FileGenerator.java
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/src/org/apache/cocoon/generation/FileGenerator.java,v
  retrieving revision 1.22
  retrieving revision 1.23
  diff -u -r1.22 -r1.23
  --- FileGenerator.java	2001/09/06 11:07:48	1.22
  +++ FileGenerator.java	2001/09/08 04:31:10	1.23
  @@ -35,7 +35,7 @@
    * @author <a href="mailto:fumagalli@exoffice.com">Pierpaolo Fumagalli</a>
    *         (Apache Software Foundation, Exoffice Technologies)
    * @author <a href="mailto:cziegeler@apache.org">Carsten Ziegeler</a>
  - * @version CVS $Revision: 1.22 $ $Date: 2001/09/06 11:07:48 $
  + * @version CVS $Revision: 1.23 $ $Date: 2001/09/08 04:31:10 $
    */
   public class FileGenerator extends ComposerGenerator
   implements Cacheable, Recyclable {
  @@ -101,17 +101,19 @@
        * Generate XML data.
        */
       public void generate()
  -    throws IOException, SAXException {
  +    throws IOException, SAXException, ProcessingException {
           try {
               getLogger().debug("processing file " + super.source);
               getLogger().debug("file resolved to " + this.inputSource.getSystemId());
   
               this.inputSource.toSAX(super.xmlConsumer);
  +        } catch (ProcessingException e) {
  +            throw e;
           } catch (Exception e) {
               getLogger().error("Could not read resource "
                                 + this.inputSource.getSystemId(), e);
  -            throw new SAXException("Could not read resource "
  -                                   + this.inputSource.getSystemId(), e);
  +            throw new ProcessingException("Could not read resource "
  +                                          + this.inputSource.getSystemId(), e);
           }
       }
   }
  
  
  
  1.2       +5 -3      xml-cocoon2/src/org/apache/cocoon/xml/XMLizable.java
  
  Index: XMLizable.java
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/src/org/apache/cocoon/xml/XMLizable.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- XMLizable.java	2001/08/24 10:03:45	1.1
  +++ XMLizable.java	2001/09/08 04:31:10	1.2
  @@ -7,6 +7,8 @@
    *****************************************************************************/
   package org.apache.cocoon.xml;
   
  +import org.apache.cocoon.ProcessingException;
  +
   import org.xml.sax.ContentHandler;
   import org.xml.sax.SAXException;
   
  @@ -15,7 +17,7 @@
    * of their current state as SAX events.
    *
    * @author <a href="mailto:sylvain@apache.org">Sylvain Wallez</a>
  - * @version CVS $Revision: 1.1 $ $Date: 2001/08/24 10:03:45 $
  + * @version CVS $Revision: 1.2 $ $Date: 2001/09/08 04:31:10 $
    */
   
   public interface XMLizable {
  @@ -25,6 +27,6 @@
        * that <code>handler</code> can actually be a {@link XMLConsumer} that accepts such
        * events.
        */
  -    void toSAX(ContentHandler handler) throws SAXException;
  -    
  +    void toSAX(ContentHandler handler) throws SAXException, ProcessingException;
  +
   }
  
  
  

----------------------------------------------------------------------
In case of troubles, e-mail:     webmaster@xml.apache.org
To unsubscribe, e-mail:          cocoon-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: cocoon-cvs-help@xml.apache.org