java.lang.Object javax.xml.crypto.dsig.TransformService
转换算法和规范算法的服务提供者接口。
每个 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
,就可以使用它来处理 Transform
或 CanonicalizationMethod
对象。如果 Transform
或 CanonicalizationMethod
以 XML 形式存在(例如,在验证现有的 XMLSignature
时),则必须先调用 init(XMLStructure, XMLCryptoContext)
方法来初始化该转换并提供文档上下文(即使没有参数)。此外,如果从头创建 Transform
或 CanonicalizationMethod
,则将调用 init(TransformParameterSpec)
方法来初始化带参数的转换,并调用 marshalParams
方法将参数编组到 XML 且提供带文档上下文的转换。最后,调用 transform
方法来执行转换。
并发访问
可保证此类的静态方法是线程安全的。多个线程可以并发调用此类中所定义的静态方法,而不会产生不良效果。
但是,对于此类所定义的非静态方法并非如此。除非具体的提供者另行指定,否则需要并发访问单个 TransformService
实例的多个线程应该在它们之间实现同步并提供所需的锁定。对于每个线程都操作一个不同 TransformService
实例的多个线程而言,无需实现同步。
字段摘要 |
---|
从接口 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 |
构造方法详细信息 |
---|
protected TransformService()
方法详细信息 |
---|
public static TransformService getInstance(String algorithm, String mechanismType) throws NoSuchAlgorithmException
TransformService
(比如:
Transform.XPATH2
)和机制类型(比如:DOM)。
此方法使用标准的 JCA 提供者查找机制来查找并实例化所需算法的 TransformService
实现和 MechanismType
服务属性。它将从首选的 Provider
开始,遍历已注册的安全 Provider
列表。返回取自第一个支持指定算法和机制类型的 Provider
的新 TransformService
对象。
注意,已注册提供者的列表可以通过 Security.getProviders()
方法获得。
algorithm
- 算法的 URI
mechanismType
- XML 处理机制和表示形式的类型
TransformService
NullPointerException
- 如果
algorithm
或
mechanismType
为
null
NoSuchAlgorithmException
- 如果没有
Provider
支持指定算法和机制类型的
TransformService
实现
Provider
public static TransformService getInstance(String algorithm, String mechanismType, Provider provider) throws NoSuchAlgorithmException
Transform.XPATH2
)和机制类型(比如:DOM)的
TransformService
,由指定提供者提供。注意,指定的
Provider
对象不必已经在提供者列表中注册。
algorithm
- 算法的 URI
mechanismType
- XML 处理机制和表示形式的类型
provider
-
Provider
对象
TransformService
NullPointerException
- 如果
provider
、
algorithm
或
mechanismType
为
null
NoSuchAlgorithmException
- 如果不能从指定的
Provider
对象得到指定算法和机制类型的
TransformService
实现
Provider
public static TransformService getInstance(String algorithm, String mechanismType, String provider) throws NoSuchAlgorithmException, NoSuchProviderException
Transform.XPATH2
)和机制类型(比如:DOM)的
TransformService
,由指定提供者提供。指定的提供者必须是已在安全提供者列表中注册的。
注意,已注册提供者的列表可以通过 Security.getProviders()
方法获得。
algorithm
- 算法的 URI
mechanismType
- XML 处理机制和表示形式的类型
provider
- 提供者的字符串名称
TransformService
NoSuchProviderException
- 如果指定的提供者没有在安全提供者列表中注册
NullPointerException
- 如果
provider
、
mechanismType
或
algorithm
为
null
NoSuchAlgorithmException
- 如果不能从指定的提供者得到指定算法和机制类型的
TransformService
实现
Provider
public final String getMechanismType()
TransformService
支持的机制类型。
public final String getAlgorithm()
TransformService
支持的算法 URI。
AlgorithmMethod
中的
getAlgorithm
public final Provider getProvider()
TransformService
的提供者。
public abstract void init(TransformParameterSpec params) throws InvalidAlgorithmParameterException
TransformService
。
如果参数以 XML 形式存在,则应该使用 init(XMLStructure, XMLCryptoContext)
方法初始化 TransformService
。
params
- 算法参数(如果该参数不是必需的或是可选的,则为
null
)
InvalidAlgorithmParameterException
- 如果指定参数对于此算法无效
public abstract void marshalParams(XMLStructure parent, XMLCryptoContext context) throws MarshalException
parent
- 特定于机制的结构,包含应追加到已编组参数中的父节点
context
- 包含其他上下文的
XMLCryptoContext
(如果不适用,则该参数为
null
)
ClassCastException
- 如果
parent
类型或
context
类型与此
TransformService
不兼容
NullPointerException
- 如果
parent
为
null
MarshalException
- 如果无法对参数进行编组
public abstract void init(XMLStructure parent, XMLCryptoContext context) throws InvalidAlgorithmParameterException
TransformService
。
parent
- 包含父结构的特定于机制的结构
context
- 包含其他上下文的
XMLCryptoContext
(如果不适用,则该参数为
null
)
ClassCastException
- 如果
parent
类型或
context
类型与此
TransformService
不兼容
NullPointerException
- 如果
parent
为
null
InvalidAlgorithmParameterException
- 如果指定参数对于此算法无效