[Yanel-commits] rev 33858 - in public/yanel/trunk/src:
impl/java/org/wyona/yanel/impl/resources webapp/xslt
simon at wyona.com
simon at wyona.com
Fri Mar 21 20:30:05 CET 2008
Author: simon
Date: 2008-03-21 20:30:04 +0100 (Fri, 21 Mar 2008)
New Revision: 33858
Modified:
public/yanel/trunk/src/impl/java/org/wyona/yanel/impl/resources/BasicXMLResource.java
public/yanel/trunk/src/webapp/xslt/xmlInfo2xhtml.xsl
Log:
improve error handling
see: http://bugzilla.wyona.com/cgi-bin/bugzilla/show_bug.cgi?id=6149
thanks to josias!
Modified: public/yanel/trunk/src/impl/java/org/wyona/yanel/impl/resources/BasicXMLResource.java
===================================================================
--- public/yanel/trunk/src/impl/java/org/wyona/yanel/impl/resources/BasicXMLResource.java 2008-03-21 16:52:14 UTC (rev 33857)
+++ public/yanel/trunk/src/impl/java/org/wyona/yanel/impl/resources/BasicXMLResource.java 2008-03-21 19:30:04 UTC (rev 33858)
@@ -19,6 +19,8 @@
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
+import java.io.PrintWriter;
+import java.io.StringWriter;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.HashMap;
@@ -38,6 +40,7 @@
import org.apache.log4j.Logger;
import org.apache.xml.resolver.tools.CatalogResolver;
import org.apache.xml.serializer.Serializer;
+import org.apache.xml.utils.ListingErrorHandler;
import org.w3c.dom.Document;
import org.wyona.commons.io.MimeTypeUtil;
import org.wyona.security.core.api.Identity;
@@ -221,6 +224,7 @@
String mimeType = getMimeType(viewId);
view.setMimeType(mimeType);
+ StringWriter errorWriter = new StringWriter();
try {
Repository repo = getRealm().getRepository();
@@ -236,10 +240,12 @@
xmlReader.setFeature("http://xml.org/sax/features/namespace-prefixes", true);
SourceResolver uriResolver = new SourceResolver(this);
-
+ ListingErrorHandler errorListener = new ListingErrorHandler(new PrintWriter(errorWriter));
+
// create xslt transformer:
SAXTransformerFactory tf = (SAXTransformerFactory)TransformerFactory.newInstance();
tf.setURIResolver(uriResolver);
+ tf.setErrorListener(errorListener);
String[] xsltPaths = viewDescriptor.getXSLTPaths();
if (xsltPaths == null || xsltPaths.length == 0) {
@@ -250,6 +256,7 @@
for (int i = 0; i < xsltPaths.length; i++) {
xsltHandlers[i] = tf.newTransformerHandler(new StreamSource(repo.getNode(xsltPaths[i]).getInputStream()));
xsltHandlers[i].getTransformer().setURIResolver(uriResolver);
+ xsltHandlers[i].getTransformer().setErrorListener(errorListener);
passTransformerParameters(xsltHandlers[i].getTransformer());
}
@@ -288,7 +295,15 @@
return view;
} catch(Exception e) {
log.error(e + " (" + getPath() + ", " + getRealm() + ")", e);
- throw new Exception(e);
+ String errorMsg;
+ String transformationError = errorWriter.toString();
+ if (transformationError != null) {
+ errorMsg = "Transformation error:\n" + transformationError;
+ log.error(errorMsg);
+ } else {
+ errorMsg = e.getMessage();
+ }
+ throw new Exception(errorMsg);
}
}
Modified: public/yanel/trunk/src/webapp/xslt/xmlInfo2xhtml.xsl
===================================================================
--- public/yanel/trunk/src/webapp/xslt/xmlInfo2xhtml.xsl 2008-03-21 16:52:14 UTC (rev 33857)
+++ public/yanel/trunk/src/webapp/xslt/xmlInfo2xhtml.xsl 2008-03-21 19:30:04 UTC (rev 33858)
@@ -230,7 +230,7 @@
<xsl:if test="@yanel:status"><li>Status: <xsl:value-of select="@yanel:status"/></li></xsl:if>
<li>Error Message:
<ul>
- <li><xsl:value-of select="."/></li>
+ <li><pre><xsl:value-of select="."/></pre></li>
</ul>
</li>
</ul>
More information about the Yanel-commits
mailing list