模块  java.xml.crypto
软件包  javax.xml.crypto.dsig

Class TransformService

  • 实现的所有接口
    AlgorithmMethodTransformXMLStructure

    public abstract class TransformService
    extends Object
    implements Transform
    用于转换和规范化算法的服务提供者接口。

    TransformService每个实例TransformService支持特定的转换或规范化算法和XML机制类型。 要创建TransformService ,请调用其中一个静态getInstance方法,传入所需的算法URI和XML机制类型,例如:

    TransformService ts = TransformService.getInstance(Transform.XPATH2, "DOM");

    使用Provider机制注册和加载TransformService实现。 每个TransformService服务提供程序实现应包含MechanismType服务属性,该属性标识它支持的XML机制类型。 如果未指定该属性,则假定为“DOM”。 例如,支持XPath Filter 2 Transform和DOM机制的服务提供程序将在Provider子类中指定为:

      put("TransformService." + Transform.XPATH2,
             "org.example.XPath2TransformService");
         put("TransformService." + Transform.XPATH2 + " MechanismType", "DOM"); 
    TransformService支持DOM机制类型的实现必须遵守API概述的DOM Mechanism Requirements部分中定义的DOM互操作性要求。 有关标准机制类型的列表,请参阅API概述的Service Providers部分。

    创建TransformService ,可以使用它处理TransformCanonicalizationMethod对象。 如果TransformCanonicalizationMethod以XML格式存在(例如,在验证现有XMLSignature ),则必须首先调用init(XMLStructure, XMLCryptoContext)方法以初始化转换并提供文档上下文(即使没有参数)。 或者,如果从头开始创建TransformCanonicalizationMethod ,则调用init(TransformParameterSpec)方法以使用参数初始化转换,并调用marshalParams方法将参数送到XML并使用文档上下文提供转换。 最后,调用transform方法来执行转换。

    并发访问

    这个类的静态方法保证是线程安全的。 多个线程可以同时调用此类中定义的静态方法,而不会产生任何不良影响。

    但是,对于此类定义的非静态方法,情况并非如此。 除非特定提供程序另有说明,否则需要同时访问单个TransformService实例的线程应在它们之间进行同步并提供必要的锁定。 每个操作不同TransformService实例的多个线程无需同步。

    从以下版本开始:
    1.6
    • 构造方法详细信息

      • TransformService

        protected TransformService()
        默认构造函数,用于子类调用。
    • 方法详细信息

      • getInstance

        public static TransformService getInstance​(String algorithm,
                                                   String mechanismType)
                                            throws NoSuchAlgorithmException
        返回一个TransformService支持指定算法URI(例如: Transform.XPATH2 )和机制类型(比如:DOM)。

        此方法使用标准JCA提供程序查找机制来定位和实例化所需算法和MechanismType服务属性的TransformService实现。 它遍历注册安全性列表Provider s,从最喜欢的Provider TransformService第一个Provider中支持指定算法和机制类型的新TransformService对象。

        请注意,可以通过Security.getProviders()方法检索已注册提供商的列表。

        Implementation Note:
        JDK Reference Implementation另外使用jdk.security.provider.preferred Security属性来确定指定算法的首选提供程序顺序。 这可能与Security.getProviders()返回的提供商的顺序不同。
        参数
        algorithm - 算法的URI
        mechanismType - XML处理机制和表示的类型
        结果
        一个新的 TransformService
        异常
        NullPointerException - 如果 algorithmmechanismTypenull
        NoSuchAlgorithmException - 如果没有 Provider支持指定算法和机制类型的 TransformService实现
        另请参见:
        Provider
      • getInstance

        public static TransformService getInstance​(String algorithm,
                                                   String mechanismType,
                                                   Provider provider)
                                            throws NoSuchAlgorithmException
        返回TransformService ,它支持指定的TransformService程序提供的指定算法URI(例如: Transform.XPATH2 )和机制类型(例如:DOM)。 请注意,指定的Provider对象不必在提供程序列表中注册。
        参数
        algorithm - 算法的URI
        mechanismType - XML处理机制和表示的类型
        provider - Provider对象
        结果
        一个新的 TransformService
        异常
        NullPointerException -如果 provideralgorithm ,或 mechanismTypenull
        NoSuchAlgorithmException - 如果指定的算法和机制类型的 TransformService实现不可用于指定的 Provider对象
        另请参见:
        Provider
      • getInstance

        public static TransformService getInstance​(String algorithm,
                                                   String mechanismType,
                                                   String provider)
                                            throws NoSuchAlgorithmException,
                                                   NoSuchProviderException
        返回TransformService ,它支持指定TransformService程序提供的指定算法URI(例如: Transform.XPATH2 )和机制类型(例如:DOM)。 必须在安全提供程序列表中注册指定的提供程序。

        请注意,可以通过Security.getProviders()方法检索已注册提供商的列表。

        参数
        algorithm - 算法的URI
        mechanismType - XML处理机制和表示的类型
        provider - 提供程序的字符串名称
        结果
        一个新的 TransformService
        异常
        NoSuchProviderException - 如果指定的提供程序未在安全提供程序列表中注册
        NullPointerException -如果 providermechanismType ,或 algorithmnull
        NoSuchAlgorithmException - 如果指定的提供程序无法获得指定算法和机制类型的 TransformService实现
        另请参见:
        Provider
      • getMechanismType

        public final String getMechanismType()
        返回此 TransformService支持的机制类型。
        结果
        机制类型
      • getAlgorithm

        public final String getAlgorithm()
        返回此 TransformService支持的算法的URI。
        Specified by:
        getAlgorithm在界面 AlgorithmMethod
        结果
        算法URI
      • getProvider

        public final Provider getProvider()
        返回此 TransformService的提供者。
        结果
        提供者
      • marshalParams

        public abstract void marshalParams​(XMLStructure parent,
                                           XMLCryptoContext context)
                                    throws MarshalException
        编组特定于算法的参数。 如果没有要编组的参数,则此方法返回而不抛出异常。
        参数
        parent - 特定于机制的结构,包含应该附加编组参数的父节点
        context - 包含附加上下文的 XMLCryptoContext (如果不适用,可能是 null
        异常
        ClassCastException - 如果 parentcontext的类型与此 TransformService不兼容 TransformService
        NullPointerException - 如果 parentnull
        MarshalException - 如果参数无法编组