You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Java XML签名库适配XML DSIG XSD生成的DTO类?

解决方案

一、将XMLSignature转换为XSD生成的Java类实例

javax.xml.crypto.dsig生成的XMLSignature没有直接转换接口,最可靠的方式是通过XML序列化+JAXB反序列化实现转换:

  1. 提取XMLSignature生成的签名DOM节点
  2. 用JAXB将节点解析为XSD生成的对应类(比如截图中的SignatureType)

示例代码:

// 假设已完成签名操作,得到XMLSignature实例signature和对应的Document对象doc
DOMSignContext signContext = new DOMSignContext(yourPrivateKey, doc.getDocumentElement());
signature.sign(signContext);

// 获取签名对应的DOM节点
Node signatureNode = signature.getParent();

// 初始化JAXB上下文,绑定XSD生成的目标类
JAXBContext jaxbContext = JAXBContext.newInstance(SignatureType.class);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
// 解析节点为XSD生成的类实例
SignatureType signatureDto = (SignatureType) unmarshaller.unmarshal(signatureNode);

注意:必须保证XSD生成的类的命名空间与XML签名标准命名空间(http://www.w3.org/2000/09/xmldsig#)完全一致,否则JAXB解析会失败。

二、能否让签名库直接使用XSD生成的Java类?不行

javax.xml.crypto.dsig的API是基于DOM设计的XML签名处理框架,核心接口XMLSignature及相关组件围绕XML节点操作实现,没有提供直接对接JAXB生成类的能力,因此无法让它直接使用XSD生成的Java文件,只能通过上述转换方式衔接两者。

内容的提问来源于stack exchange,提问作者czetsuya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 20:15:01