- java.lang.Object
-
- javax.xml.crypto.dsig.keyinfo.KeyInfoFactory
-
public abstract class KeyInfoFactory extends Object
从零开始创建KeyInfo个对象的工厂,或从相应的XML表示中解组KeyInfo对象。KeyInfoFactory每个实例KeyInfoFactory支持特定的XML机制类型。 要创建一个KeyInfoFactory,请调用静态的getInstance方法之一,传递所需的XML机制类型,例如:KeyInfoFactory factory = KeyInfoFactory.getInstance("DOM");该工厂生产的对象将基于DOM,并遵守API概述中的DOM Mechanism Requirements部分定义的DOM互操作性要求。 有关详细信息,请参阅Java Security Standard Algorithm Names文档。
使用
Provider机制注册和加载KeyInfoFactory实现。 例如,支持DOM机制的服务提供商将在Provider子类中指定为:put("KeyInfoFactory.DOM", "org.example.DOMKeyInfoFactory");此外,由该工厂创建的
XMLStructures可能包含特定于KeyInfo状态,并不意图重复使用。实现必须最低限度地支持默认机制类型:DOM。
注意,调用者必须使用相同
KeyInfoFactory实例创建XMLStructure特定的第KeyInfo对象。 如果来自不同提供商的XMLStructures或不同的机制类型一起使用,行为是未定义的。并发访问
该类的静态方法保证线程安全。 多个线程可以同时调用此类中定义的静态方法,而不会产生不良影响。
但是,对于此类定义的非静态方法,这不是真的。 除非特定提供者另有说明,否则需要同时访问单个
KeyInfoFactory实例的线程应在KeyInfoFactory同步并提供必要的锁定。 每个操作不同的KeyInfoFactory实例的多个线程不需要同步。- 从以下版本开始:
- 1.6
-
-
构造方法摘要
构造方法 Modifier Constructor 描述 protectedKeyInfoFactory()默认构造函数,用于由子类调用。
-
方法摘要
所有方法 静态方法 接口方法 抽象方法 具体的方法 Modifier and Type 方法 描述 static KeyInfoFactorygetInstance()返回支持默认XML处理机制和表示类型(“DOM”)的KeyInfoFactory。static KeyInfoFactorygetInstance(String mechanismType)返回支持指定的XML处理机制和表示类型(例如:“DOM”)的KeyInfoFactory。static KeyInfoFactorygetInstance(String mechanismType, String provider)返回一个KeyInfoFactory,它支持由指定提供者提供的请求的XML处理机制和表示类型(例如:“DOM”)。static KeyInfoFactorygetInstance(String mechanismType, Provider provider)返回一个KeyInfoFactory,它支持由指定的提供者提供的请求的XML处理机制和表示类型(例如:“DOM”)。StringgetMechanismType()返回此KeyInfoFactory支持的XML处理机制和表示的类型(例如:“DOM”)ProvidergetProvider()返回此KeyInfoFactory的提供者。abstract URIDereferencergetURIDereferencer()返回对URIDereferencer引用,默认情况下使用它来取消引用RetrievalMethod对象中的URI。abstract booleanisFeatureSupported(String feature)指示是否支持指定的功能。abstract KeyInfonewKeyInfo(List<? extends XMLStructure> content)创建一个KeyInfo其中包含指定的关键信息类型列表。abstract KeyInfonewKeyInfo(List<? extends XMLStructure> content, String id)创建一个KeyInfo其中包含指定的关键信息类型和可选标识列表。abstract KeyNamenewKeyName(String name)从指定的名称创建一个KeyName。abstract KeyValuenewKeyValue(PublicKey key)从指定的公钥中创建一个KeyValue。abstract PGPDatanewPGPData(byte[] keyId)根据指定的PGP公钥标识符创建一个PGPData。abstract PGPDatanewPGPData(byte[] keyId, byte[] keyPacket, List<? extends XMLStructure> other)根据指定的PGP公钥标识符和可选的密钥材料数据包和外部元素列表创建一个PGPData。abstract PGPDatanewPGPData(byte[] keyPacket, List<? extends XMLStructure> other)从指定的PGP密钥材料数据包和外部元素的可选列表中创建一个PGPData。abstract RetrievalMethodnewRetrievalMethod(String uri)从指定的URI创建一个RetrievalMethod。abstract RetrievalMethodnewRetrievalMethod(String uri, String type, List<? extends Transform> transforms)从指定的参数创建一个RetrievalMethod。abstract X509DatanewX509Data(List<?> content)创建一个包含指定的X.509内容列表的X509Data。abstract X509IssuerSerialnewX509IssuerSerial(String issuerName, BigInteger serialNumber)从指定的X.500发行人可分辨名称和序列号创建X509IssuerSerial。abstract KeyInfounmarshalKeyInfo(XMLStructure xmlStructure)从机制特定的XMLStructure(例如:DOMStructure)实例解组新的KeyInfo实例。
-
-
-
方法详细信息
-
getInstance
public static KeyInfoFactory getInstance(String mechanismType)
返回支持指定的XML处理机制和表示类型(例如:“DOM”)的KeyInfoFactory。该方法使用标准的JCA提供程序查找机制来定位和实例化所需机制类型的实现
KeyInfoFactory。 它通过注册安全性列表Providers,从最优选的Provider。 返回支持指定机制的第一个Provider新的KeyInfoFactory对象。请注意,注册提供商的列表可以通过
Security.getProviders()方法检索。- Implementation Note:
-
JDK参考实现另外使用
jdk.security.provider.preferredSecurity属性来确定指定算法的首选提供者顺序。 这可能与由Security.getProviders()返回的提供商的顺序不同。 - 参数
-
mechanismType- XML处理机制和表示的类型。 有关详细信息,请参阅Java Security Standard Algorithm Names文档。 - 结果
-
一个新的
KeyInfoFactory - 异常
-
NullPointerException- 如果mechanismType是null -
NoSuchMechanismException- 如果否Provider支持指定机制的KeyInfoFactory实现 - 另请参见:
-
Provider
-
getInstance
public static KeyInfoFactory getInstance(String mechanismType, Provider provider)
返回一个KeyInfoFactory,它支持由指定的提供者提供的请求的XML处理机制和表示类型(例如:“DOM”)。 请注意,指定的Provider对象不必在提供者列表中注册。- 参数
-
mechanismType- XML处理机制和表示的类型。 有关详细信息,请参阅Java Security Standard Algorithm Names文档。 -
provider-Provider对象 - 结果
-
一个新的
KeyInfoFactory - 异常
-
NullPointerException- 如果mechanismType或provider为null -
NoSuchMechanismException- 如果指定机制的KeyInfoFactory实现从指定的Provider对象不可用 - 另请参见:
-
Provider
-
getInstance
public static KeyInfoFactory getInstance(String mechanismType, String provider) throws NoSuchProviderException
返回一个KeyInfoFactory,它支持由指定提供者提供的请求的XML处理机制和表示类型(例如:“DOM”)。 指定的提供者必须在安全提供程序列表中注册。请注意,可以通过
Security.getProviders()方法检索已注册提供商的列表。- 参数
-
mechanismType- XML处理机制和表示的类型。 有关详细信息,请参阅Java Security Standard Algorithm Names文档。 -
provider- 提供者的字符串名称 - 结果
-
一个新的
KeyInfoFactory - 异常
-
NoSuchProviderException- 如果指定的提供程序未在安全提供程序列表中注册 -
NullPointerException- 如果mechanismType或provider是null -
NoSuchMechanismException- 如果指定机制的KeyInfoFactory实现不能从指定的提供者 - 另请参见:
-
Provider
-
getInstance
public static KeyInfoFactory getInstance()
返回支持默认XML处理机制和表示类型(“DOM”)的KeyInfoFactory。该方法使用标准的JCA提供程序查找机制来定位和实例化默认机制类型的一个
KeyInfoFactory实现。 它通过注册安全性列表Providers,从最优选的Provider。 新KeyInfoFactory从第一对象Provider返回支持DOM机制。请注意,可以通过
Security.getProviders()方法检索已注册提供商的列表。- Implementation Note:
-
JDK参考实现另外使用
jdk.security.provider.preferredSecurity属性来确定指定算法的首选提供者顺序。 这可能与Security.getProviders()返回的提供商的顺序不同。 - 结果
-
一个新的
KeyInfoFactory - 异常
-
NoSuchMechanismException- 如果没有Provider支持DOM机制的KeyInfoFactory实现 - 另请参见:
-
Provider
-
getMechanismType
public final String getMechanismType()
返回此KeyInfoFactory支持的XML处理机制和表示KeyInfoFactory(例如:“DOM”)- 结果
-
该
KeyInfoFactory支持的XML处理机制类型
-
getProvider
public final Provider getProvider()
返回此KeyInfoFactory的提供者。- 结果
-
这个
KeyInfoFactory的提供者
-
newKeyInfo
public abstract KeyInfo newKeyInfo(List<? extends XMLStructure> content)
创建包含指定的关键信息类型列表的KeyInfo。- 参数
-
content- 表示密钥信息类型的一个或多个XMLStructure的列表。 该列表被防御复制以防止后续修改。 - 结果
-
一个
KeyInfo - 异常
-
NullPointerException- 如果content是null -
IllegalArgumentException- 如果content为空 -
ClassCastException- 如果content包含任何不是XMLStructure类型的条目
-
newKeyInfo
public abstract KeyInfo newKeyInfo(List<? extends XMLStructure> content, String id)
创建一个KeyInfo其中包含指定的关键信息类型和可选标识列表。id参数表示XMLID属性的值,可用于从其他XML结构引用KeyInfo。- 参数
-
content- 表示密钥信息类型的一个或多个XMLStructure的列表。 该列表被防御复制以防止后续修改。 -
id- XML的值ID(可能为null) - 结果
-
一个
KeyInfo - 异常
-
NullPointerException- 如果content是null -
IllegalArgumentException- 如果content为空 -
ClassCastException- 如果content包含任何不是XMLStructure类型的条目
-
newKeyName
public abstract KeyName newKeyName(String name)
从指定的名称创建KeyName。- 参数
-
name- 标识密钥的名称 - 结果
-
一个
KeyName - 异常
-
NullPointerException- 如果name是null
-
newKeyValue
public abstract KeyValue newKeyValue(PublicKey key) throws KeyException
从指定的公钥中创建一个KeyValue。- 参数
-
key- 公钥 - 结果
-
一个
KeyValue - 异常
-
KeyException- 如果key的算法未被该KeyInfoFactory识别或支持 -
NullPointerException- 如果key是null
-
newPGPData
public abstract PGPData newPGPData(byte[] keyId)
根据指定的PGP公钥标识符创建一个PGPData。- 参数
-
keyId- RFC 2440第11.2节中定义的PGP公钥标识符。 克隆阵列以防止后续修改。 - 结果
-
一个
PGPData - 异常
-
NullPointerException- 如果keyId是null -
IllegalArgumentException- 如果密钥ID不正确的格式
-
newPGPData
public abstract PGPData newPGPData(byte[] keyId, byte[] keyPacket, List<? extends XMLStructure> other)
从指定的PGP公共密钥标识符和可选的密钥材料数据包和外部元素列表创建一个PGPData。- 参数
-
keyId- RFC 2440第11.2节中定义的PGP公共密钥标识符。 克隆阵列以防止后续修改。 -
keyPacket- RFC 2440第5.5节定义的PGP密钥资料包。 克隆阵列以防止后续修改。 可能是null。 -
other- 表示来自外部命名空间的元素的XMLStructures的列表。 该列表被防御复制以防止后续修改。 可能是null或空。 - 结果
-
一个
PGPData - 异常
-
NullPointerException- 如果keyId是null -
IllegalArgumentException- 如果keyId或keyPacket的格式不正确。 对于keyPacket,检查分组报头的格式,并验证其是否是类型密钥材料的标签。 不检查数据包主体的内容和格式。 -
ClassCastException- 如果other包含任何不是XMLStructure类型的条目
-
newPGPData
public abstract PGPData newPGPData(byte[] keyPacket, List<? extends XMLStructure> other)
从指定的PGP密钥材料数据包和外部元素的可选列表中创建一个PGPData。- 参数
-
keyPacket- RFC 2440第5.5节中定义的PGP密钥资料包。 克隆阵列以防止后续修改。 -
other- 表示来自外部命名空间的元素的XMLStructure的列表。 该列表被防御复制以防止后续修改。 可能是null或空。 - 结果
-
一个
PGPData - 异常
-
NullPointerException- 如果keyPacket是null -
IllegalArgumentException- 如果keyPacket不正确的格式。 对于keyPacket,检查分组报头的格式,并验证其是否是类型密钥材料的标签。 不检查数据包主体的内容和格式。 -
ClassCastException- 如果other包含任何不是XMLStructure类型的条目
-
newRetrievalMethod
public abstract RetrievalMethod newRetrievalMethod(String uri)
从指定的URI创建一个RetrievalMethod。- 参数
-
uri- 标识要检索的KeyInfo信息的URI - 结果
-
一个
RetrievalMethod - 异常
-
NullPointerException- 如果uri是null -
IllegalArgumentException- 如果uri不符合RFC 2396标准
-
newRetrievalMethod
public abstract RetrievalMethod newRetrievalMethod(String uri, String type, List<? extends Transform> transforms)
从指定的参数创建一个RetrievalMethod。- 参数
-
uri- 标识要检索的KeyInfo信息的URI -
type-一个URI标识的类型KeyInfo信息被检索(可以是null) -
transforms-列表Transform秒。 该列表被防御复制以防止后续修改。 可能是null或空。 - 结果
-
一个
RetrievalMethod - 异常
-
NullPointerException- 如果uri是null -
IllegalArgumentException- 如果uri不符合RFC 2396标准 -
ClassCastException- 如果transforms包含任何不是Transform类型的条目
-
newX509Data
public abstract X509Data newX509Data(List<?> content)
创建一个包含指定的X.509内容列表的X509Data。- 参数
-
content- 一个或多个X.509内容类型的列表。 有效的类型是String(主题名称),byte[](受试者密钥ID),X509Certificate,X509CRL,或XMLStructure(X509IssuerSerial从外部命名空间的物体或元件)。 主题名称是RFC 2253字符串格式的可分辨名称。 实现必须支持RFC 2253(CN,L,ST,O,OU,C,STREET,DC和UID)中定义的属性类型关键字。 实施可能支持其他关键字。 该列表被防御复制以防止后续修改。 - 结果
-
一个
X509Data - 异常
-
NullPointerException- 如果content是null -
IllegalArgumentException- 如果content为空,或者主题名称不符合RFC 2253或其中一个属性类型关键字未被识别。 -
ClassCastException- 如果content包含任何不属于上述有效类型的条目
-
newX509IssuerSerial
public abstract X509IssuerSerial newX509IssuerSerial(String issuerName, BigInteger serialNumber)
从指定的X.500发行人识别名称和序列号创建一个X509IssuerSerial。- 参数
-
issuerName- 发行人的RFC 2253字符串格式的可分辨名称。 实现必须支持RFC 2253(CN,L,ST,O,OU,C,STREET,DC和UID)中定义的属性类型关键字。 实施可能支持其他关键字。 -
serialNumber- 序列号 - 结果
-
一个
X509IssuerSerial - 异常
-
NullPointerException- 如果issuerName或serialNumber为null -
IllegalArgumentException- 如果发行者名称不符合RFC 2253或其中一个属性类型关键字未被识别。
-
isFeatureSupported
public abstract boolean isFeatureSupported(String feature)
指示是否支持指定的功能。- 参数
-
feature- 功能名称(作为绝对URI) - 结果
-
true如果指定的功能被支持,否则为false - 异常
-
NullPointerException- 如果feature是null
-
getURIDereferencer
public abstract URIDereferencer getURIDereferencer()
返回对URIDereferencer引用,默认情况下,它用于取消引用RetrievalMethod个对象中的URI。- 结果
-
参考默认的
URIDereferencer
-
unmarshalKeyInfo
public abstract KeyInfo unmarshalKeyInfo(XMLStructure xmlStructure) throws MarshalException
从机制特定的XMLStructure(例如:DOMStructure)实例解组新的KeyInfo实例。- 参数
-
xmlStructure-xmlStructure的机制特定的XML结构 - 结果
-
KeyInfo - 异常
-
NullPointerException- 如果xmlStructure是null -
ClassCastException-如果类型xmlStructure不适合此工厂 -
MarshalException- 如果在解组期间发生不可恢复的异常
-
-