SANTUARIO-565 - Registered Java class for http://www.w3.org/2007/05/xmldsig-more#ripemd160-rsa-MGF1 doesn't exist
diff --git a/src/main/java/org/apache/xml/security/resource/config.xml b/src/main/java/org/apache/xml/security/resource/config.xml
index 4444697..e460eb6 100644
--- a/src/main/java/org/apache/xml/security/resource/config.xml
+++ b/src/main/java/org/apache/xml/security/resource/config.xml
@@ -96,8 +96,6 @@
       <SignatureAlgorithm URI="http://www.w3.org/2001/04/xmldsig-more#rsa-sha512"

                           JAVACLASS="org.apache.xml.security.algorithms.implementations.SignatureBaseRSA$SignatureRSASHA512" />

                           

-      <SignatureAlgorithm URI="http://www.w3.org/2007/05/xmldsig-more#ripemd160-rsa-MGF1"

-                          JAVACLASS="org.apache.xml.security.algorithms.implementations.SignatureBaseRSA$SignatureRSARIPEMD160MGF1" />

       <SignatureAlgorithm URI="http://www.w3.org/2007/05/xmldsig-more#sha1-rsa-MGF1"

                           JAVACLASS="org.apache.xml.security.algorithms.implementations.SignatureBaseRSA$SignatureRSASHA1MGF1" />

       <SignatureAlgorithm URI="http://www.w3.org/2007/05/xmldsig-more#sha224-rsa-MGF1"

diff --git a/src/test/java/org/apache/xml/security/test/dom/InitTest.java b/src/test/java/org/apache/xml/security/test/dom/InitTest.java
index 65c8dfd..c7b7205 100644
--- a/src/test/java/org/apache/xml/security/test/dom/InitTest.java
+++ b/src/test/java/org/apache/xml/security/test/dom/InitTest.java
@@ -19,24 +19,42 @@
 package org.apache.xml.security.test.dom;
 
 
+import java.io.InputStream;
+
 import org.apache.xml.security.Init;
 import org.apache.xml.security.algorithms.JCEMapper;
 import org.apache.xml.security.algorithms.MessageDigestAlgorithm;
 import org.apache.xml.security.algorithms.SignatureAlgorithm;
+import org.apache.xml.security.algorithms.SignatureAlgorithmSpi;
+import org.apache.xml.security.c14n.Canonicalizer;
+import org.apache.xml.security.c14n.CanonicalizerSpi;
+import org.apache.xml.security.keys.keyresolver.KeyResolver;
+import org.apache.xml.security.keys.keyresolver.KeyResolverSpi;
 import org.apache.xml.security.signature.XMLSignature;
+import org.apache.xml.security.transforms.Transform;
+import org.apache.xml.security.transforms.TransformSpi;
+import org.apache.xml.security.utils.ClassLoaderUtils;
+import org.apache.xml.security.utils.XMLUtils;
+import org.apache.xml.security.utils.resolver.ResourceResolver;
+import org.apache.xml.security.utils.resolver.ResourceResolverSpi;
 import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.BeforeAll;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
 public class InitTest {
 
+    private static final String CONFIG_FILE = "org/apache/xml/security/resource/config.xml";
+
     @BeforeAll
     public static void setup() {
-        System.setProperty("org.apache.xml.security.resource.config",
-                "org/apache/xml/security/resource/config.xml");
+        System.setProperty("org.apache.xml.security.resource.config", CONFIG_FILE);
     }
 
     @AfterAll
@@ -55,4 +73,93 @@
         assertEquals("MessageDigest", JCEMapper.getAlgorithmClassFromURI(MessageDigestAlgorithm.ALGO_ID_DIGEST_SHA256));
     }
 
+    @org.junit.jupiter.api.Test
+    public void checkConfigFileImplementationsExist() throws Exception {
+        try (InputStream is = ClassLoaderUtils.getResourceAsStream(CONFIG_FILE, InitTest.class)) {
+            /* 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;
+                }
+            }
+
+            for (Node el = config.getFirstChild(); el != null; el = el.getNextSibling()) {
+                if (Node.ELEMENT_NODE != el.getNodeType()) {
+                    continue;
+                }
+                String tag = el.getLocalName();
+
+                if ("CanonicalizationMethods".equals(tag)) {
+                    Element[] list =
+                            XMLUtils.selectNodes(el.getFirstChild(), Init.CONF_NS, "CanonicalizationMethod");
+
+                    for (Element element : list) {
+                        String javaClass =
+                                element.getAttributeNS(null, "JAVACLASS");
+
+                        Class<? extends CanonicalizerSpi> clazz =
+                                (Class<? extends CanonicalizerSpi>)
+                                        ClassLoaderUtils.loadClass(javaClass, Canonicalizer.class);
+                        assertNotNull(clazz);
+                    }
+                }
+
+                if ("TransformAlgorithms".equals(tag)) {
+                    Element[] tranElem =
+                            XMLUtils.selectNodes(el.getFirstChild(), Init.CONF_NS, "TransformAlgorithm");
+
+                    for (Element element : tranElem) {
+                        String javaClass =
+                                element.getAttributeNS(null, "JAVACLASS");
+
+                        Class<? extends TransformSpi> transformSpiClass =
+                                (Class<? extends TransformSpi>)
+                                        ClassLoaderUtils.loadClass(javaClass, Transform.class);
+                        assertNotNull(transformSpiClass);
+                    }
+                }
+
+                if ("SignatureAlgorithms".equals(tag)) {
+                    Element[] sigElems =
+                            XMLUtils.selectNodes(el.getFirstChild(), Init.CONF_NS, "SignatureAlgorithm");
+
+                    for (Element sigElem : sigElems) {
+                        String javaClass =
+                                sigElem.getAttributeNS(null, "JAVACLASS");
+
+                        Class<? extends SignatureAlgorithmSpi> clazz =
+                                (Class<? extends SignatureAlgorithmSpi>)
+                                        ClassLoaderUtils.loadClass(javaClass, SignatureAlgorithm.class);
+                        assertNotNull(clazz);
+                    }
+                }
+
+                if ("ResourceResolvers".equals(tag)) {
+                    Element[] resolverElem =
+                            XMLUtils.selectNodes(el.getFirstChild(), Init.CONF_NS, "Resolver");
+                    for (Element element : resolverElem) {
+                        String javaClass =
+                                element.getAttributeNS(null, "JAVACLASS");
+                        ResourceResolverSpi resourceResolverSpi =
+                                (ResourceResolverSpi)ClassLoaderUtils.loadClass(javaClass, ResourceResolver.class).newInstance();
+                        assertNotNull(resourceResolverSpi);
+                    }
+                }
+
+                if ("KeyResolver".equals(tag)){
+                    Element[] resolverElem =
+                            XMLUtils.selectNodes(el.getFirstChild(), Init.CONF_NS, "Resolver");
+                    for (Element element : resolverElem) {
+                        String javaClass =
+                                element.getAttributeNS(null, "JAVACLASS");
+                        KeyResolverSpi keyResolverSpi =
+                                (KeyResolverSpi) ClassLoaderUtils.loadClass(javaClass, KeyResolver.class).newInstance();
+                        assertNotNull(keyResolverSpi);
+                    }
+                }
+            }
+        }
+    }
 }