You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by vl...@apache.org on 2021/11/07 09:26:24 UTC
[calcite] branch master updated: [CALCITE-4131] remove the
XmlFunctions exception handled by System.out
This is an automated email from the ASF dual-hosted git repository.
vladimirsitnikov pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/calcite.git
The following commit(s) were added to refs/heads/master by this push:
new f1db79f [CALCITE-4131] remove the XmlFunctions exception handled by System.out
f1db79f is described below
commit f1db79fb876ac9ba3c405283e99bb0438e4e97be
Author: NobiGo <no...@gmail.com>
AuthorDate: Sat Sep 25 23:05:54 2021 +0800
[CALCITE-4131] remove the XmlFunctions exception handled by System.out
---
.../org/apache/calcite/runtime/XmlFunctions.java | 26 +++++++++++++++++++++-
core/src/test/resources/sql/functions.iq | 7 ++++++
gradle.properties | 2 +-
3 files changed, 33 insertions(+), 2 deletions(-)
diff --git a/core/src/main/java/org/apache/calcite/runtime/XmlFunctions.java b/core/src/main/java/org/apache/calcite/runtime/XmlFunctions.java
index 13d270f..8c81647 100644
--- a/core/src/main/java/org/apache/calcite/runtime/XmlFunctions.java
+++ b/core/src/main/java/org/apache/calcite/runtime/XmlFunctions.java
@@ -33,6 +33,7 @@ import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import javax.xml.transform.ErrorListener;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
@@ -61,7 +62,11 @@ public class XmlFunctions {
private static final ThreadLocal<@Nullable XPathFactory> XPATH_FACTORY =
ThreadLocal.withInitial(XPathFactory::newInstance);
private static final ThreadLocal<@Nullable TransformerFactory> TRANSFORMER_FACTORY =
- ThreadLocal.withInitial(TransformerFactory::newInstance);
+ ThreadLocal.withInitial(() -> {
+ TransformerFactory transformerFactory = TransformerFactory.newInstance();
+ transformerFactory.setErrorListener(new InternalErrorListener());
+ return transformerFactory;
+ });
private static final Pattern VALID_NAMESPACE_PATTERN = Pattern
.compile("^(([0-9a-zA-Z:_-]+=\"[^\"]*\")( [0-9a-zA-Z:_-]+=\"[^\"]*\")*)$");
@@ -107,6 +112,7 @@ public class XmlFunctions {
.newTransformer(xsltSource);
final StringWriter writer = new StringWriter();
final StreamResult result = new StreamResult(writer);
+ transformer.setErrorListener(new InternalErrorListener());
transformer.transform(xmlSource, result);
return writer.toString();
} catch (TransformerConfigurationException e) {
@@ -203,8 +209,26 @@ public class XmlFunctions {
private static String convertNodeToString(Node node) throws TransformerException {
StringWriter writer = new StringWriter();
Transformer transformer = castNonNull(TRANSFORMER_FACTORY.get()).newTransformer();
+ transformer.setErrorListener(new InternalErrorListener());
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
transformer.transform(new DOMSource(node), new StreamResult(writer));
return writer.toString();
}
+
+ /** The internal default ErrorListener for Transformer. Just rethrows errors to
+ * discontinue the XML transformation. */
+ private static class InternalErrorListener implements ErrorListener {
+
+ @Override public void warning(TransformerException exception) throws TransformerException {
+ throw exception;
+ }
+
+ @Override public void error(TransformerException exception) throws TransformerException {
+ throw exception;
+ }
+
+ @Override public void fatalError(TransformerException exception) throws TransformerException {
+ throw exception;
+ }
+ }
}
diff --git a/core/src/test/resources/sql/functions.iq b/core/src/test/resources/sql/functions.iq
index b3cefad..58770a0 100644
--- a/core/src/test/resources/sql/functions.iq
+++ b/core/src/test/resources/sql/functions.iq
@@ -179,5 +179,12 @@ SELECT EXISTSNODE(
!ok
+SELECT XMLTRANSFORM(
+ '<',
+ '<?xml version="1.0"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+ </xsl:stylesheet>'
+ );
+Invalid input for XMLTRANSFORM xml: '<'
+!error
# End functions.iq
diff --git a/gradle.properties b/gradle.properties
index 7a3d179..23365ad 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -134,7 +134,7 @@ pig.version=0.16.0
pigunit.version=0.16.0
postgresql.version=9.3-1102-jdbc41
protobuf.version=3.17.1
-quidem.version=0.9
+quidem.version=0.10
scala-library.version=2.10.3
scott-data-hsqldb.version=0.1
servlet.version=4.0.1