/** * This method retrieves an element based on its ID * * @param currentDom the DOM in which the element has to be retrieved * @param elementId the specified ID * @param namespace the namespace to take into account * @param tagName the tagName of the element to find * @return the * @throws DSSNullException */ public static Element getElementById(Document currentDom, String elementId, String namespace, String tagName) throws DSSNullException { Element element = null; NodeList nodes = currentDom.getElementsByTagNameNS(namespace, tagName); for (int i = 0; i < nodes.getLength(); i++) { element = (Element) nodes.item(i); if (elementId.equals(DSSXMLUtils.getIDIdentifier(element))) { return element; } } if (element == null) { throw new DSSNullException(Element.class); } return null; }
/** * @param xPathQuery XPath query * @return */ private List<CertificateToken> getCertificates(final String xPathQuery) { final List<CertificateToken> list = new ArrayList<CertificateToken>(); final NodeList nodeList = DSSXMLUtils.getNodeList(signatureElement, xPathQuery); for (int ii = 0; ii < nodeList.getLength(); ii++) { final Element certificateElement = (Element) nodeList.item(ii); final byte[] derEncoded = DSSUtils.base64Decode(certificateElement.getTextContent()); final X509Certificate cert = DSSUtils.loadCertificate(derEncoded); final CertificateToken certToken = addCertificate(cert); if (!list.contains(certToken)) { final String idIdentifier = DSSXMLUtils.getIDIdentifier(certificateElement); certToken.setXmlId(idIdentifier); list.add(certToken); } } return list; }
@Override public DSSDocument removeSignature(final String signatureId) throws DSSException { if (DSSUtils.isBlank(signatureId)) { throw new DSSNullException(String.class, "signatureId"); } // TODO (31/07/2014): Checks on signature packaging to be added final NodeList signatureNodeList = rootElement.getElementsByTagNameNS(XMLSignature.XMLNS, XPathQueryHolder.XMLE_SIGNATURE); for (int ii = 0; ii < signatureNodeList.getLength(); ii++) { final Element signatureEl = (Element) signatureNodeList.item(ii); final String idIdentifier = DSSXMLUtils.getIDIdentifier(signatureEl); if (signatureId.equals(idIdentifier)) { signatureEl.getParentNode().removeChild(signatureEl); // TODO (31/07/2014): Save the modified document final Node documentElement = rootElement.getDocumentElement(); final byte[] documentBytes = DSSXMLUtils.serializeNode(documentElement); final InMemoryDocument inMemoryDocument = new InMemoryDocument(documentBytes); return inMemoryDocument; } } throw new DSSException("The signature with the given id was not found!"); }
final Document root = DSSXMLUtils.buildDOM(signature); final Element signatureEl = (Element) root.getDocumentElement().getFirstChild(); final String idIdentifier = DSSXMLUtils.getIDIdentifier(signatureEl); if (signatureId.equals(idIdentifier)) {
@Override public String getId() { if (signatureId == null) { String idValue = DSSXMLUtils.getIDIdentifier(signatureElement); if (idValue != null) { signatureId = idValue; } else { final CertificateToken certificateToken = getSigningCertificateToken(); final int dssId = (certificateToken == null ? 0 : certificateToken.getDSSId()); signatureId = DSSUtils.getDeterministicId(getSigningTime(), dssId); } } return signatureId; }
if (xPointerQuery) { final String id = DSSXMLUtils.getIDIdentifier(signatureReference); final XPointerSignatureScope xPointerSignatureScope = new XPointerSignatureScope(id, uri); result.add(xPointerSignatureScope);
throw new DSSNullException(Node.class, "signature-value"); final String signatureValueId = DSSXMLUtils.getIDIdentifier((Element) signatureValueNode); if (DSSUtils.isBlank(toCounterSignSignatureId)) { throw new DSSException("There is no signature-value id to countersign!");