Nombre d'objets numériques conforme ###################################### Ce module permet de vérifier que le nombre d’objets contenu dans un SIP correspond au nombre d’objets déclarés dans le bordereau afin de s’assurer de l’intégralité du SIP. Le format supporté file SEDA et les schémas  est : * xml * sxd Usage ***** Pour l'usage interne Vitam ************************** 1) Extraction XML d'informations  en parcourant le fichier manifest:     public ExtractUriResponse getAllDigitalObjectUriFromManifest(WorkParams params) throws ProcessingException, XMLStreamException {}      2) Parcours du fichier manifest avec la technologie StAX pour extraire 1 par 1 des Uri dans la balise Binary Data Object. .. code-block:: java private void getUri(ExtractUriResponse extractUriResponse, XMLEventReader evenReader) throws XMLStreamException, URISyntaxException {   while (evenReader.hasNext()) {   XMLEvent event = evenReader.nextEvent(); if (event.isStartElement()) { StartElement startElement = event.asStartElement(); // If we have an Tag Uri element equal Uri into SEDA if (startElement.getName().getLocalPart() == (SedaUtils.TAG_URI)){  event = evenReader.nextEvent(); String uri = event.asCharacters().getData(); // Check element is duplicate checkDuplicatedUri(extractUriResponse, uri); extractUriResponse.getUriListManifest().add(new URI(uri)); }                } } } 3) Vérification des éléménts dans la liste d'Uri sans doublon. 4) Ajout de l'élément de la liste d'Uri en capsulant dans l'object ExtractUriResponse. .. code-block:: java public class ExtractUriResponse extends ProcessResponse{  private boolean errorDuplicateUri; // list contains Uri for Binary Object private List uriListManifest; ... 5) Récupération de la liste d'Uri des objets numériques stockés dans un conteneur du workspace (de manière récursive). Chemin pour récupérer les objets numériques : «GuidContainer/sip/content». .. code-block:: java public List getListUriDigitalObjectFromFolder(String containerName, String folderName) throws ContentAddressableStorageException { ... List uriFolderListFromContainer; try { BlobStore blobStore = context.getBlobStore(); // It's like a filter ListContainerOptions listContainerOptions = new ListContainerOptions(); // List of all resources in a container recursively final PageSet blobStoreList = blobStore.list(containerName, listContainerOptions.inDirectory(folderName).recursive()); uriFolderListFromContainer = new ArrayList<>(); LOGGER.info(WorkspaceMessage.BEGINNING_GET_URI_LIST_OF_DIGITAL_OBJECT.getMessage()); for (Iterator iterator = blobStoreList.iterator(); iterator.hasNext();) { StorageMetadata storageMetada = iterator.next(); // select BLOB only, not folder nor relative path if ((storageMetada.getType().equals(StorageType.BLOB) && storageMetada.getName() != null && !storageMetada.getName().isEmpty())) { uriFolderListFromContainer.add(new URI(UriUtils.splitUri(storageMetada.getName()))); } } } ...  } 6) Vérification conformité du nombre d'objets numériques. 6.1) Vérification de présence de doublons dans la liste des Uri du bordereau Si présence de doublons la comparaison avec la liste des Uri provenant du SIP n'est pas déclenchée .. code-block:: java if (extractUriResponse != null && !extractUriResponse.isErrorDuplicateUri()) { ... } 6.2)Comparaison des listes -Comparaison de la taille des liste. -Comparaison des URI. -Identification des Uri non référencés dans le SIP. -Identification des Uri non déclarés dans le bordereau. .. code-block:: java private void checkCountDigitalObjectConformity(List uriListManifest, List uriListWorkspace, Response response) { ... }