Commit 489d4895 authored by granier's avatar granier
Browse files

Correction bug "Valider en tant que texte un fichier XML"

parent e34b80a5
......@@ -2,10 +2,92 @@
Plugin du validateur de format du CINES.
`
"FORMAT_VALIDATOR": {
## Présentation
Le Plugin de validation de format réalise la validation de chaque
fichier de l'archive avec la librairie de validation de format.
Pour certain format, cette validation implique d'accéder à des fichiers
qui peuvent être fournis dans l'archive comme les ODD du format TEI ou téléchargeable sur Internet (cas des schémas XSD).
Une première passe est donc indispensable pour recenser l'ensemble des fichiers de l'archive et
permettre d'y accéder lors de la validation proprement dîte.
Cette première passe est assuré par le plugin FilenameGuidMappingPlugin.
### Mapping entre le nom du fichier et le GUID
Ce plugin fonctionne sur chaque fichier.
#### Actions
Il crée un fichier de mapping `filename_guid_map.json` structuré comme suit:
`{"" : ""}`
Ce fichier permet de retrouver le chemin réel du fichier à partir de son nom dans le Manifest.xml balise `<Filename>`.
#### Déclaration fichiers de configuration VITAM
plugins.json
```
"FILENAME_GUID_MAPPING" : {
"className": "fr.gouv.vitam.worker.core.plugin.FilenameGuidMappingPlugin",
"jarName": "format-validator-plugin-jar-with-dependencies.jar"
},
```
DefaultIngestWorkflow.json
```
{
"workerGroupId":"DefaultWorker",
"stepName":"STP_OG_MAPPING_GUID_FILENAME",
"behavior":"BLOCKING",
"distribution":{
"kind":"LIST_IN_DIRECTORY",
"element":"ObjectGroup",
"type":"ObjectGroup"
},
"actions":[
{
"action":{
"actionKey":"FILENAME_GUID_MAPPING",
"behavior":"BLOCKING",
"out":[
{
"name":"filename_guid_map",
"uri":"WORKSPACE:filename_guid_map.json"
}
]
}
}
]
},
```
### Plugin du validateur de format
Pour fonctionner pleinement ce plugin nécessite l'installation de binaire sur la machine hôte.
#### Actions
Sur chaque objet binaire de l'archive:
* Vérification que le format déclaré dans le manifeste soit accepté dans le contrat d'entrée de VITAM
* Validation du format
* Vérification que le format soit déclaré dans le bordereau au niveau de la balise `<FormatId>` ou `<MimeType>` (au moins l'un des 2)
* si non rejet
* si oui, et que le FormatId n'est pas déclaré, enrichissement avec le format identifié par la validateur
* Identification du format
* Si TEI, validation avec l'ODD dont le nom est dans la balise `<Schema>` et qui est retrouvé avec le mapping réalisé lors du mapping entre le nom du fichier et le GUID.
* Si XML, appel du Web service de validation de fichiers XML
* Vérification que le format soit accepté dans VITAM (au niveau global)
```
"FORMAT_VALIDATOR": {
"className": "fr.gouv.vitam.worker.core.plugin.FormatValidatorPlugin",
"propertiesFile": "format_validator_plugin.properties"
},
`
\ No newline at end of file
```
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>fr.gouv.vitam.worker.core.plugin</groupId>
<artifactId>format-validator-plugin</artifactId>
<version>1.2-SNAPSHOT</version>
<packaging>jar</packaging>
<groupId>fr.gouv.vitam.worker.core.plugin</groupId>
<artifactId>format-validator-plugin</artifactId>
<version>1.2-SNAPSHOT</version>
<packaging>jar</packaging>
<name>format-validator-plugin</name>
<url>http://maven.apache.org</url>
<name>format-validator-plugin</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- common dependencies for all modules -->
<java.compile.version>11</java.compile.version>
<java.version>11</java.version>
<!-- JDK version -->
<jdk.version.rpm>java-11-openjdk-headless</jdk.version.rpm>
<jdk.version.debian>openjdk-11-jre-headless</jdk.version.debian>
<jackson.version>2.9.9</jackson.version>
<slf4j.version>1.7.25</slf4j.version>
<format-validator.version>3.6.4</format-validator.version>
<junit.version>4.12</junit.version>
<assertj.version>3.11.1</assertj.version>
<mockito.version>2.23.4</mockito.version>
<junit.params.version>1.1.1</junit.params.version>
<compiler.plugin.version>3.8.1</compiler.plugin.version>
<assembly.plugin.version>3.2.0</assembly.plugin.version>
<maven.resources.version>3.1.0</maven.resources.version>
<maven.exec.version>1.6.0</maven.exec.version>
<maven.dependency.version>3.1.1</maven.dependency.version>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<vitam.version>3.0.2</vitam.version>
<maven.javadoc.skip>true</maven.javadoc.skip>
</properties>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- common dependencies for all modules -->
<java.compile.version>11</java.compile.version>
<java.version>11</java.version>
<!-- JDK version -->
<jdk.version.rpm>java-11-openjdk-headless</jdk.version.rpm>
<jdk.version.debian>openjdk-11-jre-headless</jdk.version.debian>
<jackson.version>2.9.9</jackson.version>
<resteasy.version>3.0.14.Final</resteasy.version>
<slf4j.version>1.7.25</slf4j.version>
<format-validator.version>3.6.5-SNAPSHOT</format-validator.version>
<junit.version>4.12</junit.version>
<assertj.version>3.11.1</assertj.version>
<mockito.version>2.23.4</mockito.version>
<junit.params.version>1.1.1</junit.params.version>
<compiler.plugin.version>3.8.1</compiler.plugin.version>
<assembly.plugin.version>3.2.0</assembly.plugin.version>
<maven.resources.version>3.1.0</maven.resources.version>
<maven.exec.version>1.6.0</maven.exec.version>
<maven.dependency.version>3.1.1</maven.dependency.version>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<vitam.version>3.0.2</vitam.version>
<maven.javadoc.skip>true</maven.javadoc.skip>
</properties>
<build>
<extensions>
<extension>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-ssh</artifactId>
<version>2.4</version>
</extension>
</extensions>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>${assembly.plugin.version}</version>
<configuration>
<finalName>format-validator-plugin</finalName>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<build>
<extensions>
<extension>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-ssh</artifactId>
<version>2.4</version>
</extension>
</extensions>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>${assembly.plugin.version}</version>
<configuration>
<finalName>format-validator-plugin</finalName>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>wagon-maven-plugin</artifactId>
<version>2.0.2</version>
<executions>
<execution>
<id>upload-rpm</id>
<phase>install</phase>
<goals>
<goal>upload</goal>
</goals>
<configuration>
<serverId>sandbox5</serverId>
<fromDir>${project.build.directory}/</fromDir>
<includes>format-validator-plugin-jar-with-dependencies.jar</includes>
<url>scp://sandbox34-adm.cines.fr/</url>
<toDir>/vitam/conf/worker/plugins-workspace</toDir>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>fr.cines.validator</groupId>
<artifactId>format-validator</artifactId>
<version>${format-validator.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>fr.gouv.vitam</groupId>
<artifactId>common-plugin</artifactId>
<version>${vitam.version}</version>
</dependency>
</dependencies>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<repositories>
<repository>
<id>cines-repo</id>
<url>http://maven.cines.fr/maven</url>
</repository>
<repository>
<id>vitam</id>
<url>http://download.programmevitam.fr/vitam_repository/3.0.2/mvn_repo/</url>
</repository>
</repositories>
<distributionManagement>
<repository>
<id>cines-repo</id>
<name>cines-repository</name>
<url>sftp://maven.cines.fr/opt/maven/repo</url>
</repository>
</distributionManagement>
<scm>
<url>scm:git:https://dci-gitlab.cines.fr/dad/cines-vitam-plugins/format-validator-plugin.git</url>
<connection>scm:git:https://dci-gitlab.cines.fr/dad/cines-vitam-plugins/format-validator-plugin.git</connection>
<developerConnection>scm:git:https://dci-gitlab.cines.fr/dad/cines-vitam-plugins/format-validator-plugin.git</developerConnection>
<tag>format-validator-plugin-1.0</tag>
</scm>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpmime -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpmime</artifactId>
<version>4.5.13</version>
</dependency>
<dependency>
<groupId>fr.cines.validator</groupId>
<artifactId>format-validator</artifactId>
<version>${format-validator.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>fr.gouv.vitam</groupId>
<artifactId>common-plugin</artifactId>
<version>${vitam.version}</version>
</dependency>
<dependency>
<groupId>fr.gouv.vitam</groupId>
<artifactId>common-format-identification</artifactId>
<version>${vitam.version}</version>
</dependency>
<dependency>
<groupId>fr.cines.util</groupId>
<artifactId>cines-util</artifactId>
<version>1.6-SNAPSHOT</version>
<exclusions>
<exclusion>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>fr.cines.pac</groupId>
<artifactId>archive-util</artifactId>
<version>1.1.4</version>
</dependency>
</dependencies>
<repositories>
<repository>
<id>cines-repo</id>
<url>http://maven.cines.fr/maven</url>
</repository>
<repository>
<id>vitam</id>
<url>http://download.programmevitam.fr/vitam_repository/3.0.2/mvn_repo/</url>
</repository>
</repositories>
<distributionManagement>
<repository>
<id>cines-repo</id>
<name>cines-repository</name>
<url>sftp://maven.cines.fr/opt/maven/repo</url>
</repository>
</distributionManagement>
<scm>
<url>scm:git:https://dci-gitlab.cines.fr/dad/cines-vitam-plugins/format-validator-plugin.git</url>
<connection>scm:git:https://dci-gitlab.cines.fr/dad/cines-vitam-plugins/format-validator-plugin.git</connection>
<developerConnection>scm:git:https://dci-gitlab.cines.fr/dad/cines-vitam-plugins/format-validator-plugin.git</developerConnection>
<tag>format-validator-plugin-1.0</tag>
</scm>
</project>
......@@ -51,7 +51,6 @@ import fr.gouv.vitam.processing.common.exception.ProcessingException;
import fr.gouv.vitam.processing.common.parameter.WorkerParameters;
import fr.gouv.vitam.worker.common.HandlerIO;
import fr.gouv.vitam.worker.core.handler.ActionHandler;
import fr.gouv.vitam.worker.core.plugin.pojo.ValidatorResult;
/**
* FilenameGuidMappingPlugin Plugin.<br>
......@@ -70,16 +69,7 @@ public class FilenameGuidMappingPlugin extends ActionHandler implements VitamAut
*/
public static final String PUID = "PUID";
/**
* Error list for file format treatment
*/
private static final int OG_INPUT_RANK = 0;
private static final int FILENAME_GUID_MAPPING_OUT_RANK = 0;
private static final int FILENAME_GUID_MAPPING_IN_RANK = 1;
private static final int OG_OUT_RANK = 1;
private static final String TAG_FILENAME = "Filename";
private final ObjectMapper mapper = new ObjectMapper();
......@@ -96,9 +86,10 @@ public class FilenameGuidMappingPlugin extends ActionHandler implements VitamAut
final ItemStatus itemStatus = new ItemStatus(FILENAME_GUID_MAPPING);
try {
// Get objectGroup metadatas
final JsonNode jsonOG = (JsonNode) handlerIO.getInput(OG_INPUT_RANK);
// Get objectGroup
final JsonNode jsonOG = handlerIO.getJsonFromWorkspace(
IngestWorkflowConstants.OBJECT_GROUP_FOLDER + "/" + params.getObjectName());
Map<String, String> filenameGuidMap = new HashMap<String, String>();
ProcessingUri uri = handlerIO.getOutput(0);
......@@ -128,7 +119,7 @@ public class FilenameGuidMappingPlugin extends ActionHandler implements VitamAut
final String objectId = version.get(SedaConstants.PREFIX_ID).asText();
// Retrieve the file
String fileName = version.get(SedaConstants.TAG_FILE_INFO).get("Filename").asText();
String fileName = version.get(SedaConstants.TAG_FILE_INFO).get(TAG_FILENAME).asText();
filenameGuidMap.put(fileName, objectIdToUri.get(objectId));
if (StatusCode.FATAL.equals(itemStatus.getGlobalStatus())) {
......@@ -148,13 +139,10 @@ public class FilenameGuidMappingPlugin extends ActionHandler implements VitamAut
LOGGER.error(e);
itemStatus.increment(StatusCode.FATAL);
} catch (JsonGenerationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JsonMappingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
......
......@@ -26,12 +26,22 @@ import com.fasterxml.jackson.annotation.JsonProperty;
import static com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
import javax.xml.bind.annotation.XmlAccessType;
/**
* @author Florent MARCETEAU
*
*/
@JsonInclude(NON_NULL)
@XmlRootElement(name="validator")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType
public class ValidatorResult {
private boolean valid;
@JsonProperty("Filename")
private String filename;
......@@ -39,6 +49,8 @@ public class ValidatorResult {
@JsonProperty("FormatId")
private String formatId;
private String message;
public String getFilename() {
return filename;
......@@ -52,5 +64,16 @@ public class ValidatorResult {
public void setFormatId(String formatId) {
this.formatId = formatId;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public boolean isValid() {
return valid;
}
public void setValid(boolean valid) {
this.valid = valid;
}
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment