[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