You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by sy...@apache.org on 2005/09/21 19:21:54 UTC
svn commit: r290749 -
/cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/transformation/TraxTransformer.java
Author: sylvain
Date: Wed Sep 21 10:21:51 2005
New Revision: 290749
URL: http://svn.apache.org/viewcvs?rev=290749&view=rev
Log:
Fix exception unrolling
Modified:
cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/transformation/TraxTransformer.java
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=290749&r1=290748&r2=290749&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 Wed Sep 21 10:21:51 2005
@@ -52,6 +52,7 @@
import org.apache.cocoon.util.location.LocationUtils;
import org.apache.cocoon.xml.XMLConsumer;
import org.apache.commons.lang.BooleanUtils;
+import org.apache.commons.lang.exception.NestableRuntimeException;
import org.apache.excalibur.source.Source;
import org.apache.excalibur.source.SourceException;
import org.apache.excalibur.source.SourceValidity;
@@ -607,32 +608,40 @@
throws SAXException {
try {
super.endDocument();
- } catch(SAXException se) {
- // Rethrow
- throw se;
} catch(Exception e) {
+ Throwable realEx = e;
+
+ // Did we had an exception reported to the error listener?
if (transformerException != null) {
- // Ignore the fake RuntimeException sent by Xalan
+ // this is the real exception
Location loc = LocationUtils.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;
-
- if (realEx instanceof SAXException) {
- // Rethrow
- throw (SAXException)realEx;
- } else {
- // Wrap in a SAXException
- throw new SAXException(transformerException);
+ if (LocationUtils.isUnknown(loc)) {
+ // No location: if it's just a wrapper, consider only the wrapped exception
+ realEx = transformerException.getCause();
+ if (realEx == null) {
+ // no cause: keep the transformer exception
+ realEx = transformerException;
}
- } else {
- throw new SAXException(transformerException);
}
- } else {
- // It's not a fake exception
- throw new SAXException(e);
}
+
+ if (realEx instanceof RuntimeException) {
+ throw (RuntimeException)realEx;
+ }
+
+ if (realEx instanceof SAXException) {
+ throw (SAXException)realEx;
+ }
+
+ if (realEx instanceof Exception) {
+ throw new SAXException((Exception)realEx);
+ }
+
+ if (realEx instanceof Error) {
+ throw (Error)realEx;
+ }
+
+ throw new NestableRuntimeException(realEx);
}
this.finishedDocument = true;
}