类 TransformService

java.lang.Object
javax.xml.crypto.dsig.TransformService
所有已实现的接口:
AlgorithmMethod , Transform , XMLStructure

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

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");
 
TransformService 支持 DOM 机制类型的实现必须遵守 DOM 机制要求 中定义的 DOM 互操作性要求。有关标准算法 URI 和机制类型的列表,请参阅 Java 安全标准算法名称规范 中的 TransformService 部分。

创建 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
      返回支持指定算法 URI(例如:Transform.XPATH2 )和机制类型(例如:DOM)的 TransformService

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

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

      实现注意事项:
      JDK 参考实现还使用 jdk.security.provider.preferred Security 属性来确定指定算法的首选提供程序顺序。这可能与 Security.getProviders() 返回的提供商顺序不同。
      参数:
      algorithm - 算法的 URI。有关标准变换算法的列表,请参阅 Java 安全标准算法名称规范 中的 TransformService 部分。
      mechanismType - XML 处理机制和表示的类型。有关标准机制类型的列表,请参阅 Java 安全标准算法名称规范 中的 TransformService 部分。
      返回:
      一个新的TransformService
      抛出:
      NullPointerException - 如果 algorithmmechanismTypenull
      NoSuchAlgorithmException - 如果没有 Provider 支持指定算法和机制类型的 TransformService 实现
      参见:
    • getInstance

      public static TransformService  getInstance(String  algorithm, String  mechanismType, Provider  provider) throws NoSuchAlgorithmException
      返回一个 TransformService,它支持由指定提供者提供的指定算法 URI(例如:Transform.XPATH2 )和机制类型(例如:DOM)。请注意,指定的 Provider 对象不必在提供者列表中注册。
      参数:
      algorithm - 算法的 URI。有关标准变换算法的列表,请参阅 Java 安全标准算法名称规范 中的 TransformService 部分。
      mechanismType - XML 处理机制和表示的类型。有关标准机制类型的列表,请参阅 Java 安全标准算法名称规范 中的 TransformService 部分。
      provider - Provider 对象
      返回:
      一个新的TransformService
      抛出:
      NullPointerException - 如果 provideralgorithmmechanismTypenull
      NoSuchAlgorithmException - 如果无法从指定的 Provider 对象获得指定算法和机制类型的 TransformService 实现
      参见:
    • getInstance

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

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

      参数:
      algorithm - 算法的 URI。有关标准变换算法的列表,请参阅 Java 安全标准算法名称规范 中的 TransformService 部分。
      mechanismType - XML 处理机制和表示的类型。有关标准机制类型的列表,请参阅 Java 安全标准算法名称规范 中的 TransformService 部分。
      provider - 提供者的字符串名称
      返回:
      一个新的TransformService
      抛出:
      NoSuchProviderException - 如果指定的提供者没有在安全提供者列表中注册
      NullPointerException - 如果 providermechanismTypealgorithmnull
      NoSuchAlgorithmException - 如果指定提供者无法提供指定算法和机制类型的 TransformService 实现
      参见:
    • getMechanismType

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

      public final String  getAlgorithm()
      返回此 TransformService 支持的算法的 URI。
      指定者:
      getAlgorithm 在接口 AlgorithmMethod
      返回:
      算法 URI
    • getProvider

      public final Provider  getProvider()
      返回此 TransformService 的提供者。
      返回:
      提供者
    • init

      public abstract void init(TransformParameterSpec  params) throws InvalidAlgorithmParameterException
      使用指定的参数初始化此 TransformService

      如果参数以 XML 形式存在,则应使用 init(XMLStructure, XMLCryptoContext) 方法初始化 TransformService

      参数:
      params - 算法参数(如果不需要或可选,则可以是 null
      抛出:
      InvalidAlgorithmParameterException - 如果指定的参数对该算法无效
    • marshalParams

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

      public abstract void init(XMLStructure  parent, XMLCryptoContext  context) throws InvalidAlgorithmParameterException
      使用指定的参数和文档上下文初始化此 TransformService
      参数:
      parent - 包含父结构的机制特定结构
      context - 包含额外上下文的 XMLCryptoContext(如果不适用可能是 null
      抛出:
      ClassCastException - 如果 parentcontext 的类型与此 TransformService 不兼容
      NullPointerException - 如果 parentnull
      InvalidAlgorithmParameterException - 如果指定的参数对该算法无效