You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@santuario.apache.org by ra...@apache.org on 2006/10/15 18:41:04 UTC

svn commit: r464224 - in /xml/security/trunk: ./ src/org/apache/xml/security/algorithms/ src/org/apache/xml/security/keys/ src/org/apache/xml/security/keys/keyresolver/ src/org/apache/xml/security/keys/keyresolver/implementations/ src/org/apache/xml/se...

Author: raul
Date: Sun Oct 15 09:41:03 2006
New Revision: 464224

URL: http://svn.apache.org/viewvc?view=rev&rev=464224
Log:
KeyResolver & ResourceResolver can work like <1.3 mode when used with old implementations.

Modified:
    xml/security/trunk/CHANGELOG.txt
    xml/security/trunk/src/org/apache/xml/security/algorithms/Algorithm.java
    xml/security/trunk/src/org/apache/xml/security/keys/KeyInfo.java
    xml/security/trunk/src/org/apache/xml/security/keys/keyresolver/KeyResolver.java
    xml/security/trunk/src/org/apache/xml/security/keys/keyresolver/KeyResolverSpi.java
    xml/security/trunk/src/org/apache/xml/security/keys/keyresolver/implementations/DSAKeyValueResolver.java
    xml/security/trunk/src/org/apache/xml/security/keys/keyresolver/implementations/EncryptedKeyResolver.java
    xml/security/trunk/src/org/apache/xml/security/keys/keyresolver/implementations/RSAKeyValueResolver.java
    xml/security/trunk/src/org/apache/xml/security/keys/keyresolver/implementations/RetrievalMethodResolver.java
    xml/security/trunk/src/org/apache/xml/security/keys/keyresolver/implementations/X509CertificateResolver.java
    xml/security/trunk/src/org/apache/xml/security/keys/keyresolver/implementations/X509IssuerSerialResolver.java
    xml/security/trunk/src/org/apache/xml/security/keys/keyresolver/implementations/X509SKIResolver.java
    xml/security/trunk/src/org/apache/xml/security/keys/keyresolver/implementations/X509SubjectNameResolver.java
    xml/security/trunk/src/org/apache/xml/security/utils/resolver/ResourceResolver.java
    xml/security/trunk/src/org/apache/xml/security/utils/resolver/ResourceResolverSpi.java
    xml/security/trunk/src/org/apache/xml/security/utils/resolver/implementations/ResolverDirectHTTP.java
    xml/security/trunk/src/org/apache/xml/security/utils/resolver/implementations/ResolverFragment.java
    xml/security/trunk/src/org/apache/xml/security/utils/resolver/implementations/ResolverLocalFilesystem.java
    xml/security/trunk/src/org/apache/xml/security/utils/resolver/implementations/ResolverXPointer.java
    xml/security/trunk/src_unitTests/org/apache/xml/security/test/encryption/BobKeyResolver.java
    xml/security/trunk/src_unitTests/org/apache/xml/security/test/utils/OldApiTest.java

Modified: xml/security/trunk/CHANGELOG.txt
URL: http://svn.apache.org/viewvc/xml/security/trunk/CHANGELOG.txt?view=diff&rev=464224&r1=464223&r2=464224
==============================================================================
--- xml/security/trunk/CHANGELOG.txt (original)
+++ xml/security/trunk/CHANGELOG.txt Sun Oct 15 09:41:03 2006
@@ -4,6 +4,7 @@
 		to use implementations for the >1.3 versions paying the performance hit
 		of the old implementation.
     Fix a small & unneeded java 1.4 dependecy.
+    KeyResolver & ResourceResolver can work like <1.3 mode when used with old implementations.
 
 New in 1.4RC1	
 	Fixed bug 40290.

Modified: xml/security/trunk/src/org/apache/xml/security/algorithms/Algorithm.java
URL: http://svn.apache.org/viewvc/xml/security/trunk/src/org/apache/xml/security/algorithms/Algorithm.java?view=diff&rev=464224&r1=464223&r2=464224
==============================================================================
--- xml/security/trunk/src/org/apache/xml/security/algorithms/Algorithm.java (original)
+++ xml/security/trunk/src/org/apache/xml/security/algorithms/Algorithm.java Sun Oct 15 09:41:03 2006
@@ -20,7 +20,6 @@
 
 import org.apache.xml.security.exceptions.XMLSecurityException;
 import org.apache.xml.security.utils.Constants;
-import org.apache.xml.security.utils.ElementProxy;
 import org.apache.xml.security.utils.SignatureElementProxy;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;

Modified: xml/security/trunk/src/org/apache/xml/security/keys/KeyInfo.java
URL: http://svn.apache.org/viewvc/xml/security/trunk/src/org/apache/xml/security/keys/KeyInfo.java?view=diff&rev=464224&r1=464223&r2=464224
==============================================================================
--- xml/security/trunk/src/org/apache/xml/security/keys/KeyInfo.java (original)
+++ xml/security/trunk/src/org/apache/xml/security/keys/KeyInfo.java Sun Oct 15 09:41:03 2006
@@ -758,7 +758,7 @@
                         (StorageResolver) this._storageResolvers.get(k);
 
                      PublicKey pk =
-                           keyResolver.engineResolvePublicKey((Element) currentChild,
+                           keyResolver.engineLookupAndResolvePublicKey((Element) currentChild,
                                                        uri,
                                                         storage);
 
@@ -796,7 +796,7 @@
                    StorageResolver storage =
                       (StorageResolver) this._storageResolvers.get(k);
                    PublicKey pk = keyResolver
-                           .engineResolvePublicKey((Element) currentChild, uri, storage);
+                           .engineLookupAndResolvePublicKey((Element) currentChild, uri, storage);
 
                      if (pk != null) {
                          return pk;
@@ -883,7 +883,7 @@
 	              (StorageResolver) this._storageResolvers.get(k);
 
 	           X509Certificate cert = keyResolver
-	                .engineResolveX509Certificate((Element) currentChild, uri,
+	                .engineLookupResolveX509Certificate((Element) currentChild, uri,
 	                		storage);
 
 	           if (cert != null) {                	   
@@ -973,7 +973,7 @@
                         (StorageResolver) this._storageResolvers.get(k);
 
                      SecretKey sk =
-                           keyResolver.engineResolveSecretKey((Element) currentChild,
+                           keyResolver.engineLookupAndResolveSecretKey((Element) currentChild,
                                                         uri,
                                                         storage);
 
@@ -1011,7 +1011,7 @@
                         (StorageResolver) this._storageResolvers.get(k);
 
                      SecretKey sk = keyResolver
-                           .engineResolveSecretKey((Element) currentChild, uri, storage);
+                           .engineLookupAndResolveSecretKey((Element) currentChild, uri, storage);
 
                      if (sk != null) {
                         return sk;

Modified: xml/security/trunk/src/org/apache/xml/security/keys/keyresolver/KeyResolver.java
URL: http://svn.apache.org/viewvc/xml/security/trunk/src/org/apache/xml/security/keys/keyresolver/KeyResolver.java?view=diff&rev=464224&r1=464223&r2=464224
==============================================================================
--- xml/security/trunk/src/org/apache/xml/security/keys/keyresolver/KeyResolver.java (original)
+++ xml/security/trunk/src/org/apache/xml/security/keys/keyresolver/KeyResolver.java Sun Oct 15 09:41:03 2006
@@ -254,7 +254,7 @@
    public PublicKey resolvePublicKey(
            Element element, String BaseURI, StorageResolver storage)
               throws KeyResolverException {
-      return this._resolverSpi.engineResolvePublicKey(element, BaseURI, storage);
+      return this._resolverSpi.engineLookupAndResolvePublicKey(element, BaseURI, storage);
    }
 
    /**
@@ -270,7 +270,7 @@
    public X509Certificate resolveX509Certificate(
            Element element, String BaseURI, StorageResolver storage)
               throws KeyResolverException {
-      return this._resolverSpi.engineResolveX509Certificate(element, BaseURI,
+      return this._resolverSpi.engineLookupResolveX509Certificate(element, BaseURI,
               storage);
    }
 
@@ -284,7 +284,7 @@
    public SecretKey resolveSecretKey(
            Element element, String BaseURI, StorageResolver storage)
               throws KeyResolverException {
-      return this._resolverSpi.engineResolveSecretKey(element, BaseURI,
+      return this._resolverSpi.engineLookupAndResolveSecretKey(element, BaseURI,
               storage);
    }
 

Modified: xml/security/trunk/src/org/apache/xml/security/keys/keyresolver/KeyResolverSpi.java
URL: http://svn.apache.org/viewvc/xml/security/trunk/src/org/apache/xml/security/keys/keyresolver/KeyResolverSpi.java?view=diff&rev=464224&r1=464223&r2=464224
==============================================================================
--- xml/security/trunk/src/org/apache/xml/security/keys/keyresolver/KeyResolverSpi.java (original)
+++ xml/security/trunk/src/org/apache/xml/security/keys/keyresolver/KeyResolverSpi.java Sun Oct 15 09:41:03 2006
@@ -39,6 +39,19 @@
  * @version $Revision$
  */
 public abstract class KeyResolverSpi {
+   /**
+    * This method helps the {@link org.apache.xml.security.utils.resolver.ResourceResolver} to decide whether a
+    * {@link org.apache.xml.security.utils.resolver.ResourceResolverSpi} is able to perform the requested action.
+    *
+    * @param element
+    * @param BaseURI
+    * @param storage
+    * @return
+    */
+   public boolean engineCanResolve(Element element, String BaseURI,
+	                                            StorageResolver storage) {
+	   throw new UnsupportedOperationException();
+   }
 
    /**
     * Method engineResolvePublicKey
@@ -50,10 +63,53 @@
     * 
     * @throws KeyResolverException
     */
-   abstract public PublicKey engineResolvePublicKey(
+   public PublicKey engineResolvePublicKey(
+      Element element, String BaseURI, StorageResolver storage)
+         throws KeyResolverException {
+      	   throw new UnsupportedOperationException();
+    };
+   
+   /**
+    * Method engineResolvePublicKey
+    *
+    * @param element
+    * @param BaseURI
+    * @param storage
+    * @return resolved public key from the registered from the element.
+    * 
+    * @throws KeyResolverException
+    */
+    public PublicKey engineLookupAndResolvePublicKey(
       Element element, String BaseURI, StorageResolver storage)
-         throws KeyResolverException;
+         throws KeyResolverException {
+    	try {
+    		KeyResolverSpi tmp = (KeyResolverSpi) getClass().newInstance();
+    	    if (!tmp.engineCanResolve(element, BaseURI, storage))
+    	    	return null;
+    	    return tmp.engineResolvePublicKey(element, BaseURI, storage);
+    	} catch (InstantiationException e) {
+    	    throw new KeyResolverException("",e);
+    	} catch (IllegalAccessException e) {
+    	    throw new KeyResolverException("",e);
+    	}
+    }
 
+    /**
+     * Method engineResolveCertificate
+     *
+     * @param element
+     * @param BaseURI
+     * @param storage
+     * @return resolved X509Certificate key from the registered from the elements
+     *
+     * @throws KeyResolverException
+     */
+    public X509Certificate engineResolveX509Certificate(
+       Element element, String BaseURI, StorageResolver storage)
+          throws KeyResolverException{
+         	   throw new UnsupportedOperationException();
+    };
+    
    /**
     * Method engineResolveCertificate
     *
@@ -64,10 +120,36 @@
     *
     * @throws KeyResolverException
     */
-   abstract public X509Certificate engineResolveX509Certificate(
+    public X509Certificate engineLookupResolveX509Certificate(
       Element element, String BaseURI, StorageResolver storage)
-         throws KeyResolverException;
-
+         throws KeyResolverException {
+    	try {    
+    		KeyResolverSpi tmp = (KeyResolverSpi) getClass().newInstance();
+    	    if (!tmp.engineCanResolve(element, BaseURI, storage))
+    	    	return null;
+    	    return tmp.engineResolveX509Certificate(element, BaseURI, storage);
+    	} catch (InstantiationException e) {
+    	    throw new KeyResolverException("",e);
+    	} catch (IllegalAccessException e) {
+    	    throw new KeyResolverException("",e);
+    	}
+    }
+    /**
+     * Method engineResolveSecretKey
+     *
+     * @param element
+     * @param BaseURI
+     * @param storage
+     * @return resolved SecretKey key from the registered from the elements
+     *
+     * @throws KeyResolverException
+     */
+    public SecretKey engineResolveSecretKey(
+       Element element, String BaseURI, StorageResolver storage)
+          throws KeyResolverException{
+        	   throw new UnsupportedOperationException();
+    }; 
+    
    /**
     * Method engineResolveSecretKey
     *
@@ -78,9 +160,20 @@
     *
     * @throws KeyResolverException
     */
-   abstract public SecretKey engineResolveSecretKey(
+   public SecretKey engineLookupAndResolveSecretKey(
       Element element, String BaseURI, StorageResolver storage)
-         throws KeyResolverException;
+         throws KeyResolverException {
+	   try {    
+   			KeyResolverSpi tmp = (KeyResolverSpi) getClass().newInstance();
+   			if (!tmp.engineCanResolve(element, BaseURI, storage))
+   				return null;
+   			return tmp.engineResolveSecretKey(element, BaseURI, storage);
+   		} catch (InstantiationException e) {
+   			throw new KeyResolverException("",e);
+   		} catch (IllegalAccessException e) {
+   			throw new KeyResolverException("",e);
+   		}
+   }
 
    /** Field _properties */
    protected java.util.Map _properties = null;

Modified: xml/security/trunk/src/org/apache/xml/security/keys/keyresolver/implementations/DSAKeyValueResolver.java
URL: http://svn.apache.org/viewvc/xml/security/trunk/src/org/apache/xml/security/keys/keyresolver/implementations/DSAKeyValueResolver.java?view=diff&rev=464224&r1=464223&r2=464224
==============================================================================
--- xml/security/trunk/src/org/apache/xml/security/keys/keyresolver/implementations/DSAKeyValueResolver.java (original)
+++ xml/security/trunk/src/org/apache/xml/security/keys/keyresolver/implementations/DSAKeyValueResolver.java Sun Oct 15 09:41:03 2006
@@ -45,7 +45,7 @@
     * @param storage
     * @return null if no {@link PublicKey} could be obtained
     */
-   public PublicKey engineResolvePublicKey(
+   public PublicKey engineLookupAndResolvePublicKey(
            Element element, String BaseURI, StorageResolver storage) {
 	    if (element == null) {
 	         return null;
@@ -84,13 +84,13 @@
 
    
    /** @inheritDoc */
-   public X509Certificate engineResolveX509Certificate(
+   public X509Certificate engineLookupResolveX509Certificate(
            Element element, String BaseURI, StorageResolver storage) {
       return null;
    }
 
    /** @inheritDoc */
-   public javax.crypto.SecretKey engineResolveSecretKey(
+   public javax.crypto.SecretKey engineLookupAndResolveSecretKey(
            Element element, String BaseURI, StorageResolver storage){
       return null;
    }

Modified: xml/security/trunk/src/org/apache/xml/security/keys/keyresolver/implementations/EncryptedKeyResolver.java
URL: http://svn.apache.org/viewvc/xml/security/trunk/src/org/apache/xml/security/keys/keyresolver/implementations/EncryptedKeyResolver.java?view=diff&rev=464224&r1=464223&r2=464224
==============================================================================
--- xml/security/trunk/src/org/apache/xml/security/keys/keyresolver/implementations/EncryptedKeyResolver.java (original)
+++ xml/security/trunk/src/org/apache/xml/security/keys/keyresolver/implementations/EncryptedKeyResolver.java Sun Oct 15 09:41:03 2006
@@ -78,20 +78,20 @@
 	}
 	
     /** @inheritDoc */
-   public PublicKey engineResolvePublicKey(
+   public PublicKey engineLookupAndResolvePublicKey(
            Element element, String BaseURI, StorageResolver storage) {
 
 	   return null;
    }
 
    /** @inheritDoc */
-   public X509Certificate engineResolveX509Certificate(
+   public X509Certificate engineLookupResolveX509Certificate(
            Element element, String BaseURI, StorageResolver storage) {
       return null;
    }
 
    /** @inheritDoc */
-   public javax.crypto.SecretKey engineResolveSecretKey(
+   public javax.crypto.SecretKey engineLookupAndResolveSecretKey(
            Element element, String BaseURI, StorageResolver storage) {
 	   SecretKey key=null;
 	   if (log.isDebugEnabled())

Modified: xml/security/trunk/src/org/apache/xml/security/keys/keyresolver/implementations/RSAKeyValueResolver.java
URL: http://svn.apache.org/viewvc/xml/security/trunk/src/org/apache/xml/security/keys/keyresolver/implementations/RSAKeyValueResolver.java?view=diff&rev=464224&r1=464223&r2=464224
==============================================================================
--- xml/security/trunk/src/org/apache/xml/security/keys/keyresolver/implementations/RSAKeyValueResolver.java (original)
+++ xml/security/trunk/src/org/apache/xml/security/keys/keyresolver/implementations/RSAKeyValueResolver.java Sun Oct 15 09:41:03 2006
@@ -47,7 +47,7 @@
    
 
    /** @inheritDoc */
-   public PublicKey engineResolvePublicKey(
+   public PublicKey engineLookupAndResolvePublicKey(
            Element element, String BaseURI, StorageResolver storage) {
 	   if (log.isDebugEnabled())
 		 	log.debug("Can I resolve " + element.getTagName());
@@ -87,13 +87,13 @@
    }
 
    /** @inheritDoc */
-   public X509Certificate engineResolveX509Certificate(
+   public X509Certificate engineLookupResolveX509Certificate(
            Element element, String BaseURI, StorageResolver storage) {
       return null;
    }
 
    /** @inheritDoc */
-   public javax.crypto.SecretKey engineResolveSecretKey(
+   public javax.crypto.SecretKey engineLookupAndResolveSecretKey(
            Element element, String BaseURI, StorageResolver storage) {
       return null;
    }

Modified: xml/security/trunk/src/org/apache/xml/security/keys/keyresolver/implementations/RetrievalMethodResolver.java
URL: http://svn.apache.org/viewvc/xml/security/trunk/src/org/apache/xml/security/keys/keyresolver/implementations/RetrievalMethodResolver.java?view=diff&rev=464224&r1=464223&r2=464224
==============================================================================
--- xml/security/trunk/src/org/apache/xml/security/keys/keyresolver/implementations/RetrievalMethodResolver.java (original)
+++ xml/security/trunk/src/org/apache/xml/security/keys/keyresolver/implementations/RetrievalMethodResolver.java Sun Oct 15 09:41:03 2006
@@ -77,7 +77,7 @@
     * @param storage
     *
     */
-   public PublicKey engineResolvePublicKey(
+   public PublicKey engineLookupAndResolvePublicKey(
            Element element, String BaseURI, StorageResolver storage)
               {
 	   if  (!XMLUtils.elementIsInSignatureSpace(element,
@@ -140,7 +140,7 @@
     * @param storage
     *
     */
-   public X509Certificate engineResolveX509Certificate(
+   public X509Certificate engineLookupResolveX509Certificate(
            Element element, String BaseURI, StorageResolver storage)
               {
 	   if  (!XMLUtils.elementIsInSignatureSpace(element,
@@ -268,7 +268,7 @@
     * @param storage
     *
     */
-   public javax.crypto.SecretKey engineResolveSecretKey(
+   public javax.crypto.SecretKey engineLookupAndResolveSecretKey(
            Element element, String BaseURI, StorageResolver storage)
    {
       return null;

Modified: xml/security/trunk/src/org/apache/xml/security/keys/keyresolver/implementations/X509CertificateResolver.java
URL: http://svn.apache.org/viewvc/xml/security/trunk/src/org/apache/xml/security/keys/keyresolver/implementations/X509CertificateResolver.java?view=diff&rev=464224&r1=464223&r2=464224
==============================================================================
--- xml/security/trunk/src/org/apache/xml/security/keys/keyresolver/implementations/X509CertificateResolver.java (original)
+++ xml/security/trunk/src/org/apache/xml/security/keys/keyresolver/implementations/X509CertificateResolver.java Sun Oct 15 09:41:03 2006
@@ -56,11 +56,11 @@
     *
     * @throws KeyResolverException
     */
-   public PublicKey engineResolvePublicKey(
+   public PublicKey engineLookupAndResolvePublicKey(
            Element element, String BaseURI, StorageResolver storage)
               throws KeyResolverException {
 
-      X509Certificate cert = this.engineResolveX509Certificate(element,
+      X509Certificate cert = this.engineLookupResolveX509Certificate(element,
                                 BaseURI, storage);
 
       if (cert != null) {
@@ -79,7 +79,7 @@
     *
     * @throws KeyResolverException
     */
-   public X509Certificate engineResolveX509Certificate(
+   public X509Certificate engineLookupResolveX509Certificate(
            Element element, String BaseURI, StorageResolver storage)
               throws KeyResolverException {
 
@@ -90,7 +90,7 @@
         	 Element el=XMLUtils.selectDsNode(element.getFirstChild(),
                      Constants._TAG_X509DATA,0);
              if (el!=null) {
-            	 return engineResolveX509Certificate(el, BaseURI, storage);
+            	 return engineLookupResolveX509Certificate(el, BaseURI, storage);
              }        	 
         	 return null;            
          }
@@ -119,7 +119,7 @@
     * @param storage
     *
     */
-   public javax.crypto.SecretKey engineResolveSecretKey(
+   public javax.crypto.SecretKey engineLookupAndResolveSecretKey(
            Element element, String BaseURI, StorageResolver storage)
    {
       return null;

Modified: xml/security/trunk/src/org/apache/xml/security/keys/keyresolver/implementations/X509IssuerSerialResolver.java
URL: http://svn.apache.org/viewvc/xml/security/trunk/src/org/apache/xml/security/keys/keyresolver/implementations/X509IssuerSerialResolver.java?view=diff&rev=464224&r1=464223&r2=464224
==============================================================================
--- xml/security/trunk/src/org/apache/xml/security/keys/keyresolver/implementations/X509IssuerSerialResolver.java (original)
+++ xml/security/trunk/src/org/apache/xml/security/keys/keyresolver/implementations/X509IssuerSerialResolver.java Sun Oct 15 09:41:03 2006
@@ -46,11 +46,11 @@
 
   
    /** @inheritDoc */
-   public PublicKey engineResolvePublicKey(
+   public PublicKey engineLookupAndResolvePublicKey(
            Element element, String BaseURI, StorageResolver storage)
               throws KeyResolverException {
 
-      X509Certificate cert = this.engineResolveX509Certificate(element,
+      X509Certificate cert = this.engineLookupResolveX509Certificate(element,
                                 BaseURI, storage);
 
       if (cert != null) {
@@ -61,7 +61,7 @@
    }
 
    /** @inheritDoc */
-   public X509Certificate engineResolveX509Certificate(
+   public X509Certificate engineLookupResolveX509Certificate(
            Element element, String BaseURI, StorageResolver storage)
               throws KeyResolverException {
 	 if (log.isDebugEnabled())
@@ -138,7 +138,7 @@
    }
 
    /** @inheritDoc */
-   public javax.crypto.SecretKey engineResolveSecretKey(
+   public javax.crypto.SecretKey engineLookupAndResolveSecretKey(
            Element element, String BaseURI, StorageResolver storage) {
       return null;
    }

Modified: xml/security/trunk/src/org/apache/xml/security/keys/keyresolver/implementations/X509SKIResolver.java
URL: http://svn.apache.org/viewvc/xml/security/trunk/src/org/apache/xml/security/keys/keyresolver/implementations/X509SKIResolver.java?view=diff&rev=464224&r1=464223&r2=464224
==============================================================================
--- xml/security/trunk/src/org/apache/xml/security/keys/keyresolver/implementations/X509SKIResolver.java (original)
+++ xml/security/trunk/src/org/apache/xml/security/keys/keyresolver/implementations/X509SKIResolver.java Sun Oct 15 09:41:03 2006
@@ -54,11 +54,11 @@
     * @return null if no {@link PublicKey} could be obtained
     * @throws KeyResolverException
     */
-   public PublicKey engineResolvePublicKey(
+   public PublicKey engineLookupAndResolvePublicKey(
            Element element, String BaseURI, StorageResolver storage)
               throws KeyResolverException {
 
-      X509Certificate cert = this.engineResolveX509Certificate(element,
+      X509Certificate cert = this.engineLookupResolveX509Certificate(element,
                                 BaseURI, storage);
 
       if (cert != null) {
@@ -77,7 +77,7 @@
     *
     * @throws KeyResolverException
     */
-   public X509Certificate engineResolveX509Certificate(
+   public X509Certificate engineLookupResolveX509Certificate(
            Element element, String BaseURI, StorageResolver storage)
               throws KeyResolverException {
 	   if (log.isDebugEnabled()) {
@@ -147,7 +147,7 @@
     * @param storage
     *
     */
-   public javax.crypto.SecretKey engineResolveSecretKey(
+   public javax.crypto.SecretKey engineLookupAndResolveSecretKey(
            Element element, String BaseURI, StorageResolver storage)
     {
       return null;

Modified: xml/security/trunk/src/org/apache/xml/security/keys/keyresolver/implementations/X509SubjectNameResolver.java
URL: http://svn.apache.org/viewvc/xml/security/trunk/src/org/apache/xml/security/keys/keyresolver/implementations/X509SubjectNameResolver.java?view=diff&rev=464224&r1=464223&r2=464224
==============================================================================
--- xml/security/trunk/src/org/apache/xml/security/keys/keyresolver/implementations/X509SubjectNameResolver.java (original)
+++ xml/security/trunk/src/org/apache/xml/security/keys/keyresolver/implementations/X509SubjectNameResolver.java Sun Oct 15 09:41:03 2006
@@ -53,11 +53,11 @@
     * @return null if no {@link PublicKey} could be obtained
     * @throws KeyResolverException
     */
-   public PublicKey engineResolvePublicKey(
+   public PublicKey engineLookupAndResolvePublicKey(
            Element element, String BaseURI, StorageResolver storage)
               throws KeyResolverException {
 
-      X509Certificate cert = this.engineResolveX509Certificate(element,
+      X509Certificate cert = this.engineLookupResolveX509Certificate(element,
                                 BaseURI, storage);
 
       if (cert != null) {
@@ -76,7 +76,7 @@
     *
     * @throws KeyResolverException
     */
-   public X509Certificate engineResolveX509Certificate(
+   public X509Certificate engineLookupResolveX509Certificate(
            Element element, String BaseURI, StorageResolver storage)
               throws KeyResolverException {
 	   if (log.isDebugEnabled())
@@ -155,7 +155,7 @@
     * @param storage
     *
     */
-   public javax.crypto.SecretKey engineResolveSecretKey(
+   public javax.crypto.SecretKey engineLookupAndResolveSecretKey(
            Element element, String BaseURI, StorageResolver storage)
    {
       return null;

Modified: xml/security/trunk/src/org/apache/xml/security/utils/resolver/ResourceResolver.java
URL: http://svn.apache.org/viewvc/xml/security/trunk/src/org/apache/xml/security/utils/resolver/ResourceResolver.java?view=diff&rev=464224&r1=464223&r2=464224
==============================================================================
--- xml/security/trunk/src/org/apache/xml/security/utils/resolver/ResourceResolver.java (original)
+++ xml/security/trunk/src/org/apache/xml/security/utils/resolver/ResourceResolver.java Sun Oct 15 09:41:03 2006
@@ -53,6 +53,8 @@
 
    /** these are the system-wide resolvers */
    static List _resolverVector = null;
+   
+   static boolean allThreadSafeInList=true;
 
    /** Field transformSpi */
    protected ResourceResolverSpi _resolverSpi = null;
@@ -97,12 +99,20 @@
       for (int i = 0; i < length; i++) {
 		  ResourceResolver resolver =
             (ResourceResolver) ResourceResolver._resolverVector.get(i);
-         
+		  ResourceResolver resolverTmp=null;
+		  try {
+			resolverTmp =  allThreadSafeInList || resolver._resolverSpi.engineIsThreadSafe() ? resolver : 
+				  	new ResourceResolver((ResourceResolverSpi)resolver._resolverSpi.getClass().newInstance());
+		  } catch (InstantiationException e) {
+			  throw new ResourceResolverException("",e,uri,BaseURI);
+		  } catch (IllegalAccessException e) {
+			  throw new ResourceResolverException("",e,uri,BaseURI);			
+		  }
 
          if (log.isDebugEnabled())
          	log.debug("check resolvability by class " + resolver._resolverSpi.getClass().getName());
 
-         if ((resolver != null) && resolver.canResolve(uri, BaseURI)) {
+         if ((resolver != null) && resolverTmp.canResolve(uri, BaseURI)) {
         	 if (i!=0) {
             	 //update resolver.
         		 //System.out.println("Swaping");
@@ -114,7 +124,7 @@
         		 //System.out.println("hitting");
         	 }
         	 
-            return resolver;
+            return resolverTmp;
          }
       }
 
@@ -205,9 +215,12 @@
 	    if (start) {
 	        ResourceResolver._resolverVector.add(0, resolver);
 	        log.debug("registered resolver");
-	    } else {
+	    } else {	       
 	        ResourceResolver._resolverVector.add(resolver);
 	    }
+	    if (!resolver._resolverSpi.engineIsThreadSafe()) {
+        	allThreadSafeInList=false; 
+        }
         } catch (Exception e) {
 	    log.warn("Error loading resolver " + className +" disabling it");
         } catch (NoClassDefFoundError e) {

Modified: xml/security/trunk/src/org/apache/xml/security/utils/resolver/ResourceResolverSpi.java
URL: http://svn.apache.org/viewvc/xml/security/trunk/src/org/apache/xml/security/utils/resolver/ResourceResolverSpi.java?view=diff&rev=464224&r1=464223&r2=464224
==============================================================================
--- xml/security/trunk/src/org/apache/xml/security/utils/resolver/ResourceResolverSpi.java (original)
+++ xml/security/trunk/src/org/apache/xml/security/utils/resolver/ResourceResolverSpi.java Sun Oct 15 09:41:03 2006
@@ -90,7 +90,15 @@
 		  this._properties.putAll(properties);
 	  }
    }
-
+   /**
+    * Tells if the implementation does can be reused by several threads safely.
+    * It normally means that the implemantation does not have any member, or there is
+    * member change betwen engineCanResolve & engineResolve invocations. Or it mantians all
+    * member info in ThreadLocal methods.
+    */
+   public boolean engineIsThreadSafe() {
+	   return false;
+   }
    /**
     * This method helps the {@link ResourceResolver} to decide whether a
     * {@link ResourceResolverSpi} is able to perform the requested action.

Modified: xml/security/trunk/src/org/apache/xml/security/utils/resolver/implementations/ResolverDirectHTTP.java
URL: http://svn.apache.org/viewvc/xml/security/trunk/src/org/apache/xml/security/utils/resolver/implementations/ResolverDirectHTTP.java?view=diff&rev=464224&r1=464223&r2=464224
==============================================================================
--- xml/security/trunk/src/org/apache/xml/security/utils/resolver/implementations/ResolverDirectHTTP.java (original)
+++ xml/security/trunk/src/org/apache/xml/security/utils/resolver/implementations/ResolverDirectHTTP.java Sun Oct 15 09:41:03 2006
@@ -88,6 +88,9 @@
    /** Field HttpProxyPass */
    private static final int HttpBasicPass = 5;
 
+   public boolean engineIsThreadSafe() {
+	   return true;
+   }
    /**
     * Method resolve
     *

Modified: xml/security/trunk/src/org/apache/xml/security/utils/resolver/implementations/ResolverFragment.java
URL: http://svn.apache.org/viewvc/xml/security/trunk/src/org/apache/xml/security/utils/resolver/implementations/ResolverFragment.java?view=diff&rev=464224&r1=464223&r2=464224
==============================================================================
--- xml/security/trunk/src/org/apache/xml/security/utils/resolver/implementations/ResolverFragment.java (original)
+++ xml/security/trunk/src/org/apache/xml/security/utils/resolver/implementations/ResolverFragment.java Sun Oct 15 09:41:03 2006
@@ -41,7 +41,9 @@
     static org.apache.commons.logging.Log log = 
         org.apache.commons.logging.LogFactory.getLog(
                             ResolverFragment.class.getName());
-
+   public boolean engineIsThreadSafe() {
+ 	   return true;
+   }
    /**
     * Method engineResolve
     *

Modified: xml/security/trunk/src/org/apache/xml/security/utils/resolver/implementations/ResolverLocalFilesystem.java
URL: http://svn.apache.org/viewvc/xml/security/trunk/src/org/apache/xml/security/utils/resolver/implementations/ResolverLocalFilesystem.java?view=diff&rev=464224&r1=464223&r2=464224
==============================================================================
--- xml/security/trunk/src/org/apache/xml/security/utils/resolver/implementations/ResolverLocalFilesystem.java (original)
+++ xml/security/trunk/src/org/apache/xml/security/utils/resolver/implementations/ResolverLocalFilesystem.java Sun Oct 15 09:41:03 2006
@@ -39,6 +39,9 @@
         org.apache.commons.logging.LogFactory.getLog(
                     ResolverLocalFilesystem.class.getName());
 
+    public boolean engineIsThreadSafe() {
+  	   return true;
+   }
    /**
     * @inheritDoc
     */
@@ -68,6 +71,7 @@
       }
    }
 
+   private static int FILE_URI_LENGTH="file:/".length();
    /**
     * Method translateUriToFilename
     *
@@ -76,7 +80,7 @@
     */
    private static String translateUriToFilename(String uri) {
 
-      String subStr = uri.substring("file:/".length());
+      String subStr = uri.substring(FILE_URI_LENGTH);
 
       if (subStr.indexOf("%20") > -1)
       {

Modified: xml/security/trunk/src/org/apache/xml/security/utils/resolver/implementations/ResolverXPointer.java
URL: http://svn.apache.org/viewvc/xml/security/trunk/src/org/apache/xml/security/utils/resolver/implementations/ResolverXPointer.java?view=diff&rev=464224&r1=464223&r2=464224
==============================================================================
--- xml/security/trunk/src/org/apache/xml/security/utils/resolver/implementations/ResolverXPointer.java (original)
+++ xml/security/trunk/src/org/apache/xml/security/utils/resolver/implementations/ResolverXPointer.java Sun Oct 15 09:41:03 2006
@@ -49,6 +49,9 @@
         org.apache.commons.logging.LogFactory.getLog(
                             ResolverXPointer.class.getName());
 
+    public boolean engineIsThreadSafe() {
+  	   return true;
+   }
    /**
     * @inheritDoc
     */

Modified: xml/security/trunk/src_unitTests/org/apache/xml/security/test/encryption/BobKeyResolver.java
URL: http://svn.apache.org/viewvc/xml/security/trunk/src_unitTests/org/apache/xml/security/test/encryption/BobKeyResolver.java?view=diff&rev=464224&r1=464223&r2=464224
==============================================================================
--- xml/security/trunk/src_unitTests/org/apache/xml/security/test/encryption/BobKeyResolver.java (original)
+++ xml/security/trunk/src_unitTests/org/apache/xml/security/test/encryption/BobKeyResolver.java Sun Oct 15 09:41:03 2006
@@ -89,7 +89,7 @@
 	 * @return null if no {@link PublicKey} could be obtained
 	 * @throws KeyResolverException
 	 */
-	public PublicKey engineResolvePublicKey(
+	public PublicKey engineLookupAndResolvePublicKey(
 		  Element element, String BaseURI, StorageResolver storage)
               throws KeyResolverException {
 
@@ -105,7 +105,7 @@
 	 *
 	 * @throws KeyResolverException
 	 */
-	public X509Certificate engineResolveX509Certificate(
+	public X509Certificate engineLookupResolveX509Certificate(
 			   Element element, String BaseURI, StorageResolver storage)
 		throws KeyResolverException {
 		return null;
@@ -120,7 +120,7 @@
 	 *
 	 * @throws KeyResolverException
 	 */
-	public javax.crypto.SecretKey engineResolveSecretKey(
+	public javax.crypto.SecretKey engineLookupAndResolveSecretKey(
            Element element, String BaseURI, StorageResolver storage)
 		throws KeyResolverException {
 

Modified: xml/security/trunk/src_unitTests/org/apache/xml/security/test/utils/OldApiTest.java
URL: http://svn.apache.org/viewvc/xml/security/trunk/src_unitTests/org/apache/xml/security/test/utils/OldApiTest.java?view=diff&rev=464224&r1=464223&r2=464224
==============================================================================
--- xml/security/trunk/src_unitTests/org/apache/xml/security/test/utils/OldApiTest.java (original)
+++ xml/security/trunk/src_unitTests/org/apache/xml/security/test/utils/OldApiTest.java Sun Oct 15 09:41:03 2006
@@ -14,12 +14,18 @@
 import org.apache.xml.security.transforms.Transform;
 import org.apache.xml.security.transforms.TransformSpi;
 import org.apache.xml.security.transforms.TransformationException;
+import org.apache.xml.security.utils.resolver.ResourceResolver;
+import org.apache.xml.security.utils.resolver.ResourceResolverException;
+import org.apache.xml.security.utils.resolver.ResourceResolverSpi;
+import org.w3c.dom.Attr;
 import org.w3c.dom.Document;
+import org.w3c.dom.Element;
 import org.xml.sax.SAXException;
 
 public class OldApiTest extends TestCase {
-	static Transform compare;
+	
 	public static class OldTransform extends TransformSpi {
+		static Transform compare;
 		protected XMLSignatureInput enginePerformTransform(
 			      XMLSignatureInput input)
 			         throws IOException,
@@ -41,7 +47,46 @@
 		Transform.register("old", OldTransform.class.getName());
 
 		Transform a=new Transform(doc,"old",null);
-		compare=a;
+		OldTransform.compare=a;
 		a.performTransform(null);
+	};
+	
+	public static class OldResourceResolverSpi extends ResourceResolverSpi {
+		Attr uriCompare;
+		String baseCompare;
+		public boolean engineCanResolve(Attr uri, String BaseURI) {
+			if (uri.getValue().indexOf("!!!test=")!=0) {
+				return false;
+			}
+			uriCompare=uri;
+			baseCompare=BaseURI;
+			return true;
+		}
+
+		public XMLSignatureInput engineResolve(Attr uri, String BaseURI) throws ResourceResolverException {
+			assertEquals(uriCompare, uri);
+			assertEquals(baseCompare,BaseURI);
+			return null;
+		}
+		
+	};
+	public void testOldResourceResolverSpi() throws Exception {
+		Document doc=DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();		
+		Attr uri=doc.createAttribute("id");
+		uri.setNodeValue("!!!test=1");
+		((Element)doc.createElement("test")).setAttributeNode(uri);
+		Attr uri1=doc.createAttribute("id");
+		uri1.setNodeValue("!!!test=2");
+		doc.createElement("test1").setAttributeNode(uri1);
+		ResourceResolver.registerAtStart(OldResourceResolverSpi.class.getName());
+		ResourceResolver resolver=ResourceResolver.getInstance(uri, "test");
+		ResourceResolver resolver1=ResourceResolver.getInstance(uri1, "test1");
+		ResourceResolver resolver2=ResourceResolver.getInstance(uri1, "test2");
+		
+		resolver2.resolve(uri1, "test2");		
+		resolver.resolve(uri, "test");
+		resolver1.resolve(uri1, "test1");
+		
+		
 	};
 }