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/03/07 20:02:34 UTC

svn commit: r383958 - /xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/

Author: mullan
Date: Tue Mar  7 11:02:32 2006
New Revision: 383958

URL: http://svn.apache.org/viewcvs?rev=383958&view=rev
Log:
Fix following bug:

If an application uses more than one distinct class loader to load classes 
which in turn create or validate XML Signatures, the first signature will be 
generated/validated without any problems, but calls from Objects loaded by 
subsequent class loaders throw an InvocationTargetException.

Modified:
    xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMCanonicalizationMethod.java
    xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMKeyInfo.java
    xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMKeyInfoFactory.java
    xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMManifest.java
    xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMReference.java
    xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMRetrievalMethod.java
    xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMSignedInfo.java
    xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMTransform.java
    xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMXMLObject.java
    xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMXMLSignature.java
    xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMXMLSignatureFactory.java

Modified: xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMCanonicalizationMethod.java
URL: http://svn.apache.org/viewcvs/xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMCanonicalizationMethod.java?rev=383958&r1=383957&r2=383958&view=diff
==============================================================================
--- xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMCanonicalizationMethod.java (original)
+++ xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMCanonicalizationMethod.java Tue Mar  7 11:02:32 2006
@@ -24,6 +24,7 @@
 
 import java.io.OutputStream;
 import java.security.InvalidAlgorithmParameterException;
+import java.security.Provider;
 
 import org.w3c.dom.Element;
 
@@ -55,9 +56,9 @@
      *
      * @param cmElem a CanonicalizationMethod element
      */
-    public DOMCanonicalizationMethod(Element cmElem, XMLCryptoContext context) 
-	throws MarshalException{
-	super(cmElem, context);
+    public DOMCanonicalizationMethod(Element cmElem, XMLCryptoContext context,
+	Provider provider) throws MarshalException {
+	super(cmElem, context, provider);
     }
 
     /**
@@ -70,7 +71,7 @@
      *     additional context (may be <code>null</code> if not applicable)
      * @return the canonicalized data
      * @throws NullPointerException if <code>data</code> is <code>null</code>
-     * @throws XMLSignatureException if an unexpected error occurs while
+     * @throws TransformException if an unexpected error occurs while
      *    canonicalizing the data
      */
     public Data canonicalize(Data data, XMLCryptoContext xc) 

Modified: xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMKeyInfo.java
URL: http://svn.apache.org/viewcvs/xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMKeyInfo.java?rev=383958&r1=383957&r2=383958&view=diff
==============================================================================
--- xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMKeyInfo.java (original)
+++ xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMKeyInfo.java Tue Mar  7 11:02:32 2006
@@ -28,6 +28,7 @@
 import javax.xml.crypto.dsig.keyinfo.KeyInfo;
 import javax.xml.crypto.dom.*;
 
+import java.security.Provider;
 import java.util.*;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
@@ -64,7 +65,7 @@
 	if (typesCopy.isEmpty()) {
 	    throw new IllegalArgumentException("content cannot be empty");
 	}
-	for (int i = 0; i < typesCopy.size(); i++) {
+	for (int i = 0, size = typesCopy.size(); i < size; i++) {
 	    if (!(typesCopy.get(i) instanceof XMLStructure)) {
 		throw new ClassCastException
 		    ("content["+i+"] is not a valid KeyInfo type");
@@ -77,35 +78,38 @@
     /**
      * Creates a <code>DOMKeyInfo</code> from XML.
      *
-     * @param input XML input
+     * @param kiElem KeyInfo element
      */
-    public DOMKeyInfo(Element kiElem, XMLCryptoContext context) 
-	throws MarshalException {
+    public DOMKeyInfo(Element kiElem, XMLCryptoContext context,
+	Provider provider) throws MarshalException {
 	// get Id attribute, if specified
 	id = DOMUtils.getAttributeValue(kiElem, "Id");
 
         // get all children nodes
         NodeList nl = kiElem.getChildNodes();
-	if (nl.getLength() < 1) {
+	int length = nl.getLength();
+	if (length < 1) {
 	    throw new MarshalException
 		("KeyInfo must contain at least one type");
 	}
-	List content = new ArrayList(nl.getLength());
-        for (int i = 0; i < nl.getLength(); i++) {
+	List content = new ArrayList(length);
+        for (int i = 0; i < length; i++) {
             Node child = nl.item(i);
             // ignore all non-Element nodes
             if (child.getNodeType() != Node.ELEMENT_NODE) {
                 continue;
 	    }
             Element childElem = (Element) child;
-            if (childElem.getLocalName().equals("KeyName")) {
+	    String localName = childElem.getLocalName();
+            if (localName.equals("X509Data")) {
+	        content.add(new DOMX509Data(childElem));
+            } else if (localName.equals("KeyName")) {
 	        content.add(new DOMKeyName(childElem));
-            } else if (childElem.getLocalName().equals("KeyValue")) {
+            } else if (localName.equals("KeyValue")) {
 	        content.add(new DOMKeyValue(childElem));
-            } else if (childElem.getLocalName().equals("RetrievalMethod")) {
-	        content.add(new DOMRetrievalMethod(childElem, context));
-            } else if (childElem.getLocalName().equals("X509Data")) {
-	        content.add(new DOMX509Data(childElem));
+            } else if (localName.equals("RetrievalMethod")) {
+	        content.add
+		    (new DOMRetrievalMethod(childElem, context, provider));
 	    } else { //may be MgmtData, SPKIData or element from other namespace
 	        content.add(new javax.xml.crypto.dom.DOMStructure((childElem)));
 	    }
@@ -160,9 +164,8 @@
     private void marshal(Node parent, Element kiElem, Node nextSibling,
         String dsPrefix, DOMCryptoContext context) throws MarshalException {
         // create and append KeyInfoType elements
-	Iterator i = this.keyInfoTypes.iterator();
-	while (i.hasNext()) {
-	    XMLStructure kiType = (XMLStructure) i.next();
+	for (int i = 0, size = keyInfoTypes.size(); i < size; i++) {
+	    XMLStructure kiType = (XMLStructure) keyInfoTypes.get(i);
 	    if (kiType instanceof DOMStructure) {
 		((DOMStructure) kiType).marshal(kiElem, dsPrefix, context);
 	    } else {

Modified: xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMKeyInfoFactory.java
URL: http://svn.apache.org/viewcvs/xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMKeyInfoFactory.java?rev=383958&r1=383957&r2=383958&view=diff
==============================================================================
--- xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMKeyInfoFactory.java (original)
+++ xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMKeyInfoFactory.java Tue Mar  7 11:02:32 2006
@@ -23,7 +23,8 @@
 package org.jcp.xml.dsig.internal.dom;
 
 import java.math.BigInteger;
-import java.security.*;
+import java.security.KeyException;
+import java.security.PublicKey;
 import java.util.List;
 import javax.xml.crypto.*;
 import javax.xml.crypto.dsig.*;
@@ -40,15 +41,6 @@
  */
 public final class DOMKeyInfoFactory extends KeyInfoFactory {
 
-    static {
-        AccessController.doPrivileged(new PrivilegedAction() {
-            public Object run() {
-                Security.addProvider(new XMLDSigRI());
-                return null;
-            }
-        });
-    }
-
     public DOMKeyInfoFactory() { }
 
     public KeyInfo newKeyInfo(List content) {
@@ -138,7 +130,7 @@
                 "support DOM Level 2 and be namespace aware");
         }
         if (tag.equals("KeyInfo")) {
-            return new DOMKeyInfo(element, null);
+            return new DOMKeyInfo(element, null, getProvider());
         } else {
             throw new MarshalException("invalid KeyInfo tag: " + tag);
         }

Modified: xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMManifest.java
URL: http://svn.apache.org/viewcvs/xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMManifest.java?rev=383958&r1=383957&r2=383958&view=diff
==============================================================================
--- xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMManifest.java (original)
+++ xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMManifest.java Tue Mar  7 11:02:32 2006
@@ -26,6 +26,7 @@
 import javax.xml.crypto.dom.DOMCryptoContext;
 import javax.xml.crypto.dsig.*;
 
+import java.security.Provider;
 import java.util.*;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
@@ -78,13 +79,13 @@
      *
      * @param manElem a Manifest element
      */
-    public DOMManifest(Element manElem, XMLCryptoContext context) 
-	throws MarshalException {
+    public DOMManifest(Element manElem, XMLCryptoContext context,
+	Provider provider) throws MarshalException {
         this.id = DOMUtils.getAttributeValue(manElem, "Id");
         Element refElem = DOMUtils.getFirstChildElement(manElem);
 	List refs = new ArrayList();
 	while (refElem != null) {
-	    refs.add(new DOMReference(refElem, context));
+	    refs.add(new DOMReference(refElem, context, provider));
 	    refElem = DOMUtils.getNextSiblingElement(refElem);
 	}
 	this.references = Collections.unmodifiableList(refs);

Modified: xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMReference.java
URL: http://svn.apache.org/viewcvs/xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMReference.java?rev=383958&r1=383957&r2=383958&view=diff
==============================================================================
--- xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMReference.java (original)
+++ xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMReference.java Tue Mar  7 11:02:32 2006
@@ -81,6 +81,7 @@
     private Data derefData;
     private InputStream dis;
     private MessageDigest md;
+    private Provider provider;
 
     /**
      * Creates a <code>Reference</code> from the specified parameters.
@@ -98,18 +99,20 @@
      *    not of type <code>Transform</code>
      */
     public DOMReference(String uri, String type, DigestMethod dm, 
-	List transforms, String id) {
-	this(uri, type, dm, null, null, transforms, id, null);
+	List transforms, String id, Provider provider) {
+	this(uri, type, dm, null, null, transforms, id, null, provider);
     }
 
     public DOMReference(String uri, String type, DigestMethod dm, 
-	List appliedTransforms, Data result, List transforms, String id) {
-	this(uri, type, dm, appliedTransforms, result, transforms, id, null);
+	List appliedTransforms, Data result, List transforms, String id,
+	Provider provider) {
+	this(uri, type, dm, appliedTransforms, 
+	     result, transforms, id, null, provider);
     }
 
     public DOMReference(String uri, String type, DigestMethod dm, 
 	List appliedTransforms, Data result, List transforms, String id, 
-	byte[] digestValue){
+	byte[] digestValue, Provider provider) {
 	if (dm == null) {
 	    throw new NullPointerException("DigestMethod must be non-null");
 	}
@@ -157,6 +160,7 @@
 	    this.digested = true;
 	}
 	this.appliedTransformData = result;
+	this.provider = provider;
     }
  
     /**
@@ -164,15 +168,16 @@
      *
      * @param refElem a Reference element
      */
-    public DOMReference(Element refElem, XMLCryptoContext context) 
-	throws MarshalException {
+    public DOMReference(Element refElem, XMLCryptoContext context, 
+	Provider provider) throws MarshalException {
         // unmarshal Transforms, if specified
         Element nextSibling = DOMUtils.getFirstChildElement(refElem);
         List transforms = new ArrayList(5);
         if (nextSibling.getLocalName().equals("Transforms")) {
 	    Element transformElem = DOMUtils.getFirstChildElement(nextSibling);
 	    while (transformElem != null) {
-                transforms.add(new DOMTransform(transformElem, context));
+                transforms.add
+		    (new DOMTransform(transformElem, context, provider));
 	        transformElem = DOMUtils.getNextSiblingElement(transformElem);
 	    }
             nextSibling = DOMUtils.getNextSiblingElement(nextSibling);
@@ -206,6 +211,7 @@
 	this.appliedTransforms = Collections.EMPTY_LIST;
 	this.allTransforms = transforms;
 	this.appliedTransformData = null;
+	this.provider = provider;
     }
 
     public DigestMethod getDigestMethod() {
@@ -415,8 +421,14 @@
 	            xi = new XMLSignatureInput
 			(((OctetStreamData)data).getOctetStream());
 	        } else if (data instanceof NodeSetData) {
-		    TransformService spi = TransformService.getInstance
-		        (CanonicalizationMethod.INCLUSIVE, "DOM");
+		    TransformService spi = null;
+		    try {
+		        spi = TransformService.getInstance
+		            (CanonicalizationMethod.INCLUSIVE, "DOM");
+		    } catch (NoSuchAlgorithmException nsae) {
+		        spi = TransformService.getInstance
+		            (CanonicalizationMethod.INCLUSIVE, "DOM", provider);
+		    }
                     data = spi.transform(data, context);
 	            xi = new XMLSignatureInput
 		        (((OctetStreamData)data).getOctetStream());

Modified: xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMRetrievalMethod.java
URL: http://svn.apache.org/viewcvs/xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMRetrievalMethod.java?rev=383958&r1=383957&r2=383958&view=diff
==============================================================================
--- xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMRetrievalMethod.java (original)
+++ xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMRetrievalMethod.java Tue Mar  7 11:02:32 2006
@@ -32,6 +32,7 @@
 import java.io.ByteArrayInputStream;
 import java.net.URI;
 import java.net.URISyntaxException;
+import java.security.Provider;
 import java.util.*;
 import javax.xml.crypto.*;
 import javax.xml.crypto.dsig.*;
@@ -110,8 +111,8 @@
      *
      * @param rmElem a RetrievalMethod element
      */
-    public DOMRetrievalMethod(Element rmElem, XMLCryptoContext context) 
-	throws MarshalException {
+    public DOMRetrievalMethod(Element rmElem, XMLCryptoContext context,
+	Provider provider) throws MarshalException {
         // get URI and Type attributes
         uri = DOMUtils.getAttributeValue(rmElem, "URI");
         type = DOMUtils.getAttributeValue(rmElem, "Type");
@@ -126,7 +127,8 @@
             Element transformElem = 
 		DOMUtils.getFirstChildElement(transformsElem);
             while (transformElem != null) {
-                transforms.add(new DOMTransform(transformElem, context));
+                transforms.add
+		    (new DOMTransform(transformElem, context, provider));
                 transformElem = DOMUtils.getNextSiblingElement(transformElem);
 	    }
         }

Modified: xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMSignedInfo.java
URL: http://svn.apache.org/viewcvs/xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMSignedInfo.java?rev=383958&r1=383957&r2=383958&view=diff
==============================================================================
--- xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMSignedInfo.java (original)
+++ xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMSignedInfo.java Tue Mar  7 11:02:32 2006
@@ -32,6 +32,7 @@
 import java.io.IOException;
 import java.io.InputStreamReader;
 import java.io.OutputStream;
+import java.security.Provider;
 import java.util.*;
 import java.util.logging.Level;
 import java.util.logging.Logger;
@@ -121,8 +122,8 @@
      *
      * @param siElem a SignedInfo element
      */
-    public DOMSignedInfo(Element siElem, XMLCryptoContext context)
-	throws MarshalException {
+    public DOMSignedInfo(Element siElem, XMLCryptoContext context,
+	Provider provider) throws MarshalException {
 	localSiElem = siElem;
 	ownerDoc = siElem.getOwnerDocument();
 
@@ -131,7 +132,8 @@
 
         // unmarshal CanonicalizationMethod
 	Element cmElem = DOMUtils.getFirstChildElement(siElem);
-	canonicalizationMethod = new DOMCanonicalizationMethod(cmElem, context);
+	canonicalizationMethod = new DOMCanonicalizationMethod
+	    (cmElem, context, provider);
 
         // unmarshal SignatureMethod
 	Element smElem = DOMUtils.getNextSiblingElement(cmElem);
@@ -141,7 +143,7 @@
 	ArrayList refList = new ArrayList(5);
 	Element refElem = DOMUtils.getNextSiblingElement(smElem);
 	while (refElem != null) {
-	    refList.add(new DOMReference(refElem, context));
+	    refList.add(new DOMReference(refElem, context, provider));
 	    refElem = DOMUtils.getNextSiblingElement(refElem);
 	}
 	references = Collections.unmodifiableList(refList);

Modified: xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMTransform.java
URL: http://svn.apache.org/viewcvs/xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMTransform.java?rev=383958&r1=383957&r2=383958&view=diff
==============================================================================
--- xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMTransform.java (original)
+++ xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMTransform.java Tue Mar  7 11:02:32 2006
@@ -25,6 +25,7 @@
 import java.io.OutputStream;
 import java.security.InvalidAlgorithmParameterException;
 import java.security.NoSuchAlgorithmException;
+import java.security.Provider;
 import java.security.spec.AlgorithmParameterSpec;
 
 import org.w3c.dom.Document;
@@ -63,14 +64,18 @@
      *
      * @param transElem a Transform element
      */
-    public DOMTransform(Element transElem, XMLCryptoContext context) 
-	throws MarshalException {
+    public DOMTransform(Element transElem, XMLCryptoContext context,
+	Provider provider) throws MarshalException {
         Document ownerDoc = transElem.getOwnerDocument();
         String algorithm = DOMUtils.getAttributeValue(transElem, "Algorithm");
 	try {
 	    spi = TransformService.getInstance(algorithm, "DOM");
-	} catch (NoSuchAlgorithmException e) {
-	    throw new MarshalException(e);
+	} catch (NoSuchAlgorithmException e1) {
+	    try {
+	        spi = TransformService.getInstance(algorithm, "DOM", provider);
+	    } catch (NoSuchAlgorithmException e2) {
+	        throw new MarshalException(e2);
+	    }
 	}
 	try {
             spi.init(new javax.xml.crypto.dom.DOMStructure(transElem), context);

Modified: xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMXMLObject.java
URL: http://svn.apache.org/viewcvs/xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMXMLObject.java?rev=383958&r1=383957&r2=383958&view=diff
==============================================================================
--- xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMXMLObject.java (original)
+++ xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMXMLObject.java Tue Mar  7 11:02:32 2006
@@ -26,6 +26,7 @@
 import javax.xml.crypto.dom.DOMCryptoContext;
 import javax.xml.crypto.dsig.*;
 
+import java.security.Provider;
 import java.util.*;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
@@ -82,8 +83,8 @@
      * @param objElem an Object element
      * @throws MarshalException if there is an error when unmarshalling
      */
-    public DOMXMLObject(Element objElem, XMLCryptoContext context) 
-	throws MarshalException {
+    public DOMXMLObject(Element objElem, XMLCryptoContext context,
+	Provider provider) throws MarshalException {
 	// unmarshal attributes
         this.encoding = DOMUtils.getAttributeValue(objElem, "Encoding");
         this.id = DOMUtils.getAttributeValue(objElem, "Id");
@@ -98,7 +99,7 @@
 		Element childElem = (Element) child;
                 String tag = childElem.getLocalName();
                 if (tag.equals("Manifest")) {
-                    content.add(new DOMManifest(childElem, context));
+                    content.add(new DOMManifest(childElem, context, provider));
 		    continue;
                 } else if (tag.equals("SignatureProperties")) {
                     content.add(new DOMSignatureProperties(childElem));

Modified: xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMXMLSignature.java
URL: http://svn.apache.org/viewcvs/xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMXMLSignature.java?rev=383958&r1=383957&r2=383958&view=diff
==============================================================================
--- xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMXMLSignature.java (original)
+++ xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMXMLSignature.java Tue Mar  7 11:02:32 2006
@@ -38,6 +38,7 @@
 import java.io.*;
 import java.security.InvalidKeyException;
 import java.security.Key;
+import java.security.Provider;
 import java.util.Collections;
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -121,8 +122,8 @@
      * @param sigElem Signature element
      * @throws MarshalException if XMLSignature cannot be unmarshalled
      */
-    public DOMXMLSignature(Element sigElem, XMLCryptoContext context) 
-	throws MarshalException {
+    public DOMXMLSignature(Element sigElem, XMLCryptoContext context,
+	Provider provider) throws MarshalException {
         localSigElem = sigElem;
         ownerDoc = localSigElem.getOwnerDocument();
 
@@ -131,7 +132,7 @@
 
 	// unmarshal SignedInfo
 	Element siElem = DOMUtils.getFirstChildElement(localSigElem);
-	si = new DOMSignedInfo(siElem, context);
+	si = new DOMSignedInfo(siElem, context, provider);
 
 	// unmarshal SignatureValue 
 	Element sigValElem = DOMUtils.getNextSiblingElement(siElem);
@@ -140,7 +141,7 @@
 	// unmarshal KeyInfo, if specified
 	Element nextSibling = DOMUtils.getNextSiblingElement(sigValElem);
 	if (nextSibling != null && nextSibling.getLocalName().equals("KeyInfo")) {
-	    ki = new DOMKeyInfo(nextSibling, context);
+	    ki = new DOMKeyInfo(nextSibling, context, provider);
 	    nextSibling = DOMUtils.getNextSiblingElement(nextSibling);
 	}
 
@@ -150,7 +151,8 @@
 	} else {
 	    List tempObjects = new ArrayList();
 	    while (nextSibling != null) {
-	        tempObjects.add(new DOMXMLObject(nextSibling, context));
+	        tempObjects.add
+		    (new DOMXMLObject(nextSibling, context, provider));
 	        nextSibling = DOMUtils.getNextSiblingElement(nextSibling);
 	    }
 	    objects = Collections.unmodifiableList(tempObjects);	

Modified: xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMXMLSignatureFactory.java
URL: http://svn.apache.org/viewcvs/xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMXMLSignatureFactory.java?rev=383958&r1=383957&r2=383958&view=diff
==============================================================================
--- xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMXMLSignatureFactory.java (original)
+++ xml/security/trunk/src/org/jcp/xml/dsig/internal/dom/DOMXMLSignatureFactory.java Tue Mar  7 11:02:32 2006
@@ -28,7 +28,8 @@
 import javax.xml.crypto.dsig.keyinfo.*;
 import javax.xml.crypto.dsig.spec.*;
 
-import java.security.*;
+import java.security.InvalidAlgorithmParameterException;
+import java.security.NoSuchAlgorithmException;
 import java.security.spec.AlgorithmParameterSpec;
 import java.util.List;
 import org.w3c.dom.Document;
@@ -42,15 +43,6 @@
  */
 public final class DOMXMLSignatureFactory extends XMLSignatureFactory {
 
-    static {
-        AccessController.doPrivileged(new PrivilegedAction() {
-            public Object run() {
-                Security.addProvider(new XMLDSigRI());
-                return null;
-            }
-        });
-    }
-
     /**
      * Initializes a new instance of this class.
      */
@@ -71,7 +63,7 @@
 
     public Reference newReference(String uri, DigestMethod dm, List transforms,
         String type, String id) {
-	return new DOMReference(uri, type, dm, transforms, id);
+	return new DOMReference(uri, type, dm, transforms, id, getProvider());
     }
 
     public Reference newReference(String uri, DigestMethod dm, 
@@ -87,7 +79,7 @@
 	    throw new NullPointerException("result cannot be null");
 	}
 	return new DOMReference
-	    (uri, type, dm, appliedTransforms, result, transforms, id);
+	    (uri, type, dm, appliedTransforms, result, transforms, id, getProvider());
     }
 
     public Reference newReference(String uri, DigestMethod dm, List transforms,
@@ -96,7 +88,7 @@
 	    throw new NullPointerException("digestValue cannot be null");
 	}
 	return new DOMReference
-	    (uri, type, dm, null, null, transforms, id, digestValue);
+	    (uri, type, dm, null, null, transforms, id, digestValue, getProvider());
     }
 
     public SignedInfo newSignedInfo(CanonicalizationMethod cm,
@@ -174,7 +166,7 @@
 		"support DOM Level 2 and be namespace aware");
 	}
         if (tag.equals("Signature")) {
-            return new DOMXMLSignature(element, context);
+            return new DOMXMLSignature(element, context, getProvider());
         } else {
             throw new MarshalException("invalid Signature tag: " + tag);
         }
@@ -221,7 +213,12 @@
     public Transform newTransform(String algorithm,
         TransformParameterSpec params) throws NoSuchAlgorithmException,
         InvalidAlgorithmParameterException {
-	TransformService spi = TransformService.getInstance(algorithm, "DOM");
+	TransformService spi;
+	try {
+	    spi = TransformService.getInstance(algorithm, "DOM");
+	} catch (NoSuchAlgorithmException nsae) {
+	    spi = TransformService.getInstance(algorithm, "DOM", getProvider());
+	}
 	spi.init(params);
 	return new DOMTransform(spi);
     }
@@ -229,7 +226,12 @@
     public Transform newTransform(String algorithm,
         XMLStructure params) throws NoSuchAlgorithmException,
         InvalidAlgorithmParameterException {
-	TransformService spi = TransformService.getInstance(algorithm, "DOM");
+	TransformService spi;
+	try {
+	    spi = TransformService.getInstance(algorithm, "DOM");
+	} catch (NoSuchAlgorithmException nsae) {
+	    spi = TransformService.getInstance(algorithm, "DOM", getProvider());
+	}
 	if (params == null) {
 	    spi.init(null);
 	} else {
@@ -241,7 +243,12 @@
     public CanonicalizationMethod newCanonicalizationMethod(String algorithm,
         C14NMethodParameterSpec params) throws NoSuchAlgorithmException,
         InvalidAlgorithmParameterException {
-	TransformService spi = TransformService.getInstance(algorithm, "DOM");
+	TransformService spi;
+	try {
+	    spi = TransformService.getInstance(algorithm, "DOM");
+	} catch (NoSuchAlgorithmException nsae) {
+	    spi = TransformService.getInstance(algorithm, "DOM", getProvider());
+	}
 	spi.init(params);
 	return new DOMCanonicalizationMethod(spi);
     }
@@ -249,7 +256,12 @@
     public CanonicalizationMethod newCanonicalizationMethod(String algorithm,
         XMLStructure params) throws NoSuchAlgorithmException,
         InvalidAlgorithmParameterException {
-	TransformService spi = TransformService.getInstance(algorithm, "DOM");
+	TransformService spi; 
+	try {
+	    spi = TransformService.getInstance(algorithm, "DOM");
+	} catch (NoSuchAlgorithmException nsae) {
+	    spi = TransformService.getInstance(algorithm, "DOM", getProvider());
+	}
 	if (params == null) {
 	    spi.init(null);
 	} else {