You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@santuario.apache.org by mu...@apache.org on 2006/01/13 23:02:12 UTC

svn commit: r368871 [5/6] - in /xml/security/branches/jsr105_0_16/src/org: apache/xml/security/ apache/xml/security/algorithms/ apache/xml/security/algorithms/implementations/ apache/xml/security/c14n/ apache/xml/security/c14n/helper/ apache/xml/securi...

Modified: xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/XMLUtils.java
URL: http://svn.apache.org/viewcvs/xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/XMLUtils.java?rev=368871&r1=368870&r2=368871&view=diff
==============================================================================
--- xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/XMLUtils.java (original)
+++ xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/XMLUtils.java Fri Jan 13 14:00:23 2006
@@ -21,8 +21,6 @@
 
 import java.io.IOException;
 import java.io.OutputStream;
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.Set;
@@ -47,10 +45,6 @@
  */
 public class XMLUtils {
 
-   /** {@link org.apache.commons.logging} logging facility */
-    static org.apache.commons.logging.Log log = 
-        org.apache.commons.logging.LogFactory.getLog(XMLUtils.class.getName());
-
    /**
     * Constructor XMLUtils
     *
@@ -59,7 +53,13 @@
 
       // we don't allow instantiation
    }
-
+   public static Element getNextElement(Node el) {
+	   while ((el!=null) && (el.getNodeType()!=Node.ELEMENT_NODE)) {
+		   el=el.getNextSibling();
+	   }
+	   return (Element)el;
+	   
+   }
    
    /**
     * @param rootNode
@@ -115,276 +115,6 @@
    	   }
    	   return;
    }
-   /**
-    * Method getXalanVersion
-    *
-    * @return 
-    */
-   public static String getXalanVersion() {
-
-      String version = XMLUtils.getXalan1Version();
-
-      if (version != null) {
-         return version;
-      }
-
-      version = XMLUtils.getXalan20Version();
-
-      if (version != null) {
-         return version;
-      }
-
-      version = XMLUtils.getXalan2Version();
-
-      if (version != null) {
-         return version;
-      }
-
-      return "Apache Xalan not installed";
-
-      // return "Apache " + org.apache.xalan.processor.XSLProcessorVersion.S_VERSION;
-      // return "Apache " + org.apache.xalan.Version.getVersion();
-   }
-
-   /**
-    * Method getXercesVersion
-    *
-    * @return
-    */
-   public static String getXercesVersion() {
-
-      String version = XMLUtils.getXerces1Version();
-
-      if (version != null) {
-         return version;
-      }
-
-      version = XMLUtils.getXerces2Version();
-
-      if (version != null) {
-         return version;
-      }
-
-      return "Apache Xerces not installed";
-
-      // return "Apache " + org.apache.xerces.impl.Version.fVersion;
-      // return "Apache " + org.apache.xerces.framework.Version.fVersion;
-   }
-
-   /**
-    * Method getXalan1Version
-    *
-    * @return
-    */
-   private static String getXalan1Version() {
-
-      try {
-         final String XALAN1_VERSION_CLASS =
-            "org.apache.xalan.xslt.XSLProcessorVersion";
-         Class clazz = classForName(XALAN1_VERSION_CLASS);
-
-         // Found Xalan-J 1.x, grab it's version fields
-         StringBuffer buf = new StringBuffer();
-         Field f = clazz.getField("PRODUCT");
-
-         buf.append(f.get(null));
-         buf.append(';');
-
-         f = clazz.getField("LANGUAGE");
-
-         buf.append(f.get(null));
-         buf.append(';');
-
-         f = clazz.getField("S_VERSION");
-
-         buf.append(f.get(null));
-         buf.append(';');
-
-         return buf.toString();
-      } catch (Exception e1) {
-         return null;
-      }
-   }
-
-   /**
-    * Method getXalan20Version
-    *
-    * @return
-    */
-   private static String getXalan20Version() {
-
-      try {
-
-         // NOTE: This is the new Xalan 2.2+ version class
-         final String XALAN2_2_VERSION_CLASS = "org.apache.xalan.Version";
-         final String XALAN2_2_VERSION_METHOD = "getVersion";
-         final Class noArgs[] = new Class[0];
-         Class clazz = classForName(XALAN2_2_VERSION_CLASS);
-         Method method = clazz.getMethod(XALAN2_2_VERSION_METHOD, noArgs);
-         Object returnValue = method.invoke(null, new Object[0]);
-
-         return (String) returnValue;
-      } catch (Exception e2) {
-         return null;
-      }
-   }
-
-   /**
-    * Method getXalan2Version
-    *
-    * @return
-    */
-   private static String getXalan2Version() {
-
-      try {
-
-         // NOTE: This is the old Xalan 2.0, 2.1, 2.2 version class,
-         //    is being replaced by class below
-         final String XALAN2_VERSION_CLASS =
-            "org.apache.xalan.processor.XSLProcessorVersion";
-         Class clazz = classForName(XALAN2_VERSION_CLASS);
-
-         // Found Xalan-J 2.x, grab it's version fields
-         StringBuffer buf = new StringBuffer();
-         Field f = clazz.getField("S_VERSION");
-
-         buf.append(f.get(null));
-
-         return buf.toString();
-      } catch (Exception e2) {
-         return null;
-      }
-   }
-
-   /**
-    * Method getXerces1Version
-    *
-    * @return
-    */
-   private static String getXerces1Version() {
-
-      try {
-         final String XERCES1_VERSION_CLASS =
-            "org.apache.xerces.framework.Version";
-         Class clazz = classForName(XERCES1_VERSION_CLASS);
-
-         // Found Xerces-J 1.x, grab it's version fields
-         Field f = clazz.getField("fVersion");
-         String parserVersion = (String) f.get(null);
-
-         return parserVersion;
-      } catch (Exception e) {
-         return null;
-      }
-   }
-
-   /**
-    * Method getXerces2Version
-    *
-    * @return
-    */
-   private static String getXerces2Version() {
-
-      try {
-         final String XERCES2_VERSION_CLASS = "org.apache.xerces.impl.Version";
-         Class clazz = classForName(XERCES2_VERSION_CLASS);
-
-         // Found Xerces-J 2.x, grab it's version fields
-         Field f = clazz.getField("fVersion");
-         String parserVersion = (String) f.get(null);
-
-         return parserVersion;
-      } catch (Exception e) {
-         return null;
-      }
-   }
-
-   /**
-    * Worker method to load a class.
-    * Factor out loading classes for future use and JDK differences.
-    * Copied from javax.xml.*.FactoryFinder
-    * @param className name of class to load from
-    * an appropriate classLoader
-    * @return the class asked for
-    * @throws ClassNotFoundException
-    */
-   public static Class classForName(String className)
-           throws ClassNotFoundException {
-
-      ClassLoader classLoader = findClassLoader();
-
-      if (classLoader == null) {
-         return Class.forName(className);
-      } 
-       return classLoader.loadClass(className);      
-   }
-
-   /**
-    * Worker method to figure out which ClassLoader to use.
-    * For JDK 1.2 and later use the context ClassLoader.
-    * Copied from javax.xml.*.FactoryFinder
-    * @return the appropriate ClassLoader
-    */
-   protected static ClassLoader findClassLoader() {
-
-      Method m = null;
-
-      try {
-         m = Thread.class.getMethod("getContextClassLoader", new Class[]{});
-      } catch (NoSuchMethodException e) {
-
-         // Assume that we are running JDK 1.1, use the current ClassLoader
-         return XMLUtils.class.getClassLoader();
-      }
-
-      try {
-         return (ClassLoader) m.invoke(Thread.currentThread(), new Object[]{});
-      } catch (Exception e) {
-         throw new RuntimeException(e.toString());
-      }
-   }
-
-   
-   /**
-    * Method spitOutVersions
-    *
-    * @param log
-    */
-   public static void spitOutVersions(org.apache.commons.logging.Log log) {
-   	  if (log.isDebugEnabled()) {
-   	  	log.debug(XMLUtils.getXercesVersion());   	  	
-        log.debug(XMLUtils.getXalanVersion());
-      }
-   }
-
-   /** Field nodeTypeString */
-   private static String[] nodeTypeString = new String[]{ "", "ELEMENT",
-                                                          "ATTRIBUTE",
-                                                          "TEXT_NODE",
-                                                          "CDATA_SECTION",
-                                                          "ENTITY_REFERENCE",
-                                                          "ENTITY",
-                                                          "PROCESSING_INSTRUCTION",
-                                                          "COMMENT", "DOCUMENT",
-                                                          "DOCUMENT_TYPE",
-                                                          "DOCUMENT_FRAGMENT",
-                                                          "NOTATION" };
-
-   /**
-    * Transforms <code>org.w3c.dom.Node.XXX_NODE</code> NodeType values into
-    * Strings.
-    *
-    * @param nodeType as taken from the {@link org.w3c.dom.Node#getNodeType} function
-    * @return the String value.
-    * @see org.w3c.dom.Node#getNodeType
-    */
-   public static String getNodeTypeString(short nodeType) {
-
-      if ((nodeType > 0) && (nodeType < 13)) {
-         return nodeTypeString[nodeType];
-      }
-         return "";    
-   }
 
 
    /**
@@ -464,7 +194,7 @@
     * Method getFullTextChildrenFromElement
     *
     * @param element
-    * @return
+    * @return the string of chi;ds
     */
    public static String getFullTextChildrenFromElement(Element element) {
 
@@ -510,9 +240,8 @@
          return element;
       } 
          Element element = doc.createElementNS(Constants.SignatureSpecNS,
-                                               ds + ":" + elementName);
-
-         element.setAttributeNS(Constants.NamespaceSpecNS, "xmlns:" + ds,
+                                               ds + ":" + elementName);         
+         element.setAttributeNS(Constants.NamespaceSpecNS, ElementProxy.getDefaultPrefixBindings(Constants.SignatureSpecNS),
                                 Constants.SignatureSpecNS);
 
          return element;
@@ -532,7 +261,7 @@
            String localName) {
 
       if ((element == null) ||
-          !Constants.SignatureSpecNS.equals(element.getNamespaceURI()) ){
+          Constants.SignatureSpecNS!=element.getNamespaceURI() ){
          return false;
       }
 
@@ -555,7 +284,7 @@
            String localName) {
 
       if ((element == null) || 
-            !EncryptionConstants.EncryptionSpecNS.equals(element.getNamespaceURI()) 
+            EncryptionConstants.EncryptionSpecNS!=element.getNamespaceURI() 
           ){
          return false;
       }
@@ -632,7 +361,7 @@
     * @param doc
     * @param prefix
     * @param namespace
-    * @return
+    * @return the element.
     */
    public static Element createDSctx(Document doc, String prefix,
                                      String namespace) {
@@ -667,7 +396,7 @@
     * Method convertNodelistToSet
     *
     * @param xpathNodeSet
-    * @return
+    * @return the set with the nodelist
     */
    public static Set convertNodelistToSet(NodeList xpathNodeSet) {
 
@@ -709,7 +438,7 @@
          documentElement.setAttributeNS(Constants.NamespaceSpecNS, "xmlns", "");
       }
 
-      XMLUtils.circumventBug2650recurse(doc);
+      XMLUtils.circumventBug2650internal(doc);
    }
 
    /**
@@ -718,61 +447,73 @@
     * @param node
     * @see <A HREF="http://nagoya.apache.org/bugzilla/show_bug.cgi?id=2650">Namespace axis resolution is not XPath compliant </A>
     */
-   private static void circumventBug2650recurse(Node node) {
-
-      if (node.getNodeType() == Node.ELEMENT_NODE) {
-         Element element = (Element) node;
-         if (element.hasChildNodes() && element.hasAttributes()) {
-         	NamedNodeMap attributes = element.getAttributes();
-         	int attributesLength = attributes.getLength();         
-
-         	for (Node child = element.getFirstChild(); child!=null; 
-                 child=child.getNextSibling()) {            
-
-         		if (child.getNodeType() == Node.ELEMENT_NODE) {
-         			Element childElement = (Element) child;
-
-         			for (int i = 0; i < attributesLength; i++) {
-         				Attr currentAttr = (Attr) attributes.item(i);                  
-         				if (Constants.NamespaceSpecNS.equals(
-         						currentAttr.getNamespaceURI())) {                     
-                        
-         					if (!childElement.hasAttributeNS(
-         							Constants.NamespaceSpecNS,
-									currentAttr.getLocalName())) {
-         						childElement.setAttributeNS(Constants.NamespaceSpecNS,
-                                                    currentAttr.getName(),
-                                                    currentAttr.getNodeValue());
-         					}
-         				}
-         			}
-         		}
-            }
-         }  
-      }
-
-      for (Node child = node.getFirstChild(); child != null;
-              child = child.getNextSibling()) {
-         switch (child.getNodeType()) {
-
+   private static void circumventBug2650internal(Node node) {
+	   Node parent=null;
+	   Node sibling=null;
+	   final String namespaceNs=Constants.NamespaceSpecNS;
+	   do {
+         switch (node.getNodeType()) {
          case Node.ELEMENT_NODE :
+        	 Element element = (Element) node;
+             if (!element.hasChildNodes())
+            	 break;
+             if (element.hasAttributes()) {            	 
+             NamedNodeMap attributes = element.getAttributes();         	
+             int attributesLength = attributes.getLength();    
+             
+             for (Node child = element.getFirstChild(); child!=null; 
+             	child=child.getNextSibling()) {            
+
+             	if (child.getNodeType() != Node.ELEMENT_NODE) {
+             		continue;
+             	}
+             	Element childElement = (Element) child;
+
+             	for (int i = 0; i < attributesLength; i++) {
+             		Attr currentAttr = (Attr) attributes.item(i); 
+             		if (namespaceNs!=currentAttr.getNamespaceURI())
+             			continue;
+             		if (childElement.hasAttributeNS(namespaceNs,
+    							currentAttr.getLocalName())) {
+             				continue;
+             		}
+             		childElement.setAttributeNS(namespaceNs,
+                                                currentAttr.getName(),
+                                                currentAttr.getNodeValue());         					
+             				
+             			
+             	}
+             }            
+             }
          case Node.ENTITY_REFERENCE_NODE :
          case Node.DOCUMENT_NODE :
-            circumventBug2650recurse(child);
+        	 parent=node;
+        	 sibling=node.getFirstChild();
+             break;
          }
-      }
+         while ((sibling==null) && (parent!=null)) {
+        		 sibling=parent.getNextSibling();
+        		 parent=parent.getParentNode();
+        	 };
+       if (sibling==null) {
+        		 return;
+        	 }
+       	
+         node=sibling;
+         sibling=node.getNextSibling();
+	   } while (true);
    }
 
    /**
     * @param sibling
     * @param nodeName
     * @param number
-    * @return
+    * @return nodes with the constrain
     */
    public static Element selectDsNode(Node sibling, String nodeName, int number) {
 	while (sibling!=null) {
 		if (nodeName.equals(sibling.getLocalName())
-				&& Constants.SignatureSpecNS.equals(sibling.getNamespaceURI())) {
+				&& Constants.SignatureSpecNS==sibling.getNamespaceURI()) {
 			if (number==0){
 				return (Element)sibling;
 			}
@@ -787,13 +528,13 @@
     * @param sibling
     * @param nodeName
     * @param number
-    * @return
+    * @return nodes with the constrain
     */
 
    public static Element selectXencNode(Node sibling, String nodeName, int number) {
 	while (sibling!=null) {
 		if (nodeName.equals(sibling.getLocalName())
-				&& EncryptionConstants.EncryptionSpecNS.equals(sibling.getNamespaceURI())) {
+				&& EncryptionConstants.EncryptionSpecNS==sibling.getNamespaceURI()) {
 			if (number==0){
 				return (Element)sibling;
 			}
@@ -809,7 +550,7 @@
     * @param sibling
     * @param nodeName
     * @param number
-    * @return
+    * @return nodes with the constrain
     */
    public static Text selectDsNodeText(Node sibling, String nodeName, int number) {
    	    Node n=selectDsNode(sibling,nodeName,number);
@@ -828,7 +569,7 @@
     * @param uri
     * @param nodeName
     * @param number
-    * @return
+    * @return nodes with the constrain
     */
    public static Text selectNodeText(Node sibling, String uri, String nodeName, int number) {
         Node n=selectNode(sibling,uri,nodeName,number);
@@ -847,12 +588,12 @@
     * @param uri
     * @param nodeName
     * @param number
-    * @return
+    * @return nodes with the constrain
     */
    public static Element selectNode(Node sibling, String uri,String nodeName, int number) {
 	while (sibling!=null) {
 		if (nodeName.equals(sibling.getLocalName())
-				&& uri.equals(sibling.getNamespaceURI())) {
+				&& uri==sibling.getNamespaceURI()) {
 			if (number==0){
 				return (Element)sibling;
 			}
@@ -866,17 +607,50 @@
    /**
     * @param sibling
     * @param nodeName    
-    * @return
+    * @return nodes with the constrain
     */
    public static Element[] selectDsNodes(Node sibling,String nodeName) {
-     return selectNodes(sibling,Constants.SignatureSpecNS,nodeName);
+     return selectConsecutiveNodes(sibling,Constants.SignatureSpecNS,nodeName);
+   }
+   /**
+    * @param sibling
+    * @param uri
+    * @param nodeName
+    * @return nodes with the constrain
+    */
+    public static Element[] selectConsecutiveNodes(Node sibling,String uri,String nodeName) {
+    	int size=20;
+    	Element[] a= new Element[size];
+    	int curr=0;
+    	//List list=new ArrayList();
+    	while (sibling!=null) {
+    		if (nodeName.equals(sibling.getLocalName())
+    				&& uri==sibling.getNamespaceURI()) {
+    			do {
+    				a[curr++]=(Element)sibling;
+    				if (size<=curr) {
+    					int cursize= size<<2;
+    					Element []cp=new Element[cursize];
+    					System.arraycopy(a,0,cp,0,size);
+    					a=cp;
+    					size=cursize;
+    				}
+    				sibling=sibling.getNextSibling();
+    			} while ((sibling!=null) && nodeName.equals(sibling.getLocalName())
+				&& uri==sibling.getNamespaceURI());    			
+    			break;
+    		}
+    		sibling=sibling.getNextSibling();
+    	}
+    	Element []af=new Element[curr];
+    	System.arraycopy(a,0,af,0,curr);
+    	return af;
    }
-   
    /**
     * @param sibling
     * @param uri
     * @param nodeName
-    * @return
+    * @return nodes with the constrain
     */
     public static Element[] selectNodes(Node sibling,String uri,String nodeName) {
     	int size=20;
@@ -885,7 +659,7 @@
     	//List list=new ArrayList();
     	while (sibling!=null) {
     		if (nodeName.equals(sibling.getLocalName())
-    				&& uri.equals(sibling.getNamespaceURI())) {
+    				&& uri==sibling.getNamespaceURI()) {
     			a[curr++]=(Element)sibling;
     			if (size<=curr) {
     				int cursize= size<<2;
@@ -905,7 +679,7 @@
    /**
     * @param signatureElement
     * @param inputSet
-    * @return
+    * @return nodes with the constrain
     */
     public static Set excludeNodeFromSet(Node signatureElement, Set inputSet) {
 	  Set resultSet = new HashSet();
@@ -928,9 +702,9 @@
     *
     * @param ctx
     * @param descendantOrSelf
-    * @return
+    * @return true if the node is descendant
     */
-   static boolean isDescendantOrSelf(Node ctx, Node descendantOrSelf) {
+   static public boolean isDescendantOrSelf(Node ctx, Node descendantOrSelf) {
 
       if (ctx == descendantOrSelf) {
          return true;

Modified: xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/XPathFuncHereAPI.java
URL: http://svn.apache.org/viewcvs/xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/XPathFuncHereAPI.java?rev=368871&r1=368870&r2=368871&view=diff
==============================================================================
--- xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/XPathFuncHereAPI.java (original)
+++ xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/XPathFuncHereAPI.java Fri Jan 13 14:00:23 2006
@@ -286,7 +286,7 @@
     * Method getStrFromNode
     *
     * @param xpathnode
-    * @return
+    * @return the string from the node
     */
    private static String getStrFromNode(Node xpathnode) {
 

Modified: xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/resolver/ResourceResolver.java
URL: http://svn.apache.org/viewcvs/xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/resolver/ResourceResolver.java?rev=368871&r1=368870&r2=368871&view=diff
==============================================================================
--- xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/resolver/ResourceResolver.java (original)
+++ xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/resolver/ResourceResolver.java Fri Jan 13 14:00:23 2006
@@ -1,4 +1,3 @@
-
 /*
  * Copyright  1999-2004 The Apache Software Foundation.
  *
@@ -17,21 +16,18 @@
  */
 package org.apache.xml.security.utils.resolver;
 
-
-
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Map;
-import java.util.Vector;
 
 import org.apache.xml.security.signature.XMLSignatureInput;
 import org.w3c.dom.Attr;
 
-
 /**
  * During reference validation, we have to retrieve resources from somewhere.
  * This is done by retrieving a Resolver. The resolver needs two arguments: The
  * URI in which the link to the new resource is defined and the BaseURI of the
- * file/entity in which the URI occurs (the BaseURI is the same as the SystemId
- * for {@link javax.xml.transform.stream.StreamSource#getSystemId}.
+ * file/entity in which the URI occurs (the BaseURI is the same as the SystemId.
  *
  * <UL xml:lang="DE" LANG="DE">
  * <LI> Verschiedene Implementierungen k??nnen sich als Resolver registrieren.
@@ -56,10 +52,10 @@
    static boolean _alreadyInitialized = false;
 
    /** these are the system-wide resolvers */
-   static Vector _resolverVector = null;
+   static List _resolverVector = null;
 
    /** Field _individualResolverVector */
-   Vector _individualResolverVector = null;
+   List _individualResolverVector = null;
 
    /** Field transformSpi */
    protected ResourceResolverSpi _resolverSpi = null;
@@ -93,31 +89,20 @@
     *
     * @param uri
     * @param BaseURI
-    * @return
+    * @return the instnace
     *
     * @throws ResourceResolverException
     */
    public static final ResourceResolver getInstance(Attr uri, String BaseURI)
            throws ResourceResolverException {
-
-      for (int i = 0; i < ResourceResolver._resolverVector.size(); i++) {
-         String currentClass =
-            (String) ResourceResolver._resolverVector.elementAt(i);
-         ResourceResolver resolver = null;
-
-         try {
-            resolver = new ResourceResolver(currentClass);
-         } catch (Exception e) {
-            Object exArgs[] = { ((uri != null)
-                                 ? uri.getNodeValue()
-                                 : "null"), BaseURI };
-
-            throw new ResourceResolverException("utils.resolver.noClass",
-                                                exArgs, e, uri, BaseURI);
-         }
+      int length=ResourceResolver._resolverVector.size();
+      for (int i = 0; i < length; i++) {
+		  ResourceResolver resolver =
+            (ResourceResolver) ResourceResolver._resolverVector.get(i);
+         
 
          if (log.isDebugEnabled())
-         	log.debug("check resolvability by class " + currentClass);
+         	log.debug("check resolvability by class " + resolver._resolverSpi.getClass().getName());
 
          if ((resolver != null) && resolver.canResolve(uri, BaseURI)) {
             return resolver;
@@ -131,19 +116,18 @@
       throw new ResourceResolverException("utils.resolver.noClass", exArgs,
                                           uri, BaseURI);
    }
-
    /**
     * Method getInstance
     *
     * @param uri
     * @param BaseURI
     * @param individualResolvers
-    * @return
+    * @return the instance
     *
     * @throws ResourceResolverException
     */
    public static final ResourceResolver getInstance(
-           Attr uri, String BaseURI, Vector individualResolvers)
+           Attr uri, String BaseURI, List individualResolvers)
               throws ResourceResolverException {
       if (log.isDebugEnabled()) {
       	log.debug("I was asked to create a ResourceResolver and got " + individualResolvers.size());
@@ -151,10 +135,11 @@
       }
 
       // first check the individual Resolvers
-      if ((individualResolvers != null) && (individualResolvers.size() > 0)) {
-         for (int i = 0; i < individualResolvers.size(); i++) {
+	  int size=0;
+      if ((individualResolvers != null) && ((size=individualResolvers.size()) > 0)) {
+         for (int i = 0; i < size; i++) {
             ResourceResolver resolver =
-               (ResourceResolver) individualResolvers.elementAt(i);
+               (ResourceResolver) individualResolvers.get(i);
 
             if (resolver != null) {
                String currentClass = resolver._resolverSpi.getClass().getName();
@@ -168,35 +153,7 @@
          }
       }
 
-      for (int i = 0; i < ResourceResolver._resolverVector.size(); i++) {
-         String currentClass =
-            (String) ResourceResolver._resolverVector.elementAt(i);
-         ResourceResolver resolver = null;
-
-         try {
-            resolver = new ResourceResolver(currentClass);
-         } catch (Exception e) {
-            Object exArgs[] = { ((uri != null)
-                                 ? uri.getNodeValue()
-                                 : "null"), BaseURI };
-
-            throw new ResourceResolverException("utils.resolver.noClass",
-                                                exArgs, e, uri, BaseURI);
-         }
-         if (log.isDebugEnabled())
-         	log.debug("check resolvability by class " + currentClass);
-
-         if ((resolver != null) && resolver.canResolve(uri, BaseURI)) {
-            return resolver;
-         }
-      }
-
-      Object exArgs[] = { ((uri != null)
-                           ? uri.getNodeValue()
-                           : "null"), BaseURI };
-
-      throw new ResourceResolverException("utils.resolver.noClass", exArgs,
-                                          uri, BaseURI);
+	  return getInstance(uri,BaseURI);
    }
 
    /**
@@ -205,35 +162,55 @@
    public static void init() {
 
       if (!ResourceResolver._alreadyInitialized) {
-         ResourceResolver._resolverVector = new Vector(10);
+         ResourceResolver._resolverVector = new ArrayList(10);
          _alreadyInitialized = true;
       }
    }
 
-   /**
-    * Method register
-    *
-    * @param className
-    */
-   public static void register(String className) {
-      ResourceResolver._resolverVector.add(className);
-   }
-
-   /**
-    * Method registerAtStart
-    *
-    * @param className
-    */
-   public static void registerAtStart(String className) {
-      ResourceResolver._resolverVector.add(0, className);
-   }
+    /**
+     * Registers a ResourceResolverSpi class. This method logs a warning if
+     * the class cannot be registered.
+     *
+     * @param className the name of the ResourceResolverSpi class to be 
+     *    registered
+     */
+    public static void register(String className) {
+ 	register(className, false);
+    }
+
+    /**
+     * Registers a ResourceResolverSpi class at the beginning of the provider
+     * list. This method logs a warning if the class cannot be registered.
+     *
+     * @param className the name of the ResourceResolverSpi class to be 
+     *    registered
+     */
+    public static void registerAtStart(String className) {
+	register(className, true);
+    }
+
+    private static void register(String className, boolean start) {
+        try {
+            ResourceResolver resolver = new ResourceResolver(className);
+	    if (start) {
+	        ResourceResolver._resolverVector.add(0, resolver);
+	        log.debug("registered resolver");
+	    } else {
+	        ResourceResolver._resolverVector.add(resolver);
+	    }
+        } catch (Exception e) {
+	    log.warn("Error loading resolver " + className +" disabling it");
+        } catch (NoClassDefFoundError e) {
+	    log.warn("Error loading resolver " + className +" disabling it");
+        }
+    }
 
    /**
     * Method resolve
     *
     * @param uri
     * @param BaseURI
-    * @return
+    * @return the resource
     *
     * @throws ResourceResolverException
     */
@@ -250,7 +227,7 @@
     *
     * @param uri
     * @param BaseURI
-    * @return
+    * @return the resource
     *
     * @throws ResourceResolverException
     */
@@ -273,7 +250,7 @@
     * Method getProperty
     *
     * @param key
-    * @return
+    * @return the value of the property
     */
    public String getProperty(String key) {
       return this._resolverSpi.engineGetProperty(key);
@@ -291,7 +268,7 @@
    /**
     * Method getPropertyKeys
     *
-    * @return
+    * @return all property keys.
     */
    public String[] getPropertyKeys() {
       return this._resolverSpi.engineGetPropertyKeys();
@@ -301,7 +278,7 @@
     * Method understandsProperty
     *
     * @param propertyToTest
-    * @return
+    * @return true if the resolver understands the property
     */
    public boolean understandsProperty(String propertyToTest) {
       return this._resolverSpi.understandsProperty(propertyToTest);
@@ -312,7 +289,7 @@
     *
     * @param uri
     * @param BaseURI
-    * @return
+    * @return true if it can resolve the uri
     */
    private boolean canResolve(Attr uri, String BaseURI) {
       return this._resolverSpi.engineCanResolve(uri, BaseURI);

Modified: xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/resolver/ResourceResolverException.java
URL: http://svn.apache.org/viewcvs/xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/resolver/ResourceResolverException.java?rev=368871&r1=368870&r2=368871&view=diff
==============================================================================
--- xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/resolver/ResourceResolverException.java (original)
+++ xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/resolver/ResourceResolverException.java Fri Jan 13 14:00:23 2006
@@ -32,6 +32,10 @@
 public class ResourceResolverException extends XMLSecurityException {
 
    /**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+   /**
     * Constructor ResourceResolverException
     *
     * @param _msgID
@@ -111,7 +115,7 @@
    
    /**
     * 
-    * @return
+    * @return the uri
     */
    public Attr getURI() {
       return this._uri;
@@ -129,7 +133,7 @@
    
    /**
     * 
-    * @return
+    * @return the basUri
     */
    public String getBaseURI() {
       return this._BaseURI;

Modified: xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/resolver/ResourceResolverSpi.java
URL: http://svn.apache.org/viewcvs/xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/resolver/ResourceResolverSpi.java?rev=368871&r1=368870&r2=368871&view=diff
==============================================================================
--- xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/resolver/ResourceResolverSpi.java (original)
+++ xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/resolver/ResourceResolverSpi.java Fri Jan 13 14:00:23 2006
@@ -21,7 +21,6 @@
 import java.util.Map;
 
 import org.apache.xml.security.signature.XMLSignatureInput;
-import org.apache.xml.utils.URI;
 import org.w3c.dom.Attr;
 
 
@@ -45,7 +44,7 @@
     *
     * @param uri
     * @param BaseURI
-    * @return
+    * @return the resource wrapped arround a XMLSignatureInput
     *
     * @throws ResourceResolverException
     */
@@ -79,7 +78,7 @@
     * Method engineGetProperty
     *
     * @param key
-    * @return
+    * @return the value of the property
     */
    public String engineGetProperty(String key) {
 
@@ -112,14 +111,14 @@
     *
     * @param uri
     * @param BaseURI
-    * @return
+    * @return true if the engine can resolve the uri
     */
    public abstract boolean engineCanResolve(Attr uri, String BaseURI);
 
    /**
     * Method engineGetPropertyKeys
     *
-    * @return
+    * @return the property keys
     */
    public String[] engineGetPropertyKeys() {
       return new String[0];
@@ -129,7 +128,7 @@
     * Method understandsProperty
     *
     * @param propertyToTest
-    * @return
+    * @return true if understands the property
     */
    public boolean understandsProperty(String propertyToTest) {
 
@@ -146,88 +145,6 @@
       return false;
    }
 
-   /**
-    * Expands a system id and returns the system id as a URL, if
-    * it can be expanded. A return value of null means that the
-    * identifier is already expanded. An exception thrown
-    * indicates a failure to expand the id.
-    *
-    * @param systemId The systemId to be expanded.
-    * @param currentSystemId
-    *
-    * @return Returns the URL object representing the expanded system
-    *         identifier. A null value indicates that the given
-    *         system identifier is already expanded.
-    *
-    * @throws Exception
-    */
-   public static String expandSystemId(String systemId, String currentSystemId)
-           throws Exception {
-
-      String id = systemId;
-
-      // check for bad parameters id
-      if ((id == null) || (id.length() == 0)) {
-         return systemId;
-      }
-
-      // if id already expanded, return
-      try {
-         URI url = new URI(id);
-
-         if (url != null) {
-            return systemId;
-         }
-      } catch (Exception e) {
-
-         // continue on...
-      }
-
-      // normalize id
-      id = ResourceResolverSpi.fixURI(id);
-
-      // normalize base
-      URI base = null;
-      URI url = null;
-
-      try {
-         if (currentSystemId == null) {
-            String dir;
-
-            try {
-               dir = ResourceResolverSpi.fixURI(System.getProperty("user.dir"));
-            } catch (SecurityException se) {
-               dir = "";
-            }
-
-            if (!dir.endsWith("/")) {
-               dir = dir + "/";
-            }
-
-            final String protocol = "file";
-            final String host = "";
-
-            base = new URI(protocol, host, dir, null, null);
-         } else {
-
-            // should we fix currentSystemId?
-            currentSystemId = ResourceResolverSpi.fixURI(currentSystemId);
-            base = new URI(currentSystemId);
-         }
-
-         // expand id
-         url = new URI(base, id);
-      } catch (Exception e) {
-
-         // let it go through
-      }
-
-      if (url == null) {
-         return systemId;
-      }
-
-      return url.toString();
-   }
 
    /**
     * Fixes a platform dependent filename to standard URI form.

Modified: xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/resolver/implementations/ResolverAnonymous.java
URL: http://svn.apache.org/viewcvs/xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/resolver/implementations/ResolverAnonymous.java?rev=368871&r1=368870&r2=368871&view=diff
==============================================================================
--- xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/resolver/implementations/ResolverAnonymous.java (original)
+++ xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/resolver/implementations/ResolverAnonymous.java Fri Jan 13 14:00:23 2006
@@ -60,13 +60,8 @@
       return this._input;
    }
 
-   /**
-    * We resolve anonymous (unspecified) URIs
-    *
-    * @param uri
-    * @param BaseURI
-    * @return
-    *
+   /**    
+    * @inheritDoc
     */
    public boolean engineCanResolve(Attr uri, String BaseURI) {
       if (uri == null) {

Modified: xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/resolver/implementations/ResolverDirectHTTP.java
URL: http://svn.apache.org/viewcvs/xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/resolver/implementations/ResolverDirectHTTP.java?rev=368871&r1=368870&r2=368871&view=diff
==============================================================================
--- xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/resolver/implementations/ResolverDirectHTTP.java (original)
+++ xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/resolver/implementations/ResolverDirectHTTP.java Fri Jan 13 14:00:23 2006
@@ -26,11 +26,11 @@
 import java.net.URL;
 import java.net.URLConnection;
 
+import org.apache.xml.utils.URI;
 import org.apache.xml.security.signature.XMLSignatureInput;
 import org.apache.xml.security.utils.Base64;
 import org.apache.xml.security.utils.resolver.ResourceResolverException;
 import org.apache.xml.security.utils.resolver.ResourceResolverSpi;
-import org.apache.xml.utils.URI;
 import org.w3c.dom.Attr;
 
 
@@ -242,10 +242,9 @@
     *
     * @param uri
     * @param BaseURI
-    *  @return 
+    *  @return true if can be resolved
     */
    public boolean engineCanResolve(Attr uri, String BaseURI) {
-
       if (uri == null) {
          log.debug("quick fail, uri == null");
 
@@ -254,37 +253,31 @@
 
       String uriNodeValue = uri.getNodeValue();
 
-      if (uriNodeValue.equals("") || uriNodeValue.startsWith("#")) {
+      if (uriNodeValue.equals("") || (uriNodeValue.charAt(0)=='#')) {
          log.debug("quick fail for empty URIs and local ones");
 
          return false;
       }
 
-      URI uriNew = null;
-
-      try {
-         uriNew = getNewURI(uri.getNodeValue(), BaseURI);
-      } catch (URI.MalformedURIException ex) {
-         log.debug("", ex);
-      }
+      if (log.isDebugEnabled())
+      	log.debug("I was asked whether I can resolve " + uriNodeValue);
 
-      if ((uriNew != null) && uriNew.getScheme().equals("http")) {
+      if ( uriNodeValue.startsWith("http:") ||
+				 BaseURI.startsWith("http:")) {
          if (log.isDebugEnabled())
-        	log.debug("I state that I can resolve " + uriNew.toString());
+         	log.debug("I state that I can resolve " + uriNodeValue);
 
          return true;
       }
 
       if (log.isDebugEnabled())
-      	log.debug("I state that I can't resolve " + uriNew.toString());
+      	log.debug("I state that I can't resolve " + uriNodeValue);
 
       return false;
    }
 
    /**
-    * Method engineGetPropertyKeys
-    *
-    * @return 
+    * @inheritDoc 
     */
    public String[] engineGetPropertyKeys() {
       return ResolverDirectHTTP.properties;

Modified: xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/resolver/implementations/ResolverFragment.java
URL: http://svn.apache.org/viewcvs/xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/resolver/implementations/ResolverFragment.java?rev=368871&r1=368870&r2=368871&view=diff
==============================================================================
--- xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/resolver/implementations/ResolverFragment.java (original)
+++ xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/resolver/implementations/ResolverFragment.java Fri Jan 13 14:00:23 2006
@@ -19,11 +19,9 @@
 
 
 import org.apache.xml.security.signature.XMLSignatureInput;
-import org.apache.xml.security.utils.CachedXPathAPIHolder;
 import org.apache.xml.security.utils.IdResolver;
 import org.apache.xml.security.utils.resolver.ResourceResolverException;
 import org.apache.xml.security.utils.resolver.ResourceResolverSpi;
-import org.apache.xml.utils.URI;
 import org.w3c.dom.Attr;
 import org.w3c.dom.Document;
 import org.w3c.dom.Node;
@@ -95,22 +93,13 @@
          	log.debug("Try to catch an Element with ID " + id + " and Element was " + selectedElem);
       }
 
-      //Set resultSet = dereferenceSameDocumentURI(selectedElem);
-      CachedXPathAPIHolder.setDoc(doc);
       XMLSignatureInput result = new XMLSignatureInput(selectedElem);
       result.setExcludeComments(true);
 
       //log.debug("We return a nodeset with " + resultSet.size() + " nodes");
-      result.setMIMEType("text/xml");
-
-      try {
-         URI uriNew = new URI(new URI(BaseURI), uri.getNodeValue());
-
-         result.setSourceURI(uriNew.toString());
-      } catch (URI.MalformedURIException ex) {
-         result.setSourceURI(BaseURI);
-      }
-
+      result.setMIMEType("text/xml");	  
+	  result.setSourceURI((BaseURI != null) ? BaseURI.concat(uri.getNodeValue()) :
+		  uri.getNodeValue());      
       return result;
    }
 
@@ -131,7 +120,7 @@
       String uriNodeValue = uri.getNodeValue();
 
       if (uriNodeValue.equals("")
-              || (uriNodeValue.startsWith("#")
+              || ((uriNodeValue.charAt(0)=='#')
                   &&!uriNodeValue.startsWith("#xpointer("))) {
          if (log.isDebugEnabled())
          	log.debug("State I can resolve reference: \"" + uriNodeValue + "\"");

Modified: xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/resolver/implementations/ResolverLocalFilesystem.java
URL: http://svn.apache.org/viewcvs/xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/resolver/implementations/ResolverLocalFilesystem.java?rev=368871&r1=368870&r2=368871&view=diff
==============================================================================
--- xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/resolver/implementations/ResolverLocalFilesystem.java (original)
+++ xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/resolver/implementations/ResolverLocalFilesystem.java Fri Jan 13 14:00:23 2006
@@ -20,10 +20,10 @@
 
 import java.io.FileInputStream;
 
+import org.apache.xml.utils.URI;
 import org.apache.xml.security.signature.XMLSignatureInput;
 import org.apache.xml.security.utils.resolver.ResourceResolverException;
 import org.apache.xml.security.utils.resolver.ResourceResolverSpi;
-import org.apache.xml.utils.URI;
 import org.w3c.dom.Attr;
 
 
@@ -40,13 +40,7 @@
                     ResolverLocalFilesystem.class.getName());
 
    /**
-    * Method resolve
-    *
-    * @param uri
-    * @param BaseURI
-    * @return
-    * @throws ResourceResolverException
-    * @todo calculate the correct URI from the attribute and the BaseURI
+    * @inheritDoc
     */
    public XMLSignatureInput engineResolve(Attr uri, String BaseURI)
            throws ResourceResolverException {
@@ -78,7 +72,7 @@
     * Method translateUriToFilename
     *
     * @param uri
-    * @return
+    * @return the string of the filename
     */
    private static String translateUriToFilename(String uri) {
 
@@ -113,11 +107,7 @@
    }
 
    /**
-    * Method engineCanResolve
-    *
-    * @param uri
-    * @param BaseURI
-    * @return
+    * @inheritDoc
     */
    public boolean engineCanResolve(Attr uri, String BaseURI) {
 
@@ -127,21 +117,22 @@
 
       String uriNodeValue = uri.getNodeValue();
 
-      if (uriNodeValue.equals("") || uriNodeValue.startsWith("#")) {
+      if (uriNodeValue.equals("") || (uriNodeValue.charAt(0)=='#')) {
          return false;
       }
 
       try {
-         URI uriNew = new URI(new URI(BaseURI), uri.getNodeValue());
-         if (log.isDebugEnabled())
-         	log.debug("I was asked whether I can resolve " + uriNew.toString());
-
-         if (uriNew.getScheme().equals("file")) {
-            if (log.isDebugEnabled())
-            	log.debug("I state that I can resolve " + uriNew.toString());
+	         //URI uriNew = new URI(new URI(BaseURI), uri.getNodeValue());
+	         if (log.isDebugEnabled())
+	         	log.debug("I was asked whether I can resolve " + uriNodeValue/*uriNew.toString()*/);
+
+	         if ( uriNodeValue.startsWith("file:") ||
+					 BaseURI.startsWith("file:")/*uriNew.getScheme().equals("file")*/) {
+	            if (log.isDebugEnabled())
+	            	log.debug("I state that I can resolve " + uriNodeValue/*uriNew.toString()*/);
 
-            return true;
-         }
+	            return true;
+	         }
       } catch (Exception e) {}
 
       log.debug("But I can't");

Modified: xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/resolver/implementations/ResolverXPointer.java
URL: http://svn.apache.org/viewcvs/xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/resolver/implementations/ResolverXPointer.java?rev=368871&r1=368870&r2=368871&view=diff
==============================================================================
--- xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/resolver/implementations/ResolverXPointer.java (original)
+++ xml/security/branches/jsr105_0_16/src/org/apache/xml/security/utils/resolver/implementations/ResolverXPointer.java Fri Jan 13 14:00:23 2006
@@ -19,11 +19,9 @@
 
 
 import org.apache.xml.security.signature.XMLSignatureInput;
-import org.apache.xml.security.utils.CachedXPathAPIHolder;
 import org.apache.xml.security.utils.IdResolver;
 import org.apache.xml.security.utils.resolver.ResourceResolverException;
 import org.apache.xml.security.utils.resolver.ResourceResolverSpi;
-import org.apache.xml.utils.URI;
 import org.w3c.dom.Attr;
 import org.w3c.dom.Document;
 import org.w3c.dom.Node;
@@ -60,17 +58,12 @@
       Node resultNode = null;
       Document doc = uri.getOwnerElement().getOwnerDocument();
 
-      // this must be done so that Xalan can catch ALL namespaces
-      //XMLUtils.circumventBug2650(doc);
-
-      //CachedXPathAPI cXPathAPI = new CachedXPathAPI();
-
-      
-         if (isXPointerSlash(uri)) {
+      	String uriStr=uri.getNodeValue();
+         if (isXPointerSlash(uriStr)) {
             resultNode = doc;
                
-         } else if (isXPointerId(uri)) {
-            String id = getXPointerId(uri);
+         } else if (isXPointerId(uriStr)) {
+            String id = getXPointerId(uriStr);
             resultNode =IdResolver.getElementById(doc, id);
 
             // log.debug("Use #xpointer(id('" + id + "')) on element " + selectedElem);
@@ -89,18 +82,13 @@
          }
       
 
-      //Set resultSet = XMLUtils.convertNodelistToSet(resultNode); 
-      CachedXPathAPIHolder.setDoc(doc);
       XMLSignatureInput result = new XMLSignatureInput(resultNode);
 
       result.setMIMEType("text/xml");
-
-      try {
-         URI uriNew = new URI(new URI(BaseURI), uri.getNodeValue());
-
-         result.setSourceURI(uriNew.toString());
-      } catch (URI.MalformedURIException ex) {
-         result.setSourceURI(BaseURI);
+      if (BaseURI != null && BaseURI.length() > 0) {
+	  result.setSourceURI(BaseURI.concat(uri.getNodeValue()));      
+      } else {
+	  result.setSourceURI(uri.getNodeValue());      
       }
 
       return result;
@@ -114,8 +102,8 @@
       if (uri == null) {
          return false;
       }
-
-      if (isXPointerSlash(uri) || isXPointerId(uri)) {
+	  String uriStr =uri.getNodeValue();
+      if (isXPointerSlash(uriStr) || isXPointerId(uriStr)) {
          return true;
       }
 
@@ -128,15 +116,18 @@
     * @param uri
     * @return true if begins with xpointer
     */
-   private static boolean isXPointerSlash(Attr uri) {
+   private static boolean isXPointerSlash(String uri) {
 
-      if (uri.getNodeValue().equals("#xpointer(/)")) {
+      if (uri.equals("#xpointer(/)")) {
          return true;
       }
 
       return false;
    }
 
+   
+   private static final String XP="#xpointer(id(";
+   private static final int XP_LENGTH=XP.length();
    /**
     * Method isXPointerId
     *
@@ -144,25 +135,24 @@
     * @return it it has an xpointer id
     *
     */
-   private static boolean isXPointerId(Attr uri) {
-
-      String uriNodeValue = uri.getNodeValue();
+   private static boolean isXPointerId(String uri) {
+      
 
-      if (uriNodeValue.startsWith("#xpointer(id(")
-              && uriNodeValue.endsWith("))")) {
-         String idPlusDelim = uriNodeValue.substring("#xpointer(id(".length(),
-                                                     uriNodeValue.length()
-                                                     - "))".length());
+      if (uri.startsWith(XP)
+              && uri.endsWith("))")) {
+         String idPlusDelim = uri.substring(XP_LENGTH,
+                                                     uri.length()
+                                                     - 2);
 
          // log.debug("idPlusDelim=" + idPlusDelim);
-
+		 int idLen=idPlusDelim.length() -1;
          if (((idPlusDelim.charAt(0) == '"') && (idPlusDelim
-                 .charAt(idPlusDelim.length() - 1) == '"')) || ((idPlusDelim
+                 .charAt(idLen) == '"')) || ((idPlusDelim
                  .charAt(0) == '\'') && (idPlusDelim
-                 .charAt(idPlusDelim.length() - 1) == '\''))) {
+                 .charAt(idLen) == '\''))) {
             if (log.isDebugEnabled())
             	log.debug("Id="
-                      + idPlusDelim.substring(1, idPlusDelim.length() - 1));
+                      + idPlusDelim.substring(1, idLen));
 
             return true;
          }
@@ -175,23 +165,21 @@
     * Method getXPointerId
     *
     * @param uri
-    * @return
+    * @return xpointerId to search.
     */
-   private static String getXPointerId(Attr uri) {
-
-      String uriNodeValue = uri.getNodeValue();
+   private static String getXPointerId(String uri) {
 
-      if (uriNodeValue.startsWith("#xpointer(id(")
-              && uriNodeValue.endsWith("))")) {
-         String idPlusDelim = uriNodeValue.substring("#xpointer(id(".length(),
-                                                     uriNodeValue.length()
-                                                     - "))".length());
 
+      if (uri.startsWith(XP)
+              && uri.endsWith("))")) {
+         String idPlusDelim = uri.substring(XP_LENGTH,uri.length()
+                                                     - 2);
+		 int idLen=idPlusDelim.length() -1;
          if (((idPlusDelim.charAt(0) == '"') && (idPlusDelim
-                 .charAt(idPlusDelim.length() - 1) == '"')) || ((idPlusDelim
+                 .charAt(idLen) == '"')) || ((idPlusDelim
                  .charAt(0) == '\'') && (idPlusDelim
-                 .charAt(idPlusDelim.length() - 1) == '\''))) {
-            return idPlusDelim.substring(1, idPlusDelim.length() - 1);
+                 .charAt(idLen) == '\''))) {
+            return idPlusDelim.substring(1, idLen);
          }
       }
 

Modified: xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/HmacSHA1.java
URL: http://svn.apache.org/viewcvs/xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/HmacSHA1.java?rev=368871&r1=368870&r2=368871&view=diff
==============================================================================
--- xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/HmacSHA1.java (original)
+++ xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/HmacSHA1.java Fri Jan 13 14:00:23 2006
@@ -42,8 +42,7 @@
 
 public class HmacSHA1 {
     
-    static Logger log = Logger.getLogger(HmacSHA1.class.getName());
-    
+    private static Logger log = Logger.getLogger("org.jcp.xml.dsig.internal");
     
     private static final int SHA1_BLOCK = 64;        // 512 bit block in SHA-1
     private byte[] key_opad;
@@ -79,26 +78,35 @@
         else {
             byte_length = -1;
         }
-        log.log(Level.FINE, "byte_length: " + byte_length);
+	if (log.isLoggable(Level.FINE)) {
+            log.log(Level.FINE, "byte_length: " + byte_length);
+	}
         initialized = true;
     }
     
     /**
      * update the engine with data
      *
-     * *@param data information to be signed or verified
+     * @param data information to be signed or verified
      */
     public void update(byte[] data) {
         this.digest.update(data);
     }
-    
+    public void update(byte data) {
+        this.digest.update(data);
+    }
+    public void update(byte[] data, int offset, int len) {
+        this.digest.update(data, offset, len);
+    }
+
     /**
      * Signs the data
      */
     public byte[] sign() throws SignatureException {
         
         if (byte_length == 0) {
-            throw new SignatureException("length should be -1 or greater than zero, but is " + byte_length);
+            throw new SignatureException
+	      ("length should be -1 or greater than zero, but is " + byte_length);
         }
         
         byte[] value = this.digest.digest();
@@ -146,5 +154,4 @@
         this.digest.reset();
         this.digest.update(key_ipad);
     }
-    
 }

Modified: xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/ApacheCanonicalizer.java
URL: http://svn.apache.org/viewcvs/xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/ApacheCanonicalizer.java?rev=368871&r1=368870&r2=368871&view=diff
==============================================================================
--- xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/ApacheCanonicalizer.java (original)
+++ xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/ApacheCanonicalizer.java Fri Jan 13 14:00:23 2006
@@ -48,7 +48,7 @@
 
 public abstract class ApacheCanonicalizer extends TransformService {
 
-    static Logger log = Logger.getLogger(ApacheCanonicalizer.class.getName());
+    private static Logger log = Logger.getLogger("org.jcp.xml.dsig.internal.dom");
     protected Canonicalizer apacheCanonicalizer;
     private Transform apacheTransform;
     protected String inclusiveNamespaces;
@@ -93,8 +93,10 @@
 	if (apacheCanonicalizer == null) {
 	    try {
                 apacheCanonicalizer = Canonicalizer.getInstance(getAlgorithm());
-                log.log(Level.FINE, "Created canonicalizer for algorithm: " 
-		    + getAlgorithm());
+		if (log.isLoggable(Level.FINE)) {
+                    log.log(Level.FINE, "Created canonicalizer for algorithm: " 
+		        + getAlgorithm());
+		}
 	    } catch (InvalidCanonicalizerException ice) {
                 throw new TransformException
 		    ("Couldn't find Canonicalizer for: " + getAlgorithm() +
@@ -113,30 +115,42 @@
 	    if (data instanceof ApacheData) {
 		XMLSignatureInput in = 
 		    ((ApacheData) data).getXMLSignatureInput();
-		if (in.isElement() || in.isNodeSet()) {
+		if (in.isElement()) {
+		    if (inclusiveNamespaces != null) {
+                        return new OctetStreamData(new ByteArrayInputStream
+                            (apacheCanonicalizer.canonicalizeSubtree
+                                (in.getSubNode(), inclusiveNamespaces)));
+                    } else {
+                        return new OctetStreamData(new ByteArrayInputStream
+                            (apacheCanonicalizer.canonicalizeSubtree
+                                (in.getSubNode())));
+                    }
+                } else if (in.isNodeSet()) {
                     nodeSet = in.getNodeSet();
 		} else {
 		    return new OctetStreamData(new ByteArrayInputStream(
 		        apacheCanonicalizer.canonicalize(
         		    Utils.readBytesFromStream(in.getOctetStream()))));
 		}
-	    } else if (data instanceof SubDocumentData) {
-	        SubDocumentData sdd = (SubDocumentData) data;
+	    } else if (data instanceof DOMSubTreeData) {
+	        DOMSubTreeData subTree = (DOMSubTreeData) data;
 	        if (inclusiveNamespaces != null) {
 	            return new OctetStreamData(new ByteArrayInputStream
 		        (apacheCanonicalizer.canonicalizeSubtree
-		         (sdd.nodeIterator().getRoot(), inclusiveNamespaces)));
+		         (subTree.getRoot(), inclusiveNamespaces)));
 	        } else {
 	            return new OctetStreamData(new ByteArrayInputStream
 		        (apacheCanonicalizer.canonicalizeSubtree
-		         (sdd.nodeIterator().getRoot())));
+		         (subTree.getRoot())));
 	        }
 	    } else if (data instanceof NodeSetData) {
 	        NodeSetData nsd = (NodeSetData) data;
 	        // convert Iterator to Set
 	        nodeSet = Utils.toNodeSet(nsd.iterator());
-	        log.log(Level.FINE, "Canonicalizing " + nodeSet.size() 
-		    + " nodes");
+		if (log.isLoggable(Level.FINE)) {
+	            log.log(Level.FINE, "Canonicalizing " + nodeSet.size() 
+		        + " nodes");
+		}
             } else {
 		return new OctetStreamData(new ByteArrayInputStream(
 		    apacheCanonicalizer.canonicalize(
@@ -174,8 +188,10 @@
                 apacheTransform = Transform.getInstance
                     (ownerDoc, getAlgorithm(), transformElem.getChildNodes());
                 apacheTransform.setElement(transformElem, xc.getBaseURI());
-                log.log(Level.FINE, "Created transform for algorithm: " 
-		    + getAlgorithm());            
+		if (log.isLoggable(Level.FINE)) {
+                    log.log(Level.FINE, "Created transform for algorithm: " 
+		        + getAlgorithm());            
+		}
 	    } catch (Exception ex) {
                 throw new TransformException
                     ("Couldn't find Transform for: " + getAlgorithm(), ex);
@@ -184,20 +200,27 @@
 
         XMLSignatureInput in;
         if (data instanceof ApacheData) {
-            log.log(Level.FINE, "ApacheData = true");
+	    if (log.isLoggable(Level.FINE)) {
+                log.log(Level.FINE, "ApacheData = true");
+	    }
             in = ((ApacheData) data).getXMLSignatureInput();
         } else if (data instanceof NodeSetData) {
-            log.log(Level.FINE, "isNodeSet() = true");
-            if (data instanceof SubDocumentData) {
-                SubDocumentData sdd = (SubDocumentData) data;
-                in = new XMLSignatureInput(sdd.nodeIterator().getRoot());
+	    if (log.isLoggable(Level.FINE)) {
+                log.log(Level.FINE, "isNodeSet() = true");
+	    }
+            if (data instanceof DOMSubTreeData) {
+                DOMSubTreeData subTree = (DOMSubTreeData) data;
+                in = new XMLSignatureInput(subTree.getRoot());
+		in.setExcludeComments(subTree.excludeComments());
             } else {
                 Set nodeSet =
                     Utils.toNodeSet(((NodeSetData) data).iterator());
                 in = new XMLSignatureInput(nodeSet);
             }
         } else {
-            log.log(Level.FINE, "isNodeSet() = false");
+	    if (log.isLoggable(Level.FINE)) {
+                log.log(Level.FINE, "isNodeSet() = false");
+	    }
             try {
                 in = new XMLSignatureInput
                     (((OctetStreamData)data).getOctetStream());

Modified: xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/ApacheNodeSetData.java
URL: http://svn.apache.org/viewcvs/xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/ApacheNodeSetData.java?rev=368871&r1=368870&r2=368871&view=diff
==============================================================================
--- xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/ApacheNodeSetData.java (original)
+++ xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/ApacheNodeSetData.java Fri Jan 13 14:00:23 2006
@@ -23,9 +23,16 @@
 package org.jcp.xml.dsig.internal.dom;
 
 import java.util.Collections;
+import java.util.HashSet;
 import java.util.Iterator;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Set;
 import javax.xml.crypto.NodeSetData;
+import org.w3c.dom.Node;
+import org.apache.xml.security.signature.NodeFilter;
 import org.apache.xml.security.signature.XMLSignatureInput;
+import org.apache.xml.security.utils.XMLUtils;
 
 public class ApacheNodeSetData implements ApacheData, NodeSetData {
 
@@ -36,6 +43,11 @@
     }
 
     public Iterator iterator() {
+	// If nodefilters are set, must execute them first to create node-set
+        if (xi.getNodeFilters() != null) {
+            return Collections.unmodifiableSet
+                (getNodeSet(xi.getNodeFilters())).iterator();
+        }
 	try {
 	    return Collections.unmodifiableSet(xi.getNodeSet()).iterator();
 	} catch (Exception e) {
@@ -47,5 +59,33 @@
 
     public XMLSignatureInput getXMLSignatureInput() {
         return xi;
+    }
+
+    private Set getNodeSet(List nodeFilters) {
+        if (xi.isNeedsToBeExpanded()) {
+            XMLUtils.circumventBug2650
+                (XMLUtils.getOwnerDocument(xi.getSubNode()));
+        }
+
+        Set inputSet = new LinkedHashSet();
+        XMLUtils.getSet
+          (xi.getSubNode(), inputSet, null, !xi.isExcludeComments());
+        Set nodeSet = new LinkedHashSet();
+        Iterator i = inputSet.iterator();
+        while (i.hasNext()) {
+            Node currentNode = (Node) i.next();
+            Iterator it = nodeFilters.iterator();
+            boolean skipNode = false;
+            while (it.hasNext() && !skipNode) {
+                NodeFilter nf = (NodeFilter) it.next();
+                if (!nf.isNodeInclude(currentNode)) {
+                    skipNode = true;
+                }
+            }
+            if (!skipNode) {
+                nodeSet.add(currentNode);
+            }
+        }
+        return nodeSet;
     }
 }

Modified: xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/ApacheTransform.java
URL: http://svn.apache.org/viewcvs/xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/ApacheTransform.java?rev=368871&r1=368870&r2=368871&view=diff
==============================================================================
--- xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/ApacheTransform.java (original)
+++ xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/ApacheTransform.java Fri Jan 13 14:00:23 2006
@@ -49,7 +49,7 @@
  */
 public abstract class ApacheTransform extends TransformService {
 
-    static Logger log = Logger.getLogger(ApacheTransform.class.getName());
+    private static Logger log = Logger.getLogger("org.jcp.xml.dsig.internal.dom");
     private Transform apacheTransform;
     protected Document ownerDoc;
     protected Element transformElem;
@@ -112,8 +112,10 @@
                 apacheTransform = Transform.getInstance
 		    (ownerDoc, getAlgorithm(), transformElem.getChildNodes());
 		apacheTransform.setElement(transformElem, xc.getBaseURI());
-                log.log(Level.FINE, "Created transform for algorithm: " 
-		    + getAlgorithm());
+		if (log.isLoggable(Level.FINE)) {
+                    log.log(Level.FINE, "Created transform for algorithm: " 
+		        + getAlgorithm());
+		}
             } catch (Exception ex) {
                 throw new TransformException
 		    ("Couldn't find Transform for: " + getAlgorithm(), ex);
@@ -122,20 +124,30 @@
 
         XMLSignatureInput in;
 	if (data instanceof ApacheData) {
-            log.log(Level.FINE, "ApacheData = true");
+	    if (log.isLoggable(Level.FINE)) {
+                log.log(Level.FINE, "ApacheData = true");
+	    }
 	    in = ((ApacheData) data).getXMLSignatureInput();
 	} else if (data instanceof NodeSetData) {
-            log.log(Level.FINE, "isNodeSet() = true");
-	    if (data instanceof SubDocumentData) {
-		SubDocumentData sdd = (SubDocumentData) data;
-                in = new XMLSignatureInput(sdd.nodeIterator().getRoot());
+	    if (log.isLoggable(Level.FINE)) {
+                log.log(Level.FINE, "isNodeSet() = true");
+	    }
+	    if (data instanceof DOMSubTreeData) {
+		if (log.isLoggable(Level.FINE)) {
+                    log.log(Level.FINE, "DOMSubTreeData = true");
+                }
+		DOMSubTreeData subTree = (DOMSubTreeData) data;
+                in = new XMLSignatureInput(subTree.getRoot());
+		in.setExcludeComments(subTree.excludeComments());
 	    } else {
 		Set nodeSet = 
 		    Utils.toNodeSet(((NodeSetData) data).iterator());
                 in = new XMLSignatureInput(nodeSet);
 	    }
         } else {
-            log.log(Level.FINE, "isNodeSet() = false");
+	    if (log.isLoggable(Level.FINE)) {
+                log.log(Level.FINE, "isNodeSet() = false");
+	    }
             try {
                 in = new XMLSignatureInput
 		    (((OctetStreamData)data).getOctetStream());

Modified: xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMCanonicalXMLC14NMethod.java
URL: http://svn.apache.org/viewcvs/xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMCanonicalXMLC14NMethod.java?rev=368871&r1=368870&r2=368871&view=diff
==============================================================================
--- xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMCanonicalXMLC14NMethod.java (original)
+++ xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMCanonicalXMLC14NMethod.java Fri Jan 13 14:00:23 2006
@@ -53,9 +53,9 @@
         // ignore comments if dereferencing same-document URI that requires
 	// you to omit comments, even if the Transform says otherwise -
         // this is to be compliant with section 4.3.3.3 of W3C Rec.
-	if (data instanceof SubDocumentData) {
-	    SubDocumentData sdd = (SubDocumentData) data;
-	    if (!sdd.withComments()) {
+	if (data instanceof DOMSubTreeData) {
+	    DOMSubTreeData subTree = (DOMSubTreeData) data;
+	    if (subTree.excludeComments()) {
                 try {
                     apacheCanonicalizer = Canonicalizer.getInstance
 			(CanonicalizationMethod.INCLUSIVE);

Modified: xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMCryptoBinary.java
URL: http://svn.apache.org/viewcvs/xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMCryptoBinary.java?rev=368871&r1=368870&r2=368871&view=diff
==============================================================================
--- xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMCryptoBinary.java (original)
+++ xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMCryptoBinary.java Fri Jan 13 14:00:23 2006
@@ -62,7 +62,6 @@
             throw new NullPointerException("bigNum is null");
         }
         this.bigNum = bigNum;
-        byte[] bigNumAsBytes = bigNum.toByteArray();
         // convert to bitstring
         value = Base64.encode(bigNum);
     }

Modified: xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMDSASignatureMethod.java
URL: http://svn.apache.org/viewcvs/xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMDSASignatureMethod.java?rev=368871&r1=368870&r2=368871&view=diff
==============================================================================
--- xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMDSASignatureMethod.java (original)
+++ xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMDSASignatureMethod.java Fri Jan 13 14:00:23 2006
@@ -40,7 +40,7 @@
 import java.util.logging.Logger;
 import org.w3c.dom.Element;
 
-import org.apache.xml.security.utils.Base64;
+import org.jcp.xml.dsig.internal.SignerOutputStream;
 
 /**
  * DOM-based implementation of SignatureMethod for DSA algorithm.
@@ -50,8 +50,7 @@
  */
 public final class DOMDSASignatureMethod extends DOMSignatureMethod { 
 
-    static Logger log = Logger.getLogger(DOMDSASignatureMethod.class.getName());
-
+    private static Logger log = Logger.getLogger("org.jcp.xml.dsig.internal.dom");
     private Signature signature;
 
     /**
@@ -102,12 +101,15 @@
 	return (getParameterSpec() == spec);
     }
 
-    public boolean verify(Key key, byte[] data, byte[] sig) 
-	throws InvalidKeyException, SignatureException {
+    public boolean verify(Key key, DOMSignedInfo si, byte[] sig,
+	XMLValidateContext context) 
+	throws InvalidKeyException, SignatureException, XMLSignatureException {
 	if (key == null) {
 	    throw new NullPointerException("key cannot be null");
 	} else if (sig == null) {
 	    throw new NullPointerException("signature cannot be null");
+	} else if (si == null) {
+	    throw new NullPointerException("signedInfo cannot be null");
 	}
 	if (signature == null) {
 	    try {
@@ -121,18 +123,22 @@
 	        throw new InvalidKeyException("key must be PublicKey");
             }
             signature.initVerify((PublicKey) key);
-            signature.update(data);
-            log.log(Level.FINE, "verifying data: " + Base64.encode(data));
-            log.log(Level.FINE, "verifying with key: " + key);
-            return signature.verify(convertXMLDSIGtoASN1(sig) );  
+	    si.canonicalize(context, new SignerOutputStream(signature));
+
+	    // avoid overhead of converting key to String unless necessary
+            if (log.isLoggable(Level.FINE)) {
+                log.log(Level.FINE, "verifying with key: " + key);
+	    }
+            return signature.verify(convertXMLDSIGtoASN1(sig));  
         } catch (IOException ioex) {
 	    // should never occur!
 	    throw new RuntimeException(ioex.getMessage());
 	}
     }
 
-    public byte[] sign(Key key, byte[] data) throws InvalidKeyException {
-	if (key == null || data == null) {
+    public byte[] sign(Key key, DOMSignedInfo si, XMLSignContext context) 
+	throws InvalidKeyException, XMLSignatureException {
+	if (key == null || si == null) {
 	    throw new NullPointerException();
 	}
 
@@ -146,12 +152,16 @@
 		throw new InvalidKeyException("SHA1withDSA Signature not found");
 	    }
 	}
-        log.log(Level.FINE, "Signing data: " + Base64.encode(data));
-        log.log(Level.FINE, "Signing with key: " + key);
+
+        // avoid overhead of converting key to String unless necessary
+        if (log.isLoggable(Level.FINE)) {
+            log.log(Level.FINE, "Signing with key: " + key);
+	}
         signature.initSign((PrivateKey) key);
+	si.canonicalize(context, new SignerOutputStream(signature));
+
         try {
-            signature.update(data);
-	    return convertASN1toXMLDSIG(signature.sign() );
+	    return convertASN1toXMLDSIG(signature.sign());
         } catch (SignatureException se) {
 	    // should never occur!
 	    throw new RuntimeException(se.getMessage());

Modified: xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMExcC14NMethod.java
URL: http://svn.apache.org/viewcvs/xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMExcC14NMethod.java?rev=368871&r1=368870&r2=368871&view=diff
==============================================================================
--- xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMExcC14NMethod.java (original)
+++ xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMExcC14NMethod.java Fri Jan 13 14:00:23 2006
@@ -71,11 +71,17 @@
     private void unmarshalParams(Element paramsElem) {
 	String prefixListAttr = paramsElem.getAttributeNS(null, "PrefixList");
 	this.inclusiveNamespaces = prefixListAttr;
-	StringTokenizer tokenizer = new StringTokenizer(prefixListAttr, " ");
-	List prefixList = new ArrayList(tokenizer.countTokens()); 
-	for (int i = 0; tokenizer.hasMoreTokens(); i++) {
-	    prefixList.add(tokenizer.nextToken());
+	int begin = 0;
+	int end = prefixListAttr.indexOf(' ');
+	List prefixList = new ArrayList();
+	while (end != -1) {
+	    prefixList.add(prefixListAttr.substring(begin, end));
+	    begin = end + 1;
+	    end = prefixListAttr.indexOf(' ', begin);
 	}
+	if (begin <= prefixListAttr.length()) {
+            prefixList.add(prefixListAttr.substring(begin));
+        }
 	this.params = new ExcC14NParameterSpec(prefixList);
     }
 
@@ -103,10 +109,10 @@
 
 	ExcC14NParameterSpec params = (ExcC14NParameterSpec) spec;
 	StringBuffer prefixListAttr = new StringBuffer("");
-	Iterator i = params.getPrefixList().iterator();
-	while (i.hasNext()) {
-	    prefixListAttr.append((String) i.next());
-	    if (i.hasNext()) {
+	List prefixList = params.getPrefixList();
+	for (int i = 0, size = prefixList.size(); i < size; i++) {
+	    prefixListAttr.append((String) prefixList.get(i));
+	    if (i < size - 1) {
 		prefixListAttr.append(" ");
 	    }
 	}
@@ -125,9 +131,9 @@
 	// ignore comments if dereferencing same-document URI that require
 	// you to omit comments, even if the Transform says otherwise -
 	// this is to be compliant with section 4.3.3.3 of W3C Rec.
-	if (data instanceof SubDocumentData) {
-	    SubDocumentData sdd = (SubDocumentData) data;
-	    if (!sdd.withComments()) {
+	if (data instanceof DOMSubTreeData) {
+	    DOMSubTreeData subTree = (DOMSubTreeData) data;
+	    if (subTree.excludeComments()) {
 		try {
                     apacheCanonicalizer = Canonicalizer.getInstance
 			(CanonicalizationMethod.EXCLUSIVE);

Modified: xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMHMACSignatureMethod.java
URL: http://svn.apache.org/viewcvs/xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMHMACSignatureMethod.java?rev=368871&r1=368870&r2=368871&view=diff
==============================================================================
--- xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMHMACSignatureMethod.java (original)
+++ xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMHMACSignatureMethod.java Fri Jan 13 14:00:23 2006
@@ -38,6 +38,8 @@
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 
+import org.jcp.xml.dsig.internal.MacOutputStream;
+
 /**
  * DOM-based implementation of HMAC SignatureMethod.
  *
@@ -45,7 +47,7 @@
  */
 public final class DOMHMACSignatureMethod extends DOMSignatureMethod {
 
-    static Logger log = Logger.getLogger(DOMHMACSignatureMethod.class.getName());
+    private static Logger log = Logger.getLogger("org.jcp.xml.dsig.internal.dom");
     private HmacSHA1 hmac = new HmacSHA1();
     private int outputLength;
 
@@ -77,8 +79,11 @@
 	            ("params must be of type HMACParameterSpec");
 	    }
 	    outputLength = ((HMACParameterSpec) params).getOutputLength();
-	    log.log(Level.FINE, "Setting outputLength from HMACParameterSpec to: "
-		+ outputLength);
+	    if (log.isLoggable(Level.FINE)) {
+	        log.log(Level.FINE, 
+		    "Setting outputLength from HMACParameterSpec to: "
+		    + outputLength);
+	    }
         } else {
 	    outputLength = -1;
         }
@@ -88,7 +93,9 @@
 	throws MarshalException {
         outputLength = new Integer
 	    (paramsElem.getFirstChild().getNodeValue()).intValue();
-        log.log(Level.FINE, "unmarshalled outputLength: " + outputLength);
+        if (log.isLoggable(Level.FINE)) {
+            log.log(Level.FINE, "unmarshalled outputLength: " + outputLength);
+	}
 	return new HMACParameterSpec(outputLength);
     }
 
@@ -104,23 +111,29 @@
         parent.appendChild(hmacElem);
     }
 
-    public boolean verify(Key key, byte[] data, byte[] sig) 
-	throws InvalidKeyException, SignatureException {
-        if (key == null || sig == null) {
-            throw new NullPointerException("key or signature data can't be null");
+    public boolean verify(Key key, DOMSignedInfo si, byte[] sig,
+	XMLValidateContext context) 
+	throws InvalidKeyException, SignatureException, XMLSignatureException {
+        if (key == null || si == null || sig == null) {
+            throw new NullPointerException
+		("key, signedinfo or signature data can't be null");
         }
-        log.log(Level.FINE, "outputLength = " + outputLength);
+        if (log.isLoggable(Level.FINE)) {
+            log.log(Level.FINE, "outputLength = " + outputLength);
+	}
         hmac.init(key, outputLength);
-        hmac.update(data);
+	si.canonicalize(context, new MacOutputStream(hmac));
         return hmac.verify(sig);
     }
 
-    public byte[] sign(Key key, byte[] data) throws InvalidKeyException {
-        if (key == null || data == null) {
+    public byte[] sign(Key key, DOMSignedInfo si, XMLSignContext context) 
+	throws InvalidKeyException, XMLSignatureException {
+        if (key == null || si == null) {
             throw new NullPointerException();
         }
         hmac.init(key, outputLength);
-        hmac.update(data);
+	si.canonicalize(context, new MacOutputStream(hmac));
+
         try {
             return hmac.sign();
         } catch (SignatureException se) {

Modified: xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMKeyInfo.java
URL: http://svn.apache.org/viewcvs/xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMKeyInfo.java?rev=368871&r1=368870&r2=368871&view=diff
==============================================================================
--- xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMKeyInfo.java (original)
+++ xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMKeyInfo.java Fri Jan 13 14:00:23 2006
@@ -127,7 +127,6 @@
             throw new NullPointerException("parent is null");
         }
 
-        DOMStructure dp = (DOMStructure) parent;
         marshal(((javax.xml.crypto.dom.DOMStructure) parent).getNode(),
             DOMUtils.getSignaturePrefix(context), (DOMCryptoContext) context);
     }

Modified: xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMKeyInfoFactory.java
URL: http://svn.apache.org/viewcvs/xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMKeyInfoFactory.java?rev=368871&r1=368870&r2=368871&view=diff
==============================================================================
--- xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMKeyInfoFactory.java (original)
+++ xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMKeyInfoFactory.java Fri Jan 13 14:00:23 2006
@@ -25,8 +25,6 @@
 import java.math.BigInteger;
 import java.security.*;
 import java.util.List;
-import java.util.logging.Level;
-import java.util.logging.Logger;
 import javax.xml.crypto.*;
 import javax.xml.crypto.dsig.*;
 import javax.xml.crypto.dom.*;
@@ -42,8 +40,6 @@
  */
 public final class DOMKeyInfoFactory extends KeyInfoFactory {
 
-    static Logger log = Logger.getLogger(DOMKeyInfoFactory.class.getName());
-
     static {
         AccessController.doPrivileged(new PrivilegedAction() {
             public Object run() {
@@ -141,7 +137,6 @@
             throw new MarshalException("Document implementation must " +
                 "support DOM Level 2 and be namespace aware");
         }
-        log.log(Level.FINE, "unmarshalling element: " + tag );
         if (tag.equals("KeyInfo")) {
             return new DOMKeyInfo(element, null);
         } else {

Modified: xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMManifest.java
URL: http://svn.apache.org/viewcvs/xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMManifest.java?rev=368871&r1=368870&r2=368871&view=diff
==============================================================================
--- xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMManifest.java (original)
+++ xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMManifest.java Fri Jan 13 14:00:23 2006
@@ -63,7 +63,7 @@
 	    throw new IllegalArgumentException("list of references must " +
 	        "contain at least one entry");
 	}
-        for (int i = 0; i < refCopy.size(); i++) {
+        for (int i = 0, size = refCopy.size(); i < size; i++) {
             if (!(refCopy.get(i) instanceof Reference)) {
                 throw new ClassCastException
                     ("references["+i+"] is not a valid type");
@@ -108,9 +108,8 @@
         DOMUtils.setAttributeID(manElem, "Id", id);
 
 	// add references
-	Iterator i = references.iterator();
-	while (i.hasNext()) {
-	    DOMReference ref = (DOMReference) i.next();
+	for (int i = 0, size = references.size(); i < size; i++) {
+	    DOMReference ref = (DOMReference) references.get(i);
 	    ref.marshal(manElem, dsPrefix, context);
 	}
         parent.appendChild(manElem);

Modified: xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMPGPData.java
URL: http://svn.apache.org/viewcvs/xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMPGPData.java?rev=368871&r1=368870&r2=368871&view=diff
==============================================================================
--- xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMPGPData.java (original)
+++ xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMPGPData.java Fri Jan 13 14:00:23 2006
@@ -71,7 +71,7 @@
 	    this.externalElements = Collections.EMPTY_LIST;
 	} else {
             List otherCopy = new ArrayList(other);
-            for (int i = 0; i < otherCopy.size(); i++) {
+            for (int i = 0, size = otherCopy.size(); i < size; i++) {
                 if (!(otherCopy.get(i) instanceof XMLStructure)) {
                     throw new ClassCastException
                         ("other["+i+"] is not a valid PGPData type");
@@ -116,7 +116,7 @@
 	    this.externalElements = Collections.EMPTY_LIST;
 	} else {
             List otherCopy = new ArrayList(other);
-            for (int i = 0; i < otherCopy.size(); i++) {
+            for (int i = 0, size = otherCopy.size(); i < size; i++) {
                 if (!(otherCopy.get(i) instanceof XMLStructure)) {
                     throw new ClassCastException
                         ("other["+i+"] is not a valid PGPData type");
@@ -141,15 +141,17 @@
 	byte[] keyId = null;
 	byte[] keyPacket = null;
         NodeList nl = pdElem.getChildNodes();
-	List other = new ArrayList(nl.getLength());
-        for (int x = 0; x < nl.getLength(); x++) {
+	int length = nl.getLength();
+	List other = new ArrayList(length);
+        for (int x = 0; x < length; x++) {
             Node n = nl.item(x);
             if (n.getNodeType() == Node.ELEMENT_NODE) {
                 Element childElem = (Element) n;
+		String localName = childElem.getLocalName();
 		try {
-                    if (childElem.getLocalName().equals("PGPKeyID")) {
+                    if (localName.equals("PGPKeyID")) {
                         keyId = Base64.decode(childElem);
-                    } else if (childElem.getLocalName().equals("PGPKeyPacket")){
+                    } else if (localName.equals("PGPKeyPacket")){
                         keyPacket = Base64.decode(childElem);
                     } else {
 		        other.add
@@ -203,10 +205,9 @@
         }
 
         // create and append any elements
-	Iterator i = externalElements.iterator();
-	while (i.hasNext()) {
-	    DOMUtils.appendChild(pdElem,
-		((javax.xml.crypto.dom.DOMStructure) i.next()).getNode());
+	for (int i = 0, size = externalElements.size(); i < size; i++) {
+	    DOMUtils.appendChild(pdElem, ((javax.xml.crypto.dom.DOMStructure) 
+		externalElements.get(i)).getNode());
         }
 
         parent.appendChild(pdElem);

Modified: xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMRSASignatureMethod.java
URL: http://svn.apache.org/viewcvs/xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMRSASignatureMethod.java?rev=368871&r1=368870&r2=368871&view=diff
==============================================================================
--- xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMRSASignatureMethod.java (original)
+++ xml/security/branches/jsr105_0_16/src/org/jcp/xml/dsig/internal/dom/DOMRSASignatureMethod.java Fri Jan 13 14:00:23 2006
@@ -26,6 +26,7 @@
 import javax.xml.crypto.dsig.*;
 import javax.xml.crypto.dsig.spec.SignatureMethodParameterSpec;
 
+import java.io.IOException;
 import java.security.InvalidKeyException;
 import java.security.Key;
 import java.security.PrivateKey;
@@ -39,7 +40,7 @@
 import java.util.logging.Logger;
 import org.w3c.dom.Element;
 
-import org.apache.xml.security.utils.Base64;
+import org.jcp.xml.dsig.internal.SignerOutputStream;
 
 /**
  * DOM-based implementation of SignatureMethod for RSA algorithm.
@@ -49,7 +50,7 @@
  */
 public final class DOMRSASignatureMethod extends DOMSignatureMethod { 
 
-    static Logger log = Logger.getLogger(DOMRSASignatureMethod.class.getName());
+    private static Logger log = Logger.getLogger("org.jcp.xml.dsig.internal.dom");
     private Signature signature;
 
     /**
@@ -100,10 +101,12 @@
 	return (getParameterSpec() == spec);
     }
 
-    public boolean verify(Key key, byte[] data, byte[] sig) 
-	throws InvalidKeyException, SignatureException {
-    	if (key == null || sig == null) {
-    	    throw new NullPointerException("key or signature cannot be null");
+    public boolean verify(Key key, DOMSignedInfo si, byte[] sig,
+	XMLValidateContext context) 
+	throws InvalidKeyException, SignatureException, XMLSignatureException {
+    	if (key == null || si == null || sig == null) {
+    	    throw new NullPointerException
+		("key, signed info or signature cannot be null");
     	}
 
         if (!(key instanceof PublicKey)) {
@@ -118,22 +121,24 @@
 	    }
 	}
         signature.initVerify((PublicKey) key);
-        signature.update(data);
-        log.log(Level.FINE, "verifying data: " + Base64.encode(data));
-        log.log(Level.FINE, "verifying with key: " + key);
-        return signature.verify(sig );  
+	if (log.isLoggable(Level.FINE)) {
+	    log.log(Level.FINE, "Signature provider:"+ signature.getProvider());
+            log.log(Level.FINE, "verifying with key: " + key);
+	}
+	si.canonicalize(context, new SignerOutputStream(signature));
+
+	return signature.verify(sig);
     }
 
-    public byte[] sign(Key key, byte[] data) throws InvalidKeyException {
-    	if (key == null || data == null) {
+    public byte[] sign(Key key, DOMSignedInfo si, XMLSignContext context) 
+	throws InvalidKeyException, XMLSignatureException {
+    	if (key == null || si == null) {
     	    throw new NullPointerException();
     	}
 
         if (!(key instanceof PrivateKey)) {
             throw new InvalidKeyException("key must be PrivateKey");
         }
-        log.log(Level.FINE, "Signing data: " + Base64.encode(data));
-        log.log(Level.FINE, "Signing with key: " + key);
 	if (signature == null) {
 	    try {
                 // FIXME: do other hashes besides sha-1
@@ -143,8 +148,14 @@
 	    }
 	}
         signature.initSign((PrivateKey) key);
+	if (log.isLoggable(Level.FINE)) {
+            log.log(Level.FINE, "Signature provider:" +signature.getProvider());
+            log.log(Level.FINE, "Signing with key: " + key);
+        }
+
+	si.canonicalize(context, new SignerOutputStream(signature));
+
         try {
-            signature.update(data);
 	    return signature.sign();
         } catch (SignatureException se) {
 	    // should never occur!