summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPJ Fanning <fanningpj@apache.org>2019-09-24 21:06:04 +0000
committerPJ Fanning <fanningpj@apache.org>2019-09-24 21:06:04 +0000
commit3d3c84655874f44e0ba9537825cc18365443b064 (patch)
tree3b1aa3ba00aa3c79f4b8b774613f3cf05295528c
parent780b078c8504719e04c26a22c1bd846f8b521022 (diff)
downloadpoi-3d3c84655874f44e0ba9537825cc18365443b064.tar.gz
poi-3d3c84655874f44e0ba9537825cc18365443b064.zip
add XPathHelper
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1867497 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--src/ooxml/java/org/apache/poi/ooxml/util/XPathHelper.java49
-rw-r--r--src/ooxml/java/org/apache/poi/poifs/crypt/dsig/SignaturePart.java6
-rw-r--r--src/ooxml/java/org/apache/poi/xssf/extractor/XSSFImportFromXML.java6
3 files changed, 55 insertions, 6 deletions
diff --git a/src/ooxml/java/org/apache/poi/ooxml/util/XPathHelper.java b/src/ooxml/java/org/apache/poi/ooxml/util/XPathHelper.java
new file mode 100644
index 0000000000..ef492bd223
--- /dev/null
+++ b/src/ooxml/java/org/apache/poi/ooxml/util/XPathHelper.java
@@ -0,0 +1,49 @@
+/* ====================================================================
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+==================================================================== */
+
+package org.apache.poi.ooxml.util;
+
+import org.apache.poi.util.POILogFactory;
+import org.apache.poi.util.POILogger;
+
+import javax.xml.XMLConstants;
+import javax.xml.xpath.XPathFactory;
+
+public final class XPathHelper {
+ private static POILogger logger = POILogFactory.getLogger(XPathHelper.class);
+
+ private XPathHelper() {}
+
+ static final XPathFactory xpathFactory = XPathFactory.newInstance();
+ static {
+ trySetFeature(xpathFactory, XMLConstants.FEATURE_SECURE_PROCESSING, true);
+ }
+
+ public static XPathFactory getFactory() {
+ return xpathFactory;
+ }
+
+ private static void trySetFeature(XPathFactory xpf, String feature, boolean enabled) {
+ try {
+ xpf.setFeature(feature, enabled);
+ } catch (Exception e) {
+ logger.log(POILogger.WARN, "XPathFactory Feature unsupported", feature, e);
+ } catch (AbstractMethodError ame) {
+ logger.log(POILogger.WARN, "Cannot set XPathFactory feature because outdated XML parser in classpath", feature, ame);
+ }
+ }
+}
diff --git a/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/SignaturePart.java b/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/SignaturePart.java
index e68b7a72d0..dab69bd250 100644
--- a/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/SignaturePart.java
+++ b/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/SignaturePart.java
@@ -38,10 +38,10 @@ import javax.xml.namespace.NamespaceContext;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpressionException;
-import javax.xml.xpath.XPathFactory;
import org.apache.poi.EncryptedDocumentException;
import org.apache.poi.ooxml.util.DocumentHelper;
+import org.apache.poi.ooxml.util.XPathHelper;
import org.apache.poi.openxml4j.opc.PackagePart;
import org.apache.poi.util.POILogFactory;
import org.apache.poi.util.POILogger;
@@ -107,7 +107,7 @@ public class SignaturePart {
*/
public boolean validate() {
KeyInfoKeySelector keySelector = new KeyInfoKeySelector();
- XPath xpath = XPathFactory.newInstance().newXPath();
+ XPath xpath = XPathHelper.getFactory().newXPath();
xpath.setNamespaceContext(new XPathNSContext());
try {
@@ -165,7 +165,7 @@ public class SignaturePart {
signatureConfig.setSigningCertificateChain(certChain);
signatureConfig.setSignatureMethodFromUri(xmlSignature.getSignedInfo().getSignatureMethod().getAlgorithm());
- final XPath xpath = XPathFactory.newInstance().newXPath();
+ final XPath xpath = XPathHelper.getFactory().newXPath();
xpath.setNamespaceContext(new XPathNSContext());
final Map<String,Consumer<String>> m = new HashMap();
diff --git a/src/ooxml/java/org/apache/poi/xssf/extractor/XSSFImportFromXML.java b/src/ooxml/java/org/apache/poi/xssf/extractor/XSSFImportFromXML.java
index e19cdae915..43095deba6 100644
--- a/src/ooxml/java/org/apache/poi/xssf/extractor/XSSFImportFromXML.java
+++ b/src/ooxml/java/org/apache/poi/xssf/extractor/XSSFImportFromXML.java
@@ -34,8 +34,8 @@ import javax.xml.parsers.DocumentBuilder;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpressionException;
-import javax.xml.xpath.XPathFactory;
+import org.apache.poi.ooxml.util.XPathHelper;
import org.apache.poi.ss.usermodel.DateUtil;
import org.apache.poi.ss.util.CellReference;
import org.apache.poi.ooxml.util.DocumentHelper;
@@ -95,8 +95,7 @@ public class XSSFImportFromXML {
List<XSSFTable> tables = _map.getRelatedTables();
- XPathFactory xpathFactory = XPathFactory.newInstance();
- XPath xpath = xpathFactory.newXPath();
+ XPath xpath = XPathHelper.getFactory().newXPath();
// Setting namespace context to XPath
// Assuming that the namespace prefix in the mapping xpath is the
@@ -305,4 +304,5 @@ public class XSSFImportFromXML {
return null;
}
}
+
}