You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@santuario.apache.org by co...@apache.org on 2011/10/24 12:57:29 UTC
svn commit: r1188088 -
/santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/utils/JDKXPathAPI.java
Author: coheigea
Date: Mon Oct 24 10:57:29 2011
New Revision: 1188088
URL: http://svn.apache.org/viewvc?rev=1188088&view=rev
Log:
Caching XPath for JDK implementation
Modified:
santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/utils/JDKXPathAPI.java
Modified: santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/utils/JDKXPathAPI.java
URL: http://svn.apache.org/viewvc/santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/utils/JDKXPathAPI.java?rev=1188088&r1=1188087&r2=1188088&view=diff
==============================================================================
--- santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/utils/JDKXPathAPI.java (original)
+++ santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/utils/JDKXPathAPI.java Mon Oct 24 10:57:29 2011
@@ -32,6 +32,10 @@ import org.w3c.dom.NodeList;
*/
public class JDKXPathAPI implements XPathAPI {
+ private String xpathStr = null;
+
+ private XPath xpath = null;
+
/**
* Use an XPath string to select a nodelist.
* XPath namespace prefixes are resolved from the namespaceNode.
@@ -47,9 +51,12 @@ public class JDKXPathAPI implements XPat
public NodeList selectNodeList(
Node contextNode, Node xpathnode, String str, Node namespaceNode
) throws TransformerException {
- XPathFactory xpf = XPathFactory.newInstance();
- XPath xpath = xpf.newXPath();
- xpath.setNamespaceContext(new DOMNamespaceContext(namespaceNode));
+ if (!str.equals(xpathStr) || xpath == null) {
+ XPathFactory xpf = XPathFactory.newInstance();
+ xpath = xpf.newXPath();
+ xpath.setNamespaceContext(new DOMNamespaceContext(namespaceNode));
+ xpathStr = str;
+ }
try {
return (NodeList) xpath.evaluate(str, contextNode, XPathConstants.NODESET);
} catch (XPathExpressionException ex) {
@@ -66,9 +73,12 @@ public class JDKXPathAPI implements XPat
*/
public boolean evaluate(Node contextNode, Node xpathnode, String str, Node namespaceNode)
throws TransformerException {
- XPathFactory xpf = XPathFactory.newInstance();
- XPath xpath = xpf.newXPath();
- xpath.setNamespaceContext(new DOMNamespaceContext(namespaceNode));
+ if (!str.equals(xpathStr) || xpath == null) {
+ XPathFactory xpf = XPathFactory.newInstance();
+ xpath = xpf.newXPath();
+ xpath.setNamespaceContext(new DOMNamespaceContext(namespaceNode));
+ xpathStr = str;
+ }
try {
return ((Boolean) xpath.evaluate(str, contextNode, XPathConstants.BOOLEAN)).booleanValue();
} catch (XPathExpressionException ex) {
@@ -80,7 +90,8 @@ public class JDKXPathAPI implements XPat
* Clear any context information from this object
*/
public void clear() {
-
+ xpathStr = null;
+ xpath = null;
}
}