Author: vgritsenko
Date: Fri Apr 29 09:57:27 2005
New Revision: 165318

URL: http://svn.apache.org/viewcvs?rev=165318&view=rev
Log:
unwrap evil SAXExceptions

Modified:
    cocoon/trunk/src/java/org/apache/cocoon/components/source/SourceUtil.java

Modified: 
cocoon/trunk/src/java/org/apache/cocoon/components/source/SourceUtil.java
URL: 
http://svn.apache.org/viewcvs/cocoon/trunk/src/java/org/apache/cocoon/components/source/SourceUtil.java?rev=165318&r1=165317&r2=165318&view=diff
==============================================================================
--- cocoon/trunk/src/java/org/apache/cocoon/components/source/SourceUtil.java 
(original)
+++ cocoon/trunk/src/java/org/apache/cocoon/components/source/SourceUtil.java 
Fri Apr 29 09:57:27 2005
@@ -1,5 +1,5 @@
 /*
- * Copyright 1999-2004 The Apache Software Foundation.
+ * Copyright 1999-2005 The Apache Software Foundation.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -62,7 +62,7 @@
  *
  * @author <a href="mailto:[EMAIL PROTECTED]">Carsten Ziegeler</a>
  * @author <a href="mailto:[EMAIL PROTECTED]">Stephan Michels</a>
- * @version CVS $Id$
+ * @version $Id$
  */
 public final class SourceUtil {
 
@@ -82,6 +82,37 @@
     }
 
     /**
+     * Generates SAX events from the XMLizable and handle SAXException.
+     *
+     * @param  source    the data
+     */
+    static public void toSAX(XMLizable source,
+                             ContentHandler handler)
+    throws SAXException, IOException, ProcessingException {
+        try {
+            source.toSAX(handler);
+        } catch (SAXException e) {
+            // Unwrap ProcessingException, IOException, and extreme cases of 
SAXExceptions.
+            // See also handleSAXException
+            final Exception cause = e.getException();
+            if (cause != null) {
+                if (cause instanceof ProcessingException) {
+                    throw (ProcessingException) cause;
+                }
+                if (cause instanceof IOException) {
+                    throw (IOException) cause;
+                }
+                if (cause instanceof SAXException) {
+                    throw (SAXException) cause;
+                }
+            }
+
+            // Throw original SAX exception
+            throw e;
+        }
+    }
+
+    /**
      * Generates SAX events from the given source.
      *
      * <p><b>NOTE</b>: If the implementation can produce lexical events,
@@ -133,7 +164,7 @@
                              ContentHandler handler)
     throws SAXException, IOException, ProcessingException {
         if (source instanceof XMLizable) {
-            ((XMLizable) source).toSAX(handler);
+            toSAX((XMLizable) source, handler);
         } else {
             String mimeType = source.getMimeType();
             if (null == mimeType) {
@@ -205,7 +236,7 @@
                              ContentHandler handler)
     throws SAXException, IOException, ProcessingException {
         if (source instanceof XMLizable) {
-            ((XMLizable) source).toSAX(handler);
+            toSAX((XMLizable) source, handler);
         } else {
             SAXParser parser = null;
             try {


Reply via email to