- java.lang.Object
-
- javax.xml.crypto.dsig.TransformService
-
- All Implemented Interfaces:
-
AlgorithmMethod,Transform,XMLStructure
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,它可以用于处理Transform或CanonicalizationMethod对象。 如果Transform或CanonicalizationMethod以XML格式存在(例如,当验证现有的XMLSignature)时,必须首先调用init(XMLStructure, XMLCryptoContext)方法来初始化转换并提供文档上下文(即使没有参数)。 或者,如果从零开始创建Transform或CanonicalizationMethod,则调用init(TransformParameterSpec)方法以使用参数初始化变换,并调用marshalParams方法将参数编组为XML并提供带文档上下文的转换。 最后,调用transform方法进行转换。并发访问
该类的静态方法保证线程安全。 多个线程可以同时调用此类中定义的静态方法,而不会产生不良影响。
但是,对于此类定义的非静态方法,这不是真的。 除非特定提供者另有说明,否则需要同时访问单个
TransformService实例的线程应在TransformService同步并提供必要的锁定。 多个线程每个操作不同的TransformService实例不需要同步。- 从以下版本开始:
- 1.6
-
-
构造方法摘要
构造方法 Modifier Constructor 描述 protectedTransformService()默认构造函数,用于由子类调用。
-
方法摘要
所有方法 静态方法 接口方法 抽象方法 具体的方法 Modifier and Type 方法 描述 StringgetAlgorithm()返回此TransformService支持的算法的URI。static TransformServicegetInstance(String algorithm, String mechanismType)返回一个TransformService支持指定算法URI(例如:Transform.XPATH2)和机制类型(比如:DOM)。static TransformServicegetInstance(String algorithm, String mechanismType, String provider)返回一个TransformService支持指定算法URI(例如:Transform.XPATH2)和机制类型:由指定的提供者提供(例如,DOM)。static TransformServicegetInstance(String algorithm, String mechanismType, Provider provider)返回一个TransformService支持指定算法URI(例如:Transform.XPATH2)和机制类型:由指定的提供者提供(例如,DOM)。StringgetMechanismType()返回此TransformService支持的机制类型。ProvidergetProvider()返回此TransformService的提供者。abstract voidinit(TransformParameterSpec params)使用指定的参数初始化此TransformService。abstract voidinit(XMLStructure parent, XMLCryptoContext context)使用指定的参数和文档上下文初始化此TransformService。abstract voidmarshalParams(XMLStructure parent, XMLCryptoContext context)协调算法特定的参数。-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface javax.xml.crypto.dsig.Transform
getParameterSpec, transform, transform
-
Methods inherited from interface javax.xml.crypto.XMLStructure
isFeatureSupported
-
-
-
-
方法详细信息
-
getInstance
public static TransformService getInstance(String algorithm, String mechanismType) throws NoSuchAlgorithmException
返回一个TransformService支持指定算法URI(例如:Transform.XPATH2)和机制类型(比如:DOM)。此方法使用标准的JCA提供查找机制来查找并实例化
TransformService实现期望的算法和MechanismType服务属性。 它通过注册安全性列表Providers,从最优选的Provider。 从第一个ProviderTransformService对象返回支持指定的算法和机制类型。请注意,注册提供商的列表可以通过
Security.getProviders()方法检索。- Implementation Note:
-
JDK参考实现另外使用
jdk.security.provider.preferredSecurity属性来确定指定算法的首选提供者顺序。 这可能与Security.getProviders()返回的提供商的顺序不同。 - 参数
-
algorithm- 算法的URI -
mechanismType- XML处理机制和表示的类型 - 结果
-
一个新的
TransformService - 异常
-
NullPointerException- 如果algorithm或mechanismType为null -
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-如果provider,algorithm,或mechanismType为null -
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-如果provider,mechanismType,或algorithm为null -
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的提供者。- 结果
- 提供者
-
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- 如果parent是null -
MarshalException- 如果参数无法编组
-
init
public abstract void init(XMLStructure parent, XMLCryptoContext context) throws InvalidAlgorithmParameterException
使用指定的参数和文档上下文初始化此TransformService。- 参数
-
parent- 包含父结构的机制特定结构 -
context- 包含附加上下文的XMLCryptoContext(如果不适用,可能为null) - 异常
-
ClassCastException- 如果parent或context的类型与此TransformService不兼容 -
NullPointerException- 如果parent是null -
InvalidAlgorithmParameterException- if the specified parameters are invalid for this algorithm
-
-