使用afirma URL协议签署文档时遇XML解析错误求助
问题诊断与解决方案
错误核心原因
你遇到的ParameterException是因为Afirma请求rtservlet参数指定的端点后,收到的响应并非合法UTF-8编码的XML文档,导致XML解析器抛出异常。
关键背景说明
在Afirma的afirma://sign协议中:
rtservlet并非直接指向待签署的ZIP文件地址,而是一个返回XML配置的端点——Afirma会向该地址请求,获取包含待签署文件下载链接、文件名、MIME类型等信息的XML参数,再根据XML内容去下载文件进行签署。stservlet才是签署完成后提交已签文件的回调端点,你的这个参数配置是符合预期的。
具体修复步骤
修正
rtservlet端点的响应内容
确保storage_service端点返回符合Afirma协议规范的XML文档,而非直接返回ZIP文件。示例XML结构参考:<signParameters> <file> <url>https://test.pdev/es/8/manager_panel/ver/8/actual-file.zip</url> <name>target-file.zip</name> <mime>application/zip</mime> </file> <!-- 可添加其他可选参数,如签名位置、附加信息等 --> </signParameters>确保XML响应的编码合法性
- 检查
storage_service端点的响应头,确认Content-Type为application/xml; charset=utf-8 - 用工具(如curl、Postman)请求该端点,验证返回的XML无乱码、无非法UTF-8字节,且没有多余的字节序标记(BOM)
- 检查
修正协议URL格式
你提供的协议URL末尾多了一个多余的双引号,需删除,正确的URL为:afirma://sign?op=sign&algorithm=SHA256withRSA&format=CAdES&fileid=8&rtservlet=https%3A%2F%2Ftest.pdev%2Fes%2F8%2Fmanager_panel%2Fver%2F8%2Fstorage_service&stservlet=https%3A%2F%2Ftest.pdev%2Fes%2F8%2Fmanager_panel%2Fver%2F8%2Fsign_callback
额外参考
若需确认XML的详细规范,可查看Afirma源码中es.gob.afirma.core.misc.protocol包下的ProtocolInvocationUriParserUtil、ProtocolInvocationUriParser等类的实现逻辑,了解其对XML参数的解析要求。
内容的提问来源于stack exchange,提问作者Nerian
相关产品推荐
相关产品推荐

