Module  java.xml.crypto
软件包  javax.xml.crypto.dsig

Class TransformService

  • All Implemented Interfaces:
    AlgorithmMethodTransformXMLStructure


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

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

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

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

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

    一旦创建了一个TransformService ,它可以用于处理TransformCanonicalizationMethod对象。 如果TransformCanonicalizationMethod以XML格式存在(例如,当验证现有的XMLSignature )时,必须首先调用init(XMLStructure, XMLCryptoContext)方法来初始化转换并提供文档上下文(即使没有参数)。 或者,如果从零开始创建TransformCanonicalizationMethod ,则调用init(TransformParameterSpec)方法以使用参数初始化变换,并调用marshalParams方法将参数编组为XML并提供带文档上下文的转换。 最后,调用transform方法进行转换。

    并发访问

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

    但是,对于此类定义的非静态方法,这不是真的。 除非特定提供者另有说明,否则需要同时访问单个TransformService实例的线程应在TransformService同步并提供必要的锁定。 多个线程每个操作不同的TransformService实例不需要同步。

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

      • TransformService

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

      • getInstance

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

        此方法使用标准的JCA提供查找机制来查找并实例化TransformService实现期望的算法和MechanismType服务属性。 它通过注册安全性列表Provider s,从最优选的Provider 从第一个Provider TransformService对象返回支持指定的算法和机制类型。

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

        Implementation Note:
        JDK参考实现另外使用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支持指定算法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 ,它支持由指定的提供者提供的指定的算法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不兼容
        NullPointerException - 如果 parentnull
        MarshalException - 如果参数无法编组