I am trying to throw an exception from java code that will include a message from the xsl: message tag when using Saxon.
Using the following xslt file
<?xml version="1.0" encoding="UTF-8" ?> <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <xsl:message terminate="yes">exception message</xsl:message> </xsl:template> </xsl:stylesheet>
In Saxon 9.4 with the following code
public static void main(String[] args) throws TransformerException { try { TransformerFactory fact = new net.sf.saxon.TransformerFactoryImpl(); Transformer newTransformer = fact.newTransformer(new StreamSource(new File("throw.xslt"))); ((net.sf.saxon.Controller)newTransformer).setRecoveryPolicy(Configuration.DO_NOT_RECOVER); ((net.sf.saxon.Controller)newTransformer).setMessageEmitter(new MessageWarner()); newTransformer.transform(new StreamSource(new File("input.xml")), new StreamResult(new File("output.xml"))); } catch (TransformerException e) { System.out.println("THIS IS EXCEPTION: " + e.getMessage() + " <<<"); throw e; } }
it gives THIS IS EXCEPTION: exception message <<< , this is the behavior that I expect.
But on Saxon 9.6 with a little adjusted code due to API changes
public static void main(String[] args) throws TransformerException { try { TransformerFactory fact = new net.sf.saxon.TransformerFactoryImpl(); Transformer newTransformer = fact.newTransformer(new StreamSource(new File("throw.xslt"))); ((net.sf.saxon.jaxp.TransformerImpl)newTransformer).getUnderlyingController().setRecoveryPolicy(Configuration.DO_NOT_RECOVER); ((net.sf.saxon.jaxp.TransformerImpl)newTransformer).getUnderlyingController().setMessageEmitter(new MessageWarner()); newTransformer.transform(new StreamSource(new File("input.xml")), new StreamResult(new File("output.xml"))); } catch (TransformerException e) { System.out.println("THIS IS EXCEPTION: " + e.getMessage() + " <<<"); throw e; } }
it gives THIS IS EXCEPTION: Processing terminated by xsl:message at line 4 in throw.xslt <<< , and the message xsl: is lost somewhere.
How can I achieve "9.4" behavior at "9.6"?
tomgi source share