diff options
author | PJ Fanning <fanningpj@apache.org> | 2019-09-24 21:06:04 +0000 |
---|---|---|
committer | PJ Fanning <fanningpj@apache.org> | 2019-09-24 21:06:04 +0000 |
commit | 3d3c84655874f44e0ba9537825cc18365443b064 (patch) | |
tree | 3b1aa3ba00aa3c79f4b8b774613f3cf05295528c | |
parent | 780b078c8504719e04c26a22c1bd846f8b521022 (diff) | |
download | poi-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
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; } } + } |