javax.xml.crypto.dsig

接口
异常
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");

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

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

一旦创建了 TransformService,就可以使用它来处理 TransformCanonicalizationMethod 对象。如果 TransformCanonicalizationMethod 以 XML 形式存在(例如,在验证现有的 XMLSignature 时),则必须先调用 init(XMLStructure, XMLCryptoContext) 方法来初始化该转换并提供文档上下文(即使没有参数)。此外,如果从头创建 TransformCanonicalizationMethod,则将调用 init(TransformParameterSpec) 方法来初始化带参数的转换,并调用 marshalParams 方法将参数编组到 XML 且提供带文档上下文的转换。最后,调用 transform 方法来执行转换。

并发访问

可保证此类的静态方法是线程安全的。多个线程可以并发调用此类中所定义的静态方法,而不会产生不良效果。

但是,对于此类所定义的非静态方法并非如此。除非具体的提供者另行指定,否则需要并发访问单个 TransformService 实例的多个线程应该在它们之间实现同步并提供所需的锁定。对于每个线程都操作一个不同 TransformService 实例的多个线程而言,无需实现同步。

从以下版本开始:
1.6

字段摘要
 
从接口 javax.xml.crypto.dsig.Transform 继承的字段
BASE64, ENVELOPED, XPATH, XPATH2, XSLT
 
构造方法摘要
protected TransformService()
          默认的构造方法,由子类调用。
 
方法摘要
 String getAlgorithm()
          返回此 TransformService 支持的算法 URI。
static TransformService getInstance(String algorithm, String mechanismType)
          返回支持指定算法 URI 的 TransformService(比如:Transform.XPATH2)和机制类型(比如:DOM)。
static TransformService getInstance(String algorithm, String mechanismType, Provider provider)
          返回支持指定算法 URI(比如:Transform.XPATH2)和机制类型(比如:DOM)的 TransformService,由指定提供者提供。
static TransformService getInstance(String algorithm, String mechanismType, String provider)
          返回支持指定算法 URI(比如:Transform.XPATH2)和机制类型(比如:DOM)的 TransformService,由指定提供者提供。
 String getMechanismType()
          返回此 TransformService 支持的机制类型。
 Provider getProvider()
          返回此 TransformService 的提供者。
abstract  void init(TransformParameterSpec params)
          使用指定的参数初始化此 TransformService
abstract  void init(XMLStructure parent, XMLCryptoContext context)
          使用指定的参数和文档上下文初始化此 TransformService
abstract  void marshalParams(XMLStructure parent, XMLCryptoContext context)
          对特定于算法的参数进行编组。
 
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
从接口 javax.xml.crypto.dsig.Transform 继承的方法
getParameterSpec, transform, transform
 
从接口 javax.xml.crypto.XMLStructure 继承的方法
isFeatureSupported
 

构造方法详细信息

TransformService

protected TransformService()
默认的构造方法,由子类调用。

方法详细信息

getInstance

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

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

注意,已注册提供者的列表可以通过 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
返回支持指定算法 URI(比如: Transform.XPATH2)和机制类型(比如:DOM)的 TransformService,由指定提供者提供。注意,指定的 Provider 对象不必已经在提供者列表中注册。

参数:
algorithm - 算法的 URI
mechanismType - XML 处理机制和表示形式的类型
provider - Provider 对象
返回:
新的 TransformService
抛出:
NullPointerException - 如果 provideralgorithmmechanismTypenull
NoSuchAlgorithmException - 如果不能从指定的 Provider 对象得到指定算法和机制类型的 TransformService 实现
另请参见:
Provider

getInstance

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

注意,已注册提供者的列表可以通过 Security.getProviders() 方法获得。

参数:
algorithm - 算法的 URI
mechanismType - XML 处理机制和表示形式的类型
provider - 提供者的字符串名称
返回:
新的 TransformService
抛出:
NoSuchProviderException - 如果指定的提供者没有在安全提供者列表中注册
NullPointerException - 如果 providermechanismTypealgorithmnull
NoSuchAlgorithmException - 如果不能从指定的提供者得到指定算法和机制类型的 TransformService 实现
另请参见:
Provider

getMechanismType

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

返回:
机制类型

getAlgorithm

public final String getAlgorithm()
返回此 TransformService 支持的算法 URI。

指定者:
接口 AlgorithmMethod 中的 getAlgorithm
返回:
算法 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 - 如果 parent 类型或 context 类型与此 TransformService 不兼容
NullPointerException - 如果 parentnull
MarshalException - 如果无法对参数进行编组

init

public abstract void init(XMLStructure parent,
                          XMLCryptoContext context)
                   throws InvalidAlgorithmParameterException
使用指定的参数和文档上下文初始化此 TransformService

参数:
parent - 包含父结构的特定于机制的结构
context - 包含其他上下文的 XMLCryptoContext (如果不适用,则该参数为 null
抛出:
ClassCastException - 如果 parent 类型或 context 类型与此 TransformService 不兼容
NullPointerException - 如果 parentnull
InvalidAlgorithmParameterException - 如果指定参数对于此算法无效