From 185c0718a1dc0033556ae7c7c0f32d0da3368683 Mon Sep 17 00:00:00 2001 From: "Michael[tm] Smith" Date: Tue, 11 Dec 2018 22:43:42 +0900 Subject: [PATCH] Silence schematron-related SXWN9000 Saxon error Fixes https://github.com/relaxng/jing-trang/issues/240 --- .../NewSaxonSchemaReaderFactory.java | 1 + .../schematron/SilencingErrorListener.java | 20 +++++++++++++++++++ 2 files changed, 21 insertions(+) create mode 100644 mod/schematron/src/main/com/thaiopensource/validate/schematron/SilencingErrorListener.java diff --git a/mod/schematron/src/main/com/thaiopensource/validate/schematron/NewSaxonSchemaReaderFactory.java b/mod/schematron/src/main/com/thaiopensource/validate/schematron/NewSaxonSchemaReaderFactory.java index 64024fb3f..b057c5f4b 100644 --- a/mod/schematron/src/main/com/thaiopensource/validate/schematron/NewSaxonSchemaReaderFactory.java +++ b/mod/schematron/src/main/com/thaiopensource/validate/schematron/NewSaxonSchemaReaderFactory.java @@ -19,5 +19,6 @@ public void initTransformerFactory(TransformerFactory factory) { } factory.setAttribute(FeatureKeys.LINE_NUMBERING, Boolean.TRUE); factory.setAttribute(FeatureKeys.VERSION_WARNING, Boolean.FALSE); + factory.setErrorListener(new SilencingErrorListener()); } } diff --git a/mod/schematron/src/main/com/thaiopensource/validate/schematron/SilencingErrorListener.java b/mod/schematron/src/main/com/thaiopensource/validate/schematron/SilencingErrorListener.java new file mode 100644 index 000000000..08d8f3366 --- /dev/null +++ b/mod/schematron/src/main/com/thaiopensource/validate/schematron/SilencingErrorListener.java @@ -0,0 +1,20 @@ +package com.thaiopensource.validate.schematron; + +import net.sf.saxon.lib.StandardErrorListener; +import net.sf.saxon.trans.XPathException; + +import javax.xml.transform.TransformerException; + +public class SilencingErrorListener extends StandardErrorListener { + @Override + public void warning(TransformerException exception) + throws TransformerException { + if (exception instanceof XPathException) { + XPathException xe = (XPathException) exception; + if ("SXWN9000".equals(xe.getErrorCodeLocalPart())) { + return; + } + } + super.warning(exception); + } +}