有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java组织。w3c。多姆。DOMEException:层次结构\u请求\u错误

我看这个太久了,不知道我做错了什么

所以,我试图为一些内容生成一个Xades签名。不幸的是,我总是遇到同样的错误:“层次结构\请求\错误”。这是我的XML文档:

<?xml version="1.0" encoding="UTF-8"?>
<object>
    <request id="f9e1294a-64b7-488b-b475-7511e317e399">(some arbitrary base64 encoded content)</request>
</object>

我正在尝试签署“请求”元素(显然…),使用以下代码:

/*create a document*/
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
Document doc = docBuilder.newDocument();
Element objectElement = doc.createElement("object");
doc.appendChild(objectElement);
Element requestElement = doc.createElement("request");
requestElement.appendChild(doc.createTextNode(decodedContent));
requestElement.setAttribute("id", UUID.randomUUID().toString());
objectElement.appendChild(requestElement);

/*Key provider, signing profile & signer itself*/
KeyingDataProvider kp = new CustomKeyingDataProvider(certificate, privateKey);
XadesSigningProfile p = new XadesTSigningProfile(kp);
XadesSigner signer = p.newSigner();

/*Signed data*/
DataObjectDesc flatFile = new DataObjectReference("#" + requestElement.getAttribute("id"))
    .withTransform(new GenericAlgorithm("http://www.w3.org/2000/09/xmldsig#base64"))
    .withDataObjectTimeStamp();
SignedDataObjects dataObjs = new SignedDataObjects(flatFile).withCommitmentType(AllDataObjsCommitmentTypeProperty.proofOfOrigin());

/*Actual signing*/
signer.sign(dataObjs, doc);

我得到了这个错误作为回报(缩写为必要的):

class org.w3c.dom.DOMException: org.w3c.dom.DOMException: HIERARCHY_REQUEST_ERR: An    
attempt was made to insert a node where it is not permitted. 
    at org.apache.xerces.dom.CoreDocumentImpl.insertBefore(Unknown Source)
    at org.apache.xerces.dom.NodeImpl.appendChild(Unknown Source)
    at xades4j.production.AppendAsLastChildStrategy.append(SignatureAppendingStrategies.java:55)
    at xades4j.production.SignerBES.sign(SignerBES.java:210)
    at xades4j.production.SignerBES.sign(SignerBES.java:122)
    ...

我在网上搜索,但我发现的唯一类似错误是:https://code.google.com/p/xades4j/wiki/QeA(几乎在顶部)。我真的找不到他的问题的答案,但就我所见,我的XML文档带有根元素(就像他的第二个示例)。所以我真的不知道我做错了什么

有人能帮我吗?提前谢谢


共 (1) 个答案

  1. # 1 楼答案

    您试图将签名附加为文档的根元素,因为您提供了doc作为sign方法的父元素。但是,文档(object)上已经有一个根元素,并且只允许有一个