You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@santuario.apache.org by co...@apache.org on 2011/05/04 12:53:49 UTC
svn commit: r1099406 - in
/santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security:
Init.java keys/keyresolver/KeyResolver.java
keys/keyresolver/KeyResolverSpi.java
Author: coheigea
Date: Wed May 4 10:53:49 2011
New Revision: 1099406
URL: http://svn.apache.org/viewvc?rev=1099406&view=rev
Log:
Some thread-safety changes to the KeyResolvers.
Modified:
santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/Init.java
santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/keys/keyresolver/KeyResolver.java
santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/keys/keyresolver/KeyResolverSpi.java
Modified: santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/Init.java
URL: http://svn.apache.org/viewvc/santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/Init.java?rev=1099406&r1=1099405&r2=1099406&view=diff
==============================================================================
--- santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/Init.java (original)
+++ santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/Init.java Wed May 4 10:53:49 2011
@@ -47,6 +47,14 @@ import org.apache.xml.security.c14n.impl
import org.apache.xml.security.c14n.implementations.Canonicalizer20010315WithComments;
import org.apache.xml.security.encryption.XMLCipher;
import org.apache.xml.security.keys.keyresolver.KeyResolver;
+import org.apache.xml.security.keys.keyresolver.KeyResolverSpi;
+import org.apache.xml.security.keys.keyresolver.implementations.DSAKeyValueResolver;
+import org.apache.xml.security.keys.keyresolver.implementations.RSAKeyValueResolver;
+import org.apache.xml.security.keys.keyresolver.implementations.RetrievalMethodResolver;
+import org.apache.xml.security.keys.keyresolver.implementations.X509CertificateResolver;
+import org.apache.xml.security.keys.keyresolver.implementations.X509IssuerSerialResolver;
+import org.apache.xml.security.keys.keyresolver.implementations.X509SKIResolver;
+import org.apache.xml.security.keys.keyresolver.implementations.X509SubjectNameResolver;
import org.apache.xml.security.signature.XMLSignature;
import org.apache.xml.security.transforms.Transform;
import org.apache.xml.security.transforms.TransformSpi;
@@ -106,6 +114,8 @@ public class Init {
new HashMap<String, Class<? extends CanonicalizerSpi>>();
private static List<ResourceResolverSpi> defaultResolverList =
new ArrayList<ResourceResolverSpi>();
+ private static List<KeyResolverSpi> defaultKeyResolverList =
+ new ArrayList<KeyResolverSpi>();
static {
//
@@ -357,7 +367,7 @@ public class Init {
);
//
- // Default IRI-Canonicalizer class pairs
+ // Default URI-Canonicalizer class pairs
//
defaultC14nAlgorithms.put(
Canonicalizer.ALGO_ID_C14N_OMIT_COMMENTS, Canonicalizer20010315OmitComments.class
@@ -385,6 +395,17 @@ public class Init {
defaultResolverList.add(new ResolverLocalFilesystem());
defaultResolverList.add(new ResolverXPointer());
defaultResolverList.add(new ResolverDirectHTTP());
+
+ //
+ // Default KeyResolvers
+ //
+ defaultKeyResolverList.add(new RSAKeyValueResolver());
+ defaultKeyResolverList.add(new DSAKeyValueResolver());
+ defaultKeyResolverList.add(new X509CertificateResolver());
+ defaultKeyResolverList.add(new X509SKIResolver());
+ defaultKeyResolverList.add(new RetrievalMethodResolver());
+ defaultKeyResolverList.add(new X509SubjectNameResolver());
+ defaultKeyResolverList.add(new X509IssuerSerialResolver());
}
/**
@@ -679,10 +700,18 @@ public class Init {
for (ResourceResolverSpi resourceResolverSpi : defaultResolverList) {
ResourceResolver.register(resourceResolverSpi, false);
}
+
+ //
+ // Register the default key resolvers
+ //
+ for (KeyResolverSpi keyResolverSpi : defaultKeyResolverList) {
+ KeyResolver.register(keyResolverSpi, false);
+ }
} catch (Exception ex) {
log.error(ex);
ex.printStackTrace();
}
+ alreadyInitialized = true;
}
}
Modified: santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/keys/keyresolver/KeyResolver.java
URL: http://svn.apache.org/viewvc/santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/keys/keyresolver/KeyResolver.java?rev=1099406&r1=1099405&r2=1099406&view=diff
==============================================================================
--- santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/keys/keyresolver/KeyResolver.java (original)
+++ santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/keys/keyresolver/KeyResolver.java Wed May 4 10:53:49 2011
@@ -44,21 +44,15 @@ public class KeyResolver {
private static List<KeyResolver> resolverVector = new ArrayList<KeyResolver>();
/** Field resolverSpi */
- protected KeyResolverSpi resolverSpi = null;
+ private final KeyResolverSpi resolverSpi;
/**
- * Constructor ResourceResolver
- *
- * @param className
- * @throws ClassNotFoundException
- * @throws IllegalAccessException
- * @throws InstantiationException
+ * Constructor.
+ *
+ * @param keyResolverSpi a KeyResolverSpi instance
*/
- private KeyResolver(String className, boolean globalResolver)
- throws ClassNotFoundException, IllegalAccessException, InstantiationException {
- this.resolverSpi =
- (KeyResolverSpi) Class.forName(className).newInstance();
- this.resolverSpi.setGlobalResolver(globalResolver);
+ private KeyResolver(KeyResolverSpi keyResolverSpi) {
+ resolverSpi = keyResolverSpi;
}
/**
@@ -66,8 +60,12 @@ public class KeyResolver {
*
* @return the length of resolvers registered
*/
- public synchronized static int length() {
- return KeyResolver.resolverVector.size();
+ public static int length() {
+ int size = 0;
+ synchronized (resolverVector) {
+ size = resolverVector.size();
+ }
+ return size;
}
/**
@@ -80,26 +78,28 @@ public class KeyResolver {
*
* @throws KeyResolverException
*/
- public synchronized static final X509Certificate getX509Certificate(
+ public static final X509Certificate getX509Certificate(
Element element, String BaseURI, StorageResolver storage
) throws KeyResolverException {
- for (KeyResolver resolver : resolverVector) {
- if (resolver == null) {
- Object exArgs[] = {
- (((element != null)
- && (element.getNodeType() == Node.ELEMENT_NODE))
- ? element.getTagName() : "null")
- };
-
- throw new KeyResolverException("utils.resolver.noClass", exArgs);
- }
- if (log.isDebugEnabled()) {
- log.debug("check resolvability by class " + resolver.getClass());
- }
-
- X509Certificate cert = resolver.resolveX509Certificate(element, BaseURI, storage);
- if (cert != null) {
- return cert;
+ synchronized (resolverVector) {
+ for (KeyResolver resolver : resolverVector) {
+ if (resolver == null) {
+ Object exArgs[] = {
+ (((element != null)
+ && (element.getNodeType() == Node.ELEMENT_NODE))
+ ? element.getTagName() : "null")
+ };
+
+ throw new KeyResolverException("utils.resolver.noClass", exArgs);
+ }
+ if (log.isDebugEnabled()) {
+ log.debug("check resolvability by class " + resolver.getClass());
+ }
+
+ X509Certificate cert = resolver.resolveX509Certificate(element, BaseURI, storage);
+ if (cert != null) {
+ return cert;
+ }
}
}
@@ -121,27 +121,28 @@ public class KeyResolver {
*
* @throws KeyResolverException
*/
- public synchronized static final PublicKey getPublicKey(
+ public static final PublicKey getPublicKey(
Element element, String BaseURI, StorageResolver storage
) throws KeyResolverException {
- for (int i = 0; i < resolverVector.size(); i++) {
- KeyResolver resolver = resolverVector.get(i);
- if (resolver == null) {
- Object exArgs[] = {
- (((element != null)
- && (element.getNodeType() == Node.ELEMENT_NODE))
- ? element.getTagName() : "null")
- };
-
- throw new KeyResolverException("utils.resolver.noClass", exArgs);
- }
- if (log.isDebugEnabled()) {
- log.debug("check resolvability by class " + resolver.getClass());
- }
-
- PublicKey cert = resolver.resolvePublicKey(element, BaseURI, storage);
- if (cert != null) {
- return cert;
+ synchronized (resolverVector) {
+ for (KeyResolver resolver : resolverVector) {
+ if (resolver == null) {
+ Object exArgs[] = {
+ (((element != null)
+ && (element.getNodeType() == Node.ELEMENT_NODE))
+ ? element.getTagName() : "null")
+ };
+
+ throw new KeyResolverException("utils.resolver.noClass", exArgs);
+ }
+ if (log.isDebugEnabled()) {
+ log.debug("check resolvability by class " + resolver.getClass());
+ }
+
+ PublicKey cert = resolver.resolvePublicKey(element, BaseURI, storage);
+ if (cert != null) {
+ return cert;
+ }
}
}
@@ -184,9 +185,12 @@ public class KeyResolver {
* @throws IllegalAccessException
* @throws ClassNotFoundException
*/
- public synchronized static void register(String className, boolean globalResolver)
+ public static void register(String className, boolean globalResolver)
throws ClassNotFoundException, IllegalAccessException, InstantiationException {
- KeyResolver.resolverVector.add(new KeyResolver(className, globalResolver));
+ KeyResolverSpi keyResolverSpi =
+ (KeyResolverSpi) Class.forName(className).newInstance();
+ keyResolverSpi.setGlobalResolver(globalResolver);
+ register(keyResolverSpi, false);
}
/**
@@ -213,13 +217,11 @@ public class KeyResolver {
* @param className
* @param globalResolver Whether the KeyResolverSpi is a global resolver or not
*/
- public synchronized static void registerAtStart(String className, boolean globalResolver) {
- // For backwards compatibility, use a RuntimeException instead of adding a throws clause
- KeyResolver resolver = null;
+ public static void registerAtStart(String className, boolean globalResolver) {
+ KeyResolverSpi keyResolverSpi = null;
Exception ex = null;
-
try {
- resolver = new KeyResolver(className, globalResolver);
+ keyResolverSpi = (KeyResolverSpi) Class.forName(className).newInstance();
} catch (ClassNotFoundException e) {
ex = e;
} catch (IllegalAccessException e) {
@@ -232,8 +234,32 @@ public class KeyResolver {
throw (IllegalArgumentException) new
IllegalArgumentException("Invalid KeyResolver class name").initCause(ex);
}
-
- KeyResolver.resolverVector.add(0, resolver);
+ keyResolverSpi.setGlobalResolver(globalResolver);
+ register(keyResolverSpi, true);
+ }
+
+ /**
+ * This method is used for registering {@link KeyResolverSpi}s which are
+ * available to <I>all</I> {@link org.apache.xml.security.keys.KeyInfo} objects. This means that
+ * personalized {@link KeyResolverSpi}s should only be registered directly
+ * to the {@link org.apache.xml.security.keys.KeyInfo} using
+ * {@link org.apache.xml.security.keys.KeyInfo#registerInternalKeyResolver}.
+ *
+ * @param keyResolverSpi a KeyResolverSpi instance to register
+ * @param start whether to register the KeyResolverSpi at the start of the list or not
+ */
+ public static void register(
+ KeyResolverSpi keyResolverSpi,
+ boolean start
+ ) {
+ KeyResolver resolver = new KeyResolver(keyResolverSpi);
+ synchronized (resolverVector) {
+ if (start) {
+ resolverVector.add(0, resolver);
+ } else {
+ resolverVector.add(resolver);
+ }
+ }
}
/**
@@ -249,7 +275,7 @@ public class KeyResolver {
public PublicKey resolvePublicKey(
Element element, String BaseURI, StorageResolver storage
) throws KeyResolverException {
- return this.resolverSpi.engineLookupAndResolvePublicKey(element, BaseURI, storage);
+ return resolverSpi.engineLookupAndResolvePublicKey(element, BaseURI, storage);
}
/**
@@ -265,7 +291,7 @@ public class KeyResolver {
public X509Certificate resolveX509Certificate(
Element element, String BaseURI, StorageResolver storage
) throws KeyResolverException {
- return this.resolverSpi.engineLookupResolveX509Certificate(element, BaseURI, storage);
+ return resolverSpi.engineLookupResolveX509Certificate(element, BaseURI, storage);
}
/**
@@ -278,7 +304,7 @@ public class KeyResolver {
public SecretKey resolveSecretKey(
Element element, String BaseURI, StorageResolver storage
) throws KeyResolverException {
- return this.resolverSpi.engineLookupAndResolveSecretKey(element, BaseURI, storage);
+ return resolverSpi.engineLookupAndResolveSecretKey(element, BaseURI, storage);
}
/**
@@ -288,7 +314,7 @@ public class KeyResolver {
* @param value
*/
public void setProperty(String key, String value) {
- this.resolverSpi.engineSetProperty(key, value);
+ resolverSpi.engineSetProperty(key, value);
}
/**
@@ -298,7 +324,7 @@ public class KeyResolver {
* @return the property set for this resolver
*/
public String getProperty(String key) {
- return this.resolverSpi.engineGetProperty(key);
+ return resolverSpi.engineGetProperty(key);
}
@@ -309,7 +335,7 @@ public class KeyResolver {
* @return true if the resolver understands property propertyToTest
*/
public boolean understandsProperty(String propertyToTest) {
- return this.resolverSpi.understandsProperty(propertyToTest);
+ return resolverSpi.understandsProperty(propertyToTest);
}
@@ -319,7 +345,7 @@ public class KeyResolver {
* @return the name of the resolver.
*/
public String resolverClassName() {
- return this.resolverSpi.getClass().getName();
+ return resolverSpi.getClass().getName();
}
/**
Modified: santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/keys/keyresolver/KeyResolverSpi.java
URL: http://svn.apache.org/viewvc/santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/keys/keyresolver/KeyResolverSpi.java?rev=1099406&r1=1099405&r2=1099406&view=diff
==============================================================================
--- santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/keys/keyresolver/KeyResolverSpi.java (original)
+++ santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/keys/keyresolver/KeyResolverSpi.java Wed May 4 10:53:49 2011
@@ -97,7 +97,7 @@ public abstract class KeyResolverSpi {
KeyResolverSpi tmp = this;
if (globalResolver) {
try {
- tmp = (KeyResolverSpi) getClass().newInstance();
+ tmp = getClass().newInstance();
} catch (InstantiationException e) {
throw new KeyResolverException("", e);
} catch (IllegalAccessException e) {
@@ -224,7 +224,7 @@ public abstract class KeyResolverSpi {
return null;
}
- return (String)properties.get(key);
+ return properties.get(key);
}
/**