Skip to content

Commit

Permalink
add XPathHelper
Browse files Browse the repository at this point in the history
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1867497 13f79535-47bb-0310-9956-ffa450edef68
  • Loading branch information
pjfanning committed Sep 24, 2019
1 parent 780b078 commit 3d3c846
Show file tree
Hide file tree
Showing 3 changed files with 55 additions and 6 deletions.
49 changes: 49 additions & 0 deletions src/ooxml/java/org/apache/poi/ooxml/util/XPathHelper.java
Original file line number Diff line number Diff line change
@@ -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);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -38,10 +38,10 @@ Licensed to the Apache Software Foundation (ASF) under one or more
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;
Expand Down Expand Up @@ -107,7 +107,7 @@ public SignatureDocument getSignatureDocument() throws IOException, XmlException
*/
public boolean validate() {
KeyInfoKeySelector keySelector = new KeyInfoKeySelector();
XPath xpath = XPathFactory.newInstance().newXPath();
XPath xpath = XPathHelper.getFactory().newXPath();
xpath.setNamespaceContext(new XPathNSContext());

try {
Expand Down Expand Up @@ -165,7 +165,7 @@ private void extractConfig(final Document doc, final XMLSignature xmlSignature)
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();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,8 @@ Licensed to the Apache Software Foundation (ASF) under one or more
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;
Expand Down Expand Up @@ -95,8 +95,7 @@ public void importFromXML(String xmlInputString) throws SAXException, XPathExpre

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
Expand Down Expand Up @@ -305,4 +304,5 @@ public String getPrefix(String uri) {
return null;
}
}

}

0 comments on commit 3d3c846

Please sign in to comment.