src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/XMLDSigRI.java

Print this page
7191662: JCE providers should be located via ServiceLoader

*** 26,36 **** * (C) Copyright IBM Corp. 2003 All Rights Reserved. * * =========================================================================== */ /* ! * Copyright (c) 2005, 2014 Oracle and/or its affiliates. All rights reserved. */ /* * $Id: XMLDSigRI.java 1400021 2012-10-19 10:16:04Z coheigea $ */ package org.jcp.xml.dsig.internal.dom; --- 26,36 ---- * (C) Copyright IBM Corp. 2003 All Rights Reserved. * * =========================================================================== */ /* ! * Copyright (c) 2005, 2015 Oracle and/or its affiliates. All rights reserved. */ /* * $Id: XMLDSigRI.java 1400021 2012-10-19 10:16:04Z coheigea $ */ package org.jcp.xml.dsig.internal.dom;
*** 57,162 **** private static final String INFO = "XMLDSig " + "(DOM XMLSignatureFactory; DOM KeyInfoFactory; " + "C14N 1.0, C14N 1.1, Exclusive C14N, Base64, Enveloped, XPath, " + "XPath2, XSLT TransformServices)"; public XMLDSigRI() { /* We are the XMLDSig provider */ super("XMLDSig", 1.9d, INFO); ! final Map<Object, Object> map = new HashMap<Object, Object>(); ! map.put("XMLSignatureFactory.DOM", ! "org.jcp.xml.dsig.internal.dom.DOMXMLSignatureFactory"); ! map.put("KeyInfoFactory.DOM", ! "org.jcp.xml.dsig.internal.dom.DOMKeyInfoFactory"); // Inclusive C14N ! map.put("TransformService." + CanonicalizationMethod.INCLUSIVE, ! "org.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.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.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.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.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.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.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.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.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.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.jcp.xml.dsig.internal.dom.DOMXSLTTransform"); ! map.put("Alg.Alias.TransformService.XSLT", Transform.XSLT); ! map.put("TransformService." + Transform.XSLT + " MechanismType", "DOM"); ! ! AccessController.doPrivileged(new PrivilegedAction<Void>() { ! public Void run() { ! putAll(map); return null; } }); } } --- 57,216 ---- private static final String INFO = "XMLDSig " + "(DOM XMLSignatureFactory; DOM KeyInfoFactory; " + "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 XMLDSig provider */ super("XMLDSig", 1.9d, INFO); ! 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; } }); } }