Sto provando a generare un'eccezione dal codice java che includerà il messaggio da xsl: tag messaggio quando si utilizza Saxon.xslt: messaggio in Saxon 9.4 vs Saxon 9.6
Utilizzando il seguente file XSLT
<?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>
Su sassone 9.4 con il seguente codice
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;
}
}
dà THIS IS EXCEPTION: exception message <<<
, che è il comportamento mi aspetto.
Ma Saxon 9.6 con un po 'di codice corretto a causa di API cambia
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;
}
}
dà THIS IS EXCEPTION: Processing terminated by xsl:message at line 4 in throw.xslt <<<
e il xsl: messaggio viene da qualche parte persa.
Come è possibile ottenere il comportamento "9.4" su "9.6"?
fai a sapere se c'è un modo per ottenere xsl: message numero di riga/colonna utilizzando emettitore? –