Я создаю подпись в оболочке с помощью xades4j, следуя этим утверждениям:
Element elemToSign = doc.getDocumentElement();
XadesSigner signer = new XadesTSigningProfile(...).newSigner();
new Enveloped(signer).sign(elemToSign);
Но мне нужно добавить в подпись и другие свойства, такие как ProofOfApprova и т. д.
Я вижу, что в примерах xades4j свойства proofOfApprovalProperties добавляются к обернутой подписи с использованием разных операторов подписи, например:
AllDataObjsCommitmentTypeProperty globalCommitment = AllDataObjsCommitmentTypeProperty.proofOfApproval();
CommitmentTypeProperty commitment = CommitmentTypeProperty.proofOfCreation();
DataObjectDesc obj1 = new DataObjectReference('#' + elemToSign.getAttribute("Id"))
.withTransform(new EnvelopedSignatureTransform())
.withDataObjectFormat(new DataObjectFormatProperty("text/xml", "MyEncoding")
.withDescription("Isto é uma descrição do elemento raiz")
.withDocumentationUri("http://doc1.txt")
.withDocumentationUri("http://doc2.txt"))
.withIdentifier("http://elem.root"))
.withCommitmentType(commitment)
.withDataObjectTimeStamp(dataObjsTimeStamp)
SignedDataObjects dataObjs = new SignedDataObjects(obj1)
.withCommitmentType(globalCommitment);
signer.sign(dataObjs, elemToSign);
Я вижу здесь, что используется другая процедура подписи, а точнее оператор, в котором я создаю ссылку на DataObjectreference, в которой говорится, что я использую атрибут «Id» для корневого тега, для меня непригоден, потому что на входе я могу иметь любой вид XML-документа, и я не могу знать, какой атрибут (если он есть) я могу использовать для определения корневого тега.
Вкратце, могу ли я получить пример кода, в котором я создаю подпись Enveloped и добавляю свойство proofOfApproval, используя «new Enveloped (signer).sign (elemToSign);», или в любом случае, не зная исходной структуры xml?
Спасибо
M.