You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@santuario.apache.org by "raul-info@r-bg.com" <ra...@r-bg.com> on 2004/04/20 21:39:26 UTC

More little optimization patches

More message about optimization: In my personal crusade against futile 
XPath I have found a new easy target for time reductions ;)

I have just change _cxpathAPI.selectNodeList(rootNode, 
Canonicalizer.XPATH_C14N_WITH_COMMENTS_SINGLE_NODE);  that his main 
purpose is select all nodes in the document with a DOM one that does the 
same thing XMLUtils.getSetWithComments (Horrible name if some has a 
better one please feel free). And try not to create a CachedXPath object 
that are horrible waste if not used.

All in All running the test goes from 56.6 seconds to 50.3 secondes (10% 
speed-up) not bad. I think you'll see more speed-up you don't use xpath 
in your signatures.

p.s. What's the differences XPATH_C14N_WITH_COMMENTS_SINGLE_NODE & 
XPATH_C14N_WITH_COMMENTS, and why it matters?

Index: org/apache/xml/security/signature/XMLSignatureInput.java
===================================================================
RCS file: 
/home/cvspublic/xml-security/src/org/apache/xml/security/signature/XMLSignatureInput.java,v
retrieving revision 1.25
diff -u -r1.25 XMLSignatureInput.java
--- org/apache/xml/security/signature/XMLSignatureInput.java    17 Apr 
2004 04:27:36 -0000    1.25
+++ org/apache/xml/security/signature/XMLSignatureInput.java    20 Apr 
2004 19:33:01 -0000
@@ -26,6 +26,7 @@
 import java.io.StringWriter;
 import java.io.UnsupportedEncodingException;
 import java.io.Writer;
+import java.util.HashSet;
 import java.util.Set;
 
 import javax.xml.parsers.DocumentBuilder;
@@ -144,14 +145,14 @@
       this._cxpathAPI = usedXPathAPI;
 
       // get the Document and make all namespace nodes visible in DOM space
-      Document doc = XMLUtils.getOwnerDocument(rootNode);
+      //Document doc = XMLUtils.getOwnerDocument(rootNode);
 
-      XMLUtils.circumventBug2650(doc);
+      //XMLUtils.circumventBug2650(doc);
 
-      NodeList result = this._cxpathAPI.selectNodeList(rootNode,
-                           
Canonicalizer.XPATH_C14N_WITH_COMMENTS_SINGLE_NODE);
+     // NodeList result = this._cxpathAPI.selectNodeList(rootNode,
+       //                    
Canonicalizer.XPATH_C14N_WITH_COMMENTS_SINGLE_NODE);
 
-      this._inputNodeSet = XMLUtils.convertNodelistToSet(result);
+      this._inputNodeSet = XMLUtils.getSetWithComments(rootNode,new 
HashSet());
    }
 
    /**
@@ -162,7 +163,7 @@
     * @throws TransformerException
     */
    public XMLSignatureInput(Node rootNode) throws TransformerException {
-      this(rootNode, new CachedXPathAPI());
+      this(rootNode, null /*new CachedXPathAPI()*/);
    }
 
    /**
@@ -232,27 +233,23 @@
          DocumentBuilder db = dfactory.newDocumentBuilder();
 
          // select all nodes, also the comments.
-         if (this._cxpathAPI==null) {
-            this._cxpathAPI=new CachedXPathAPI();
-         }
-
+       
          try {
             db.setErrorHandler(new org.apache.xml.security.utils
                .IgnoreAllErrorHandler());
 
             Document doc = db.parse(this.getOctetStream());
 
-            XMLUtils.circumventBug2650(doc);
+            //XMLUtils.circumventBug2650(doc);
 
-            NodeList nodeList =
+            /*NodeList nodeList =
                this._cxpathAPI
                   .selectNodeList(doc,
                                   Canonicalizer
                                      
.XPATH_C14N_WITH_COMMENTS_SINGLE_NODE);
-
-            return XMLUtils.convertNodelistToSet(nodeList);
-         } catch (TransformerException ex) {
-            throw new CanonicalizationException("generic.EmptyMessage", 
ex);
+                                     */
+            XMLUtils.circumventBug2650(doc);
+            return 
XMLUtils.getSetWithComments(doc.getDocumentElement(), new HashSet()); 
/*convertNodelistToSet(nodeList);*/        
          } catch (SAXException ex) {
 
             // if a not-wellformed nodeset exists, put a container 
around it...
Index: 
org/apache/xml/security/transforms/implementations/TransformEnvelopedSignature.java
===================================================================
RCS file: 
/home/cvspublic/xml-security/src/org/apache/xml/security/transforms/implementations/TransformEnvelopedSignature.java,v
retrieving revision 1.9
diff -u -r1.9 TransformEnvelopedSignature.java
--- 
org/apache/xml/security/transforms/implementations/TransformEnvelopedSignature.java    
8 Feb 2004 06:11:35 -0000    1.9
+++ 
org/apache/xml/security/transforms/implementations/TransformEnvelopedSignature.java    
20 Apr 2004 19:33:01 -0000
@@ -152,7 +152,7 @@
          }
 
          XMLSignatureInput result = new XMLSignatureInput(resultSet,
-                                       input.getCachedXPathAPI());
+                                       null/*input.getCachedXPathAPI()*/);
 
          return result;
       } catch (IOException ex) {
Index: org/apache/xml/security/utils/XMLUtils.java
===================================================================
RCS file: 
/home/cvspublic/xml-security/src/org/apache/xml/security/utils/XMLUtils.java,v
retrieving revision 1.35
diff -u -r1.35 XMLUtils.java
--- org/apache/xml/security/utils/XMLUtils.java    8 Feb 2004 06:11:51 
-0000    1.35
+++ org/apache/xml/security/utils/XMLUtils.java    20 Apr 2004 19:33:04 
-0000
@@ -66,6 +66,28 @@
       // we don't allow instantiation
    }
 
+   public static Set getSetWithComments(Node rootNode,Set result) {
+          //Set result = new HashSet();         
+          switch (rootNode.getNodeType()) {
+                  case Node.ELEMENT_NODE:
+                      result.add(rootNode);
+                      NamedNodeMap nl = 
((Element)rootNode).getAttributes();
+                      for (int i=0;i<nl.getLength();i++) {
+                          result.add(nl.item(i));
+                      }
+                      Node r=rootNode.getFirstChild();
+                      if (r==null) {
+                          break;
+                      }
+                      do {
+                          getSetWithComments(r,result);
+                      } while ((r=r.getNextSibling())!=null);
+                      break;
+                  default:
+                      result.add(rootNode);
+          }
+          return result;
+   }
    /**
     * Method getXalanVersion
     *


Problem with VerifySignature.java

Posted by Martin Labarthe Dubois <du...@consist.com.ar>.
I have signed an XML, but when I try to verify it with VerifySignature.java
(API 1.1),
it hangs after a couple of hours with an OutOfMemory.

the XML is about 8.997KB, compresed 32KB.

If anyone is willing to try to verify it, please email me.
Thanks.
Martin