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 2004/09/25 17:09:32 UTC
cvs commit: xml-security/src/org/apache/xml/security Init.java
raul 2004/09/25 08:09:32
Modified: src/org/apache/xml/security/algorithms JCEMapper.java
src/org/apache/xml/security Init.java
Log:
Use DOM lookup instead of XPath one.
Revision Changes Path
1.23 +179 -173 xml-security/src/org/apache/xml/security/algorithms/JCEMapper.java
Index: JCEMapper.java
===================================================================
RCS file: /home/cvs/xml-security/src/org/apache/xml/security/algorithms/JCEMapper.java,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -r1.22 -r1.23
--- JCEMapper.java 3 Aug 2004 18:01:23 -0000 1.22
+++ JCEMapper.java 25 Sep 2004 15:09:32 -0000 1.23
@@ -21,17 +21,17 @@
import java.security.Key;
import java.security.Provider;
import java.security.Security;
+import java.util.ArrayList;
import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
import java.util.Map;
-import javax.xml.transform.TransformerException;
+import org.apache.xml.security.Init;
import org.apache.xml.security.utils.XMLUtils;
-import org.apache.xpath.CachedXPathAPI;
-import org.w3c.dom.Attr;
-import org.w3c.dom.Document;
import org.w3c.dom.Element;
-import org.w3c.dom.NodeList;
+
/**
@@ -45,36 +45,80 @@
static org.apache.commons.logging.Log log =
org.apache.commons.logging.LogFactory.getLog(JCEMapper.class.getName());
- /** Field _providerList */
- private static Element _providerList = null;
- /** Field _nscontext */
- private static Element _nscontext = null;
-
- private static CachedXPathAPI cx=null;
private static Map uriToProvider = new HashMap();
private static Map cacheProviderIsInClassPath = new HashMap();
+
+ private static Map providersMap = new HashMap();
+ private static Map algorithmsMap = new HashMap();
/**
* Method init
*
* @param mappingElement
- * @param cx for using in the xpath searchs
* @throws Exception
*/
- public static void init(Element mappingElement,CachedXPathAPI cx) throws Exception {
-
- JCEMapper._providerList = mappingElement;
+ public static void init(Element mappingElement) throws Exception {
- Document doc = mappingElement.getOwnerDocument();
+ //JCEMapper._providerList = mappingElement;
- JCEMapper._nscontext =
- XMLUtils.createDSctx(doc, "x",
- "http://www.xmlsecurity.org/NS/#configuration");
- JCEMapper.cx=cx;
+ //Document doc = mappingElement.getOwnerDocument();
+ loadProviders((Element)mappingElement.getElementsByTagName("Providers").item(0));
+ loadAlgorithms((Element)mappingElement.getElementsByTagName("Algorithms").item(0));
+ }
+
+ static void loadProviders( Element providers) {
+ Element[] elements=XMLUtils.selectNodes(providers.getFirstChild(),Init.CONF_NS,"Provider");
+ for (int i=0;i<elements.length;i++) {
+ Element el=elements[i];
+ String id=el.getAttribute("Id");
+ List list=(List) providersMap.get(id);
+ if (list==null) {
+ list=new ArrayList();
+ }
+ list.add(new ProviderJCE(el));
+ providersMap.put(id,list);
+ }
+ }
+ static ProviderJCE getProvider(String id) {
+ List list=(List) providersMap.get(id);
+ if (list==null) {
+ return null;
+ }
+ return (ProviderJCE) list.get(0);
+
+ }
+ static List getProviders(String id) {
+ List list=(List) providersMap.get(id);
+ if (list==null) {
+ return null;
+ }
+ return list;
+ }
+ static void loadAlgorithms( Element algorithmsEl) {
+ Element[] algorithms=XMLUtils.selectNodes(algorithmsEl.getFirstChild(),Init.CONF_NS,"Algorithm");
+ for (int i=0;i<algorithms.length;i++) {
+ Element el=algorithms[i];
+ String id=el.getAttribute("URI");
+ Algorithm providerAlgoMap=new Algorithm(el);
+ Element []providerAlgos=XMLUtils.selectNodes(el.getFirstChild(),Init.CONF_NS,"ProviderAlgo");
+ for (int j=0;j<providerAlgos.length;j++) {
+ Element elp=providerAlgos[j];
+ AlgorithmMapping idA=new AlgorithmMapping(providerAlgoMap,elp);
+ providerAlgoMap.put(idA.ProviderId,idA);
+ }
+ algorithmsMap.put(id,providerAlgoMap);
+ }
+
+ }
+ static AlgorithmMapping getAlgorithmMapping(String algoURI,String providerId) {
+ Map algo=(Map) algorithmsMap.get(algoURI);
+ return (AlgorithmMapping) algo.get(providerId);
+ }
+ static Algorithm getAlgorithmMapping(String algoURI) {
+ return ((Algorithm)algorithmsMap.get(algoURI));
}
-
/**
* This method takes a Provider ID and tries to register this provider in the JCE.
*
@@ -85,12 +129,8 @@
public static boolean addProvider(String Id) {
try {
- if (Security.getProvider(Id) == null) {
- Element providerElem = (Element) cx.selectSingleNode(
- JCEMapper._providerList,
- "./x:Providers/x:Provider[@Id='" + Id + "']",
- JCEMapper._nscontext);
- String providerClass = providerElem.getAttributeNS(null, "Class");
+ if (Security.getProvider(Id) == null) {
+ String providerClass = getProvider(Id).providerClass;
java.security.Provider prov =
(java.security.Provider) Class.forName(providerClass)
.newInstance();
@@ -108,7 +148,7 @@
}
}
}
- } catch (TransformerException ex) {}
+ }
catch (ClassNotFoundException ex) {}
catch (IllegalAccessException ex) {}
catch (InstantiationException ex) {}
@@ -134,18 +174,12 @@
return true;
}
-
- try {
+
/* Allow for mulitple provider entries with same Id */
- NodeList providers = cx.selectNodeList(JCEMapper._providerList,
- "./x:Providers/x:Provider[@Id='"
- + providerId + "']",
- JCEMapper._nscontext);
-
- for (int i = 0; available == false && i < providers.getLength(); i++) {
- Element pro = (Element) providers.item(i);
+ List providers = getProviders(providerId);
- String providerClass = pro.getAttributeNS(null, "Class");
+ for (int i = 0; available == false && i < providers.size(); i++) {
+ String providerClass = ((ProviderJCE)providers.get(i)).providerClass;
try {
java.security.Provider prov =
(java.security.Provider) Class.forName(providerClass).newInstance();
@@ -160,10 +194,7 @@
} catch (InstantiationException ex) {
//do nothing
}
- }
- } catch (TransformerException ex) {
- //do nothing
- }
+ }
cacheProviderIsInClassPath.put(providerId,new Boolean(available));
return available;
@@ -205,23 +236,21 @@
}
- try {
+
- NodeList providers = cx.selectNodeList(JCEMapper._providerList,
- "./x:Algorithms/x:Algorithm[@URI='"
- + AlgorithmURI + "']/x:ProviderAlgo",
- JCEMapper._nscontext);
-
- for (int i = 0; i < providers.getLength(); i++) {
- Element pro = (Element) providers.item(i);
- String jceName = pro.getAttributeNS(null, "JCEName");
- String providerId = pro.getAttributeNS(null, "ProviderId");
+ Iterator providers=getAlgorithmMapping(AlgorithmURI)
+ .values()
+ .iterator();
+
+ while (providers.hasNext()) {
+
+ AlgorithmMapping map= (AlgorithmMapping)providers.next();
- if (JCEMapper.getProviderIsInClassPath(providerId)) {
- JCEMapper.addProvider(providerId);
+ if (JCEMapper.getProviderIsInClassPath(map.ProviderId)) {
+ JCEMapper.addProvider(map.ProviderId);
- ProviderIdClass result = new ProviderIdClass(jceName,
- providerId);
+ ProviderIdClass result = new ProviderIdClass(map.JCEName,
+ map.ProviderId);
log.debug("Found " + result.getAlgorithmID() + " from provider "
+ result.getProviderId());
@@ -230,11 +259,7 @@
return result;
}
}
- } catch (TransformerException ex) {
- log.debug("Found nothing: " + ex.getMessage());
- }
-
- return null;
+ return null;
}
/**
@@ -255,13 +280,9 @@
return null;
}
- try {
- Element pro = (Element) cx.selectSingleNode(
- JCEMapper._providerList,
- "./x:Algorithms/x:Algorithm[@URI='" + AlgorithmURI
- + "']/x:ProviderAlgo[@ProviderId='" + requestedProviderId + "']",
- JCEMapper._nscontext);
- String jceName = pro.getAttributeNS(null, "JCEName");
+
+
+ String jceName = getAlgorithmMapping(AlgorithmURI,requestedProviderId).JCEName;
JCEMapper.addProvider(requestedProviderId);
@@ -272,11 +293,6 @@
+ result.getProviderId());
return result;
- } catch (TransformerException ex) {
- log.debug("Found nothing: " + ex.getMessage());
- }
-
- return null;
}
/**
@@ -291,25 +307,18 @@
log.debug("Request for URI " + AlgorithmURI);
- try {
- NodeList providers = cx.selectNodeList(JCEMapper._providerList,
- "./x:Algorithms/x:Algorithm[@URI='"
- + AlgorithmURI + "']/x:ProviderAlgo",
- JCEMapper._nscontext);
-
- for (int i = 0; i < providers.getLength(); i++) {
- Element pro = (Element) providers.item(i);
- Attr jceName = pro.getAttributeNodeNS(null, "JCEName");
-
- log.debug("Found " + jceName.getNodeValue());
+ Iterator alth=getAlgorithmMapping(AlgorithmURI).entrySet().iterator();
+ String uri=null;
+
+ while (alth.hasNext()) {
+ String cur=((AlgorithmMapping)alth.next()).JCEName;
+ if (uri==null)
+ uri=cur;
+ log.debug("Found " + cur);
}
- return ((Element) providers.item(0)).getAttributeNS(null, "JCEName");
- } catch (TransformerException ex) {
- log.debug("Found nothing: " + ex.getMessage());
-
- return "";
- }
+ return uri;
+
}
/**
@@ -320,16 +329,8 @@
*/
public static int getKeyTypeFromURI(String AlgorithmURI) {
- try {
- Attr algoclassAttr =
- (Attr) cx.selectSingleNode(JCEMapper._providerList,
- "./x:Algorithms/x:Algorithm[@URI='"
- + AlgorithmURI
- + "']/@AlgorithmClass", JCEMapper
- ._nscontext);
+ String algoclass = getAlgorithmMapping(AlgorithmURI).algorithmClass;
- if (algoclassAttr != null) {
- String algoclass = algoclassAttr.getNodeValue();
if (algoclass.equals(JCEMapper.KEYTYPE_BLOCK_ENCRYPTION)) {
return javax.crypto.Cipher.SECRET_KEY;
@@ -340,10 +341,6 @@
} else if (algoclass.equals(JCEMapper.KEYTYPE_KEY_TRANSPORT)) {
return javax.crypto.Cipher.SECRET_KEY;
}
- }
- } catch (TransformerException ex) {
- log.debug("Found nothing: " + ex.getMessage());
- }
return -1;
}
@@ -356,22 +353,11 @@
*/
public static int getKeyLengthFromURI(String AlgorithmURI) {
- try {
- Attr algoclassAttr =
- (Attr) cx.selectSingleNode(JCEMapper._providerList,
- "./x:Algorithms/x:Algorithm[@URI='"
- + AlgorithmURI + "']/@KeyLength",
- JCEMapper._nscontext);
-
- if (algoclassAttr != null) {
- return Integer.parseInt(algoclassAttr.getNodeValue());
- }
- } catch (TransformerException ex) {
- log.debug("Found nothing: " + ex.getMessage());
- }
-
- return 0;
- }
+
+
+ return Integer.parseInt(getAlgorithmMapping(AlgorithmURI).keyLength);
+
+ }
/**
* Method getJCEKeyAlgorithmFromURI
@@ -384,23 +370,9 @@
public static String getJCEKeyAlgorithmFromURI(String AlgorithmURI,
String ProviderId) {
- try {
- Attr algoclassAttr =
- (Attr) cx.selectSingleNode(JCEMapper._providerList,
- "./x:Algorithms/x:Algorithm[@URI='"
- + AlgorithmURI
- + "']/x:ProviderAlgo[@ProviderId='"
- + ProviderId + "']/@RequiredKey",
- JCEMapper._nscontext);
-
- if (algoclassAttr != null) {
- return algoclassAttr.getNodeValue();
- }
- } catch (TransformerException ex) {
- log.debug("Found nothing: " + ex.getMessage());
- }
-
- return null;
+
+ return getAlgorithmMapping(AlgorithmURI,ProviderId).RequiredKey;
+
}
@@ -411,24 +383,8 @@
*/
public static String getJCEIVAlgorithmFromURI(String AlgorithmURI,
String ProviderId) {
-
- try {
- Attr algoclassAttr =
- (Attr) cx.selectSingleNode(JCEMapper._providerList,
- "./x:Algorithms/x:Algorithm[@URI='"
- + AlgorithmURI
- + "']/x:ProviderAlgo[@ProviderId='"
- + ProviderId + "']/@IVJCEName",
- JCEMapper._nscontext);
-
- if (algoclassAttr != null) {
- return algoclassAttr.getNodeValue();
- }
- } catch (TransformerException ex) {
- log.debug("Found nothing: " + ex.getMessage());
- }
-
- return null;
+ return getAlgorithmMapping(AlgorithmURI,ProviderId).IVJCEName;
+
}
/** Field KEYTYPE_SYMMETRIC_KEY_WRAP */
@@ -455,26 +411,26 @@
*
*/
public static String getURIfromKey(Key key, String type) {
-
+
String JCEalgo = key.getAlgorithm();
String keyLength = new Integer(key.getEncoded().length * 8).toString();
-
- try {
- Attr URI = (Attr) cx.selectSingleNode(
- JCEMapper._providerList,
- "./x:Algorithms/x:Algorithm[@KeyLength='" + keyLength
+
+ //try {
+ //Attr URI = (Attr) cx.selectSingleNode(
+ //JCEMapper._providerList,
+ String xpath= "./x:Algorithms/x:Algorithm[@KeyLength='" + keyLength
+ "' and @AlgorithmClass='" + type
- + "']/x:ProviderAlgo[@RequiredKey='" + JCEalgo + "']/../@URI",
- JCEMapper._nscontext);
+ + "']/x:ProviderAlgo[@RequiredKey='" + JCEalgo + "']/../@URI";
+ //,JCEMapper._nscontext);
- if (URI != null) {
+ /*if (URI != null) {
return URI.getNodeValue();
- }
- } catch (TransformerException ex) {
- log.debug("Found nothing: " + ex.getMessage());
- }
-
- return null;
+ }*/
+ //} catch (TransformerException ex) {
+ // log.debug("Found nothing: " + ex.getMessage());
+ //}
+
+ return xpath;
}
/*
@@ -486,7 +442,57 @@
return JCEMapper.getURIfromKey(key, JCEMapper.KEYTYPE_BLOCK_ENCRYPTION);
}
*/
-
+ /**
+ * Represents the ProviderJCE xml element
+ */
+ public static class ProviderJCE {
+ String providerClass;
+ /**
+ * Gets the data from element.
+ * @param el
+ */
+ public ProviderJCE(Element el) {
+ providerClass = el.getAttributeNS(null, "Class");
+ }
+ }
+ /**
+ * Represents the Algorithm xml element
+ */
+ public static class Algorithm extends HashMap {
+ String algorithmClass;
+ String keyLength;
+ /**
+ * Gets data from element
+ * @param el
+ */
+ public Algorithm(Element el) {
+ algorithmClass=el.getAttribute("AlgorithmClass");
+ keyLength=el.getAttribute("KeyLength");
+ }
+ }
+ /**
+ * Represents the AlgorithmMapping xml element
+ */
+ public static class AlgorithmMapping {
+ String RequiredKey;
+ String ProviderId;
+ String JCEName;
+ String IVJCEName;
+ Algorithm algo;
+ /**
+ * Gets data from element
+ * @param algo
+ * @param el
+ */
+ public AlgorithmMapping(Algorithm algo,Element el) {
+ this.algo=algo;
+ RequiredKey=el.getAttribute("RequiredKey");
+ ProviderId=el.getAttribute("ProviderId");
+ JCEName=el.getAttribute("JCEName");
+ IVJCEName=el.getAttribute("IVJCEName");
+ }
+ }
+
/**
* Class ProviderIdClass
*
1.27 +215 -206 xml-security/src/org/apache/xml/security/Init.java
Index: Init.java
===================================================================
RCS file: /home/cvs/xml-security/src/org/apache/xml/security/Init.java,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -r1.26 -r1.27
--- Init.java 24 Sep 2004 20:54:28 -0000 1.26
+++ Init.java 25 Sep 2004 15:09:32 -0000 1.27
@@ -18,9 +18,11 @@
-import java.io.*;
-import java.lang.reflect.Method;
-import javax.xml.parsers.*;
+import java.io.InputStream;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+
import org.apache.xml.security.algorithms.JCEMapper;
import org.apache.xml.security.algorithms.SignatureAlgorithm;
import org.apache.xml.security.c14n.Canonicalizer;
@@ -28,13 +30,17 @@
import org.apache.xml.security.keys.keyresolver.KeyResolver;
import org.apache.xml.security.transforms.Transform;
import org.apache.xml.security.transforms.implementations.FuncHere;
-import org.apache.xml.security.utils.*;
+import org.apache.xml.security.utils.I18n;
+import org.apache.xml.security.utils.PRNG;
+import org.apache.xml.security.utils.XMLUtils;
import org.apache.xml.security.utils.resolver.ResourceResolver;
-import org.apache.xpath.CachedXPathAPI;
import org.apache.xpath.compiler.FuncLoader;
import org.apache.xpath.compiler.FunctionTable;
import org.apache.xpath.functions.Function;
-import org.w3c.dom.*;
+import org.w3c.dom.Attr;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
/**
@@ -53,6 +59,9 @@
/** Field _initialized */
private static boolean _alreadyInitialized = false;
+
+ /** The namespace for CONF file **/
+ public static final String CONF_NS="http://www.xmlsecurity.org/NS/#configuration";
/**
* Method isInitialized
@@ -69,7 +78,22 @@
*/
public synchronized static void init() {
- if (!_alreadyInitialized) {
+ if (_alreadyInitialized) {
+ return;
+ }
+ long XX_configure_i18n_end=0;
+ long XX_configure_reg_c14n_start=0;
+ long XX_configure_reg_c14n_end=0;
+ long XX_configure_reg_here_start=0;
+ long XX_configure_reg_jcemapper_end=0;
+ long XX_configure_reg_keyInfo_start=0;
+ long XX_configure_reg_keyResolver_end=0;
+ long XX_configure_reg_prefixes_start=0;
+ long XX_configure_reg_resourceresolver_start=0;
+ long XX_configure_reg_sigalgos_end=0;
+ long XX_configure_reg_transforms_end=0;
+ long XX_configure_reg_keyInfo_end=0;
+ long XX_configure_reg_keyResolver_start=0;
_alreadyInitialized = true;
try {
@@ -95,26 +119,47 @@
.getResourceAsStream(cfile != null ? cfile : "resource/config.xml");
Document doc = db.parse(is);
- long XX_parsing_end = System.currentTimeMillis();
- Element context = doc.createElementNS(null, "nscontext");
-
- context.setAttributeNS(
- Constants.NamespaceSpecNS, "xmlns:x",
- "http://www.xmlsecurity.org/NS/#configuration");
- CachedXPathAPI cx=new CachedXPathAPI();
- long XX_configure_i18n_start = System.currentTimeMillis();
-
+ long XX_parsing_end = System.currentTimeMillis();
+ XX_configure_reg_here_start = System.currentTimeMillis();
+ registerHereFunction();
+ long XX_configure_reg_here_end = System.currentTimeMillis();
+ //CachedXPathAPI cx=new CachedXPathAPI();
+ long XX_configure_i18n_start = 0;
+
{
+ XX_configure_reg_keyInfo_start = System.currentTimeMillis();
+ try {
+ KeyInfo.init();
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw e;
+ }
+ XX_configure_reg_keyInfo_end = System.currentTimeMillis();
+ }
+
+ long XX_configure_reg_transforms_start=0;
+ long XX_configure_reg_jcemapper_start=0;
+ long XX_configure_reg_sigalgos_start=0;
+ long XX_configure_reg_resourceresolver_end=0;
+ long XX_configure_reg_prefixes_end=0;
+ Node config=doc.getFirstChild();
+ for (;config!=null;config=config.getNextSibling()) {
+ if ("Configuration".equals(config.getLocalName())) {
+ break;
+ }
+ }
+ for (Node el=config.getFirstChild();el!=null;el=el.getNextSibling()) {
+ if (!(el instanceof Element)) {
+ continue;
+ }
+ String tag=el.getLocalName();
+ if (tag.equals("ResourceBundles")){
+ XX_configure_i18n_start = System.currentTimeMillis();
+ Element resource=(Element)el;
/* configure internationalization */
- Attr langAttr = (Attr) cx.selectSingleNode(
- doc,
- "/x:Configuration/x:ResourceBundles/@defaultLanguageCode",
- context);
- Attr countryAttr = (Attr) cx.selectSingleNode(
- doc,
- "/x:Configuration/x:ResourceBundles/@defaultCountryCode",
- context);
+ Attr langAttr = resource.getAttributeNode("defaultLanguageCode");
+ Attr countryAttr = resource.getAttributeNode("defaultCountryCode");
String languageCode = (langAttr == null)
? null
: langAttr.getNodeValue();
@@ -123,68 +168,23 @@
: countryAttr.getNodeValue();
I18n.init(languageCode, countryCode);
+ XX_configure_i18n_end = System.currentTimeMillis();
}
-
- long XX_configure_i18n_end = System.currentTimeMillis();
-
- /**
- * Try to register our here() implementation as internal function.
- */
- long XX_configure_reg_here_start = System.currentTimeMillis();
-
- {
- FunctionTable.installFunction("here", new FuncHere());
- log.debug("Registered class " + FuncHere.class.getName()
- + " for XPath function 'here()' function in internal table");
-
- /* The following tweak by "Eric Olson" <eg...@alum.mit.edu>
- * is to enable xml-security to play with JDK 1.4 which
- * unfortunately bundles an old version of Xalan
- */
- FuncLoader funcHereLoader = new FuncHereLoader();
-
- try {
- java.lang.reflect.Field mFunctions = FunctionTable.class.getField("m_functions");
- FuncLoader[] m_functions = (FuncLoader[]) mFunctions.get(null);
-
- for (int i = 0; i < m_functions.length; i++) {
- FuncLoader loader = m_functions[i];
-
- if (loader != null) {
- log.debug("Func " + i + " " + loader.getName());
-
- if (loader.getName().equals(funcHereLoader.getName())) {
- m_functions[i] = funcHereLoader;
- }
- }
- }
- } catch (Exception e) {
- log.info("Unable to patch xalan function table.", e);
- }
- }
-
- long XX_configure_reg_here_end = System.currentTimeMillis();
- long XX_configure_reg_c14n_start = System.currentTimeMillis();
-
- {
+
+ if (tag.equals("CanonicalizationMethods")){
+ XX_configure_reg_c14n_start = System.currentTimeMillis();
Canonicalizer.init();
+ Element[] list=XMLUtils.selectNodes(el.getFirstChild(),CONF_NS,"CanonicalizationMethod");
- NodeList c14nElem = cx.selectNodeList(
- doc,
- "/x:Configuration/x:CanonicalizationMethods/x:CanonicalizationMethod",
- context);
-
- for (int i = 0; i < c14nElem.getLength(); i++) {
- String URI = ((Element) c14nElem.item(i)).getAttributeNS(null,
+ for (int i = 0; i < list.length; i++) {
+ String URI = list[i].getAttributeNS(null,
"URI");
String JAVACLASS =
- ((Element) c14nElem.item(i)).getAttributeNS(null,
+ list[i].getAttributeNS(null,
"JAVACLASS");
- boolean registerClass = true;
-
try {
- Class c = Class.forName(JAVACLASS);
- Method methods[] = c.getMethods();
+ Class.forName(JAVACLASS);
+/* Method methods[] = c.getMethods();
for (int j = 0; j < methods.length; j++) {
Method currMeth = methods[j];
@@ -193,139 +193,114 @@
.equals(JAVACLASS)) {
log.debug(currMeth.getDeclaringClass());
}
- }
+ }*/
+ log.debug("Canonicalizer.register(" + URI + ", "
+ + JAVACLASS + ")");
+ Canonicalizer.register(URI, JAVACLASS);
} catch (ClassNotFoundException e) {
Object exArgs[] = { URI, JAVACLASS };
log.fatal(I18n.translate("algorithm.classDoesNotExist",
exArgs));
-
- registerClass = false;
- }
-
- if (registerClass) {
- log.debug("Canonicalizer.register(" + URI + ", "
- + JAVACLASS + ")");
- Canonicalizer.register(URI, JAVACLASS);
}
}
+ XX_configure_reg_c14n_end = System.currentTimeMillis();
}
-
- long XX_configure_reg_c14n_end = System.currentTimeMillis();
- long XX_configure_reg_transforms_start = System.currentTimeMillis();
-
- {
+
+ if (tag.equals("TransformAlgorithms")){
+ XX_configure_reg_transforms_start = System.currentTimeMillis();
Transform.init();
- NodeList tranElem = cx.selectNodeList(
- doc,
- "/x:Configuration/x:TransformAlgorithms/x:TransformAlgorithm",
- context);
+ Element[] tranElem = XMLUtils.selectNodes(el.getFirstChild(),CONF_NS,"TransformAlgorithm");
- for (int i = 0; i < tranElem.getLength(); i++) {
- String URI = ((Element) tranElem.item(i)).getAttributeNS(null,
+ for (int i = 0; i < tranElem.length; i++) {
+ String URI = tranElem[i].getAttributeNS(null,
"URI");
String JAVACLASS =
- ((Element) tranElem.item(i)).getAttributeNS(null,
+ tranElem[i].getAttributeNS(null,
"JAVACLASS");
- boolean registerClass = true;
-
try {
Class.forName(JAVACLASS);
+ log.debug("Transform.register(" + URI + ", " + JAVACLASS
+ + ")");
+ Transform.register(URI, JAVACLASS);
} catch (ClassNotFoundException e) {
Object exArgs[] = { URI, JAVACLASS };
log.fatal(I18n.translate("algorithm.classDoesNotExist",
exArgs));
- registerClass = false;
- }
-
- if (registerClass) {
- log.debug("Transform.register(" + URI + ", " + JAVACLASS
- + ")");
- Transform.register(URI, JAVACLASS);
}
}
+ XX_configure_reg_transforms_end = System.currentTimeMillis();
}
+
- long XX_configure_reg_transforms_end = System.currentTimeMillis();
- long XX_configure_reg_jcemapper_start = System.currentTimeMillis();
-
- {
- Element jcemapperElem = (Element) cx.selectSingleNode(
- doc, "/x:Configuration/x:JCEAlgorithmMappings", context);
-
- JCEMapper.init(jcemapperElem,cx);
+ if ("JCEAlgorithmMappings".equals(tag)){
+ XX_configure_reg_jcemapper_start = System.currentTimeMillis();
+ JCEMapper.init((Element)el);
+ XX_configure_reg_jcemapper_end = System.currentTimeMillis();
}
- long XX_configure_reg_jcemapper_end = System.currentTimeMillis();
- long XX_configure_reg_sigalgos_start = System.currentTimeMillis();
+
- {
+ if (tag.equals("SignatureAlgorithms")){
+ XX_configure_reg_sigalgos_start = System.currentTimeMillis();
SignatureAlgorithm.providerInit();
- NodeList sigElems = cx.selectNodeList(
- doc,
- "/x:Configuration/x:SignatureAlgorithms/x:SignatureAlgorithm",
- context);
+ Element[] sigElems = XMLUtils.selectNodes(el.getFirstChild(), CONF_NS,
+ "SignatureAlgorithm");
- for (int i = 0; i < sigElems.getLength(); i++) {
- String URI = ((Element) sigElems.item(i)).getAttributeNS(null,
+ for (int i = 0; i < sigElems.length; i++) {
+ String URI = sigElems[i].getAttributeNS(null,
"URI");
String JAVACLASS =
- ((Element) sigElems.item(i)).getAttributeNS(null,
+ sigElems[i].getAttributeNS(null,
"JAVACLASS");
/** $todo$ handle registering */
- boolean registerClass = true;
try {
- Class c = Class.forName(JAVACLASS);
- Method methods[] = c.getMethods();
+ Class.forName(JAVACLASS);
+ // Method methods[] = c.getMethods();
- for (int j = 0; j < methods.length; j++) {
- Method currMeth = methods[j];
-
- if (currMeth.getDeclaringClass().getName()
- .equals(JAVACLASS)) {
- log.debug(currMeth.getDeclaringClass());
- }
- }
+// for (int j = 0; j < methods.length; j++) {
+// Method currMeth = methods[j];
+//
+// if (currMeth.getDeclaringClass().getName()
+// .equals(JAVACLASS)) {
+// log.debug(currMeth.getDeclaringClass());
+// }
+// }
+ log.debug("SignatureAlgorithm.register(" + URI + ", "
+ + JAVACLASS + ")");
+ SignatureAlgorithm.register(URI, JAVACLASS);
} catch (ClassNotFoundException e) {
Object exArgs[] = { URI, JAVACLASS };
log.fatal(I18n.translate("algorithm.classDoesNotExist",
exArgs));
- registerClass = false;
- }
-
- if (registerClass) {
- log.debug("SignatureAlgorithm.register(" + URI + ", "
- + JAVACLASS + ")");
- SignatureAlgorithm.register(URI, JAVACLASS);
}
}
+ XX_configure_reg_sigalgos_end = System.currentTimeMillis();
}
- long XX_configure_reg_sigalgos_end = System.currentTimeMillis();
- long XX_configure_reg_resourceresolver_start =
- System.currentTimeMillis();
-
- {
+
+
+ if (tag.equals("ResourceResolvers")){
+ XX_configure_reg_resourceresolver_start = System.currentTimeMillis();
ResourceResolver.init();
- NodeList resolverElem = cx.selectNodeList(
- doc, "/x:Configuration/x:ResourceResolvers/x:Resolver",
- context);
+ Element[]resolverElem = XMLUtils.selectNodes(el.getFirstChild(),CONF_NS,
+ "Resolver");
- for (int i = 0; i < resolverElem.getLength(); i++) {
+ for (int i = 0; i < resolverElem.length; i++) {
String JAVACLASS =
- ((Element) resolverElem.item(i)).getAttributeNS(null,
+ resolverElem[i].getAttributeNS(null,
"JAVACLASS");
String Description =
- ((Element) resolverElem.item(i)).getAttributeNS(null,
+ resolverElem[i].getAttributeNS(null,
"DESCRIPTION");
if ((Description != null) && (Description.length() > 0)) {
@@ -337,39 +312,29 @@
}
ResourceResolver.register(JAVACLASS);
- }
- }
+ XX_configure_reg_resourceresolver_end =
+ System.currentTimeMillis();
+ }
- long XX_configure_reg_resourceresolver_end =
- System.currentTimeMillis();
- long XX_configure_reg_keyInfo_start = System.currentTimeMillis();
-
- {
- try {
- KeyInfo.init();
- } catch (Exception e) {
- e.printStackTrace();
-
- throw e;
- }
}
- long XX_configure_reg_keyInfo_end = System.currentTimeMillis();
- long XX_configure_reg_keyResolver_start =
- System.currentTimeMillis();
+
- {
+
+
+
+ if (tag.equals("KeyResolver")){
+ XX_configure_reg_keyResolver_start =System.currentTimeMillis();
KeyResolver.init();
- NodeList resolverElem = cx.selectNodeList(
- doc, "/x:Configuration/x:KeyResolver/x:Resolver", context);
+ Element[] resolverElem = XMLUtils.selectNodes(el.getFirstChild(), CONF_NS,"Resolver");
- for (int i = 0; i < resolverElem.getLength(); i++) {
+ for (int i = 0; i < resolverElem.length; i++) {
String JAVACLASS =
- ((Element) resolverElem.item(i)).getAttributeNS(null,
+ resolverElem[i].getAttributeNS(null,
"JAVACLASS");
String Description =
- ((Element) resolverElem.item(i)).getAttributeNS(null,
+ resolverElem[i].getAttributeNS(null,
"DESCRIPTION");
if ((Description != null) && (Description.length() > 0)) {
@@ -382,58 +347,102 @@
KeyResolver.register(JAVACLASS);
}
+ XX_configure_reg_keyResolver_end = System.currentTimeMillis();
}
- long XX_configure_reg_keyResolver_end = System.currentTimeMillis();
- long XX_configure_reg_prefixes_start = System.currentTimeMillis();
-
- {
+
+ if (tag.equals("PrefixMappings")){
+ XX_configure_reg_prefixes_start = System.currentTimeMillis();
log.debug("Now I try to bind prefixes:");
- NodeList nl = cx.selectNodeList(
- doc, "/x:Configuration/x:PrefixMappings/x:PrefixMapping",
- context);
+ Element[] nl = XMLUtils.selectNodes(el.getFirstChild(), CONF_NS,"PrefixMapping");
- for (int i = 0; i < nl.getLength(); i++) {
- String namespace = ((Element) nl.item(i)).getAttributeNS(null,
+ for (int i = 0; i < nl.length; i++) {
+ String namespace = nl[i].getAttributeNS(null,
"namespace");
- String prefix = ((Element) nl.item(i)).getAttributeNS(null,
+ String prefix = nl[i].getAttributeNS(null,
"prefix");
log.debug("Now I try to bind " + prefix + " to " + namespace);
org.apache.xml.security.utils.ElementProxy
.setDefaultPrefix(namespace, prefix);
}
+ XX_configure_reg_prefixes_end = System.currentTimeMillis();
}
-
- long XX_configure_reg_prefixes_end = System.currentTimeMillis();
+ }
+
long XX_init_end = System.currentTimeMillis();
//J-
- log.debug("XX_init " + ((int)(XX_init_end - XX_init_start)) + " ms");
- log.debug(" XX_prng " + ((int)(XX_prng_end - XX_prng_start)) + " ms");
- log.debug(" XX_parsing " + ((int)(XX_parsing_end - XX_parsing_start)) + " ms");
- log.debug(" XX_configure_i18n " + ((int)(XX_configure_i18n_end- XX_configure_i18n_start)) + " ms");
- log.debug(" XX_configure_reg_c14n " + ((int)(XX_configure_reg_c14n_end- XX_configure_reg_c14n_start)) + " ms");
- log.debug(" XX_configure_reg_here " + ((int)(XX_configure_reg_here_end- XX_configure_reg_here_start)) + " ms");
- log.debug(" XX_configure_reg_jcemapper " + ((int)(XX_configure_reg_jcemapper_end- XX_configure_reg_jcemapper_start)) + " ms");
- log.debug(" XX_configure_reg_keyInfo " + ((int)(XX_configure_reg_keyInfo_end- XX_configure_reg_keyInfo_start)) + " ms");
- log.debug(" XX_configure_reg_keyResolver " + ((int)(XX_configure_reg_keyResolver_end- XX_configure_reg_keyResolver_start)) + " ms");
- log.debug(" XX_configure_reg_prefixes " + ((int)(XX_configure_reg_prefixes_end- XX_configure_reg_prefixes_start)) + " ms");
- log.debug(" XX_configure_reg_resourceresolver " + ((int)(XX_configure_reg_resourceresolver_end- XX_configure_reg_resourceresolver_start)) + " ms");
- log.debug(" XX_configure_reg_sigalgos " + ((int)(XX_configure_reg_sigalgos_end- XX_configure_reg_sigalgos_start)) + " ms");
- log.debug(" XX_configure_reg_transforms " + ((int)(XX_configure_reg_transforms_end- XX_configure_reg_transforms_start)) + " ms");
+ log.error("XX_init " + ((int)(XX_init_end - XX_init_start)) + " ms");
+ log.error(" XX_prng " + ((int)(XX_prng_end - XX_prng_start)) + " ms");
+ log.error(" XX_parsing " + ((int)(XX_parsing_end - XX_parsing_start)) + " ms");
+
+ log.error(" XX_configure_i18n " + ((int)(XX_configure_i18n_end- XX_configure_i18n_start)) + " ms");
+ log.error(" XX_configure_reg_c14n " + ((int)(XX_configure_reg_c14n_end- XX_configure_reg_c14n_start)) + " ms");
+ log.error(" XX_configure_reg_here " + ((int)(XX_configure_reg_here_end- XX_configure_reg_here_start)) + " ms");
+ log.error(" XX_configure_reg_jcemapper " + ((int)(XX_configure_reg_jcemapper_end- XX_configure_reg_jcemapper_start)) + " ms");
+
+
+ log.error(" XX_configure_reg_keyInfo " + ((int)(XX_configure_reg_keyInfo_end- XX_configure_reg_keyInfo_start)) + " ms");
+
+ log.error(" XX_configure_reg_keyResolver " + ((int)(XX_configure_reg_keyResolver_end- XX_configure_reg_keyResolver_start)) + " ms");
+ log.error(" XX_configure_reg_prefixes " + ((int)(XX_configure_reg_prefixes_end- XX_configure_reg_prefixes_start)) + " ms");
+ log.error(" XX_configure_reg_resourceresolver " + ((int)(XX_configure_reg_resourceresolver_end- XX_configure_reg_resourceresolver_start)) + " ms");
+ log.error(" XX_configure_reg_sigalgos " + ((int)(XX_configure_reg_sigalgos_end- XX_configure_reg_sigalgos_start)) + " ms");
+ log.error(" XX_configure_reg_transforms " + ((int)(XX_configure_reg_transforms_end- XX_configure_reg_transforms_start)) + " ms");
//J+
} catch (Exception e) {
log.fatal("Bad: ", e);
e.printStackTrace();
}
- }
+
}
/**
+ *
+ */
+private static void registerHereFunction() {
+ /**
+ * Try to register our here() implementation as internal function.
+ */
+ {
+ FunctionTable.installFunction("here", new FuncHere());
+ log.debug("Registered class " + FuncHere.class.getName()
+ + " for XPath function 'here()' function in internal table");
+
+ /* The following tweak by "Eric Olson" <eg...@alum.mit.edu>
+ * is to enable xml-security to play with JDK 1.4 which
+ * unfortunately bundles an old version of Xalan
+ */
+ FuncLoader funcHereLoader = new FuncHereLoader();
+
+ try {
+ java.lang.reflect.Field mFunctions = FunctionTable.class.getField("m_functions");
+ FuncLoader[] m_functions = (FuncLoader[]) mFunctions.get(null);
+
+ for (int i = 0; i < m_functions.length; i++) {
+ FuncLoader loader = m_functions[i];
+
+ if (loader != null) {
+ log.debug("Func " + i + " " + loader.getName());
+
+ if (loader.getName().equals(funcHereLoader.getName())) {
+ m_functions[i] = funcHereLoader;
+ }
+ }
+ }
+ } catch (Exception e) {
+ log.info("Unable to patch xalan function table.", e);
+ }
+ }
+}
+
+
+
+/**
* Class FuncHereLoader
*
* @author $Author$