package org.jboss.net.axis.security;
import java.lang.reflect.Constructor;
import java.security.KeyStore;
import org.apache.log4j.Logger;
import org.apache.ws.security.components.crypto.CryptoFactory;
public class JBossCryptoFactory extends CryptoFactory
{
private static Logger log = Logger.getLogger(JBossCryptoFactory.class);
public static JBossCrypto getInstance(String cryptoClassName, KeyStore keystore)
{
if (log.isDebugEnabled())
log.debug("Attempting to get a Crypto instance of type " + cryptoClassName);
return loadClass(cryptoClassName, keystore);
}
private static JBossCrypto loadClass(String cryptoClassName, KeyStore keystore)
{
Class cryptogenClass = null;
JBossCrypto crypto = null;
try
{
cryptogenClass = java.lang.Class.forName(cryptoClassName);
}
catch (ClassNotFoundException e)
{
throw new RuntimeException(cryptoClassName + " Not Found");
}
log.info("Using Crypto Engine [" + cryptoClassName + "]");
try
{
Class[] classes = new Class[]{KeyStore.class};
Constructor c = cryptogenClass.getConstructor(classes);
crypto = (JBossCrypto) c.newInstance(new Object[]{keystore});
return crypto;
}
catch (java.lang.Exception e)
{
log.debug(e);
log.debug(cryptoClassName + " cannot create instance with KeyStore constructor");
}
try
{
crypto = (JBossCrypto) cryptogenClass.newInstance();
return crypto;
}
catch (java.lang.Exception e)
{
throw new RuntimeException(cryptoClassName + " cannot create instance");
}
}
}