- java.lang.Object
-
- javax.xml.crypto.dsig.keyinfo.KeyInfoFactory
-
public abstract class KeyInfoFactory extends Object
从头开始创建KeyInfo
对象或从相应的XML表示中解组KeyInfo
对象的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");
此外,由此工厂创建的
XMLStructure
可能包含特定于KeyInfo
状态,并且不可重复使用。实现必须最低限度地支持默认机制类型:DOM。
注意,调用者必须使用相同
KeyInfoFactory
实例创建XMLStructure
特定号第KeyInfo
对象。 如果来自不同提供程序或不同机制类型的XMLStructure
一起使用,则行为未定义。并发访问
这个类的静态方法保证是线程安全的。 多个线程可以同时调用此类中定义的静态方法,而不会产生任何不良影响。
但是,对于此类定义的非静态方法,情况并非如此。 除非特定提供程序另有说明,否则需要同时访问单个
KeyInfoFactory
实例的线程应在它们之间进行同步并提供必要的锁定。 每个操作不同KeyInfoFactory
实例的多个线程无需同步。- 从以下版本开始:
- 1.6
-
-
构造方法摘要
构造方法 变量 构造器 描述 protected
KeyInfoFactory()
默认构造函数,用于子类调用。
-
方法摘要
所有方法 静态方法 实例方法 抽象方法 具体的方法 变量和类型 方法 描述 static KeyInfoFactory
getInstance()
返回支持默认XML处理机制和表示类型(“DOM”)的KeyInfoFactory
。static KeyInfoFactory
getInstance(String mechanismType)
返回支持指定的XML处理机制和表示类型的KeyInfoFactory
(例如:“DOM”)。static KeyInfoFactory
getInstance(String mechanismType, String provider)
返回KeyInfoFactory
,它支持由指定提供程序提供的请求的XML处理机制和表示类型(例如:“DOM”)。static KeyInfoFactory
getInstance(String mechanismType, Provider provider)
返回KeyInfoFactory
,它支持由指定提供程序提供的请求的XML处理机制和表示类型(例如:“DOM”)。String
getMechanismType()
返回此KeyInfoFactory
支持的XML处理机制和表示的类型(例如:“DOM”)Provider
getProvider()
返回此KeyInfoFactory
的提供者。abstract URIDereferencer
getURIDereferencer()
返回对URIDereferencer
引用,默认情况下,该引用用于取消引用RetrievalMethod
对象中的URI。abstract boolean
isFeatureSupported(String feature)
指示是否支持指定的功能。abstract KeyInfo
newKeyInfo(List<? extends XMLStructure> content)
创建包含指定的密钥信息类型列表的KeyInfo
。abstract KeyInfo
newKeyInfo(List<? extends XMLStructure> content, String id)
创建包含指定的密钥信息类型列表和可选ID的KeyInfo
。abstract KeyName
newKeyName(String name)
从指定的名称创建KeyName
。abstract KeyValue
newKeyValue(PublicKey key)
从指定的公钥创建KeyValue
。abstract PGPData
newPGPData(byte[] keyId)
根据指定的PGP公钥标识符创建PGPData
。abstract PGPData
newPGPData(byte[] keyId, byte[] keyPacket, List<? extends XMLStructure> other)
根据指定的PGP公钥标识符和可选的密钥材料包以及外部元素列表创建PGPData
。abstract PGPData
newPGPData(byte[] keyPacket, List<? extends XMLStructure> other)
从指定的PGP密钥材料包和可选的外部元素列表创建PGPData
。abstract RetrievalMethod
newRetrievalMethod(String uri)
从指定的URI创建RetrievalMethod
。abstract RetrievalMethod
newRetrievalMethod(String uri, String type, List<? extends Transform> transforms)
从指定的参数创建RetrievalMethod
。abstract X509Data
newX509Data(List<?> content)
创建包含指定的X.509内容列表的X509Data
。abstract X509IssuerSerial
newX509IssuerSerial(String issuerName, BigInteger serialNumber)
从指定的X.500颁发者专有名称和序列号创建X509IssuerSerial
。abstract KeyInfo
unmarshalKeyInfo(XMLStructure xmlStructure)
从机制特定的XMLStructure
(例如:DOMStructure
)实例解组新的KeyInfo
实例。
-
-
-
方法详细信息
-
getInstance
public static KeyInfoFactory getInstance(String mechanismType)
返回支持指定的XML处理机制和表示类型的KeyInfoFactory
(例如:“DOM”)。此方法使用标准的JCA提供查找机制来查找并实例化
KeyInfoFactory
实现期望的机构的类型。 它遍历注册安全列表Provider
s,从最受欢迎的Provider
。 一个新的KeyInfoFactory
从第一对象Provider
返回的支持指定的机构。请注意,可以通过
Security.getProviders()
方法检索已注册提供商的列表。- Implementation Note:
-
JDK Reference Implementation还使用
jdk.security.provider.preferred
Security
属性来确定指定算法的首选提供程序顺序。 这可能与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
实现。 它遍历注册安全列表Provider
s,从最受欢迎的Provider
。KeyInfoFactory
来自第一个支持DOM机制的第一个Provider
新对象Provider
。请注意,可以通过
Security.getProviders()
方法检索已注册提供程序的列表。- Implementation Note:
-
JDK Reference Implementation另外使用
jdk.security.provider.preferred
Security
属性来确定指定算法的首选提供程序顺序。 这可能与Security.getProviders()
返回的提供程序顺序不同。 - 结果
-
一个新的
KeyInfoFactory
- 异常
-
NoSuchMechanismException
- 如果没有Provider
支持DOM机制的KeyInfoFactory
实现 - 另请参见:
-
Provider
-
getMechanismType
public final String getMechanismType()
返回此KeyInfoFactory
支持的XML处理机制和表示的类型(例如:“DOM”)- 结果
-
此
KeyInfoFactory
支持的XML处理机制类型
-
getProvider
public final Provider getProvider()
返回此KeyInfoFactory
的提供者。- 结果
-
KeyInfoFactory
的提供者
-
newKeyInfo
public abstract KeyInfo newKeyInfo(List<? extends XMLStructure> content)
创建包含指定的密钥信息类型列表的KeyInfo
。- 参数
-
content
- 表示关键信息类型的一个或多个XMLStructure
的列表。 该列表是防御性复制的,以防止后续修改。 - 结果
-
a
KeyInfo
- 异常
-
NullPointerException
- 如果content
是null
-
IllegalArgumentException
- 如果content
为空 -
ClassCastException
- 如果content
包含的输入参数不是类型XMLStructure
-
newKeyInfo
public abstract KeyInfo newKeyInfo(List<? extends XMLStructure> content, String id)
创建包含指定的密钥信息类型列表和可选ID的KeyInfo
。id
参数表示XMLID
属性的值,对于从其他XML结构引用KeyInfo
非常有用。- 参数
-
content
- 表示关键信息类型的一个或多个XMLStructure
的列表。 该列表是防御性复制的,以防止后续修改。 -
id
- XML的值ID
(可能是null
) - 结果
-
a
KeyInfo
- 异常
-
NullPointerException
- 如果content
是null
-
IllegalArgumentException
- 如果content
为空 -
ClassCastException
- 如果content
包含的输入参数不是类型XMLStructure
-
newKeyName
public abstract KeyName newKeyName(String name)
从指定的名称创建KeyName
。- 参数
-
name
- 标识密钥的名称 - 结果
-
a
KeyName
- 异常
-
NullPointerException
- 如果name
是null
-
newKeyValue
public abstract KeyValue newKeyValue(PublicKey key) throws KeyException
从指定的公钥创建KeyValue
。- 参数
-
key
- 公钥 - 结果
-
a
KeyValue
- 异常
-
KeyException
- 如果key
的算法未被此KeyInfoFactory
的算法识别或支持 -
NullPointerException
- 如果key
是null
-
newPGPData
public abstract PGPData newPGPData(byte[] keyId)
根据指定的PGP公钥标识符创建PGPData
。- 参数
-
keyId
- RFC 2440 ,第11.2节中定义的PGP公钥标识符。 克隆该阵列以防止后续修改。 - 结果
-
a
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
- 表示来自外部名称空间的元素的XMLStructure
的列表。 该列表是防御性复制的,以防止后续修改。 可能是null
或为空。 - 结果
-
a
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
或为空。 - 结果
-
a
PGPData
- 异常
-
NullPointerException
- 如果keyPacket
是null
-
IllegalArgumentException
- 如果keyPacket
格式不正确。 对于keyPacket
,将检查数据包标头的格式,并验证标签是否为密钥材料类型。 不检查包体的内容和格式。 -
ClassCastException
- 如果other
包含任何类型不是的条目XMLStructure
-
newRetrievalMethod
public abstract RetrievalMethod newRetrievalMethod(String uri)
从指定的URI创建RetrievalMethod
。- 参数
-
uri
- 标识要检索的KeyInfo
信息的URI - 结果
-
a
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
- 标识要检索的KeyInfo
信息类型的URI(可能是null
) -
transforms
-列表Transform
秒。 该列表是防御性复制的,以防止后续修改。 可能是null
或空。 - 结果
-
a
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)中定义的属性类型关键字。 实现可以支持其他关键字。 该列表是防御性复制的,以防止后续修改。 - 结果
-
a
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
- 特定于机制的XML结构,用于从中解组keyinfo - 结果
-
KeyInfo
- 异常
-
NullPointerException
- 如果xmlStructure
是null
-
ClassCastException
-如果类型xmlStructure
不适合此工厂 -
MarshalException
- 如果在解组期间发生不可恢复的异常
-
-