- 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");
此外,由该工厂创建的
XMLStructure
s可能包含特定于KeyInfo
状态,并不意图重复使用。实现必须最低限度地支持默认机制类型:DOM。
注意,调用者必须使用相同
KeyInfoFactory
实例创建XMLStructure
特定的第KeyInfo
对象。 如果来自不同提供商的XMLStructure
s或不同的机制类型一起使用,行为是未定义的。并发访问
该类的静态方法保证线程安全。 多个线程可以同时调用此类中定义的静态方法,而不会产生不良影响。
但是,对于此类定义的非静态方法,这不是真的。 除非特定提供者另有说明,否则需要同时访问单个
KeyInfoFactory
实例的线程应在KeyInfoFactory
同步并提供必要的锁定。 每个操作不同的KeyInfoFactory
实例的多个线程不需要同步。- 从以下版本开始:
- 1.6
-
-
构造方法摘要
构造方法 Modifier Constructor 描述 protected
KeyInfoFactory()
默认构造函数,用于由子类调用。
-
方法摘要
所有方法 静态方法 接口方法 抽象方法 具体的方法 Modifier and Type 方法 描述 static KeyInfoFactory
getInstance()
返回支持默认XML处理机制和表示类型(“DOM”)的KeyInfoFactory
。static KeyInfoFactory
getInstance(String mechanismType)
返回支持指定的XML处理机制和表示类型(例如:“DOM”)的KeyInfoFactory
。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)
创建一个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处理机制和表示类型(例如:“DOM”)的KeyInfoFactory
。该方法使用标准的JCA提供程序查找机制来定位和实例化所需机制类型的实现
KeyInfoFactory
。 它通过注册安全性列表Provider
s,从最优选的Provider
。 返回支持指定机制的第一个Provider
新的KeyInfoFactory
对象。请注意,注册提供商的列表可以通过
Security.getProviders()
方法检索。- Implementation Note:
-
JDK参考实现另外使用
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
从第一对象Provider
返回支持DOM机制。请注意,可以通过
Security.getProviders()
方法检索已注册提供商的列表。- Implementation Note:
-
JDK参考实现另外使用
jdk.security.provider.preferred
Security
属性来确定指定算法的首选提供者顺序。 这可能与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
- 表示来自外部命名空间的元素的XMLStructure
s的列表。 该列表被防御复制以防止后续修改。 可能是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
- 如果在解组期间发生不可恢复的异常
-
-