You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@santuario.apache.org by mu...@apache.org on 2018/06/15 17:28:55 UTC

svn commit: r1833616 - /santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/XMLDSigRI.java

Author: mullan
Date: Fri Jun 15 17:28:55 2018
New Revision: 1833616

URL: http://svn.apache.org/viewvc?rev=1833616&view=rev
Log:
Use Provider.Service to register and load implementations.

Modified:
    santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/XMLDSigRI.java

Modified: santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/XMLDSigRI.java
URL: http://svn.apache.org/viewvc/santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/XMLDSigRI.java?rev=1833616&r1=1833615&r2=1833616&view=diff
==============================================================================
--- santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/XMLDSigRI.java (original)
+++ santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/XMLDSigRI.java Fri Jun 15 17:28:55 2018
@@ -54,100 +54,158 @@ public final class XMLDSigRI extends Pro
         "C14N 1.0, C14N 1.1, Exclusive C14N, Base64, Enveloped, XPath, " +
         "XPath2, XSLT TransformServices)";
 
+    private static final class ProviderService extends Provider.Service {
+
+        ProviderService(Provider p, String type, String algo, String cn) {
+            super(p, type, algo, cn, null, null);
+        }
+
+        ProviderService(Provider p, String type, String algo, String cn,
+            String[] aliases) {
+            super(p, type, algo, cn,
+                (aliases == null? null : Arrays.asList(aliases)), null);
+        }
+
+        ProviderService(Provider p, String type, String algo, String cn,
+            String[] aliases, HashMap<String, String> attrs) {
+            super(p, type, algo, cn,
+                  (aliases == null? null : Arrays.asList(aliases)), attrs);
+        }
+
+        @Override
+        public Object newInstance(Object ctrParamObj)
+            throws NoSuchAlgorithmException {
+            String type = getType();
+            if (ctrParamObj != null) {
+                throw new InvalidParameterException
+                    ("constructorParameter not used with " + type + " engines");
+            }
+
+            String algo = getAlgorithm();
+            try {
+                if (type.equals("XMLSignatureFactory")) {
+                    if (algo.equals("DOM")) {
+                        return new DOMXMLSignatureFactory();
+                    }
+                } else if (type.equals("KeyInfoFactory")) {
+                    if (algo.equals("DOM")) {
+                        return new DOMKeyInfoFactory();
+                    }
+                } else if (type.equals("TransformService")) {
+                    if (algo.equals(CanonicalizationMethod.INCLUSIVE) ||
+                        algo.equals(CanonicalizationMethod.INCLUSIVE_WITH_COMMENTS)) {
+                        return new DOMCanonicalXMLC14NMethod();
+                    } else if (algo.equals("http://www.w3.org/2006/12/xml-c14n11") ||
+                        algo.equals("http://www.w3.org/2006/12/xml-c14n11#WithComments")) {
+                        return new DOMCanonicalXMLC14N11Method();
+                    } else if (algo.equals(CanonicalizationMethod.EXCLUSIVE) ||
+                        algo.equals(CanonicalizationMethod.EXCLUSIVE_WITH_COMMENTS)) {
+                        return new DOMExcC14NMethod();
+                    } else if (algo.equals(Transform.BASE64)) {
+                        return new DOMBase64Transform();
+                    } else if (algo.equals(Transform.ENVELOPED)) {
+                        return new DOMEnvelopedTransform();
+                    } else if (algo.equals(Transform.XPATH2)) {
+                        return new DOMXPathFilter2Transform();
+                    } else if (algo.equals(Transform.XPATH)) {
+                        return new DOMXPathTransform();
+                    } else if (algo.equals(Transform.XSLT)) {
+                        return new DOMXSLTTransform();
+                    }
+                }
+            } catch (Exception ex) {
+                throw new NoSuchAlgorithmException("Error constructing " +
+                    type + " for " + algo + " using XMLDSig", ex);
+            }
+            throw new ProviderException("No impl for " + algo +
+                " " + type);
+        }
+    }
+
     public XMLDSigRI() {
         /* We are the ApacheXMLDSig provider */
         super("ApacheXMLDSig", 2.13, INFO);
 
-        final Map<Object, Object> map = new HashMap<>();
-        map.put("XMLSignatureFactory.DOM",
-                "org.apache.jcp.xml.dsig.internal.dom.DOMXMLSignatureFactory");
-        map.put("KeyInfoFactory.DOM",
-                "org.apache.jcp.xml.dsig.internal.dom.DOMKeyInfoFactory");
-
-
-        // Inclusive C14N
-        map.put("TransformService." + CanonicalizationMethod.INCLUSIVE,
-                "org.apache.jcp.xml.dsig.internal.dom.DOMCanonicalXMLC14NMethod");
-        map.put("Alg.Alias.TransformService.INCLUSIVE",
-                CanonicalizationMethod.INCLUSIVE);
-        map.put("TransformService." + CanonicalizationMethod.INCLUSIVE +
-                " MechanismType", "DOM");
-
-        // InclusiveWithComments C14N
-        map.put("TransformService." +
-                CanonicalizationMethod.INCLUSIVE_WITH_COMMENTS,
-                "org.apache.jcp.xml.dsig.internal.dom.DOMCanonicalXMLC14NMethod");
-        map.put("Alg.Alias.TransformService.INCLUSIVE_WITH_COMMENTS",
-                CanonicalizationMethod.INCLUSIVE_WITH_COMMENTS);
-        map.put("TransformService." +
-                CanonicalizationMethod.INCLUSIVE_WITH_COMMENTS +
-                " MechanismType", "DOM");
-
-        // Inclusive C14N 1.1
-        map.put("TransformService.http://www.w3.org/2006/12/xml-c14n11",
-                "org.apache.jcp.xml.dsig.internal.dom.DOMCanonicalXMLC14N11Method");
-        map.put("TransformService.http://www.w3.org/2006/12/xml-c14n11" +
-                " MechanismType", "DOM");
-
-        // InclusiveWithComments C14N 1.1
-        map.put("TransformService.http://www.w3.org/2006/12/xml-c14n11#WithComments",
-                "org.apache.jcp.xml.dsig.internal.dom.DOMCanonicalXMLC14N11Method");
-        map.put("TransformService.http://www.w3.org/2006/12/xml-c14n11#WithComments" +
-                " MechanismType", "DOM");
-
-        // Exclusive C14N
-        map.put("TransformService." + CanonicalizationMethod.EXCLUSIVE,
-                "org.apache.jcp.xml.dsig.internal.dom.DOMExcC14NMethod");
-        map.put("Alg.Alias.TransformService.EXCLUSIVE",
-                CanonicalizationMethod.EXCLUSIVE);
-        map.put("TransformService." + CanonicalizationMethod.EXCLUSIVE +
-                " MechanismType", "DOM");
-
-        // ExclusiveWithComments C14N
-        map.put("TransformService." +
-                CanonicalizationMethod.EXCLUSIVE_WITH_COMMENTS,
-                "org.apache.jcp.xml.dsig.internal.dom.DOMExcC14NMethod");
-        map.put("Alg.Alias.TransformService.EXCLUSIVE_WITH_COMMENTS",
-                CanonicalizationMethod.EXCLUSIVE_WITH_COMMENTS);
-        map.put("TransformService." +
-                CanonicalizationMethod.EXCLUSIVE_WITH_COMMENTS +
-                " MechanismType", "DOM");
-
-        // Base64 Transform
-        map.put("TransformService." + Transform.BASE64,
-                "org.apache.jcp.xml.dsig.internal.dom.DOMBase64Transform");
-        map.put("Alg.Alias.TransformService.BASE64", Transform.BASE64);
-        map.put("TransformService." + Transform.BASE64 +
-                " MechanismType", "DOM");
-
-        // Enveloped Transform
-        map.put("TransformService." + Transform.ENVELOPED,
-                "org.apache.jcp.xml.dsig.internal.dom.DOMEnvelopedTransform");
-        map.put("Alg.Alias.TransformService.ENVELOPED", Transform.ENVELOPED);
-        map.put("TransformService." + Transform.ENVELOPED +
-                " MechanismType", "DOM");
-
-        // XPath2 Transform
-        map.put("TransformService." + Transform.XPATH2,
-                "org.apache.jcp.xml.dsig.internal.dom.DOMXPathFilter2Transform");
-        map.put("Alg.Alias.TransformService.XPATH2", Transform.XPATH2);
-        map.put("TransformService." + Transform.XPATH2 +
-                " MechanismType", "DOM");
-
-        // XPath Transform
-        map.put("TransformService." + Transform.XPATH,
-                "org.apache.jcp.xml.dsig.internal.dom.DOMXPathTransform");
-        map.put("Alg.Alias.TransformService.XPATH", Transform.XPATH);
-        map.put("TransformService." + Transform.XPATH +
-                " MechanismType", "DOM");
-
-        // XSLT Transform
-        map.put("TransformService." + Transform.XSLT,
-                "org.apache.jcp.xml.dsig.internal.dom.DOMXSLTTransform");
-        map.put("Alg.Alias.TransformService.XSLT", Transform.XSLT);
-        map.put("TransformService." + Transform.XSLT + " MechanismType", "DOM");
-
-        AccessController.doPrivileged((PrivilegedAction<Void>)
-            () -> {putAll(map); return null;});
+        final Provider p = this;
+        AccessController.doPrivileged(new PrivilegedAction<Void>() {
+            public Void run() {
+                HashMap<String, String> MECH_TYPE = new HashMap<>();
+                MECH_TYPE.put("MechanismType", "DOM");
+
+                putService(new ProviderService(p, "XMLSignatureFactory",
+                    "DOM", "org.jcp.xml.dsig.internal.dom.DOMXMLSignatureFactory"));
+
+                putService(new ProviderService(p, "KeyInfoFactory",
+                    "DOM", "org.jcp.xml.dsig.internal.dom.DOMKeyInfoFactory"));
+
+
+                // Inclusive C14N
+                putService(new ProviderService(p, "TransformService",
+                    CanonicalizationMethod.INCLUSIVE,
+                    "org.jcp.xml.dsig.internal.dom.DOMCanonicalXMLC14NMethod",
+                    new String[] {"INCLUSIVE"}, MECH_TYPE));
+
+                // InclusiveWithComments C14N
+                putService(new ProviderService(p, "TransformService",
+                    CanonicalizationMethod.INCLUSIVE_WITH_COMMENTS,
+                    "org.jcp.xml.dsig.internal.dom.DOMCanonicalXMLC14NMethod",
+                    new String[] {"INCLUSIVE_WITH_COMMENTS"}, MECH_TYPE));
+
+                // Inclusive C14N 1.1
+                putService(new ProviderService(p, "TransformService",
+                    "http://www.w3.org/2006/12/xml-c14n11",
+                    "org.jcp.xml.dsig.internal.dom.DOMCanonicalXMLC14N11Method",
+                    null, MECH_TYPE));
+
+                // InclusiveWithComments C14N 1.1
+                putService(new ProviderService(p, "TransformService",
+                    "http://www.w3.org/2006/12/xml-c14n11#WithComments",
+                    "org.jcp.xml.dsig.internal.dom.DOMCanonicalXMLC14N11Method",
+                    null, MECH_TYPE));
+
+                // Exclusive C14N
+                putService(new ProviderService(p, "TransformService",
+                    CanonicalizationMethod.EXCLUSIVE,
+                    "org.jcp.xml.dsig.internal.dom.DOMExcC14NMethod",
+                    new String[] {"EXCLUSIVE"}, MECH_TYPE));
+
+                // ExclusiveWithComments C14N
+                putService(new ProviderService(p, "TransformService",
+                    CanonicalizationMethod.EXCLUSIVE_WITH_COMMENTS,
+                    "org.jcp.xml.dsig.internal.dom.DOMExcC14NMethod",
+                    new String[] {"EXCLUSIVE_WITH_COMMENTS"}, MECH_TYPE));
+
+                // Base64 Transform
+                putService(new ProviderService(p, "TransformService",
+                    Transform.BASE64,
+                    "org.jcp.xml.dsig.internal.dom.DOMBase64Transform",
+                    new String[] {"BASE64"}, MECH_TYPE));
+
+                // Enveloped Transform
+                putService(new ProviderService(p, "TransformService",
+                    Transform.ENVELOPED,
+                    "org.jcp.xml.dsig.internal.dom.DOMEnvelopedTransform",
+                    new String[] {"ENVELOPED"}, MECH_TYPE));
+
+                // XPath2 Transform
+                putService(new ProviderService(p, "TransformService",
+                    Transform.XPATH2,
+                    "org.jcp.xml.dsig.internal.dom.DOMXPathFilter2Transform",
+                    new String[] {"XPATH2"}, MECH_TYPE));
+
+                // XPath Transform
+                putService(new ProviderService(p, "TransformService",
+                    Transform.XPATH,
+                    "org.jcp.xml.dsig.internal.dom.DOMXPathTransform",
+                    new String[] {"XPATH"}, MECH_TYPE));
+
+                // XSLT Transform
+                putService(new ProviderService(p, "TransformService",
+                    Transform.XSLT,
+                    "org.jcp.xml.dsig.internal.dom.DOMXSLTTransform",
+                    new String[] {"XSLT"}, MECH_TYPE));
+                return null;
+            }
+        });
     }
 }