in src/main/java/org/apache/xml/security/Init.java [154:315]
private static void fileInit(InputStream is) {
try {
/* read library configuration file */
Document doc = XMLUtils.read(is, true);
Node config = doc.getFirstChild();
for (; config != null; config = config.getNextSibling()) {
if ("Configuration".equals(config.getLocalName())) {
break;
}
}
if (config == null) {
LOG.log(Level.ERROR, "Error in reading configuration file - Configuration element not found");
return;
}
for (Node el = config.getFirstChild(); el != null; el = el.getNextSibling()) {
if (Node.ELEMENT_NODE != el.getNodeType()) {
continue;
}
String tag = el.getLocalName();
if ("ResourceBundles".equals(tag)) {
Element resource = (Element)el;
/* configure internationalization */
Attr langAttr = resource.getAttributeNodeNS(null, "defaultLanguageCode");
Attr countryAttr = resource.getAttributeNodeNS(null, "defaultCountryCode");
String languageCode =
(langAttr == null) ? null : langAttr.getNodeValue();
String countryCode =
(countryAttr == null) ? null : countryAttr.getNodeValue();
I18n.init(languageCode, countryCode);
}
if ("CanonicalizationMethods".equals(tag)) {
Element[] list =
XMLUtils.selectNodes(el.getFirstChild(), CONF_NS, "CanonicalizationMethod");
for (Element element : list) {
String uri = element.getAttributeNS(null, "URI");
String javaClass =
element.getAttributeNS(null, "JAVACLASS");
try {
Canonicalizer.register(uri, javaClass);
LOG.log(Level.DEBUG, "Canonicalizer.register({0}, {1})", uri, javaClass);
} catch (ClassNotFoundException e) {
Object[] exArgs = { uri, javaClass };
LOG.log(Level.ERROR, I18n.translate("algorithm.classDoesNotExist", exArgs));
}
}
}
if ("TransformAlgorithms".equals(tag)) {
Element[] tranElem =
XMLUtils.selectNodes(el.getFirstChild(), CONF_NS, "TransformAlgorithm");
for (Element element : tranElem) {
String uri = element.getAttributeNS(null, "URI");
String javaClass =
element.getAttributeNS(null, "JAVACLASS");
try {
Transform.register(uri, javaClass);
LOG.log(Level.DEBUG, "Transform.register({0}, {1})", uri, javaClass);
} catch (ClassNotFoundException e) {
Object[] exArgs = { uri, javaClass };
LOG.log(Level.ERROR, I18n.translate("algorithm.classDoesNotExist", exArgs));
} catch (NoClassDefFoundError ex) {
LOG.log(Level.WARNING, "Not able to found dependencies for algorithm, I'll keep working.");
}
}
}
if ("JCEAlgorithmMappings".equals(tag)) {
Node algorithmsNode = ((Element)el).getElementsByTagName("Algorithms").item(0);
if (algorithmsNode != null) {
Element[] algorithms =
XMLUtils.selectNodes(algorithmsNode.getFirstChild(), CONF_NS, "Algorithm");
for (Element element : algorithms) {
String id = element.getAttributeNS(null, "URI");
JCEMapper.register(id, new JCEMapper.Algorithm(element));
}
}
}
if ("SignatureAlgorithms".equals(tag)) {
Element[] sigElems =
XMLUtils.selectNodes(el.getFirstChild(), CONF_NS, "SignatureAlgorithm");
for (Element sigElem : sigElems) {
String uri = sigElem.getAttributeNS(null, "URI");
String javaClass =
sigElem.getAttributeNS(null, "JAVACLASS");
/** $todo$ handle registering */
try {
SignatureAlgorithm.register(uri, javaClass);
LOG.log(Level.DEBUG, "SignatureAlgorithm.register({0}, {1})", uri, javaClass);
} catch (ClassNotFoundException e) {
Object[] exArgs = { uri, javaClass };
LOG.log(Level.ERROR, I18n.translate("algorithm.classDoesNotExist", exArgs));
}
}
}
if ("ResourceResolvers".equals(tag)) {
Element[] resolverElem =
XMLUtils.selectNodes(el.getFirstChild(), CONF_NS, "Resolver");
List<String> classNames = new ArrayList<>(resolverElem.length);
for (Element element : resolverElem) {
String javaClass =
element.getAttributeNS(null, "JAVACLASS");
String description =
element.getAttributeNS(null, "DESCRIPTION");
if (description != null && description.length() > 0) {
LOG.log(Level.DEBUG, "Register Resolver: {0}: {1}", javaClass, description);
} else {
LOG.log(Level.DEBUG, "Register Resolver: {0}: For unknown purposes", javaClass);
}
classNames.add(javaClass);
}
ResourceResolver.registerClassNames(classNames);
}
if ("KeyResolver".equals(tag)){
Element[] resolverElem =
XMLUtils.selectNodes(el.getFirstChild(), CONF_NS, "Resolver");
List<String> classNames = new ArrayList<>(resolverElem.length);
for (Element element : resolverElem) {
String javaClass =
element.getAttributeNS(null, "JAVACLASS");
String description =
element.getAttributeNS(null, "DESCRIPTION");
if (description != null && description.length() > 0) {
LOG.log(Level.DEBUG, "Register Resolver: {0}: {1}", javaClass, description);
} else {
LOG.log(Level.DEBUG, "Register Resolver: {0}: For unknown purposes", javaClass);
}
classNames.add(javaClass);
}
KeyResolver.registerClassNames(classNames);
}
if ("PrefixMappings".equals(tag)){
LOG.log(Level.DEBUG, "Now I try to bind prefixes:");
Element[] nl =
XMLUtils.selectNodes(el.getFirstChild(), CONF_NS, "PrefixMapping");
for (Element element : nl) {
String namespace = element.getAttributeNS(null, "namespace");
String prefix = element.getAttributeNS(null, "prefix");
LOG.log(Level.DEBUG, "Now I try to bind {0} to {1}", prefix, namespace);
ElementProxy.setDefaultPrefix(namespace, prefix);
}
}
}
} catch (Exception e) {
LOG.log(Level.ERROR, "Bad: ", e);
}
}