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;
     }
 
 }