diff --git a/.github/workflows/On-PR-assigned_intermediate-dispatch.yml b/.github/workflows/On-PR-assigned_intermediate-dispatch.yml
new file mode 100644
index 000000000..0b0084a4d
--- /dev/null
+++ b/.github/workflows/On-PR-assigned_intermediate-dispatch.yml
@@ -0,0 +1,21 @@
+name: CI | On-PR-assigned_intermediate-dispatch
+
+on:
+ pull_request:
+    types: [assigned]
+
+jobs:
+  build:
+
+    runs-on: ubuntu-16.04
+
+    steps:
+    - uses: actions/checkout@v2
+    - name: Informations
+      run: |
+          echo "github.event.pull_request: ${{ toJson(github.event.pull_request) }}"
+    - name: Intermediate dispatch
+      working-directory: ./phis2-ws
+      run: |
+        echo "curl Intermediate dispatch"
+        curl http://proxmox15.asa-showroom.com/intermediate-dispatcher.php\?sha=${{ github.event.pull_request.head.sha }}\&ref\=${{ github.event.pull_request.head.ref }}\&repo__clone_url\=${{ github.event.pull_request.head.repo.clone_url }}
diff --git a/.github/workflows/On-Push_dispatch-to-opensilex-phis-docker-ci.yml b/.github/workflows/On-Push_dispatch-to-opensilex-phis-docker-ci.yml
new file mode 100644
index 000000000..f4c049bd9
--- /dev/null
+++ b/.github/workflows/On-Push_dispatch-to-opensilex-phis-docker-ci.yml
@@ -0,0 +1,20 @@
+name: CI | OnPush_dispatch-to-opensilex-phis-docker-ci
+
+on: [push]
+
+jobs:
+  dispatch-to-opensilex-phis-docker-ci:
+
+    runs-on: ubuntu-latest
+
+    steps:
+    - uses: actions/checkout@v2
+    - name: Informations
+      run: |
+        echo "Github-repository: '${{ github.repositoryUrl }}' "
+        echo " Repository:  $GITHUB_REPOSITORY "
+        echo " GITHUB_SHA:  '"$GITHUB_SHA"' "
+        echo " GITHUB_REF:  '"$GITHUB_REF"' "
+    - name: curl (dispatch-to-opensilex-phis-docker-ci)
+      run: |
+        curl -XPOST -u "${{ secrets.TRIGGER_USERNAME}}:${{secrets.TRIGGER_TOKEN}}"  -H "Accept:application/vnd.github.everest-preview+json"  -H "Content-Type:application/json" https://api.github.com/repos/"${{ secrets.TRIGGER_USERNAME}}"/"${{ secrets.TRIGGER_REPO_NAME}}"/dispatches --data '{"event_type":"build_application", "client_payload":{"repo__clone_url":"'"${{ github.repositoryUrl }}"'", "sha":"'"$GITHUB_SHA"'", "ref":"'"$GITHUB_REF"'" }}'
diff --git a/phis2-ws/pom.xml b/phis2-ws/pom.xml
index c75c679db..3afcba5ec 100644
--- a/phis2-ws/pom.xml
+++ b/phis2-ws/pom.xml
@@ -12,13 +12,16 @@
         <endorsed.dir>${project.build.directory}/endorsed</endorsed.dir>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <logback-version>1.2.3</logback-version>
+       
+        <jersey.version>2.28</jersey.version>
+        <junit.version>4.12</junit.version>
     </properties>
 
     <repositories>
         <!--REPO CRYPTAGE-->
         <repository>
             <id>spring-milestones</id>
-            <url>http://repo.spring.io/libs-milestone/</url>
+            <url>https://repo.spring.io/libs-milestone/</url>
         </repository>
     </repositories>
 
@@ -106,10 +109,32 @@
             <version>2.7.1</version>
             <type>jar</type>
         </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>${junit.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <!--        <dependency>
+            <groupId>org.glassfish.jersey.test-framework.providers</groupId>
+            <artifactId>jersey-test-framework-provider-jetty</artifactId>
+            <version>2.28</version>
+            <scope>test</scope>
+        </dependency>-->
+        <!--        <dependency>
+            <groupId>org.glassfish.jersey.test-framework.providers</groupId>
+            <artifactId>jersey-test-framework-provider-external</artifactId>
+            <version>2.28</version>
+        </dependency>-->
+        <dependency>
+            <groupId>org.glassfish.jersey.test-framework.providers</groupId>
+            <artifactId>jersey-test-framework-provider-grizzly2</artifactId>
+            <version>2.28</version>
+        </dependency>
         <dependency>
             <groupId>javax</groupId>
             <artifactId>javaee-web-api</artifactId>
-            <version>7.0</version>
+            <version>8.0</version>
             <scope>provided</scope>
         </dependency>
         <dependency>
@@ -324,7 +349,30 @@
                         <goals>
                             <goal>report</goal>
                         </goals>
+                    </execution>                   
+                    <execution>
+                        <id>before-integration-test-execution</id>
+                        <phase>pre-integration-test</phase>
+                        <goals>
+                            <goal>prepare-agent</goal>
+                        </goals>
+                        <configuration>
+                            <destFile>${project.build.directory}/jacoco-output/jacoco-integration-tests.exec</destFile>
+                            <propertyName>failsafe.jacoco.args</propertyName>
+                        </configuration>
                     </execution>
+
+                    <execution>
+                        <id>after-integration-test-execution</id>
+                        <phase>post-integration-test</phase>
+                        <goals>
+                            <goal>report</goal>
+                        </goals>
+                        <configuration>
+                            <dataFile>${project.build.directory}/jacoco-output/jacoco-integration-tests.exec</dataFile>
+                            <outputDirectory>${project.reporting.outputDirectory}/jacoco-integration-test-coverage-report</outputDirectory>
+                        </configuration>
+                    </execution>                   
                 </executions>
             </plugin>
             <plugin>
@@ -407,6 +455,22 @@
                     </execution>
                 </executions>
             </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-failsafe-plugin</artifactId>
+                <version>2.22.2</version>
+                <configuration>
+                    <argLine>${failsafe.jacoco.args}</argLine>
+                </configuration>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>integration-test</goal>
+                            <goal>verify</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>      
         </plugins>
     </build>
 </project>
diff --git a/phis2-ws/src/main/java/opensilex/service/authentication/TokenResponseStructure.java b/phis2-ws/src/main/java/opensilex/service/authentication/TokenResponseStructure.java
index 6bbb7c93f..d59281e07 100644
--- a/phis2-ws/src/main/java/opensilex/service/authentication/TokenResponseStructure.java
+++ b/phis2-ws/src/main/java/opensilex/service/authentication/TokenResponseStructure.java
@@ -45,4 +45,23 @@ public TokenResponseStructure(String id, String userDisplayName, String expires_
             this.expires_in = expires_in;
         }
     }
+
+    public Metadata getMetadata() {
+        return metadata;
+    }
+
+    public String getUserDisplayName() {
+        return userDisplayName;
+    }
+
+    public String getAccess_token() {
+        return access_token;
+    }
+
+    public String getExpires_in() {
+        return expires_in;
+    }
+    
+    
+    
 }
diff --git a/phis2-ws/src/main/java/opensilex/service/model/User.java b/phis2-ws/src/main/java/opensilex/service/model/User.java
index c8a11c467..f45a920b2 100644
--- a/phis2-ws/src/main/java/opensilex/service/model/User.java
+++ b/phis2-ws/src/main/java/opensilex/service/model/User.java
@@ -43,6 +43,9 @@ public class User {
     private String available;
 
     private ArrayList<Group> groups = new ArrayList<>();
+    
+    public User() {
+    }
 
     public User(String email, String password) {
         this.email = email;
diff --git a/phis2-ws/src/test/java/opensilex/service/itests/InternalProviderIntegrationTestHelper.java b/phis2-ws/src/test/java/opensilex/service/itests/InternalProviderIntegrationTestHelper.java
new file mode 100755
index 000000000..76d1f2958
--- /dev/null
+++ b/phis2-ws/src/test/java/opensilex/service/itests/InternalProviderIntegrationTestHelper.java
@@ -0,0 +1,101 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package opensilex.service.itests;
+
+import javax.inject.Singleton;
+import javax.ws.rs.core.Application;
+import opensilex.service.authentication.Session;
+import opensilex.service.injection.SessionFactory;
+import opensilex.service.injection.SessionInject;
+import opensilex.service.injection.SessionInjectResolver;
+import opensilex.service.json.CustomJsonWriterReader;
+import opensilex.service.resource.ResourceService;
+import org.glassfish.hk2.api.InjectionResolver;
+import org.glassfish.hk2.api.TypeLiteral;
+import org.glassfish.hk2.utilities.binding.AbstractBinder;
+import org.glassfish.jersey.client.ClientConfig;
+import org.glassfish.jersey.jackson.JacksonFeature;
+import org.glassfish.jersey.media.multipart.MultiPartFeature;
+import org.glassfish.jersey.server.ResourceConfig;
+import org.glassfish.jersey.servlet.ServletContainer;
+import org.glassfish.jersey.test.DeploymentContext;
+import org.glassfish.jersey.test.JerseyTest;
+import org.glassfish.jersey.test.ServletDeploymentContext;
+import org.glassfish.jersey.test.grizzly.GrizzlyWebTestContainerFactory;
+import org.glassfish.jersey.test.spi.TestContainerFactory;
+
+/**
+ *
+ * @author training
+ */
+public class InternalProviderIntegrationTestHelper extends JerseyTest {
+
+    @Override
+    public Application configure() {
+
+//        enable(TestProperties.LOG_TRAFFIC);
+//        enable(TestProperties.DUMP_ENTITY);
+        ResourceConfig resConf = new ResourceConfig(ResourceService.class);
+
+        resConf.register(MultiPartFeature.class);
+        resConf.register(JacksonFeature.class);
+        resConf.register(CustomJsonWriterReader.class);
+        resConf.register(SessionFactory.class);
+
+        resConf.packages("io.swagger.jaxrs.listing;"
+                + "opensilex.service.resource;"
+                + "opensilex.service.json;"
+                + "opensilex.service.resource.request.filter"
+        );
+
+        return resConf;
+
+    }
+
+    @Override
+    public TestContainerFactory getTestContainerFactory() {
+        return new GrizzlyWebTestContainerFactory();
+    }
+
+    @Override
+    protected DeploymentContext configureDeployment() {
+        ResourceConfig config = (ResourceConfig) configure();
+        config.register(new AbstractBinder() {
+            @Override
+            protected void configure() {
+                bindFactory(SessionFactory.class).to(Session.class);
+                bind(SessionInjectResolver.class)
+                        .to(new TypeLiteral<InjectionResolver<SessionInject>>() {
+                        })
+                        .in(Singleton.class);
+            }
+        });
+        return ServletDeploymentContext.forServlet(
+                new ServletContainer(config)).build();
+    }
+
+    @Override
+    protected void configureClient(ClientConfig config) {
+        super.configureClient(config); //To change body of generated methods, choose Tools | Templates.
+        config.register(CustomJsonWriterReader.class);
+        config.register(MultiPartFeature.class);
+
+    }
+
+    protected void preTestCaseTrace(String testcaseName) {
+        System.out.println("\n"
+                + "|||⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻"
+                + ">>>>>>>>>>>>>>>>>>>>>>>>>> \nSTART TEST: " + testcaseName + "\n");
+    }
+
+    protected void postTestCaseTrace(String testcaseName) {
+        System.out.println("\n" + "END TEST: " + testcaseName + "\n"
+                + "______________________________________________________"
+                + "_______________________|||"
+                + "\n");
+    }
+
+}
diff --git a/phis2-ws/src/test/java/opensilex/service/itests/OpenSilexWSITest.java b/phis2-ws/src/test/java/opensilex/service/itests/OpenSilexWSITest.java
new file mode 100755
index 000000000..da8b01381
--- /dev/null
+++ b/phis2-ws/src/test/java/opensilex/service/itests/OpenSilexWSITest.java
@@ -0,0 +1,965 @@
+//******************************************************************************
+//                                DataSourceWSIT.java
+// SILEX-PHIS
+// Copyright © INRA 2020
+// Creation date: Jan 27, 2020
+// Contact: Expression userEmail is undefined on line 6, column 15 in file:///home/training/opensilex/phis-ws/phis2-ws/licenseheader.txt., anne.tireau@inra.fr, pascal.neveu@inra.fr
+//******************************************************************************
+package opensilex.service.itests;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.gson.Gson;
+import com.google.gson.JsonObject;
+import com.google.gson.internal.LinkedTreeMap;
+import java.io.File;
+import java.io.IOException;
+import java.sql.Timestamp;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.ws.rs.client.Entity;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import opensilex.service.authentication.TokenResponseStructure;
+import opensilex.service.model.ContactPostgreSQL;
+import opensilex.service.model.Data;
+import opensilex.service.model.Experiment;
+import opensilex.service.model.Group;
+import opensilex.service.model.Project;
+import opensilex.service.model.ScientificObject;
+import opensilex.service.model.User;
+import opensilex.service.model.Variable;
+import opensilex.service.resource.dto.ConcernedItemDTO;
+import opensilex.service.resource.dto.MethodDTO;
+import opensilex.service.resource.dto.TokenDTO;
+import opensilex.service.resource.dto.TraitDTO;
+import opensilex.service.resource.dto.UnitDTO;
+import opensilex.service.resource.dto.UserDTO;
+import opensilex.service.resource.dto.VariableDTO;
+import opensilex.service.resource.dto.data.DataPostDTO;
+import opensilex.service.resource.dto.data.FileDescriptionPostDTO;
+import opensilex.service.resource.dto.experiment.ExperimentPostDTO;
+import opensilex.service.resource.dto.group.GroupPostDTO;
+import opensilex.service.resource.dto.project.ProjectPostDTO;
+import opensilex.service.resource.dto.provenance.ProvenancePostDTO;
+import opensilex.service.resource.dto.rdfResourceDefinition.PropertyPostDTO;
+import opensilex.service.resource.dto.scientificObject.ScientificObjectPostDTO;
+import opensilex.service.result.Result;
+import opensilex.service.result.ResultForm;
+import opensilex.service.view.brapi.Metadata;
+import org.apache.commons.codec.digest.DigestUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.glassfish.jersey.media.multipart.FormDataMultiPart;
+import org.glassfish.jersey.media.multipart.file.FileDataBodyPart;
+
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertFalse;
+import org.junit.Test;
+import org.junit.FixMethodOrder;
+import org.junit.runners.MethodSorters;
+
+/**
+ *
+ * @author training
+ */
+@FixMethodOrder(MethodSorters.NAME_ASCENDING)
+public class OpenSilexWSITest extends InternalProviderIntegrationTestHelper {
+
+    private static final SimpleDateFormat dateFormater = new SimpleDateFormat("yyyy_MM_dd__HH-mm-ss");
+    private static final Long itTimeMillis = System.currentTimeMillis();
+    private static final Timestamp startTimestamp = new Timestamp(itTimeMillis);
+    private static final String timeStamp = dateFormater.format(startTimestamp);
+
+    private static final String emailUser = "it-user_" + timeStamp + "@opensilex.org";
+    private static final String firstNameUser = timeStamp + "_firstName_IT_User"; // in order to make the generated uri unique 
+    private static final String passwordUser = "azerty";
+
+    private static final String groupName = "group_IT_" + timeStamp;
+
+    private static final String projectName = "Project_IT_" + timeStamp;
+    private static final String projectShortName = "Proj_" + timeStamp;
+
+    private static final String experimentCampain = "campain_IT_" + timeStamp;
+
+    private static final String scientifiObjectLabel = "so_IT_" + timeStamp;
+
+    private static final String traitLabel = "trait_" + timeStamp;
+
+    private static final String methodLabel = "method_" + timeStamp;
+
+    private static final String unitLabel = "unit_" + timeStamp;
+
+    private static final String variableLabel = "variable_" + timeStamp;
+
+    private static final String provenanceLabel = "provenance_" + timeStamp;
+
+    private static final int datasetSize = 10;
+    private static final int nbImages = 5;
+
+    private static final String contactType_SCIENTIFIC_CONTACT = "http://www.opensilex.org/vocabulary/oeso/#ScientificContact"; // #ScientificSupervisor
+    private static final String contactType_PROJECT_COORDINATOR = "http://www.opensilex.org/vocabulary/oeso/#ProjectCoordinator"; // 
+    private static final String contactType_ADMINISTRATIVE_CONTACT = "http://www.opensilex.org/vocabulary/oeso/#AdministrativeContact";// 
+    private static final String scientificObjectRdfType_PLANT = "http://www.opensilex.org/vocabulary/oeso#Plant";
+    private static final String scientificObjectRdfType_PLOT = "http://www.opensilex.org/vocabulary/oeso#Plot";
+    private static final String imageHemisphericalImageRdfType = "http://www.opensilex.org/vocabulary/oeso#HemisphericalImage";
+
+    private static String TOKKEN;
+    private static String itUserURI;
+    private static String itGroupURI;
+    private static String itProjectURI;//that will be generated in Itest _1_02_groups_01_POST_ITest
+    private static String itExperimentURI;//that will be generated in Itest _3_02_experiments_01_POST_ITest
+    private static String itScientificObjectURI;//that will be generated in Itest _4_02_scientificObject_01_POST_ITest
+    private static String itTraitURI;//that will be generated in Itest 
+    private static String itMethodURI;//that will be generated in Itest
+    private static String itUnitURI;//that will be generated in Itest
+    private static String itVariableURI;//that will be generated in Itest 
+    private static String itProvenanceURI;//that will be generated in Itest 
+    private static String itDatasetURI;//that will be generated in Itest    
+    private static ArrayList<String> itImageURIs = new ArrayList<>();
+
+    private static String itImageURI;//that will be generated in Itest 
+
+    public ArrayList<Object> parseResultToObject(Result r, Class classs) {
+
+        ArrayList<LinkedTreeMap> data = (ArrayList<LinkedTreeMap>) r.getData();
+        ArrayList<Object> listObjects = new ArrayList<>();
+        Gson gson = new Gson();
+        for (LinkedTreeMap d : data) {
+            JsonObject jsonObject = gson.toJsonTree(d).getAsJsonObject();
+            String s = jsonObject.toString();
+            ObjectMapper mapper = new ObjectMapper();
+            Object obj = null;
+            try {
+                obj = mapper.readValue(s, classs);
+                listObjects.add(obj);
+
+            } catch (IOException ex) {
+                Logger.getLogger(OpenSilexWSITest.class.getName()).log(Level.SEVERE, null, ex);
+            }
+        }
+
+        return listObjects;
+    }
+
+    public void getToken() {
+        TokenDTO tokenDTO = new TokenDTO();
+        tokenDTO.setGrant_type("password");
+        tokenDTO.setClient_id("123");
+        tokenDTO.setUsername("admin@opensilex.org");
+        tokenDTO.setPassword("21232f297a57a5a743894a0e4a801fc3");
+
+        Entity<TokenDTO> tokenEntity = Entity.entity(tokenDTO, MediaType.APPLICATION_JSON_TYPE);
+
+        Response response = target("/brapi/v1/token")
+                .request()
+                .post(tokenEntity);
+
+        TokenResponseStructure token = response.readEntity(TokenResponseStructure.class);
+        String accessToken = token.getAccess_token();
+
+        if (!accessToken.equals("")) {
+            this.TOKKEN = accessToken;
+        } else {
+            this.TOKKEN = "";
+        }
+
+    }
+
+    @Test
+    public void _0_01_getToken_ITest() {
+
+        String nameofCurrMethod = new Throwable().getStackTrace()[0].getMethodName();
+        preTestCaseTrace(nameofCurrMethod);
+
+        this.getToken();
+        System.out.println("-----------Token: " + this.TOKKEN);
+
+        assertFalse("Token must be setted", this.TOKKEN.equals(""));
+
+        postTestCaseTrace(nameofCurrMethod);
+
+    }
+
+    @Test
+    public void _1_01_users_01_POST_ITest() {
+
+        String nameofCurrMethod = new Throwable().getStackTrace()[0].getMethodName();
+        preTestCaseTrace(nameofCurrMethod);
+
+        ArrayList<UserDTO> users = new ArrayList<>();
+        UserDTO userDTO = new UserDTO();
+        userDTO.setEmail(emailUser);
+
+        String passwordITUser = passwordUser;
+        String pwdHash = DigestUtils.md5Hex(passwordITUser);
+        userDTO.setPassword(pwdHash);
+
+        userDTO.setFirstName(firstNameUser);
+        userDTO.setFamilyName("FamilyName_IT_User");
+        userDTO.setAddress("address_IT_User");
+        userDTO.setPhone("000000000");
+        userDTO.setAffiliation("affiliation_IT_User");
+        userDTO.setOrcid(null);
+        userDTO.setAdmin("true");
+        userDTO.setGroupsUris(new ArrayList<>());
+
+        users.add(userDTO);
+        Entity< ArrayList<UserDTO>> usersEntity = Entity.entity(users, MediaType.APPLICATION_JSON_TYPE);
+
+        Response response = target("/users")
+                .request()
+                .header(HttpHeaders.AUTHORIZATION, "Bearer " + this.TOKKEN)
+                .post(usersEntity);
+
+        System.out.println("--------------- Response: \n" + response);
+
+        Integer statusCode = response.getStatus();
+        assertTrue("Status code should be 201 (Created)", statusCode == 201);
+
+        postTestCaseTrace(nameofCurrMethod);
+
+    }
+
+    @Test
+    public void _1_01_users_02_GET_ITest() {
+
+        String nameofCurrMethod = new Throwable().getStackTrace()[0].getMethodName();
+        preTestCaseTrace(nameofCurrMethod);
+
+        Response response = target("/users")
+                .queryParam("email", emailUser)
+                .request()
+                .header(HttpHeaders.AUTHORIZATION, "Bearer " + this.TOKKEN)
+                .get();
+        System.out.println("--------------- Response: \n" + response);
+
+        ResultForm resultForm = response.readEntity(ResultForm.class);
+
+        Result result = resultForm.getResult();
+
+        ArrayList<Object> usersList = parseResultToObject(result, User.class);
+        User usr = (User) usersList.get(0);
+        String uriUser = usr.getUri();
+
+        itUserURI = uriUser;
+
+        assertTrue("Uri of the user should contain firstNameUser ", uriUser.contains(firstNameUser.toLowerCase()));
+
+        postTestCaseTrace(nameofCurrMethod);
+
+    }
+
+    @Test
+    public void _1_02_groups_01_POST_ITest() {
+
+        String nameofCurrMethod = new Throwable().getStackTrace()[0].getMethodName();
+        preTestCaseTrace(nameofCurrMethod);
+
+        ArrayList<GroupPostDTO> groups = new ArrayList<>();
+        GroupPostDTO groupDTO = new GroupPostDTO();
+
+        groupDTO.setName(groupName);
+        groupDTO.setLevel("Owner");
+        groupDTO.setDescription("Description of group_IT_" + timeStamp);
+
+        ArrayList<String> usersEmails = new ArrayList<>();
+        usersEmails.add(emailUser);
+        groupDTO.setUsersEmails(usersEmails);
+
+        groups.add(groupDTO);
+        Entity< ArrayList<GroupPostDTO>> groupEntity = Entity.entity(groups, MediaType.APPLICATION_JSON_TYPE);
+
+        Response response = target("/groups")
+                .request()
+                .header(HttpHeaders.AUTHORIZATION, "Bearer " + this.TOKKEN)
+                .post(groupEntity);
+
+        System.out.println("--------------- Response: \n" + response);
+
+        ResultForm resultForm = response.readEntity(ResultForm.class);
+
+        Metadata metadata = resultForm.getMetadata();
+        List<String> dataFiles = metadata.getDatafiles();
+
+        String uriGroup = dataFiles.get(0);
+        assertTrue("URI of created group should contains groupName", (uriGroup.toLowerCase()).contains(groupName.toLowerCase()));
+
+        Boolean contains = StringUtils.containsIgnoreCase(uriGroup, groupName);
+        assertTrue("URI of created group should contains groupName", StringUtils.containsIgnoreCase(uriGroup, groupName));
+
+        itGroupURI = uriGroup;
+
+        postTestCaseTrace(nameofCurrMethod);
+
+    }
+
+    @Test
+    public void _1_02_groups_02_GET_ITest() {
+
+        String nameofCurrMethod = new Throwable().getStackTrace()[0].getMethodName();
+        preTestCaseTrace(nameofCurrMethod);
+
+        Response response = target("/groups")
+                .queryParam("name", groupName)
+                .request()
+                .header(HttpHeaders.AUTHORIZATION, "Bearer " + this.TOKKEN)
+                .get();
+        System.out.println("--------------- Response: \n" + response);
+
+        ResultForm resultForm = response.readEntity(ResultForm.class);
+
+        Result result = resultForm.getResult();
+
+        ArrayList<Object> usersList = parseResultToObject(result, Group.class);
+        Group grp = (Group) usersList.get(0);
+        String uriGrp = grp.getUri();
+
+        assertTrue("Uri of the group should be the same as the one returned when it was created", uriGrp.equalsIgnoreCase(itGroupURI.toLowerCase()));
+
+        postTestCaseTrace(nameofCurrMethod);
+
+    }
+
+    @Test
+    public void _2_projects_01_POST_ITest() {
+
+        String nameofCurrMethod = new Throwable().getStackTrace()[0].getMethodName();
+        preTestCaseTrace(nameofCurrMethod);
+
+        ArrayList<ProjectPostDTO> projects = new ArrayList<>();
+        ProjectPostDTO projectDTO = new ProjectPostDTO();
+
+        projectDTO.setName(projectName);
+        projectDTO.setShortname(projectShortName);
+//        projectDTO.setFinancialFunding("financial reference");
+        projectDTO.setFinancialReference("financial reference");
+        projectDTO.setDescription("This project is about ...");
+        projectDTO.setStartDate("2015-07-07");
+        projectDTO.setEndDate("2016-07-07");
+        projectDTO.setKeywords(new ArrayList<>());
+        projectDTO.setHomePage("http://example.com");
+
+        //SCIENTIFIC_CONTACT
+        projectDTO.setScientificContacts(Arrays.asList(new String[]{itUserURI}));
+
+        //PROJECT_COORDINATOR
+        projectDTO.setCoordinators(Arrays.asList(new String[]{itUserURI}));
+
+        //ADMINISTRATIVE_CONTACT
+        projectDTO.setAdministrativeContacts(Arrays.asList(new String[]{itUserURI}));
+
+        projects.add(projectDTO);
+
+        Entity< ArrayList<ProjectPostDTO>> groupEntity = Entity.entity(projects, MediaType.APPLICATION_JSON_TYPE);
+
+        Response response = target("/projects")
+                .request()
+                .header(HttpHeaders.AUTHORIZATION, "Bearer " + this.TOKKEN)
+                .post(groupEntity);
+
+        System.out.println("--------------- Response: \n" + response);
+
+        ResultForm resultForm = response.readEntity(ResultForm.class);
+
+        Metadata metadata = resultForm.getMetadata();
+        List<String> dataFiles = metadata.getDatafiles();
+        String uriGeneratedProject = dataFiles.get(0);
+
+        assertTrue("URI of created project should contains projectShortName", StringUtils.containsIgnoreCase(uriGeneratedProject, projectShortName));
+
+        itProjectURI = uriGeneratedProject;
+
+        postTestCaseTrace(nameofCurrMethod);
+
+    }
+
+    @Test
+    public void _2_projects_02_GET_ITest() {
+
+        String nameofCurrMethod = new Throwable().getStackTrace()[0].getMethodName();
+        preTestCaseTrace(nameofCurrMethod);
+
+        Response response = target("/projects")
+                .queryParam("name", projectName)
+                .request()
+                .header(HttpHeaders.AUTHORIZATION, "Bearer " + this.TOKKEN)
+                .get();
+        System.out.println("--------------- Response: \n" + response);
+
+        ResultForm resultForm = response.readEntity(ResultForm.class);
+
+        Result result = resultForm.getResult();
+
+        ArrayList<Object> usersList = parseResultToObject(result, Project.class);
+        Project proj = (Project) usersList.get(0);
+        String uriProj = proj.getUri();
+
+        assertTrue("URI of returned project should be the same as the one returned when it was created", StringUtils.equalsIgnoreCase(uriProj, itProjectURI));
+
+        postTestCaseTrace(nameofCurrMethod);
+
+    }
+
+    @Test
+    public void _3_experiments_01_POST_ITest() {
+
+        String nameofCurrMethod = new Throwable().getStackTrace()[0].getMethodName();
+        preTestCaseTrace(nameofCurrMethod);
+
+        ArrayList<ExperimentPostDTO> experiments = new ArrayList<>();
+        ExperimentPostDTO experimentDTO = new ExperimentPostDTO();
+
+        experimentDTO.setAlias("XP_IT_" + timeStamp);
+        experimentDTO.setStartDate("2015-07-07");
+        experimentDTO.setEndDate("2015-08-07");
+        experimentDTO.setField("field");
+        experimentDTO.setCampaign(experimentCampain);
+        experimentDTO.setPlace("place");
+        experimentDTO.setComment("Comment IT_experiment_" + timeStamp);
+        experimentDTO.setKeywords("keyword1 keyword2");
+        experimentDTO.setObjective("Objective experiement_IT_" + timeStamp);
+        experimentDTO.setCropSpecies("maize");
+
+//        ArrayList<String> projectsUris = new ArrayList<String>();
+//        projectsUris.add(itProjectURI);
+        experimentDTO.setProjectsUris(new ArrayList<String>() {
+            {
+                add(itProjectURI);
+            }
+        });
+
+        //SCIENTIFIC_CONTACT
+        ArrayList<ContactPostgreSQL> contacts = new ArrayList<>();
+
+        ContactPostgreSQL contact = new ContactPostgreSQL();
+        contact.setEmail(emailUser);
+        contact.setType(contactType_SCIENTIFIC_CONTACT);
+        contacts.add(contact);
+
+        //PROJECT_COORDINATOR
+        ContactPostgreSQL projectCoordinator = new ContactPostgreSQL();
+        projectCoordinator.setEmail(emailUser);
+        projectCoordinator.setType(contactType_PROJECT_COORDINATOR);
+        contacts.add(projectCoordinator);
+
+        //ADMINISTRATIVE_CONTACT
+        ContactPostgreSQL administrativeContact = new ContactPostgreSQL();
+        administrativeContact.setEmail(emailUser);
+        administrativeContact.setType(contactType_ADMINISTRATIVE_CONTACT);
+        contacts.add(administrativeContact);
+
+        experimentDTO.setContacts(contacts);
+        experiments.add(experimentDTO);
+
+        Entity< ArrayList<ExperimentPostDTO>> groupEntity = Entity.entity(experiments, MediaType.APPLICATION_JSON_TYPE);
+
+        Response response = target("/experiments")
+                .request()
+                .header(HttpHeaders.AUTHORIZATION, "Bearer " + this.TOKKEN)
+                .post(groupEntity);
+
+        System.out.println("--------------- Response: \n" + response);
+
+        ResultForm resultForm = response.readEntity(ResultForm.class);
+
+        Metadata metadata = resultForm.getMetadata();
+        List<String> dataFiles = metadata.getDatafiles();
+        String uriGeneratedExperiment = dataFiles.get(0);
+
+        assertTrue("URI of created experiment should contains experimentCampain", StringUtils.containsIgnoreCase(uriGeneratedExperiment, experimentCampain));
+
+        itExperimentURI = uriGeneratedExperiment;
+
+        postTestCaseTrace(nameofCurrMethod);
+
+    }
+
+    @Test
+    public void _3_experiments_02_GET_ITest() {
+
+        String nameofCurrMethod = new Throwable().getStackTrace()[0].getMethodName();
+        preTestCaseTrace(nameofCurrMethod);
+
+        Response response = target("/experiments")
+                .queryParam("uri", itExperimentURI)
+                .request()
+                .header(HttpHeaders.AUTHORIZATION, "Bearer " + this.TOKKEN)
+                .get();
+        System.out.println("--------------- Response: \n" + response);
+
+        ResultForm resultForm = response.readEntity(ResultForm.class);
+
+        Result result = resultForm.getResult();
+
+        ArrayList<Object> usersList = parseResultToObject(result, Experiment.class);
+        Experiment exp = (Experiment) usersList.get(0);
+        String uriExp = exp.getUri();
+
+        assertTrue("URI of returned experiment should be the same as the one returned when it was created", StringUtils.equalsIgnoreCase(uriExp, itExperimentURI));
+
+        postTestCaseTrace(nameofCurrMethod);
+
+    }
+
+    @Test
+    public void _4_scientificOject_01_POST_ITest() {
+
+        String nameofCurrMethod = new Throwable().getStackTrace()[0].getMethodName();
+        preTestCaseTrace(nameofCurrMethod);
+
+        ArrayList<ScientificObjectPostDTO> scientificObjects = new ArrayList<>();
+        ScientificObjectPostDTO scientificObjectPostDTO = new ScientificObjectPostDTO();
+
+        ArrayList<PropertyPostDTO> properties = new ArrayList<PropertyPostDTO>();
+        PropertyPostDTO propertyScientificObjectLabel = new PropertyPostDTO();
+        propertyScientificObjectLabel.setRelation("http://www.w3.org/2000/01/rdf-schema#label");
+        propertyScientificObjectLabel.setValue("alias_so_" + timeStamp);
+
+        properties.add(propertyScientificObjectLabel);
+
+        scientificObjectPostDTO.setProperties(properties);
+
+        scientificObjectPostDTO.setExperiment(itExperimentURI);
+        scientificObjectPostDTO.setRdfType(scientificObjectRdfType_PLOT);
+
+        scientificObjects.add(scientificObjectPostDTO);
+        Entity< ArrayList<ScientificObjectPostDTO>> scientificObjectsEntity = Entity.entity(scientificObjects, MediaType.APPLICATION_JSON_TYPE);
+
+        Response response = target("/scientificObjects")
+                .request()
+                .header(HttpHeaders.AUTHORIZATION, "Bearer " + this.TOKKEN)
+                .post(scientificObjectsEntity);
+
+        ResultForm resultForm = response.readEntity(ResultForm.class);
+
+        Result result = resultForm.getResult();
+        Metadata metadata = resultForm.getMetadata();
+        List<String> dataFiles = metadata.getDatafiles();
+        String uriGeneratedSO = dataFiles.get(0);
+
+        assertTrue("URI of created scientificObject should contains /o", StringUtils.containsIgnoreCase(uriGeneratedSO, "/o"));
+
+        itScientificObjectURI = uriGeneratedSO;
+
+        postTestCaseTrace(nameofCurrMethod);
+    }
+
+    @Test
+    public void _4_scientificOject_02_GET_ITest() {
+
+        String nameofCurrMethod = new Throwable().getStackTrace()[0].getMethodName();
+        preTestCaseTrace(nameofCurrMethod);
+
+        Response responseScientificObjects = target("/scientificObjects")
+                .queryParam("uri", itScientificObjectURI)
+                .request()
+                .header(HttpHeaders.AUTHORIZATION, "Bearer " + this.TOKKEN)
+                .get();
+
+        ResultForm resultForm = responseScientificObjects.readEntity(ResultForm.class);
+
+        Result result = resultForm.getResult();
+
+        ArrayList<Object> usersList = parseResultToObject(result, ScientificObject.class);
+        ScientificObject so = (ScientificObject) usersList.get(0);
+        String uriScientificObject = so.getUri();
+
+        assertTrue("URI of returned scientificObject should be the same as the one returned when it was created", StringUtils.equalsIgnoreCase(uriScientificObject, itScientificObjectURI));
+
+        postTestCaseTrace(nameofCurrMethod);
+
+    }
+
+    @Test
+    public void _5_01_trait_01_POST_ITest() {
+
+        String nameofCurrMethod = new Throwable().getStackTrace()[0].getMethodName();
+        preTestCaseTrace(nameofCurrMethod);
+
+        ArrayList<TraitDTO> traits = new ArrayList<>();
+        TraitDTO traitDTO = new TraitDTO();
+        traitDTO.setLabel(traitLabel);
+        traitDTO.setComment("comment trait " + timeStamp);
+
+        traits.add(traitDTO);
+        Entity< ArrayList<TraitDTO>> traitsEntity = Entity.entity(traits, MediaType.APPLICATION_JSON_TYPE);
+
+        Response response = target("/traits")
+                .request()
+                .header(HttpHeaders.AUTHORIZATION, "Bearer " + this.TOKKEN)
+                .post(traitsEntity);
+
+        ResultForm resultForm = response.readEntity(ResultForm.class);
+
+        Metadata metadata = resultForm.getMetadata();
+        List<String> dataFiles = metadata.getDatafiles();
+        String uriGeneratedTrait = dataFiles.get(0);
+
+        assertTrue("URI of created trait should contains ", StringUtils.containsIgnoreCase(uriGeneratedTrait, "/traits/t"));
+
+        itTraitURI = uriGeneratedTrait;
+
+        postTestCaseTrace(nameofCurrMethod);
+    }
+
+    @Test
+    public void _5_01_trait_02_GET_ITest() {
+
+        String nameofCurrMethod = new Throwable().getStackTrace()[0].getMethodName();
+
+        postTestCaseTrace(nameofCurrMethod);
+
+    }
+
+    @Test
+    public void _5_02_method_01_POST_ITest() {
+
+        String nameofCurrMethod = new Throwable().getStackTrace()[0].getMethodName();
+        preTestCaseTrace(nameofCurrMethod);
+
+        ArrayList<MethodDTO> methods = new ArrayList<>();
+        MethodDTO methodDTO = new MethodDTO();
+        methodDTO.setLabel(methodLabel);
+        methodDTO.setComment("comment method " + timeStamp);
+
+        methods.add(methodDTO);
+        Entity< ArrayList<MethodDTO>> methodsEntity = Entity.entity(methods, MediaType.APPLICATION_JSON_TYPE);
+
+        Response response = target("/methods")
+                .request()
+                .header(HttpHeaders.AUTHORIZATION, "Bearer " + this.TOKKEN)
+                .post(methodsEntity);
+
+        ResultForm resultForm = response.readEntity(ResultForm.class);
+
+        Metadata metadata = resultForm.getMetadata();
+        List<String> dataFiles = metadata.getDatafiles();
+        String uriGeneratedMethod = dataFiles.get(0);
+
+        assertTrue("URI of created method should contains ", StringUtils.containsIgnoreCase(uriGeneratedMethod, "/methods/m"));
+
+        itMethodURI = uriGeneratedMethod;
+
+        postTestCaseTrace(nameofCurrMethod);
+
+    }
+
+    @Test
+    public void _5_02_method_02_GET_ITest() {
+        String nameofCurrMethod = new Throwable().getStackTrace()[0].getMethodName();
+
+        postTestCaseTrace(nameofCurrMethod);
+
+    }
+
+    @Test
+    public void _5_03_unit_01_POST_ITest() {
+
+        String nameofCurrMethod = new Throwable().getStackTrace()[0].getMethodName();
+        preTestCaseTrace(nameofCurrMethod);
+
+        ArrayList<UnitDTO> units = new ArrayList<>();
+        UnitDTO unitDTO = new UnitDTO();
+        unitDTO.setLabel(unitLabel);
+        unitDTO.setComment("comment unit " + timeStamp);
+
+        units.add(unitDTO);
+        Entity< ArrayList<UnitDTO>> unitsEntity = Entity.entity(units, MediaType.APPLICATION_JSON_TYPE);
+
+        Response response = target("/units")
+                .request()
+                .header(HttpHeaders.AUTHORIZATION, "Bearer " + this.TOKKEN)
+                .post(unitsEntity);
+
+        ResultForm resultForm = response.readEntity(ResultForm.class);
+
+        Metadata metadata = resultForm.getMetadata();
+        List<String> dataFiles = metadata.getDatafiles();
+        String uriGeneratedUnit = dataFiles.get(0);
+
+        assertTrue("URI of created unit should contains /units/u", StringUtils.containsIgnoreCase(uriGeneratedUnit, "/units/u"));
+
+        itUnitURI = uriGeneratedUnit;
+
+        postTestCaseTrace(nameofCurrMethod);
+
+    }
+
+    @Test
+    public void _5_03_unit_02_GET_ITest() {
+
+        String nameofCurrMethod = new Throwable().getStackTrace()[0].getMethodName();
+
+        postTestCaseTrace(nameofCurrMethod);
+
+    }
+
+    @Test
+    public void _5_04_variables_01_POST_ITest() {
+
+        String nameofCurrMethod = new Throwable().getStackTrace()[0].getMethodName();
+        preTestCaseTrace(nameofCurrMethod);
+
+        ArrayList<VariableDTO> variables = new ArrayList<>();
+        VariableDTO variableDTO = new VariableDTO();
+        variableDTO.setLabel(variableLabel);
+        variableDTO.setComment("comment variable " + timeStamp);
+        variableDTO.setTrait(itTraitURI);
+        variableDTO.setMethod(itMethodURI);
+        variableDTO.setUnit(itUnitURI);
+
+        variables.add(variableDTO);
+        Entity< ArrayList<VariableDTO>> variablesEntity = Entity.entity(variables, MediaType.APPLICATION_JSON_TYPE);
+
+        Response response = target("/variables")
+                .request()
+                .header(HttpHeaders.AUTHORIZATION, "Bearer " + this.TOKKEN)
+                .post(variablesEntity);
+
+        ResultForm resultForm = response.readEntity(ResultForm.class);
+
+        Metadata metadata = resultForm.getMetadata();
+        List<String> dataFiles = metadata.getDatafiles();
+        String uriGeneratedVariable = dataFiles.get(0);
+
+        assertTrue("URI of created variable should contains /variables/v", StringUtils.containsIgnoreCase(uriGeneratedVariable, "/variables/v"));
+
+        itVariableURI = uriGeneratedVariable;
+
+        postTestCaseTrace(nameofCurrMethod);
+
+    }
+
+    @Test
+    public void _5_04_variables_02_GET_ITest() {
+
+        String nameofCurrMethod = new Throwable().getStackTrace()[0].getMethodName();
+        preTestCaseTrace(nameofCurrMethod);
+
+        Response response = target("/variables")
+                .queryParam("uri", itVariableURI)
+                .request()
+                .header(HttpHeaders.AUTHORIZATION, "Bearer " + this.TOKKEN)
+                .get();
+
+        System.out.println("--------------- Response: \n" + response);
+
+        ResultForm resultForm = response.readEntity(ResultForm.class);
+        Result result = resultForm.getResult();
+
+        ArrayList<Object> usersList = parseResultToObject(result, Variable.class);
+        Variable variable = (Variable) usersList.get(0);
+        String uriVariable = variable.getUri();
+
+        assertTrue("URI of returned variable should be the same as the one returned when it was created", StringUtils.equalsIgnoreCase(uriVariable, itVariableURI));
+
+        postTestCaseTrace(nameofCurrMethod);
+
+    }
+    
+    @Test
+    public void _6_01_provenance_01_POST_ITest() {
+
+        String nameofCurrMethod = new Throwable().getStackTrace()[0].getMethodName();
+        preTestCaseTrace(nameofCurrMethod);
+
+        ArrayList<ProvenancePostDTO> provenances = new ArrayList<>();
+        ProvenancePostDTO provenancePostDTO = new ProvenancePostDTO();
+
+        provenancePostDTO.setLabel(provenanceLabel);
+        provenancePostDTO.setComment("comment provenance " + timeStamp);
+
+        provenances.add(provenancePostDTO);
+        Entity< ArrayList<ProvenancePostDTO>> provenancesEntity = Entity.entity(provenances, MediaType.APPLICATION_JSON_TYPE);
+
+        Response response = target("/provenances")
+                .request()
+                .header(HttpHeaders.AUTHORIZATION, "Bearer " + this.TOKKEN)
+                .post(provenancesEntity);
+        
+        System.out.println("--------------- Response: \n" + response);
+
+        ResultForm resultForm = response.readEntity(ResultForm.class);
+
+        Metadata metadata = resultForm.getMetadata();
+        List<String> dataFiles = metadata.getDatafiles();
+        String uriGeneratedProvenance = dataFiles.get(0);
+
+        assertTrue("URI of created provenance should contains /provenance/", StringUtils.containsIgnoreCase(uriGeneratedProvenance, "/provenance/"));
+
+        itProvenanceURI = uriGeneratedProvenance;
+
+        postTestCaseTrace(nameofCurrMethod);
+    }
+
+    @Test
+    public void _6_01_provenance_02_GET_ITest() {
+
+    }
+
+    @Test
+    public void _6_02_dataset_01_POST_ITest() {
+
+        String nameofCurrMethod = new Throwable().getStackTrace()[0].getMethodName();
+        preTestCaseTrace(nameofCurrMethod);
+
+        ArrayList<DataPostDTO> data = new ArrayList<>();
+
+        SimpleDateFormat dateFormater = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss+0200");
+
+        for (int i = 0; i < datasetSize; i++) {
+            Timestamp timestamp = new Timestamp(itTimeMillis + i * 1000);
+            String timeStampStr = dateFormater.format(timestamp);
+
+            DataPostDTO dataPostDTO = new DataPostDTO();
+            dataPostDTO.setProvenanceUri(itProvenanceURI);
+            dataPostDTO.setObjectUri(itScientificObjectURI);
+            dataPostDTO.setVariableUri(itVariableURI);
+            dataPostDTO.setValue(10 * Math.random());
+            dataPostDTO.setDate(timeStampStr);
+
+            data.add(dataPostDTO);
+
+        }
+
+        Entity< ArrayList<DataPostDTO>> dataEntity = Entity.entity(data, MediaType.APPLICATION_JSON_TYPE);
+
+        Response response = target("/data")
+                .request()
+                .header(HttpHeaders.AUTHORIZATION, "Bearer " + this.TOKKEN)
+                .post(dataEntity);
+        
+        System.out.println("--------------- Response: \n" + response);
+
+        ResultForm resultForm = response.readEntity(ResultForm.class);
+
+        Metadata metadata = resultForm.getMetadata();
+        List<String> dataFiles = metadata.getDatafiles();
+        int dataFilesSize = dataFiles.size();
+
+        assertTrue("dataFilesSize should equals to datasetSize", dataFilesSize == datasetSize);
+
+        postTestCaseTrace(nameofCurrMethod);
+    }
+
+    @Test
+    public void _6_02_dataset_02_GET_ITest() {
+
+        String nameofCurrMethod = new Throwable().getStackTrace()[0].getMethodName();
+        preTestCaseTrace(nameofCurrMethod);
+
+        Response response = target("/data")
+                .queryParam("variable", itVariableURI)
+                .request()
+                .header(HttpHeaders.AUTHORIZATION, "Bearer " + this.TOKKEN)
+                .get();
+        
+        System.out.println("--------------- Response: \n" + response);
+
+        ResultForm resultForm = response.readEntity(ResultForm.class);
+
+        Result result = resultForm.getResult();
+
+        ArrayList<Object> dataList = parseResultToObject(result, Data.class);
+        Data data0 = (Data) dataList.get(0);
+        String provenanceUriData0 = data0.getProvenanceUri();
+
+        assertTrue("provenanceUri of the first data should be equals to itProvenanceUri", StringUtils.equalsIgnoreCase(provenanceUriData0, itProvenanceURI));
+
+        postTestCaseTrace(nameofCurrMethod);
+
+    }
+
+    @Test
+    public void _7_image_01_POST_ITest() {
+
+        String nameofCurrMethod = new Throwable().getStackTrace()[0].getMethodName();
+        preTestCaseTrace(nameofCurrMethod);
+
+        FileDescriptionPostDTO fileDescriptionPostDTO = new FileDescriptionPostDTO();
+        fileDescriptionPostDTO.setRdfType(imageHemisphericalImageRdfType);
+        fileDescriptionPostDTO.setDate("2020-02-14T12:31:59+0200");
+        fileDescriptionPostDTO.setProvenanceUri(itProvenanceURI);
+
+        ArrayList<ConcernedItemDTO> concernedItems = new ArrayList<>();
+
+        ConcernedItemDTO concernedItem = new ConcernedItemDTO();
+        concernedItem.setUri(itScientificObjectURI);
+        concernedItem.setTypeURI(scientificObjectRdfType_PLOT);
+
+        concernedItems.add(concernedItem);
+
+        fileDescriptionPostDTO.setConcernedItems(concernedItems);
+
+        ObjectMapper mapper = new ObjectMapper();
+        String fileDescriptionStr = null;
+        try {
+            fileDescriptionStr = mapper.writeValueAsString(fileDescriptionPostDTO);
+        } catch (JsonProcessingException ex) {
+            Logger.getLogger(OpenSilexWSITest.class.getName()).log(Level.SEVERE, null, ex);
+        }
+
+        ClassLoader classLoader = getClass().getClassLoader();
+        File file = new File(classLoader.getResource("images/image.jpg").getFile());
+        FileDataBodyPart filePart = new FileDataBodyPart("file", file);
+        FormDataMultiPart formDataMultiPart = new FormDataMultiPart();
+        FormDataMultiPart multipart = (FormDataMultiPart) formDataMultiPart
+                .field("description", fileDescriptionStr)
+                .bodyPart(filePart);
+
+        for (int i = 0; i < nbImages; i++) {
+            Response response = target("/data/file")
+                    .request()
+                    .header(HttpHeaders.AUTHORIZATION, "Bearer " + this.TOKKEN)
+                    .post(Entity.entity(multipart, MediaType.MULTIPART_FORM_DATA));
+            
+            System.out.println("--------------- Response: \n" + response);
+
+            ResultForm resultForm = response.readEntity(ResultForm.class);
+
+            Metadata metadata = resultForm.getMetadata();
+            List<String> dataFiles = metadata.getDatafiles();
+            String uriInsertedImage = dataFiles.get(0);
+
+            assertTrue("URI of created image should contains /id/dataFile/", StringUtils.containsIgnoreCase(uriInsertedImage, "/id/dataFile/"));
+
+            itImageURIs.add(uriInsertedImage);
+        }
+
+        postTestCaseTrace(nameofCurrMethod);
+
+    }
+
+    @Test
+    public void _7_image_02_GET_ITest() {
+
+        String nameofCurrMethod = new Throwable().getStackTrace()[0].getMethodName();
+        preTestCaseTrace(nameofCurrMethod);
+
+        Response response = target("/data/file/search")
+                .queryParam("rdfType", imageHemisphericalImageRdfType)
+                .queryParam("provenance", itProvenanceURI)
+                .request()
+                .header(HttpHeaders.AUTHORIZATION, "Bearer " + this.TOKKEN)
+                .get();
+        
+        System.out.println("--------------- Response: \n" + response);
+
+        ResultForm resultForm = response.readEntity(ResultForm.class);
+
+        Result result = resultForm.getResult();
+        int resultDataSize = result.getData().size();
+
+        assertTrue("resultDataSize should = nbImages", resultDataSize == nbImages);
+
+        postTestCaseTrace(nameofCurrMethod);
+
+    }
+
+}
+
diff --git a/phis2-ws/src/test/resources/images/image.jpg b/phis2-ws/src/test/resources/images/image.jpg
new file mode 100755
index 000000000..474b050ac
Binary files /dev/null and b/phis2-ws/src/test/resources/images/image.jpg differ