package eu.europa.esig.dss.asic.validation; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; import eu.europa.esig.dss.DSSDocument; import eu.europa.esig.dss.DomUtils; import eu.europa.esig.dss.asic.ASiCNamespace; import eu.europa.esig.dss.utils.Utils; import eu.europa.esig.dss.validation.ManifestFile; public class ASiCEWithCAdESManifestParser { private static final Logger LOG = LoggerFactory.getLogger(ASiCEWithCAdESManifestParser.class); private final DSSDocument manifestDocument; public ASiCEWithCAdESManifestParser(DSSDocument manifestDocument) { this.manifestDocument = manifestDocument; } public ManifestFile getDescription() { ManifestFile description = new ManifestFile(); description.setFilename(manifestDocument.getName()); InputStream is = null; try { is = manifestDocument.openStream(); Document manifestDom = DomUtils.buildDOM(is); description.setSignatureFilename(DomUtils.getValue(manifestDom, ASiCNamespace.XPATH_ASIC_SIGREF_URL)); List<String> entries = new ArrayList<String>(); NodeList dataObjectReferences = DomUtils.getNodeList(manifestDom, ASiCNamespace.XPATH_ASIC_DATA_OBJECT_REFERENCE); if (dataObjectReferences == null || dataObjectReferences.getLength() == 0) { LOG.warn("No DataObjectReference found in manifest file"); } else { for (int i = 0; i < dataObjectReferences.getLength(); i++) { Element dataObjectReference = (Element) dataObjectReferences.item(i); entries.add(dataObjectReference.getAttribute("URI")); } } description.setEntries(entries); } catch (Exception e) { LOG.warn("Unable to analyze manifest file '" + manifestDocument.getName() + "' : " + e.getMessage()); } finally { Utils.closeQuietly(is); } return description; } }