Author: mrdon Date: Sat Apr 19 20:20:57 2008 New Revision: 649874 URL: http://svn.apache.org/viewvc?rev=649874&view=rev Log: Better error handling for XSLT transform errors WW-2594
Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/xslt/XSLTResult.java struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/xslt/XSLTResultTest.java Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/xslt/XSLTResult.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/xslt/XSLTResult.java?rev=649874&r1=649873&r2=649874&view=diff ============================================================================== --- struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/xslt/XSLTResult.java (original) +++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/xslt/XSLTResult.java Sat Apr 19 20:20:57 2008 @@ -28,6 +28,7 @@ import java.util.Map; import javax.servlet.http.HttpServletResponse; +import javax.xml.transform.ErrorListener; import javax.xml.transform.OutputKeys; import javax.xml.transform.Source; import javax.xml.transform.Templates; @@ -41,6 +42,7 @@ import org.apache.struts2.ServletActionContext; import org.apache.struts2.StrutsConstants; +import org.apache.struts2.StrutsException; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionInvocation; @@ -327,6 +329,24 @@ transformer = TransformerFactory.newInstance().newTransformer(); transformer.setURIResolver(getURIResolver()); + transformer.setErrorListener(new ErrorListener() { + + public void error(TransformerException exception) + throws TransformerException { + throw new StrutsException("Error transforming result", exception); + } + + public void fatalError(TransformerException exception) + throws TransformerException { + throw new StrutsException("Fatal error transforming result", exception); + } + + public void warning(TransformerException exception) + throws TransformerException { + LOG.warn(exception.getMessage(), exception); + } + + }); String mimeType; if (templates == null) Modified: struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/xslt/XSLTResultTest.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/xslt/XSLTResultTest.java?rev=649874&r1=649873&r2=649874&view=diff ============================================================================== --- struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/xslt/XSLTResultTest.java (original) +++ struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/xslt/XSLTResultTest.java Sat Apr 19 20:20:57 2008 @@ -152,7 +152,26 @@ assertTrue(out.startsWith("<?xml version=\"1.0\" encoding=\"UTF-8\"?>")); assertTrue(out.indexOf("<validators>") > -1); } - + + public void testTransformWithError() throws Exception { + result = new XSLTResult(){ + protected URIResolver getURIResolver() { + return new URIResolver() { + public Source resolve(String href, String base) throws TransformerException { + throw new TransformerException("Some random error"); + } + }; + } + }; + result.setLocation("XSLTResultTest4.xsl"); + try { + result.execute(mai); + fail("Should have thrown an exception"); + } catch (Exception ex) { + assertEquals("Error transforming result", ex.getMessage()); + } + } + protected void setUp() throws Exception { super.setUp(); request = new MockHttpServletRequest();