From 18ebc0087ec7872702f16b737c4039a78751f3e4 Mon Sep 17 00:00:00 2001
From: RIHTARSIC Joze <joze.rihtarsic@ext.ec.europa.eu>
Date: Sat, 15 Jul 2023 16:05:56 +0200
Subject: [PATCH] Add new Unit tests

---
 .../spi/handler/OasisCppa3CppHandlerTest.java |   2 +-
 .../europa/ec/smp/spi/OasisSMPExtension.java  |   2 +-
 .../OasisSMPServiceGroup10Handler.java        |   2 +-
 .../ServiceMetadata10Validator.java           |   6 +-
 .../ec/smp/spi/OasisSMPExtensionTest.java     |  40 +++++--
 .../ServiceMetadataConverterTest.java         |  11 +-
 .../smp/spi/handler/AbstractHandlerTest.java  | 113 ++++++++++++++++++
 .../OasisSMPServiceGroup10HandlerTest.java    |  76 ++++++++++++
 .../OasisSMPServiceGroup20HandlerTest.java    |  75 ++++++++++++
 .../OasisSMPServiceMetadata10HandlerTest.java |  96 +++++++++++++++
 .../OasisSMPServiceMetadata20HandlerTest.java |  87 ++++++++++++++
 .../examples/conversion/ServiceGroupOK.xml    |   7 --
 .../ServiceGroupInvalidScheme.xml             |   6 +
 .../examples/oasis-smp-1.0/ServiceGroupOK.xml |   5 +
 .../ServiceGroupWithDOCTYPE.xml               |   0
 .../ServiceGroupWithExtension.xml             |   0
 .../ServiceMetadataMissingMandatoryFields.xml |   0
 .../ServiceMetadataWithDOCTYPE.xml            |   0
 .../ServiceMetadataWithRedirect.xml           |   0
 ...viceMetadataWithServiceInformationUtf8.xml |   0
 .../ServiceMetadataWithServiceOk.xml}         |   6 +-
 ...service_group_unsigned_invalid_iso6523.xml |  18 +++
 ...ice_group_unsigned_invalid_iso6523_DTD.xml |  20 ++++
 ...p_unsigned_valid_iso6523-no-references.xml |   9 ++
 .../service_group_unsigned_valid_iso6523.xml  |  20 ++++
 ...vice_metadata_unsigned_invalid_iso6523.xml |  43 +++++++
 ..._metadata_unsigned_invalid_iso6523_DTD.xml |  43 +++++++
 ..._metadata_unsigned_redirection_iso6523.xml |  16 +++
 ...ervice_metadata_unsigned_valid_iso6523.xml |  42 +++++++
 29 files changed, 717 insertions(+), 28 deletions(-)
 create mode 100644 smp-resource-extensions/oasis-smp-spi/src/test/java/eu/europa/ec/smp/spi/handler/AbstractHandlerTest.java
 create mode 100644 smp-resource-extensions/oasis-smp-spi/src/test/java/eu/europa/ec/smp/spi/handler/OasisSMPServiceGroup10HandlerTest.java
 create mode 100644 smp-resource-extensions/oasis-smp-spi/src/test/java/eu/europa/ec/smp/spi/handler/OasisSMPServiceGroup20HandlerTest.java
 create mode 100644 smp-resource-extensions/oasis-smp-spi/src/test/java/eu/europa/ec/smp/spi/handler/OasisSMPServiceMetadata10HandlerTest.java
 create mode 100644 smp-resource-extensions/oasis-smp-spi/src/test/java/eu/europa/ec/smp/spi/handler/OasisSMPServiceMetadata20HandlerTest.java
 delete mode 100644 smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/conversion/ServiceGroupOK.xml
 create mode 100644 smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/oasis-smp-1.0/ServiceGroupInvalidScheme.xml
 create mode 100644 smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/oasis-smp-1.0/ServiceGroupOK.xml
 rename smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/{conversion => oasis-smp-1.0}/ServiceGroupWithDOCTYPE.xml (100%)
 rename smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/{conversion => oasis-smp-1.0}/ServiceGroupWithExtension.xml (100%)
 rename smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/{conversion => oasis-smp-1.0}/ServiceMetadataMissingMandatoryFields.xml (100%)
 rename smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/{conversion => oasis-smp-1.0}/ServiceMetadataWithDOCTYPE.xml (100%)
 rename smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/{conversion => oasis-smp-1.0}/ServiceMetadataWithRedirect.xml (100%)
 rename smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/{conversion => oasis-smp-1.0}/ServiceMetadataWithServiceInformationUtf8.xml (100%)
 rename smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/{conversion/ServiceMetadataWithServiceInformation.xml => oasis-smp-1.0/ServiceMetadataWithServiceOk.xml} (99%)
 create mode 100644 smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/oasis-smp-2.0/service_group_unsigned_invalid_iso6523.xml
 create mode 100644 smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/oasis-smp-2.0/service_group_unsigned_invalid_iso6523_DTD.xml
 create mode 100644 smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/oasis-smp-2.0/service_group_unsigned_valid_iso6523-no-references.xml
 create mode 100644 smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/oasis-smp-2.0/service_group_unsigned_valid_iso6523.xml
 create mode 100644 smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/oasis-smp-2.0/service_metadata_unsigned_invalid_iso6523.xml
 create mode 100644 smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/oasis-smp-2.0/service_metadata_unsigned_invalid_iso6523_DTD.xml
 create mode 100644 smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/oasis-smp-2.0/service_metadata_unsigned_redirection_iso6523.xml
 create mode 100644 smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/oasis-smp-2.0/service_metadata_unsigned_valid_iso6523.xml

diff --git a/smp-resource-extensions/oasis-cppa3-spi/src/test/java/eu/europa/ec/smp/spi/handler/OasisCppa3CppHandlerTest.java b/smp-resource-extensions/oasis-cppa3-spi/src/test/java/eu/europa/ec/smp/spi/handler/OasisCppa3CppHandlerTest.java
index 32fd0ead7..7c07518fc 100644
--- a/smp-resource-extensions/oasis-cppa3-spi/src/test/java/eu/europa/ec/smp/spi/handler/OasisCppa3CppHandlerTest.java
+++ b/smp-resource-extensions/oasis-cppa3-spi/src/test/java/eu/europa/ec/smp/spi/handler/OasisCppa3CppHandlerTest.java
@@ -43,7 +43,7 @@ public class OasisCppa3CppHandlerTest {
         Mockito.doReturn(resourceIdentifier).when(requestData).getResourceIdentifier();
         Mockito.doReturn(baos).when(responseData).getOutputStream();
         assertTrue(baos.size()>0);
-        System.out.println(baos.toString());
+
         // validate
         ByteArrayInputStream bios = new ByteArrayInputStream(baos.toByteArray());
         Mockito.doReturn(bios).when(requestData).getResourceInputStream();
diff --git a/smp-resource-extensions/oasis-smp-spi/src/main/java/eu/europa/ec/smp/spi/OasisSMPExtension.java b/smp-resource-extensions/oasis-smp-spi/src/main/java/eu/europa/ec/smp/spi/OasisSMPExtension.java
index 3b96a7442..7213ce11a 100644
--- a/smp-resource-extensions/oasis-smp-spi/src/main/java/eu/europa/ec/smp/spi/OasisSMPExtension.java
+++ b/smp-resource-extensions/oasis-smp-spi/src/main/java/eu/europa/ec/smp/spi/OasisSMPExtension.java
@@ -13,7 +13,7 @@ import java.util.List;
  * @author Joze Rihtarsic
  * @since 5.0
  * <p>
- * Extension implementation for halding the Oasis SMP resources.
+ * Extension implementation for handling the Oasis SMP resources.
  */
 @Service
 public class OasisSMPExtension implements ExtensionInfo {
diff --git a/smp-resource-extensions/oasis-smp-spi/src/main/java/eu/europa/ec/smp/spi/handler/OasisSMPServiceGroup10Handler.java b/smp-resource-extensions/oasis-smp-spi/src/main/java/eu/europa/ec/smp/spi/handler/OasisSMPServiceGroup10Handler.java
index 08a37ae8c..cf45c332c 100644
--- a/smp-resource-extensions/oasis-smp-spi/src/main/java/eu/europa/ec/smp/spi/handler/OasisSMPServiceGroup10Handler.java
+++ b/smp-resource-extensions/oasis-smp-spi/src/main/java/eu/europa/ec/smp/spi/handler/OasisSMPServiceGroup10Handler.java
@@ -79,7 +79,7 @@ public class OasisSMPServiceGroup10Handler extends AbstractOasisSMPHandler {
             return;
         }
 
-        ServiceGroup serviceGroup = null;
+        ServiceGroup serviceGroup;
         try {
             serviceGroup = reader.parseNative(resourceData.getResourceInputStream());
         } catch (TechnicalException e) {
diff --git a/smp-resource-extensions/oasis-smp-spi/src/main/java/eu/europa/ec/smp/spi/validation/ServiceMetadata10Validator.java b/smp-resource-extensions/oasis-smp-spi/src/main/java/eu/europa/ec/smp/spi/validation/ServiceMetadata10Validator.java
index 6f8304491..b18d58039 100644
--- a/smp-resource-extensions/oasis-smp-spi/src/main/java/eu/europa/ec/smp/spi/validation/ServiceMetadata10Validator.java
+++ b/smp-resource-extensions/oasis-smp-spi/src/main/java/eu/europa/ec/smp/spi/validation/ServiceMetadata10Validator.java
@@ -86,17 +86,17 @@ public class ServiceMetadata10Validator {
         ResourceIdentifier xmlResourceIdentifier = smpIdentifierApi.normalizeResourceIdentifier(participantId.getValue(), participantId.getScheme());
         ResourceIdentifier xmlSubresourceIdentifier = smpIdentifierApi.normalizeSubresourceIdentifier(documentId.getValue(), documentId.getScheme());
 
-        ResourceIdentifier nrmResIdentifierFromUrl =  smpIdentifierApi.normalizeSubresourceIdentifier(participantIdentifierFromUrl.getValue(), participantIdentifierFromUrl.getScheme());
+        ResourceIdentifier nrmResIdentifierFromUrl =  smpIdentifierApi.normalizeResourceIdentifier(participantIdentifierFromUrl.getValue(), participantIdentifierFromUrl.getScheme());
         ResourceIdentifier nrmDocIdentifierFromUrl =  smpIdentifierApi.normalizeSubresourceIdentifier(documentIdentifierFromUrl.getValue(), documentIdentifierFromUrl.getScheme());
 
         if (!xmlResourceIdentifier.equals(nrmResIdentifierFromUrl)) {
             // Business identifier must equal path
-            throw new ResourceException(INVALID_PARAMETERS, "Participant identifiers don't match between URL parameter [" + participantIdentifierFromUrl + "] and XML body: [" + xmlResourceIdentifier + "]");
+            throw new ResourceException(INVALID_PARAMETERS, "Participant identifiers don't match between URL parameter [" + nrmResIdentifierFromUrl + "] and XML body: [" + xmlResourceIdentifier + "]");
         }
 
         if (!xmlSubresourceIdentifier.equals(nrmDocIdentifierFromUrl)) {
             // Business identifier must equal path
-            throw new ResourceException(INVALID_PARAMETERS, "Document identifiers don't match between URL parameter [" + documentIdentifierFromUrl + "] and XML body: [" + xmlSubresourceIdentifier + "]");
+            throw new ResourceException(INVALID_PARAMETERS, "Document identifiers don't match between URL parameter [" + xmlSubresourceIdentifier + "] and XML body: [" + xmlSubresourceIdentifier + "]");
         }
         validateProcesses(serviceInformation);
         return serviceInformation;
diff --git a/smp-resource-extensions/oasis-smp-spi/src/test/java/eu/europa/ec/smp/spi/OasisSMPExtensionTest.java b/smp-resource-extensions/oasis-smp-spi/src/test/java/eu/europa/ec/smp/spi/OasisSMPExtensionTest.java
index 7814787da..5cef9ff84 100644
--- a/smp-resource-extensions/oasis-smp-spi/src/test/java/eu/europa/ec/smp/spi/OasisSMPExtensionTest.java
+++ b/smp-resource-extensions/oasis-smp-spi/src/test/java/eu/europa/ec/smp/spi/OasisSMPExtensionTest.java
@@ -1,33 +1,59 @@
 package eu.europa.ec.smp.spi;
 
+import eu.europa.ec.smp.spi.def.OasisSMPServiceGroup10;
+import eu.europa.ec.smp.spi.def.OasisSMPServiceGroup20;
+import eu.europa.ec.smp.spi.resource.ResourceDefinitionSpi;
 import org.junit.jupiter.api.Test;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+
+import java.util.List;
 
 import static org.junit.jupiter.api.Assertions.*;
 
 class OasisSMPExtensionTest {
 
+    OasisSMPServiceGroup10 mockOasisSMPServiceGroup10 = Mockito.mock(OasisSMPServiceGroup10.class);
+    OasisSMPServiceGroup20 mockOasisSMPServiceGroup20 = Mockito.mock(OasisSMPServiceGroup20.class);
+
+    OasisSMPExtension testInstance = new OasisSMPExtension(mockOasisSMPServiceGroup10, mockOasisSMPServiceGroup20);
     @Test
-    void identifier() {
-        
+    void testIdentifier() {
+
+        String result = testInstance.identifier();
+
+        assertEquals("edelivery-oasis-smp-extension", result);
     }
 
     @Test
-    void name() {
+    void testName() {
+        String result = testInstance.name();
+        assertEquals("Oasis SMP 1.0 and 2.0", result);
     }
 
     @Test
-    void description() {
+    void testDescription() {
+        String result = testInstance.description();
+        assertEquals("The extension implements Oasis SMP 1.0 and Oasis 2.0 document handlers", result);
     }
 
     @Test
-    void version() {
+    void testVersion() {
+        String  result = testInstance.version();
+        assertEquals("1.0", result);
     }
 
     @Test
-    void resourceTypes() {
+    void testResourceTypes() {
+        List<ResourceDefinitionSpi> result = testInstance.resourceTypes();
+        assertEquals(2, result.size());
+        assertEquals(mockOasisSMPServiceGroup10, result.get(0));
+        assertEquals(mockOasisSMPServiceGroup20, result.get(1));
     }
 
     @Test
-    void payloadValidators() {
+    void testPayloadValidators() {
+        List<PayloadValidatorSpi> result = testInstance.payloadValidators();
+        assertEquals(0, result.size());
     }
 }
diff --git a/smp-resource-extensions/oasis-smp-spi/src/test/java/eu/europa/ec/smp/spi/converter/ServiceMetadataConverterTest.java b/smp-resource-extensions/oasis-smp-spi/src/test/java/eu/europa/ec/smp/spi/converter/ServiceMetadataConverterTest.java
index c00c643f4..68812bd90 100644
--- a/smp-resource-extensions/oasis-smp-spi/src/test/java/eu/europa/ec/smp/spi/converter/ServiceMetadataConverterTest.java
+++ b/smp-resource-extensions/oasis-smp-spi/src/test/java/eu/europa/ec/smp/spi/converter/ServiceMetadataConverterTest.java
@@ -42,7 +42,7 @@ import static org.junit.jupiter.api.Assertions.*;
 public class ServiceMetadataConverterTest {
 
     private static final String NS = "http://docs.oasis-open.org/bdxr/ns/SMP/2016/05";
-    private static final String RES_PATH = "/examples/conversion/";
+    private static final String RES_PATH = "/examples/oasis-smp-1.0/";
 
     @Rule
     public ExpectedException expectedExeption = ExpectedException.none();
@@ -52,7 +52,7 @@ public class ServiceMetadataConverterTest {
     @Test
     public void testUnmarshalServiceInformation() throws Exception {
         //given
-        byte[] inputDoc = XmlTestUtils.loadDocumentAsByteArray(RES_PATH + "ServiceMetadataWithServiceInformation.xml");
+        byte[] inputDoc = XmlTestUtils.loadDocumentAsByteArray(RES_PATH + "ServiceMetadataWithServiceOk.xml");
 
         //when
         ServiceMetadata serviceMetadata = (ServiceMetadata) testInstance.parseNative(new ByteArrayInputStream(inputDoc));
@@ -122,7 +122,7 @@ public class ServiceMetadataConverterTest {
     @Test
     public void testToSignedServiceMetadataDocument() throws Exception {
         //given
-        byte[] inputDoc = XmlTestUtils.loadDocumentAsByteArray(RES_PATH + "ServiceMetadataWithServiceInformation.xml");
+        byte[] inputDoc = XmlTestUtils.loadDocumentAsByteArray(RES_PATH + "ServiceMetadataWithServiceOk.xml");
 
         //when
         Document signedServiceMetadataDoc = DomUtils.toSignedServiceMetadata10Document(inputDoc);
@@ -134,8 +134,9 @@ public class ServiceMetadataConverterTest {
 
         NodeList children = root.getChildNodes();
         assertEquals(1, children.getLength());
-        byte[] resultServiceMetadata = XmlTestUtils.marshallToByteArray(children.item(0));
-        assertTrue(Arrays.equals(inputDoc, resultServiceMetadata));
+        assertEquals("ServiceMetadata", children.item(0).getLocalName());
+        assertEquals(NS, children.item(0).getNamespaceURI());
+
     }
 
     @Test
diff --git a/smp-resource-extensions/oasis-smp-spi/src/test/java/eu/europa/ec/smp/spi/handler/AbstractHandlerTest.java b/smp-resource-extensions/oasis-smp-spi/src/test/java/eu/europa/ec/smp/spi/handler/AbstractHandlerTest.java
new file mode 100644
index 000000000..5f0d28e8f
--- /dev/null
+++ b/smp-resource-extensions/oasis-smp-spi/src/test/java/eu/europa/ec/smp/spi/handler/AbstractHandlerTest.java
@@ -0,0 +1,113 @@
+package eu.europa.ec.smp.spi.handler;
+
+import eu.europa.ec.smp.spi.api.SmpDataServiceApi;
+import eu.europa.ec.smp.spi.api.SmpIdentifierServiceApi;
+import eu.europa.ec.smp.spi.api.SmpXmlSignatureApi;
+import eu.europa.ec.smp.spi.api.model.RequestData;
+import eu.europa.ec.smp.spi.api.model.ResourceIdentifier;
+import eu.europa.ec.smp.spi.api.model.ResponseData;
+import eu.europa.ec.smp.spi.def.OasisSMPServiceGroup10;
+import eu.europa.ec.smp.spi.exceptions.ResourceException;
+import org.mockito.Mockito;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.util.Collections;
+
+import static org.junit.Assert.assertTrue;
+
+abstract class AbstractHandlerTest {
+    protected SmpDataServiceApi mockSmpDataApi = Mockito.mock(SmpDataServiceApi.class);
+    protected SmpIdentifierServiceApi mockSmpIdentifierServiceApi = Mockito.mock(SmpIdentifierServiceApi.class);
+    protected SmpXmlSignatureApi mockSignatureApi = Mockito.mock(SmpXmlSignatureApi.class);
+
+
+    protected RequestData requestData = Mockito.mock(RequestData.class);
+    protected ResponseData responseData = Mockito.mock(ResponseData.class);
+
+    void readResourceAction(String resourceName, ResourceIdentifier resourceIdentifier) throws ResourceException {
+        readResourceAction(resourceName, resourceIdentifier, null);
+    }
+
+    void readResourceAction(String resourceName, ResourceIdentifier resourceIdentifier, ResourceIdentifier subresourceIdentifier) throws ResourceException {
+
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        Mockito.doReturn(baos).when(responseData).getOutputStream();
+        Mockito.doReturn(OasisSMPServiceGroup10.class.getResourceAsStream(resourceName)).when(requestData).getResourceInputStream();
+        Mockito.doReturn(resourceIdentifier).when(requestData).getResourceIdentifier();
+        if (subresourceIdentifier != null) {
+            Mockito.doReturn(subresourceIdentifier).when(requestData).getSubresourceIdentifier();
+        }
+
+        Mockito.when(mockSmpIdentifierServiceApi.normalizeResourceIdentifier(Mockito.anyString(), Mockito.anyString())).thenAnswer(i -> new ResourceIdentifier((String) i.getArguments()[0], (String) i.getArguments()[1]));
+        getTestInstance().readResource(requestData, responseData);
+
+        assertTrue(baos.size() > 0);
+    }
+
+    void storeResourceAction(String resourceName, ResourceIdentifier resourceIdentifier) throws ResourceException {
+        storeResourceAction(resourceName, resourceIdentifier, null);
+    }
+
+    void storeResourceAction(String resourceName, ResourceIdentifier resourceIdentifier, ResourceIdentifier subresourceIdentifier) throws ResourceException {
+
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        Mockito.doReturn(baos).when(responseData).getOutputStream();
+        Mockito.doReturn(OasisSMPServiceGroup10.class.getResourceAsStream(resourceName)).when(requestData).getResourceInputStream();
+        Mockito.doReturn(resourceIdentifier).when(requestData).getResourceIdentifier();
+        if (subresourceIdentifier != null) {
+            Mockito.doReturn(subresourceIdentifier).when(requestData).getSubresourceIdentifier();
+            Mockito.when(mockSmpIdentifierServiceApi.normalizeSubresourceIdentifier(Mockito.anyString(), Mockito.anyString())).thenAnswer(i -> new ResourceIdentifier((String) i.getArguments()[0], (String) i.getArguments()[1]));
+        }
+        Mockito.when(mockSmpIdentifierServiceApi.normalizeResourceIdentifier(Mockito.anyString(), Mockito.anyString())).thenAnswer(i -> new ResourceIdentifier((String) i.getArguments()[0], (String) i.getArguments()[1]));
+
+        getTestInstance().storeResource(requestData, responseData);
+    }
+
+    void validateResourceAction(String resourceName, ResourceIdentifier resourceIdentifier) throws ResourceException {
+        validateResourceAction(resourceName, resourceIdentifier, null);
+    }
+
+    void validateResourceAction(String resourceName, ResourceIdentifier resourceIdentifier, ResourceIdentifier subresourceIdentifier) throws ResourceException {
+        // validate
+        if (subresourceIdentifier != null) {
+            Mockito.doReturn(subresourceIdentifier).when(requestData).getSubresourceIdentifier();
+            Mockito.when(mockSmpIdentifierServiceApi.normalizeSubresourceIdentifier(Mockito.anyString(), Mockito.anyString())).thenAnswer(i -> new ResourceIdentifier((String) i.getArguments()[0], (String) i.getArguments()[1]));
+        }
+        Mockito.doReturn(OasisSMPServiceGroup10.class.getResourceAsStream(resourceName)).when(requestData).getResourceInputStream();
+        Mockito.doReturn(resourceIdentifier).when(requestData).getResourceIdentifier();
+        Mockito.when(mockSmpIdentifierServiceApi.normalizeResourceIdentifier(Mockito.anyString(), Mockito.anyString())).thenAnswer(i -> new ResourceIdentifier((String) i.getArguments()[0], (String) i.getArguments()[1]));
+
+
+
+        getTestInstance().validateResource(requestData);
+    }
+
+
+    void generateResourceAction(ResourceIdentifier resourceIdentifier) throws ResourceException {
+        generateResourceAction(resourceIdentifier, null);
+    }
+
+    void generateResourceAction(ResourceIdentifier resourceIdentifier, ResourceIdentifier subresourceIdentifier) throws ResourceException {
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        Mockito.doReturn(resourceIdentifier).when(requestData).getResourceIdentifier();
+        if (subresourceIdentifier != null) {
+            Mockito.doReturn(subresourceIdentifier).when(requestData).getSubresourceIdentifier();
+            Mockito.when(mockSmpIdentifierServiceApi.normalizeSubresourceIdentifier(Mockito.anyString(), Mockito.anyString())).thenAnswer(i -> new ResourceIdentifier((String) i.getArguments()[0], (String) i.getArguments()[1]));
+
+        }
+        Mockito.doReturn(baos).when(responseData).getOutputStream();
+
+        getTestInstance().generateResource(requestData, responseData, Collections.emptyList());
+        assertTrue(baos.size() > 0);
+
+        // The generated resource should be valid
+        ByteArrayInputStream bios = new ByteArrayInputStream(baos.toByteArray());
+        Mockito.doReturn(bios).when(requestData).getResourceInputStream();
+        Mockito.doReturn(resourceIdentifier).when(mockSmpIdentifierServiceApi).normalizeResourceIdentifier(Mockito.anyString(), Mockito.anyString());
+
+        getTestInstance().validateResource(requestData);
+    }
+
+    abstract AbstractOasisSMPHandler getTestInstance();
+}
diff --git a/smp-resource-extensions/oasis-smp-spi/src/test/java/eu/europa/ec/smp/spi/handler/OasisSMPServiceGroup10HandlerTest.java b/smp-resource-extensions/oasis-smp-spi/src/test/java/eu/europa/ec/smp/spi/handler/OasisSMPServiceGroup10HandlerTest.java
new file mode 100644
index 000000000..9df2cbb5c
--- /dev/null
+++ b/smp-resource-extensions/oasis-smp-spi/src/test/java/eu/europa/ec/smp/spi/handler/OasisSMPServiceGroup10HandlerTest.java
@@ -0,0 +1,76 @@
+package eu.europa.ec.smp.spi.handler;
+
+import eu.europa.ec.smp.spi.api.model.ResourceIdentifier;
+import eu.europa.ec.smp.spi.exceptions.ResourceException;
+import org.hamcrest.MatcherAssert;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.Assert.assertThrows;
+
+class OasisSMPServiceGroup10HandlerTest extends AbstractHandlerTest {
+    @Override
+    public AbstractOasisSMPHandler getTestInstance() {
+        return new OasisSMPServiceGroup10Handler(mockSmpDataApi, mockSmpIdentifierServiceApi);
+    }
+
+    @Test
+    void testGenerateResource() throws ResourceException {
+
+        ResourceIdentifier resourceIdentifier = new ResourceIdentifier("test-identifier", "test-test-test");
+
+        generateResourceAction(resourceIdentifier);
+    }
+
+    @Test
+    void validateResourceOK() throws ResourceException {
+        ResourceIdentifier resourceIdentifier = new ResourceIdentifier("urn:eu:ncpb:utest", "ehealth-actorid-qns");
+        // validate
+        validateResourceAction("/examples/oasis-smp-1.0/ServiceGroupOK.xml", resourceIdentifier);
+    }
+
+    @Test
+    void validateResourceDisallowedDocType() {
+        ResourceIdentifier resourceIdentifier = new ResourceIdentifier("urn:eu:ncpb:utest", "ehealth-actorid-qns");
+        // validate
+        ResourceException result = assertThrows(ResourceException.class,
+                () -> validateResourceAction("/examples/oasis-smp-1.0/ServiceGroupWithDOCTYPE.xml", resourceIdentifier));
+        MatcherAssert.assertThat(result.getMessage(), org.hamcrest.Matchers.containsString("DOCTYPE is disallowed"));
+    }
+
+    @Test
+    void validateResourceInvalidIdentifier() {
+        ResourceIdentifier resourceIdentifier = new ResourceIdentifier("urn:poland:ncpb:InvalidIdentifier", "ehealth-actorid-qns");
+        // validate
+        ResourceException result = assertThrows(ResourceException.class,
+                () -> validateResourceAction("/examples/oasis-smp-1.0/ServiceGroupOK.xml", resourceIdentifier));
+        MatcherAssert.assertThat(result.getMessage(), org.hamcrest.Matchers.containsString("Participant identifiers don't match"));
+    }
+
+    @Test
+    void validateResourceInvalidScheme() {
+        ResourceIdentifier resourceIdentifier = new ResourceIdentifier("urn:poland:ncpb:utestt", "ehealth-actorid-qns");
+        // validate
+        ResourceException result = assertThrows(ResourceException.class,
+                () -> validateResourceAction("/examples/oasis-smp-1.0/ServiceGroupInvalidScheme.xml", resourceIdentifier));
+        MatcherAssert.assertThat(result.getMessage(), org.hamcrest.Matchers.containsString("SAXParseException"));
+    }
+
+    @Test
+    void readResourceOK() throws ResourceException {
+        String resourceName = "/examples/oasis-smp-1.0/ServiceGroupOK.xml";
+        ResourceIdentifier resourceIdentifier = new ResourceIdentifier("urn:eu:ncpb:utest", "ehealth-actorid-qns");
+
+        readResourceAction(resourceName, resourceIdentifier);
+    }
+
+
+    @Test
+    void storeResourceOK() throws ResourceException {
+        String resourceName = "/examples/oasis-smp-1.0/ServiceGroupOK.xml";
+        ResourceIdentifier resourceIdentifier = new ResourceIdentifier("urn:eu:ncpb:utest", "ehealth-actorid-qns");
+
+        storeResourceAction(resourceName, resourceIdentifier);
+    }
+
+
+}
diff --git a/smp-resource-extensions/oasis-smp-spi/src/test/java/eu/europa/ec/smp/spi/handler/OasisSMPServiceGroup20HandlerTest.java b/smp-resource-extensions/oasis-smp-spi/src/test/java/eu/europa/ec/smp/spi/handler/OasisSMPServiceGroup20HandlerTest.java
new file mode 100644
index 000000000..288b5cb3d
--- /dev/null
+++ b/smp-resource-extensions/oasis-smp-spi/src/test/java/eu/europa/ec/smp/spi/handler/OasisSMPServiceGroup20HandlerTest.java
@@ -0,0 +1,75 @@
+package eu.europa.ec.smp.spi.handler;
+
+import eu.europa.ec.smp.spi.api.model.ResourceIdentifier;
+import eu.europa.ec.smp.spi.exceptions.ResourceException;
+import org.hamcrest.MatcherAssert;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.Assert.assertThrows;
+
+class OasisSMPServiceGroup20HandlerTest extends AbstractHandlerTest {
+    @Override
+    public AbstractOasisSMPHandler getTestInstance() {
+        return new OasisSMPServiceGroup20Handler(mockSmpDataApi, mockSmpIdentifierServiceApi, mockSignatureApi);
+    }
+
+    @Test
+    void testGenerateResource() throws ResourceException {
+
+        ResourceIdentifier resourceIdentifier = new ResourceIdentifier("test-identifier", "test-test-test");
+
+        generateResourceAction(resourceIdentifier);
+    }
+
+    @Test
+    void validateResourceOK() throws ResourceException {
+        ResourceIdentifier resourceIdentifier = new ResourceIdentifier( "9925:0367302178", "iso6523-actorid-upis");
+        // validate
+        validateResourceAction("/examples/oasis-smp-2.0/service_group_unsigned_valid_iso6523.xml", resourceIdentifier);
+    }
+
+    @Test
+    void validateResourceDisallowedDocType() {
+        ResourceIdentifier resourceIdentifier = new ResourceIdentifier( "9925:0367302178", "iso6523-actorid-upis");
+        // validate
+        ResourceException result = assertThrows(ResourceException.class,
+                () -> validateResourceAction("/examples/oasis-smp-2.0/service_group_unsigned_invalid_iso6523_DTD.xml", resourceIdentifier));
+        MatcherAssert.assertThat(result.getMessage(), org.hamcrest.Matchers.containsString("accessExternalDTD"));
+    }
+
+    @Test
+    void validateResourceInvalidIdentifier() {
+        ResourceIdentifier resourceIdentifier = new ResourceIdentifier( "9925:0367302178:invalid", "iso6523-actorid-upis");
+        // validate
+        ResourceException result = assertThrows(ResourceException.class,
+                () -> validateResourceAction("/examples/oasis-smp-2.0/service_group_unsigned_valid_iso6523.xml", resourceIdentifier));
+        MatcherAssert.assertThat(result.getMessage(), org.hamcrest.Matchers.containsString("Participant identifiers don't match"));
+    }
+
+    @Test
+    void validateResourceInvalidScheme() {
+        ResourceIdentifier resourceIdentifier = new ResourceIdentifier( "9925:0367302178", "iso6523-actorid-upis");
+        // validate
+        ResourceException result = assertThrows(ResourceException.class,
+                () -> validateResourceAction("/examples/oasis-smp-2.0/service_group_unsigned_invalid_iso6523.xml", resourceIdentifier));
+        MatcherAssert.assertThat(result.getMessage(), org.hamcrest.Matchers.containsString("SAXParseException"));
+    }
+
+    @Test
+    void readResourceOK() throws ResourceException {
+        String resourceName = "/examples/oasis-smp-2.0/service_group_unsigned_valid_iso6523.xml";
+        ResourceIdentifier resourceIdentifier = new ResourceIdentifier("iso6523-actorid-upis", "9925:0367302178");
+
+        readResourceAction(resourceName, resourceIdentifier);
+    }
+
+    @Test
+    void storeResourceOK() throws ResourceException {
+        String resourceName = "/examples/oasis-smp-2.0/service_group_unsigned_valid_iso6523-no-references.xml";
+        ResourceIdentifier resourceIdentifier = new ResourceIdentifier("9925:0367302178", "iso6523-actorid-upis");
+
+        storeResourceAction(resourceName, resourceIdentifier);
+    }
+
+
+}
diff --git a/smp-resource-extensions/oasis-smp-spi/src/test/java/eu/europa/ec/smp/spi/handler/OasisSMPServiceMetadata10HandlerTest.java b/smp-resource-extensions/oasis-smp-spi/src/test/java/eu/europa/ec/smp/spi/handler/OasisSMPServiceMetadata10HandlerTest.java
new file mode 100644
index 000000000..c242f616e
--- /dev/null
+++ b/smp-resource-extensions/oasis-smp-spi/src/test/java/eu/europa/ec/smp/spi/handler/OasisSMPServiceMetadata10HandlerTest.java
@@ -0,0 +1,96 @@
+package eu.europa.ec.smp.spi.handler;
+
+import eu.europa.ec.smp.spi.api.model.ResourceIdentifier;
+import eu.europa.ec.smp.spi.exceptions.ResourceException;
+import eu.europa.ec.smp.spi.validation.ServiceMetadata10Validator;
+import org.hamcrest.MatcherAssert;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.Assert.assertThrows;
+
+class OasisSMPServiceMetadata10HandlerTest extends AbstractHandlerTest {
+
+
+    @Override
+    public AbstractOasisSMPHandler getTestInstance() {
+        return new OasisSMPServiceMetadata10Handler(mockSmpDataApi, mockSmpIdentifierServiceApi, mockSignatureApi, new ServiceMetadata10Validator(mockSmpIdentifierServiceApi));
+    }
+
+    @Test
+    void testGenerateResource() throws ResourceException {
+
+        ResourceIdentifier resourceIdentifier = new ResourceIdentifier("test-identifier", "test-test-test");
+        ResourceIdentifier subResourceIdentifier = new ResourceIdentifier("test-subidentifier", "test-test-test");
+
+        generateResourceAction(resourceIdentifier, subResourceIdentifier);
+    }
+
+    @Test
+    void validateResourceOK() throws ResourceException {
+        ResourceIdentifier resourceIdentifier = new ResourceIdentifier("urn:eu:ncpb:utest", "ehealth-actorid-qns");
+        ResourceIdentifier subResourceIdentifier = new ResourceIdentifier("urn::epsos##services:extended:epsos::107", "ehealth-resid-qns");
+        // validate
+        validateResourceAction("/examples/oasis-smp-1.0/ServiceMetadataWithServiceOk.xml", resourceIdentifier, subResourceIdentifier);
+    }
+
+    @Test
+    void validateResourceDisallowedDocType() {
+        ResourceIdentifier resourceIdentifier = new ResourceIdentifier("urn:poland:ncpb", "ehealth-actorid-qns");
+        ResourceIdentifier subResourceIdentifier = new ResourceIdentifier("urn::epsos##services:extended:epsos::107", "ehealth-resid-qns");
+        // validate
+        ResourceException result = assertThrows(ResourceException.class,
+                () -> validateResourceAction("/examples/oasis-smp-1.0/ServiceMetadataWithDOCTYPE.xml", resourceIdentifier, subResourceIdentifier));
+        MatcherAssert.assertThat(result.getMessage(), org.hamcrest.Matchers.containsString("DOCTYPE is disallowed"));
+    }
+
+    @Test
+    void validateResourceInvalidIdentifier() {
+        ResourceIdentifier resourceIdentifier = new ResourceIdentifier("urn:poland:ncpb:wrongIdentifier", "ehealth-actorid-qns");
+        ResourceIdentifier subResourceIdentifier = new ResourceIdentifier("urn::epsos##services:extended:epsos::101", "ehealth-resid-qns");
+        // validate
+        ResourceException result = assertThrows(ResourceException.class,
+                () -> validateResourceAction("/examples/oasis-smp-1.0/ServiceMetadataWithServiceOk.xml", resourceIdentifier, subResourceIdentifier));
+        MatcherAssert.assertThat(result.getMessage(), org.hamcrest.Matchers.containsString("Participant identifiers don't match"));
+    }
+
+    @Test
+    void validateResourceInvalidDocumentIdentifier() {
+        ResourceIdentifier resourceIdentifier = new ResourceIdentifier("urn:eu:ncpb:utest", "ehealth-actorid-qns");
+        ResourceIdentifier subResourceIdentifier = new ResourceIdentifier("urn::epsos##services:extended:epsos::101:invalidIdentifeir", "ehealth-resid-qns");
+        // validate
+        ResourceException result = assertThrows(ResourceException.class,
+                () -> validateResourceAction("/examples/oasis-smp-1.0/ServiceMetadataWithServiceOk.xml", resourceIdentifier, subResourceIdentifier));
+        MatcherAssert.assertThat(result.getMessage(), org.hamcrest.Matchers.containsString("Document identifiers don't match"));
+    }
+
+    @Test
+    void validateResourceInvalidScheme() {
+        ResourceIdentifier resourceIdentifier = new ResourceIdentifier("urn:poland:ncpb", "ehealth-actorid-qns");
+        ResourceIdentifier subResourceIdentifier = new ResourceIdentifier("urn::epsos##services:extended:epsos::10", "ehealth-resid-qns");
+        // validate
+        ResourceException result = assertThrows(ResourceException.class,
+                () -> validateResourceAction("/examples/oasis-smp-1.0/ServiceMetadataMissingMandatoryFields.xml", resourceIdentifier, subResourceIdentifier));
+        MatcherAssert.assertThat(result.getMessage(), org.hamcrest.Matchers.containsString("SAXParseException"));
+    }
+
+    @Test
+    void readResourceOK() throws ResourceException {
+        String resourceName = "/examples/oasis-smp-1.0/ServiceMetadataWithServiceOk.xml";
+        ResourceIdentifier resourceIdentifier = new ResourceIdentifier("urn:eu:ncpb:utest", "ehealth-actorid-qns");
+        ResourceIdentifier subResourceIdentifier = new ResourceIdentifier("urn::epsos##services:extended:epsos::10", "ehealth-resid-qns");
+
+        readResourceAction(resourceName, resourceIdentifier, subResourceIdentifier);
+    }
+
+
+    @Test
+    void storeResourceOK() throws ResourceException {
+        String resourceName = "/examples/oasis-smp-1.0/ServiceMetadataWithServiceOk.xml";
+        ResourceIdentifier resourceIdentifier = new ResourceIdentifier("urn:eu:ncpb:utest", "ehealth-actorid-qns");
+        ResourceIdentifier subResourceIdentifier = new ResourceIdentifier("urn::epsos##services:extended:epsos::107", "ehealth-resid-qns");
+
+        storeResourceAction(resourceName, resourceIdentifier, subResourceIdentifier);
+    }
+
+
+}
diff --git a/smp-resource-extensions/oasis-smp-spi/src/test/java/eu/europa/ec/smp/spi/handler/OasisSMPServiceMetadata20HandlerTest.java b/smp-resource-extensions/oasis-smp-spi/src/test/java/eu/europa/ec/smp/spi/handler/OasisSMPServiceMetadata20HandlerTest.java
new file mode 100644
index 000000000..ed7db215f
--- /dev/null
+++ b/smp-resource-extensions/oasis-smp-spi/src/test/java/eu/europa/ec/smp/spi/handler/OasisSMPServiceMetadata20HandlerTest.java
@@ -0,0 +1,87 @@
+package eu.europa.ec.smp.spi.handler;
+
+import eu.europa.ec.smp.spi.api.model.ResourceIdentifier;
+import eu.europa.ec.smp.spi.exceptions.ResourceException;
+import eu.europa.ec.smp.spi.validation.ServiceMetadata10Validator;
+import eu.europa.ec.smp.spi.validation.ServiceMetadata20Validator;
+import org.hamcrest.MatcherAssert;
+import org.junit.jupiter.api.Test;
+import org.mockito.Mockito;
+
+import static org.junit.Assert.assertThrows;
+
+class OasisSMPServiceMetadata20HandlerTest extends AbstractHandlerTest {
+
+
+    ResourceIdentifier resourceIdentifier = new ResourceIdentifier( "9915:123456789", "iso6523-actorid-upis");
+    ResourceIdentifier subResourceIdentifier = new ResourceIdentifier("urn:oasis:names:specification:ubl:schema:xsd:Invoice-2::Invoice##urn:www.cenbii.eu:transaction:biitrns010:ver2.0:extended:urn:www.peppol.eu:bis:peppol5a:ver2.0:extended:urn:www.difi.no:ehf:faktura:ver2.0::2.1", "bdx-docid-qns");
+
+    @Override
+    public AbstractOasisSMPHandler getTestInstance() {
+        return new OasisSMPServiceMetadata20Handler(mockSmpDataApi, mockSmpIdentifierServiceApi, mockSignatureApi, new ServiceMetadata20Validator(mockSmpIdentifierServiceApi) );
+    }
+
+    @Test
+    void testGenerateResource() throws ResourceException {
+
+        generateResourceAction(resourceIdentifier, subResourceIdentifier);
+    }
+
+    @Test
+    void validateResourceOK() throws ResourceException {
+
+        // validate
+        validateResourceAction("/examples/oasis-smp-2.0/service_metadata_unsigned_valid_iso6523.xml", resourceIdentifier, subResourceIdentifier);
+    }
+
+    @Test
+    void validateResourceDisallowedDocType() {
+        // validate
+        ResourceException result = assertThrows(ResourceException.class,
+                () -> validateResourceAction("/examples/oasis-smp-2.0/service_metadata_unsigned_invalid_iso6523_DTD.xml", resourceIdentifier, subResourceIdentifier));
+        MatcherAssert.assertThat(result.getMessage(), org.hamcrest.Matchers.containsString("accessExternalDTD"));
+    }
+
+    @Test
+    void validateResourceInvalidIdentifier() {
+        ResourceIdentifier resourceIdentifierInvalid = new ResourceIdentifier("urn:poland:ncpb:wrongIdentifier", "ehealth-actorid-qns");
+        // validate
+        ResourceException result = assertThrows(ResourceException.class,
+                () -> validateResourceAction("/examples/oasis-smp-2.0/service_metadata_unsigned_valid_iso6523.xml", resourceIdentifierInvalid, subResourceIdentifier));
+        MatcherAssert.assertThat(result.getMessage(), org.hamcrest.Matchers.containsString("Participant identifiers don't match"));
+    }
+
+    @Test
+    void validateResourceInvalidDocumentIdentifier() {
+
+        ResourceIdentifier subResourceIdentifier = new ResourceIdentifier("urn::epsos##services:extended:epsos::101:invalidIdentifeir", "ehealth-resid-qns");
+        // validate
+        ResourceException result = assertThrows(ResourceException.class,
+                () -> validateResourceAction("/examples/oasis-smp-2.0/service_metadata_unsigned_valid_iso6523.xml", resourceIdentifier, subResourceIdentifier));
+        MatcherAssert.assertThat(result.getMessage(), org.hamcrest.Matchers.containsString("Document identifiers don't match"));
+    }
+
+    @Test
+    void validateResourceInvalidScheme() {
+
+        // validate
+        ResourceException result = assertThrows(ResourceException.class,
+                () -> validateResourceAction("/examples/oasis-smp-2.0/service_metadata_unsigned_invalid_iso6523.xml", resourceIdentifier, subResourceIdentifier));
+        MatcherAssert.assertThat(result.getMessage(), org.hamcrest.Matchers.containsString("SAXParseException"));
+    }
+
+    @Test
+    void readResourceOK() throws ResourceException {
+        String resourceName = "/examples/oasis-smp-2.0/service_metadata_unsigned_valid_iso6523.xml";
+
+        readResourceAction(resourceName, resourceIdentifier, subResourceIdentifier);
+    }
+
+    @Test
+    void storeResourceOK() throws ResourceException {
+        String resourceName = "/examples/oasis-smp-2.0/service_metadata_unsigned_valid_iso6523.xml";
+        storeResourceAction(resourceName, resourceIdentifier, subResourceIdentifier);
+    }
+
+
+}
diff --git a/smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/conversion/ServiceGroupOK.xml b/smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/conversion/ServiceGroupOK.xml
deleted file mode 100644
index 397a71f79..000000000
--- a/smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/conversion/ServiceGroupOK.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<ServiceGroup xmlns="http://docs.oasis-open.org/bdxr/ns/SMP/2016/05">
-    <ParticipantIdentifier/>
-    <ServiceMetadataReferenceCollection>
-        <ServiceMetadataReference href="http://poland.pl"/>
-    </ServiceMetadataReferenceCollection>
-</ServiceGroup>
\ No newline at end of file
diff --git a/smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/oasis-smp-1.0/ServiceGroupInvalidScheme.xml b/smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/oasis-smp-1.0/ServiceGroupInvalidScheme.xml
new file mode 100644
index 000000000..351b8375d
--- /dev/null
+++ b/smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/oasis-smp-1.0/ServiceGroupInvalidScheme.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<ServiceGroup xmlns="http://docs.oasis-open.org/bdxr/ns/SMP/2016/05">
+    <ParticipantIdentifier scheme="ehealth-actorid-qns">urn:eu:ncpb:utest</ParticipantIdentifier>
+    <ServiceMetadataReferenceCollectionNotValid/>
+    This is not valid ServiceGroup XML
+</ServiceGroup>
diff --git a/smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/oasis-smp-1.0/ServiceGroupOK.xml b/smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/oasis-smp-1.0/ServiceGroupOK.xml
new file mode 100644
index 000000000..38420ca0c
--- /dev/null
+++ b/smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/oasis-smp-1.0/ServiceGroupOK.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<ServiceGroup xmlns="http://docs.oasis-open.org/bdxr/ns/SMP/2016/05">
+    <ParticipantIdentifier scheme="ehealth-actorid-qns">urn:eu:ncpb:utest</ParticipantIdentifier>
+    <ServiceMetadataReferenceCollection />
+</ServiceGroup>
diff --git a/smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/conversion/ServiceGroupWithDOCTYPE.xml b/smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/oasis-smp-1.0/ServiceGroupWithDOCTYPE.xml
similarity index 100%
rename from smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/conversion/ServiceGroupWithDOCTYPE.xml
rename to smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/oasis-smp-1.0/ServiceGroupWithDOCTYPE.xml
diff --git a/smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/conversion/ServiceGroupWithExtension.xml b/smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/oasis-smp-1.0/ServiceGroupWithExtension.xml
similarity index 100%
rename from smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/conversion/ServiceGroupWithExtension.xml
rename to smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/oasis-smp-1.0/ServiceGroupWithExtension.xml
diff --git a/smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/conversion/ServiceMetadataMissingMandatoryFields.xml b/smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/oasis-smp-1.0/ServiceMetadataMissingMandatoryFields.xml
similarity index 100%
rename from smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/conversion/ServiceMetadataMissingMandatoryFields.xml
rename to smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/oasis-smp-1.0/ServiceMetadataMissingMandatoryFields.xml
diff --git a/smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/conversion/ServiceMetadataWithDOCTYPE.xml b/smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/oasis-smp-1.0/ServiceMetadataWithDOCTYPE.xml
similarity index 100%
rename from smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/conversion/ServiceMetadataWithDOCTYPE.xml
rename to smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/oasis-smp-1.0/ServiceMetadataWithDOCTYPE.xml
diff --git a/smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/conversion/ServiceMetadataWithRedirect.xml b/smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/oasis-smp-1.0/ServiceMetadataWithRedirect.xml
similarity index 100%
rename from smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/conversion/ServiceMetadataWithRedirect.xml
rename to smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/oasis-smp-1.0/ServiceMetadataWithRedirect.xml
diff --git a/smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/conversion/ServiceMetadataWithServiceInformationUtf8.xml b/smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/oasis-smp-1.0/ServiceMetadataWithServiceInformationUtf8.xml
similarity index 100%
rename from smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/conversion/ServiceMetadataWithServiceInformationUtf8.xml
rename to smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/oasis-smp-1.0/ServiceMetadataWithServiceInformationUtf8.xml
diff --git a/smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/conversion/ServiceMetadataWithServiceInformation.xml b/smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/oasis-smp-1.0/ServiceMetadataWithServiceOk.xml
similarity index 99%
rename from smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/conversion/ServiceMetadataWithServiceInformation.xml
rename to smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/oasis-smp-1.0/ServiceMetadataWithServiceOk.xml
index dc8146280..5f49eacd7 100644
--- a/smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/conversion/ServiceMetadataWithServiceInformation.xml
+++ b/smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/oasis-smp-1.0/ServiceMetadataWithServiceOk.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?><ServiceMetadata xmlns="http://docs.oasis-open.org/bdxr/ns/SMP/2016/05">
     <ServiceInformation>
-        <ParticipantIdentifier scheme="ehealth-actorid-qns">urn:poland:ncpb</ParticipantIdentifier>
+        <ParticipantIdentifier scheme="ehealth-actorid-qns">urn:eu:ncpb:utest</ParticipantIdentifier>
         <DocumentIdentifier scheme="ehealth-resid-qns">urn::epsos##services:extended:epsos::107</DocumentIdentifier>
         <ProcessList>
             <Process>
@@ -17,7 +17,7 @@
                         <TechnicalContactUrl>http://poland.pl/contact</TechnicalContactUrl>
                         <TechnicalInformationUrl>http://poland.pl/contact</TechnicalInformationUrl>
                     </Endpoint>
-                    <Endpoint transportProfile="urn:ihe:iti:2013:xcpd">
+                    <Endpoint transportProfile="urn:ihe:iti:2013:xcpd2">
                         <EndpointURI>http://poland.pl/ncp/patient/list</EndpointURI>
                         <RequireBusinessLevelSignature>false</RequireBusinessLevelSignature>
                         <MinimumAuthenticationLevel>urn:epSOS:loa:1</MinimumAuthenticationLevel>
@@ -44,4 +44,4 @@
             L4XH1GcdCg6oPKPUc+ovbgN7/iR265Elp4qHfpVteBijBTyZReH4oAK9hRhK1gLwtjI7vpjVaPXv
             vkV1fbrz</X509Certificate></X509Data></KeyInfo></Signature></Extension>
     </ServiceInformation>
-</ServiceMetadata>
\ No newline at end of file
+</ServiceMetadata>
diff --git a/smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/oasis-smp-2.0/service_group_unsigned_invalid_iso6523.xml b/smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/oasis-smp-2.0/service_group_unsigned_invalid_iso6523.xml
new file mode 100644
index 000000000..9243e098a
--- /dev/null
+++ b/smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/oasis-smp-2.0/service_group_unsigned_invalid_iso6523.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ServiceGroup xmlns:smb="http://docs.oasis-open.org/bdxr/ns/SMP/2/BasicComponents"
+              xmlns:sma="http://docs.oasis-open.org/bdxr/ns/SMP/2/AggregateComponents"
+              xmlns="http://docs.oasis-open.org/bdxr/ns/SMP/2/ServiceGroup">
+    <smb:SMPVersionID>2.0</smb:SMPVersionID>
+    <sma:ServiceReference>
+        <smb:ID schemeID="bdx-docid-qns">urn::epsos:services##epsos-21</smb:ID>
+        <sma:Process>
+            <smb:ID schemeID="cenbii-procid-ubl">urn:www.cenbii.eu:profile:bii05:ver2.0</smb:ID>
+        </sma:Process>
+    </sma:ServiceReference>
+    <sma:ServiceReference>
+        <smb:ID schemeID="bdx-docid-qns">urn:oasis:names:specification:ubl:schema:xsd:CreditNote-2::CreditNote##urn:www.cenbii.eu:transaction:biitrns014:ver2.0:extended:urn:www.peppol.eu:bis:peppol5a:ver2.0::2.1</smb:ID>
+        <sma:Process>
+            <smb:ID schemeID="cenbii-procid-ubl">urn:www.cenbii.eu:profile:bii05:ver2.0</smb:ID>
+        </sma:Process>
+    </sma:ServiceReference>
+</ServiceGroup>
diff --git a/smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/oasis-smp-2.0/service_group_unsigned_invalid_iso6523_DTD.xml b/smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/oasis-smp-2.0/service_group_unsigned_invalid_iso6523_DTD.xml
new file mode 100644
index 000000000..dc586b5fe
--- /dev/null
+++ b/smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/oasis-smp-2.0/service_group_unsigned_invalid_iso6523_DTD.xml
@@ -0,0 +1,20 @@
+<!DOCTYPE externaladdress SYSTEM "any_external_file_address.dtd">
+<?xml version="1.0" encoding="UTF-8"?>
+<ServiceGroup xmlns:smb="http://docs.oasis-open.org/bdxr/ns/SMP/2/BasicComponents"
+              xmlns:sma="http://docs.oasis-open.org/bdxr/ns/SMP/2/AggregateComponents"
+              xmlns="http://docs.oasis-open.org/bdxr/ns/SMP/2/ServiceGroup">
+    <smb:SMPVersionID>2.0</smb:SMPVersionID>
+    <smb:ParticipantID schemeID="iso6523-actorid-upis">9925:0367302178</smb:ParticipantID>
+    <sma:ServiceReference>
+        <smb:ID schemeID="bdx-docid-qns">urn::epsos:services##epsos-21</smb:ID>
+        <sma:Process>
+            <smb:ID schemeID="cenbii-procid-ubl">urn:www.cenbii.eu:profile:bii05:ver2.0</smb:ID>
+        </sma:Process>
+    </sma:ServiceReference>
+    <sma:ServiceReference>
+        <smb:ID schemeID="bdx-docid-qns">urn:oasis:names:specification:ubl:schema:xsd:CreditNote-2::CreditNote##urn:www.cenbii.eu:transaction:biitrns014:ver2.0:extended:urn:www.peppol.eu:bis:peppol5a:ver2.0::2.1</smb:ID>
+        <sma:Process>
+            <smb:ID schemeID="cenbii-procid-ubl">urn:www.cenbii.eu:profile:bii05:ver2.0</smb:ID>
+        </sma:Process>
+    </sma:ServiceReference>
+</ServiceGroup>
diff --git a/smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/oasis-smp-2.0/service_group_unsigned_valid_iso6523-no-references.xml b/smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/oasis-smp-2.0/service_group_unsigned_valid_iso6523-no-references.xml
new file mode 100644
index 000000000..c45f1c77d
--- /dev/null
+++ b/smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/oasis-smp-2.0/service_group_unsigned_valid_iso6523-no-references.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ServiceGroup xmlns:smb="http://docs.oasis-open.org/bdxr/ns/SMP/2/BasicComponents"
+              xmlns:sma="http://docs.oasis-open.org/bdxr/ns/SMP/2/AggregateComponents"
+              xmlns="http://docs.oasis-open.org/bdxr/ns/SMP/2/ServiceGroup">
+    <smb:SMPVersionID>2.0</smb:SMPVersionID>
+    <smb:ParticipantID schemeID="iso6523-actorid-upis">9925:0367302178</smb:ParticipantID>
+
+</ServiceGroup>
+
diff --git a/smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/oasis-smp-2.0/service_group_unsigned_valid_iso6523.xml b/smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/oasis-smp-2.0/service_group_unsigned_valid_iso6523.xml
new file mode 100644
index 000000000..4acd68f8b
--- /dev/null
+++ b/smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/oasis-smp-2.0/service_group_unsigned_valid_iso6523.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ServiceGroup xmlns:smb="http://docs.oasis-open.org/bdxr/ns/SMP/2/BasicComponents"
+              xmlns:sma="http://docs.oasis-open.org/bdxr/ns/SMP/2/AggregateComponents"
+              xmlns="http://docs.oasis-open.org/bdxr/ns/SMP/2/ServiceGroup">
+    <smb:SMPVersionID>2.0</smb:SMPVersionID>
+    <smb:ParticipantID schemeID="iso6523-actorid-upis">9925:0367302178</smb:ParticipantID>
+    <sma:ServiceReference>
+        <smb:ID schemeID="bdx-docid-qns">urn::epsos:services##epsos-21</smb:ID>
+        <sma:Process>
+            <smb:ID schemeID="cenbii-procid-ubl">urn:www.cenbii.eu:profile:bii05:ver2.0</smb:ID>
+        </sma:Process>
+    </sma:ServiceReference>
+    <sma:ServiceReference>
+        <smb:ID schemeID="bdx-docid-qns">urn:oasis:names:specification:ubl:schema:xsd:CreditNote-2::CreditNote##urn:www.cenbii.eu:transaction:biitrns014:ver2.0:extended:urn:www.peppol.eu:bis:peppol5a:ver2.0::2.1</smb:ID>
+        <sma:Process>
+            <smb:ID schemeID="cenbii-procid-ubl">urn:www.cenbii.eu:profile:bii05:ver2.0</smb:ID>
+        </sma:Process>
+    </sma:ServiceReference>
+</ServiceGroup>
+
diff --git a/smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/oasis-smp-2.0/service_metadata_unsigned_invalid_iso6523.xml b/smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/oasis-smp-2.0/service_metadata_unsigned_invalid_iso6523.xml
new file mode 100644
index 000000000..4be56bda8
--- /dev/null
+++ b/smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/oasis-smp-2.0/service_metadata_unsigned_invalid_iso6523.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<ServiceMetadata xmlns:smb="http://docs.oasis-open.org/bdxr/ns/SMP/2/BasicComponents"  xmlns:sma="http://docs.oasis-open.org/bdxr/ns/SMP/2/AggregateComponents" xmlns="http://docs.oasis-open.org/bdxr/ns/SMP/2/ServiceMetadata">
+    <smb:SMPVersionID>2.0</smb:SMPVersionID>
+    <smb:ParticipantID schemeID="iso6523-actorid-upis">9915:123456789</smb:ParticipantID>
+    <smb:ServiceID schemeID="bdx-docid-qns">urn:oasis:names:specification:ubl:schema:xsd:Invoice-2::Invoice##urn:www.cenbii.eu:transaction:biitrns010:ver2.0:extended:urn:www.peppol.eu:bis:peppol5a:ver2.0:extended:urn:www.difi.no:ehf:faktura:ver2.0::2.1</smb:ServiceID>
+    <sma:ProcessMetadata>
+        <sma:Process>
+            <smb:ID schemeID="cenbii-procid-ubl">urn:www.cenbii.eu:profile:bii05:ver2.0</smb:ID>
+        </sma:Process>
+        <sma:Endpoint>
+            <smb:TransportProfileID>bdxr-transport-ebms3-as4-v1p0</smb:TransportProfileID>
+            <smb:Description>contact@example.com</smb:Description>
+            <smb:Contact>Access point for testing</smb:Contact>
+            <smb:AddressURI>https://ap.example.com/as4</smb:AddressURI>
+            <smb:ActivationDate>2018-04-12</smb:ActivationDate>
+            <smb:ExpirationDate>2020-04-12</smb:ExpirationDate>
+            <sma:Certificate>
+                <smb:Description>contact@example.com</smb:Description>
+                <smb:Subject>CN=EXAMPLE AP,C=NO</smb:Subject>
+                <smb:Issuer>CN=EXAMPLE AP,C=NO</smb:Issuer>
+                <smb:ActivationDate>2018-04-12</smb:ActivationDate>
+                <smb:ExpirationDate>2020-04-12</smb:ExpirationDate>
+                <smb:ContentBinaryObject mimeCode="application/base64">
+MIICwDCCAaigAwIBAgIEWs7kiDANBgkqhkiG9w0BAQsFADAiMQswCQYDVQQGEwJO
+TzETMBEGA1UEAwwKRVhBTVBMRSBBUDAeFw0xODA0MTIwNDQ2MDBaFw0yMDA0MTIw
+NDQ2MDBaMCIxCzAJBgNVBAYTAk5PMRMwEQYDVQQDDApFWEFNUExFIEFQMIIBIjAN
+BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtuG5qwA2sNvC9dj4purG8hkSVB9p
+CWVHyO9buRrSCC+r2UxSF7Lnmr8Hjii0uIdJeFyYv0Vj9d4CjpYyEeYU2QG96wi+
+w2KdE28HMZFNMwy0iV9vIkbq0esJCcAXQ4C3rPQ4e9F1Tw4oKnS6rEWCw8i8lsKE
+iS/dzIFUa/BVtgjqHvs3siON4k1Y7BU93rZViz8ZM6LB4eA7rYU4le6a8rGKbHa6
+BMSIoKgBuKr8XY9lKb2OVg65+LWTESpPkKiKRikzZhAw+mEVYmljvFwBLSp0IEKW
+3qogVYGA0jz+kWWGOChk58SKsnqhbANoIucz+axxoJOLl0A5328qM7aRTwIDAQAB
+MA0GCSqGSIb3DQEBCwUAA4IBAQBW7VCYhUmRR7xW+QOhUxI//ISjupDdcQ/Jl7hH
+CrUghjL7FmNnJKNqBAwrxcAfdwXwRltWzNT9E1btekfyw4+QL34w20kZ7SNLioZU
+lxVviaoLsf0f70TMPOBGGv/uyV26l5VMBK40FXvcFwDQ5VNiJOYrsxpF//Hh/t76
+QMij6glyLUmYA1aS9Am0zAB5ld+U7HtJAEL6SXinPrPDR1ofcRgx3FzY5pq0PCn9
+EA005L6X4eGkI3HqwpcDzYwDC29pPSfnNP50khfFJMCnT6kKhCkPJYQhcZexGJ2U
+Ad5OU7Gui/WnmjM80x9qHBv2RIIQggpMy838WjPbw11gMOo+
+                </smb:ContentBinaryObject>
+            </sma:Certificate>
+        </sma:Endpoint>
+    </sma:ProcessMetadata>
+</ServiceMetadata>
diff --git a/smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/oasis-smp-2.0/service_metadata_unsigned_invalid_iso6523_DTD.xml b/smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/oasis-smp-2.0/service_metadata_unsigned_invalid_iso6523_DTD.xml
new file mode 100644
index 000000000..2b2786bdc
--- /dev/null
+++ b/smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/oasis-smp-2.0/service_metadata_unsigned_invalid_iso6523_DTD.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!DOCTYPE externaladdress SYSTEM "any_external_file_address.dtd">
+<ServiceMetadata xmlns:smb="http://docs.oasis-open.org/bdxr/ns/SMP/2/BasicComponents"  xmlns:sma="http://docs.oasis-open.org/bdxr/ns/SMP/2/AggregateComponents" xmlns="http://docs.oasis-open.org/bdxr/ns/SMP/2/ServiceMetadata">
+    <smb:SMPVersionID>2.0</smb:SMPVersionID>
+    <smb:ParticipantID schemeID="iso6523-actorid-upis">9915:123456789</smb:ParticipantID>
+    <smb:ServiceID schemeID="bdx-docid-qns">urn:oasis:names:specification:ubl:schema:xsd:Invoice-2::Invoice##urn:www.cenbii.eu:transaction:biitrns010:ver2.0:extended:urn:www.peppol.eu:bis:peppol5a:ver2.0:extended:urn:www.difi.no:ehf:faktura:ver2.0::2.1</smb:ServiceID>
+    <sma:ProcessMetadata>
+        <sma:Process>
+            <smb:ID schemeID="cenbii-procid-ubl">urn:www.cenbii.eu:profile:bii05:ver2.0</smb:ID>
+        </sma:Process>
+        <sma:Endpoint>
+            <smb:TransportProfileID>bdxr-transport-ebms3-as4-v1p0</smb:TransportProfileID>
+            <smb:Description>contact@example.com</smb:Description>
+            <smb:Contact>Access point for testing</smb:Contact>
+            <smb:AddressURI>https://ap.example.com/as4</smb:AddressURI>
+            <smb:ActivationDate>2018-04-12</smb:ActivationDate>
+            <smb:ExpirationDate>2020-04-12</smb:ExpirationDate>
+            <sma:Certificate>
+                <smb:Subject>CN=EXAMPLE AP,C=NO</smb:Subject>
+                <smb:Issuer>CN=EXAMPLE AP,C=NO</smb:Issuer>
+                <smb:ActivationDate>2018-04-12</smb:ActivationDate>
+                <smb:ExpirationDate>2020-04-12</smb:ExpirationDate>
+                <smb:ContentBinaryObject mimeCode="application/base64">
+MIICwDCCAaigAwIBAgIEWs7kiDANBgkqhkiG9w0BAQsFADAiMQswCQYDVQQGEwJO
+TzETMBEGA1UEAwwKRVhBTVBMRSBBUDAeFw0xODA0MTIwNDQ2MDBaFw0yMDA0MTIw
+NDQ2MDBaMCIxCzAJBgNVBAYTAk5PMRMwEQYDVQQDDApFWEFNUExFIEFQMIIBIjAN
+BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtuG5qwA2sNvC9dj4purG8hkSVB9p
+CWVHyO9buRrSCC+r2UxSF7Lnmr8Hjii0uIdJeFyYv0Vj9d4CjpYyEeYU2QG96wi+
+w2KdE28HMZFNMwy0iV9vIkbq0esJCcAXQ4C3rPQ4e9F1Tw4oKnS6rEWCw8i8lsKE
+iS/dzIFUa/BVtgjqHvs3siON4k1Y7BU93rZViz8ZM6LB4eA7rYU4le6a8rGKbHa6
+BMSIoKgBuKr8XY9lKb2OVg65+LWTESpPkKiKRikzZhAw+mEVYmljvFwBLSp0IEKW
+3qogVYGA0jz+kWWGOChk58SKsnqhbANoIucz+axxoJOLl0A5328qM7aRTwIDAQAB
+MA0GCSqGSIb3DQEBCwUAA4IBAQBW7VCYhUmRR7xW+QOhUxI//ISjupDdcQ/Jl7hH
+CrUghjL7FmNnJKNqBAwrxcAfdwXwRltWzNT9E1btekfyw4+QL34w20kZ7SNLioZU
+lxVviaoLsf0f70TMPOBGGv/uyV26l5VMBK40FXvcFwDQ5VNiJOYrsxpF//Hh/t76
+QMij6glyLUmYA1aS9Am0zAB5ld+U7HtJAEL6SXinPrPDR1ofcRgx3FzY5pq0PCn9
+EA005L6X4eGkI3HqwpcDzYwDC29pPSfnNP50khfFJMCnT6kKhCkPJYQhcZexGJ2U
+Ad5OU7Gui/WnmjM80x9qHBv2RIIQggpMy838WjPbw11gMOo+
+                </smb:ContentBinaryObject>
+            </sma:Certificate>
+        </sma:Endpoint>
+    </sma:ProcessMetadata>
+</ServiceMetadata>
diff --git a/smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/oasis-smp-2.0/service_metadata_unsigned_redirection_iso6523.xml b/smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/oasis-smp-2.0/service_metadata_unsigned_redirection_iso6523.xml
new file mode 100644
index 000000000..c7a51c6d0
--- /dev/null
+++ b/smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/oasis-smp-2.0/service_metadata_unsigned_redirection_iso6523.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<ServiceMetadata xmlns:smb="http://docs.oasis-open.org/bdxr/ns/SMP/2/BasicComponents"
+                 xmlns:sma="http://docs.oasis-open.org/bdxr/ns/SMP/2/AggregateComponents"
+                 xmlns="http://docs.oasis-open.org/bdxr/ns/SMP/2/ServiceMetadata">
+    <smb:SMPVersionID>2.0</smb:SMPVersionID>
+    <smb:ParticipantID schemeID="iso6523-actorid-upis">9915:123456789</smb:ParticipantID>
+    <smb:ServiceID schemeID="bdx-docid-qns">Invoice:ver2.0</smb:ServiceID>
+    <sma:ProcessMetadata>
+        <sma:Process>
+            <smb:ID schemeID="cenbii-procid-ubl">urn:www.cenbii.eu:profile:bii05:ver2.0</smb:ID>
+        </sma:Process>
+        <sma:Redirect>
+            <smb:PublisherURI>https://ap.example.com/iso6523-actorid-upis::9915:123456789/services/bdx-docid-qns::Invoice:ver2.0</smb:PublisherURI>
+        </sma:Redirect>
+    </sma:ProcessMetadata>
+</ServiceMetadata>
diff --git a/smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/oasis-smp-2.0/service_metadata_unsigned_valid_iso6523.xml b/smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/oasis-smp-2.0/service_metadata_unsigned_valid_iso6523.xml
new file mode 100644
index 000000000..189f39d88
--- /dev/null
+++ b/smp-resource-extensions/oasis-smp-spi/src/test/resources/examples/oasis-smp-2.0/service_metadata_unsigned_valid_iso6523.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<ServiceMetadata xmlns:smb="http://docs.oasis-open.org/bdxr/ns/SMP/2/BasicComponents"  xmlns:sma="http://docs.oasis-open.org/bdxr/ns/SMP/2/AggregateComponents" xmlns="http://docs.oasis-open.org/bdxr/ns/SMP/2/ServiceMetadata">
+    <smb:SMPVersionID>2.0</smb:SMPVersionID>
+    <smb:ParticipantID schemeID="iso6523-actorid-upis">9915:123456789</smb:ParticipantID>
+    <smb:ServiceID schemeID="bdx-docid-qns">urn:oasis:names:specification:ubl:schema:xsd:Invoice-2::Invoice##urn:www.cenbii.eu:transaction:biitrns010:ver2.0:extended:urn:www.peppol.eu:bis:peppol5a:ver2.0:extended:urn:www.difi.no:ehf:faktura:ver2.0::2.1</smb:ServiceID>
+    <sma:ProcessMetadata>
+        <sma:Process>
+            <smb:ID schemeID="cenbii-procid-ubl">urn:www.cenbii.eu:profile:bii05:ver2.0</smb:ID>
+        </sma:Process>
+        <sma:Endpoint>
+            <smb:TransportProfileID>bdxr-transport-ebms3-as4-v1p0</smb:TransportProfileID>
+            <smb:Description>contact@example.com</smb:Description>
+            <smb:Contact>Access point for testing</smb:Contact>
+            <smb:AddressURI>https://ap.example.com/as4</smb:AddressURI>
+            <smb:ActivationDate>2018-04-12</smb:ActivationDate>
+            <smb:ExpirationDate>2099-04-12</smb:ExpirationDate>
+            <sma:Certificate>
+                <smb:Subject>CN=EXAMPLE AP,C=NO</smb:Subject>
+                <smb:Issuer>CN=EXAMPLE AP,C=NO</smb:Issuer>
+                <smb:ActivationDate>2018-04-12</smb:ActivationDate>
+                <smb:ExpirationDate>2020-04-12</smb:ExpirationDate>
+                <smb:ContentBinaryObject mimeCode="application/base64">
+MIICwDCCAaigAwIBAgIEWs7kiDANBgkqhkiG9w0BAQsFADAiMQswCQYDVQQGEwJO
+TzETMBEGA1UEAwwKRVhBTVBMRSBBUDAeFw0xODA0MTIwNDQ2MDBaFw0yMDA0MTIw
+NDQ2MDBaMCIxCzAJBgNVBAYTAk5PMRMwEQYDVQQDDApFWEFNUExFIEFQMIIBIjAN
+BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtuG5qwA2sNvC9dj4purG8hkSVB9p
+CWVHyO9buRrSCC+r2UxSF7Lnmr8Hjii0uIdJeFyYv0Vj9d4CjpYyEeYU2QG96wi+
+w2KdE28HMZFNMwy0iV9vIkbq0esJCcAXQ4C3rPQ4e9F1Tw4oKnS6rEWCw8i8lsKE
+iS/dzIFUa/BVtgjqHvs3siON4k1Y7BU93rZViz8ZM6LB4eA7rYU4le6a8rGKbHa6
+BMSIoKgBuKr8XY9lKb2OVg65+LWTESpPkKiKRikzZhAw+mEVYmljvFwBLSp0IEKW
+3qogVYGA0jz+kWWGOChk58SKsnqhbANoIucz+axxoJOLl0A5328qM7aRTwIDAQAB
+MA0GCSqGSIb3DQEBCwUAA4IBAQBW7VCYhUmRR7xW+QOhUxI//ISjupDdcQ/Jl7hH
+CrUghjL7FmNnJKNqBAwrxcAfdwXwRltWzNT9E1btekfyw4+QL34w20kZ7SNLioZU
+lxVviaoLsf0f70TMPOBGGv/uyV26l5VMBK40FXvcFwDQ5VNiJOYrsxpF//Hh/t76
+QMij6glyLUmYA1aS9Am0zAB5ld+U7HtJAEL6SXinPrPDR1ofcRgx3FzY5pq0PCn9
+EA005L6X4eGkI3HqwpcDzYwDC29pPSfnNP50khfFJMCnT6kKhCkPJYQhcZexGJ2U
+Ad5OU7Gui/WnmjM80x9qHBv2RIIQggpMy838WjPbw11gMOo+
+                </smb:ContentBinaryObject>
+            </sma:Certificate>
+        </sma:Endpoint>
+    </sma:ProcessMetadata>
+</ServiceMetadata>
-- 
GitLab