From 541b0c4f8d96da3a3b8acdd7050899c1f0e4cedf Mon Sep 17 00:00:00 2001
From: RIHTARSIC Joze <joze.rihtarsic@ext.ec.europa.eu>
Date: Mon, 24 Apr 2023 10:52:52 +0200
Subject: [PATCH] fix BDMSL integration configuration

---
 .../service-group-search-ro.model.ts          |  2 +
 .../service-group-search.component.ts         | 18 ++++--
 .../service-metadata-search-ro.model.ts       |  1 +
 .../db-scripts/sml-mysql5innodb-data.sql      | 20 ++----
 .../tomcat-mysql-smp-sml/runCompose.sh        | 20 +++---
 smp-docker/images/build-docker-images.sh      |  6 +-
 .../sml-mysql5innodb-data.sql                 |  1 -
 .../bind/db.test.edelivery.local              |  5 +-
 .../OasisSMPServiceGroup10Handler.java        |  9 ++-
 .../OasisSMPServiceGroup20Handler.java        | 50 +++++++--------
 .../OasisSMPServiceMetadata20Handler.java     | 64 +++++++++++++++++--
 ...rceDefToResourceDefinitionROConverter.java |  2 +
 .../smp/data/ui/ServiceGroupSearchRO.java     | 19 ++++++
 .../smp/data/ui/ServiceMetadataRO.java        | 10 +++
 .../smp/services/resource/ResolvedData.java   | 10 +++
 .../resource/ResourceHandlerService.java      | 25 +++++++-
 .../services/resource/ResourceService.java    |  2 -
 .../ui/UIServiceGroupSearchService.java       |  7 +-
 .../ec/edelivery/smp/utils/SmpUrlBuilder.java |  2 +-
 .../mysql-4.1_integration_test_data.sql       | 34 ++--------
 smp-soapui-tests/pom.xml                      |  2 +-
 .../smp/controllers/ResourceController.java   |  2 -
 .../database-scripts/mysql5innodb-data.sql    |  4 +-
 23 files changed, 207 insertions(+), 108 deletions(-)

diff --git a/smp-angular/src/app/service-group-search/service-group-search-ro.model.ts b/smp-angular/src/app/service-group-search/service-group-search-ro.model.ts
index f20d01a53..7c52053e0 100644
--- a/smp-angular/src/app/service-group-search/service-group-search-ro.model.ts
+++ b/smp-angular/src/app/service-group-search/service-group-search-ro.model.ts
@@ -4,5 +4,7 @@ import {SearchTableEntity} from "../common/search-table/search-table-entity.mode
 export interface ServiceGroupSearchRo extends SearchTableEntity {
   participantIdentifier: string;
   participantScheme: string;
+  domainCode?:string;
+  resourceDefUrlSegment?:string;
   serviceMetadata: Array<ServiceMetadataSearchRo>;
 }
diff --git a/smp-angular/src/app/service-group-search/service-group-search.component.ts b/smp-angular/src/app/service-group-search/service-group-search.component.ts
index 8b37f78ae..00b295dd0 100644
--- a/smp-angular/src/app/service-group-search/service-group-search.component.ts
+++ b/smp-angular/src/app/service-group-search/service-group-search.component.ts
@@ -16,6 +16,8 @@ import {HttpClient} from '@angular/common/http';
 import {SmpConstants} from "../smp.constants";
 import {GlobalLookups} from "../common/global-lookups";
 import {SearchTableComponent} from "../common/search-table/search-table.component";
+import {ServiceGroupSearchRo} from "./service-group-search-ro.model";
+import {ServiceMetadataSearchRo} from "./service-metadata-search-ro.model";
 
 @Component({
   moduleId: module.id,
@@ -96,14 +98,22 @@ export class ServiceGroupSearchComponent implements OnInit, AfterViewInit, After
     this.initColumns();
   }
 
-  createServiceGroupURL(row: any) {
-    return encodeURIComponent((!row.participantScheme ? '' : row.participantScheme) + '::' + row.participantIdentifier);
+  createServiceGroupURL(row: ServiceGroupSearchRo) {
+
+    return (!row?.domainCode? "" : row.domainCode+ '/')
+          + (!row?.resourceDefUrlSegment?"" : row.resourceDefUrlSegment + '/')
+          + encodeURIComponent((!row.participantScheme ? '' : row.participantScheme) + '::' + row.participantIdentifier);
   }
 
-  createServiceMetadataURL(row: any, rowSMD: any) {
-    return encodeURIComponent((!row.participantScheme ? '' : row.participantScheme) + '::' + row.participantIdentifier) + '/services/' + encodeURIComponent((!rowSMD.documentIdentifierScheme ? '' : rowSMD.documentIdentifierScheme) + '::' + rowSMD.documentIdentifier);
+  createServiceMetadataURL(row: ServiceGroupSearchRo, rowSMD: ServiceMetadataSearchRo) {
+
+    return this.createServiceGroupURL(row)
+            + '/' + rowSMD.subresourceDefUrlSegment + '/'
+            + encodeURIComponent((!rowSMD.documentIdentifierScheme ? '' : rowSMD.documentIdentifierScheme) + '::' + rowSMD.documentIdentifier);
   }
 
+
+
   details(row: any) {
     this.serviceGroupSearchController.showDetails(row);
 
diff --git a/smp-angular/src/app/service-group-search/service-metadata-search-ro.model.ts b/smp-angular/src/app/service-group-search/service-metadata-search-ro.model.ts
index d6260aa78..ddee88c85 100644
--- a/smp-angular/src/app/service-group-search/service-metadata-search-ro.model.ts
+++ b/smp-angular/src/app/service-group-search/service-metadata-search-ro.model.ts
@@ -4,5 +4,6 @@ export interface ServiceMetadataSearchRo extends SearchTableEntity {
   documentIdentifier: string;
   documentIdentifierScheme: string;
   smlSubdomain: string;
+  subresourceDefUrlSegment?:string;
   domainCode: string;
 }
diff --git a/smp-docker/compose/tomcat-mysql-smp-sml/properties/db-scripts/sml-mysql5innodb-data.sql b/smp-docker/compose/tomcat-mysql-smp-sml/properties/db-scripts/sml-mysql5innodb-data.sql
index 7b6b00682..65e713cd6 100644
--- a/smp-docker/compose/tomcat-mysql-smp-sml/properties/db-scripts/sml-mysql5innodb-data.sql
+++ b/smp-docker/compose/tomcat-mysql-smp-sml/properties/db-scripts/sml-mysql5innodb-data.sql
@@ -30,26 +30,20 @@ insert into bdmsl_configuration(property, value, description, created_on, last_u
 ('sml.property.refresh.cronJobExpression','5 */1 * * * *','Properies update', NOW(), NOW());   
 
 
-
 insert into bdmsl_subdomain(subdomain_id, subdomain_name,dns_zone, description, participant_id_regexp, dns_record_types, smp_url_schemas, created_on, last_updated_on) values
-(1, 'test.edelivery.local', 'test.edelivery.local','Test domain', '^.*$','all','all', NOW(), NOW()),
-(2, 'ehealth.test.edelivery.local','test.edelivery.local','Domain for eHealth ','^.*$','all','all',NOW(), NOW()),
-(3, 'isaitb.test.edelivery.local','test.edelivery.local','Domain for isaitb ','^.*$','all','all',NOW(), NOW()),
-(4, 'peppol.test.edelivery.local', 'test.edelivery.local','Domain for OpenPeppol ', '^((((0002|0007|0009|0037|0060|0088|0096|0097|0106|0135|0142|9901|9902|9904|9905|9906|9907|9908|9909|9910|9912|9913|9914|9915|9916|9917|9918|9919|9920|9921|9922|9923|9924|9925|9926|9927|9928|9929|9930|9931|9932|9933|9934|9935|9936|9937|9938|9939|9940|9941|9942|9943|9944|9945|9946|9947|9948|9949|9950|9951|9952|9953|9954|9955|9956|9957|0184):).*)|(\\*))$','all','all', NOW(), NOW());
+(1, 'domain-01.test.edelivery.local','test.edelivery.local','Domain for no trestriction ','^.*$','all','all', NOW(), NOW()),
+(2, 'domain-02.test.edelivery.local', 'test.edelivery.local','Domain for with party id restriction', '^((((0002|0007|0009|0037|0060|0088|0096|0097|0106|0135|0142|9901|9902|9904|9905|9906|9907|9908|9909|9910|9912|9913|9914|9915|9916|9917|9918|9919|9920|9921|9922|9923|9924|9925|9926|9927|9928|9929|9930|9931|9932|9933|9934|9935|9936|9937|9938|9939|9940|9941|9942|9943|9944|9945|9946|9947|9948|9949|9950|9951|9952|9953|9954|9955|9956|9957|0184):).*)|(\\*))$','all','all',  NOW(), NOW());
 
 
-INSERT INTO bdmsl_certificate_domain(certificate, crl_url,  is_root_ca, fk_subdomain_id, created_on, last_updated_on, is_admin) VALUES
-('CN=unsecure_root,O=delete_in_production,C=only_for_testing','',1, 2, NOW(), NOW(),1),
-('CN=unsecure_root_testTeam,O=delete_in_production,C=only_for_testing','',1, 2, NOW(), NOW(),1),
-('CN=rootCNTest,OU=B4,O=DIGIT,L=Brussels,ST=BE,C=BE','',1, 1, NOW(), NOW(),0),
-('CN=rootCNIsa,OU=B4,O=DIGIT,L=Brussels,ST=BE,C=BE','',1, 3, NOW(), NOW(),1),
-('CN=AdministratorSML,OU=B4,O=DIGIT,C=BE','',0, 2, NOW(), NOW(),1);
+INSERT INTO bdmsl_certificate_domain(truststore_alias, certificate, crl_url,  is_root_ca, fk_subdomain_id, created_on, last_updated_on, is_admin) VALUES
+('CN=smp_domain_01', 'CN=smp_domain_01,O=digit,C=eu','',0, 1, NOW(), NOW(),1),
+('CN=smp_domain_02','CN=smp_domain_02,O=digit,C=eu','',0, 2, NOW(), NOW(),1);
 
 INSERT INTO bdmsl_certificate (id, certificate_id, valid_from ,valid_until,created_on, last_updated_on ) VALUES
-(id, 'CN=SMP_TEST-PRE-SET-EXAMPLE,O=DIGITAL,C=BE:00000000000000000000000000000001',DATE_ADD(NOW(), INTERVAL -3 DAY),DATE_ADD(NOW(), INTERVAL 365 DAY), NOW(), NOW());
+(1, 'CN=smp_domain_01,O=digit,C=eu:0000000000000000000000006443d8a8',DATE_ADD(NOW(), INTERVAL -3 DAY),DATE_ADD(NOW(), INTERVAL 365 DAY), NOW(), NOW());
 
 INSERT INTO bdmsl_smp (smp_id, fk_certificate_id, fk_subdomain_id, endpoint_logical_address, endpoint_physical_address, created_on, last_updated_on ) VALUES
-('CEF-SMP-001', 1,1, 'http://localhost:8080/smp/','0.0.0.0',NOW(), NOW());
+('DOMI-SMP-001 ', 1,1, 'http://localhost:8080/smp/','0.0.0.0',NOW(), NOW());
 
 
 
diff --git a/smp-docker/compose/tomcat-mysql-smp-sml/runCompose.sh b/smp-docker/compose/tomcat-mysql-smp-sml/runCompose.sh
index 580e77db3..dbc70a61c 100755
--- a/smp-docker/compose/tomcat-mysql-smp-sml/runCompose.sh
+++ b/smp-docker/compose/tomcat-mysql-smp-sml/runCompose.sh
@@ -1,9 +1,9 @@
 #!/bin/bash
 
 WORKING_DIR="$(dirname $0)"
-SML_INIT_DATABASE="../../../smp-webapp/src/main/smp-setup/database-scripts/mysql5innodb.ddl"
-SML_INIT_DATABASE_DATA="../../../smp-webapp/src/main/smp-setup/database-scripts/mysql5innodb-data.sql"
-SML_INIT_DATABASE_DATA="../../../smp-soapui-tests/groovy/mysql-4.1_integration_test_data.sql"
+SMP_INIT_DATABASE="../../../smp-webapp/src/main/smp-setup/database-scripts/mysql5innodb.ddl"
+#SMP_INIT_DATABASE_DATA="../../../smp-webapp/src/main/smp-setup/database-scripts/mysql5innodb-data.sql"
+SMP_INIT_DATABASE_DATA="../../../smp-soapui-tests/groovy/mysql-4.1_integration_test_data.sql"
 # soap ui data
 PREFIX="smp-sml-tomcat-mysql"
 SMP_VERSION=
@@ -14,7 +14,7 @@ while getopts i:v: option
 do
   case "${option}"
   in
-    i) SML_INIT_DATABASE_DATA=${OPTARG};;
+    i) SMP_INIT_DATABASE_DATA=${OPTARG};;
     v) SMP_VERSION=${OPTARG};;
   esac
 done
@@ -40,9 +40,9 @@ then
 fi
 
 # create  database init script from l
-cp   "${SML_INIT_DATABASE}" ./properties/db-scripts/mysql5innodb.ddl
-cp   "${SML_INIT_DATABASE_DATA}" ./properties/db-scripts/mysql5innodb-data.sql
-
+cp   "${SMP_INIT_DATABASE}" ./properties/db-scripts/mysql5innodb.ddl
+cp   "${SMP_INIT_DATABASE_DATA}" ./properties/db-scripts/mysql5innodb-data.sql
+cp
 
 
 function clearOldContainers {
@@ -52,12 +52,8 @@ function clearOldContainers {
 }
 
 
-#
-# Always delete shared-status-folder else weblogic will start to quick!
-# because statuses are sync over shared-status-folder folders and it could contain status from previous run.
-
 export SMP_VERSION="${SMP_VERSION}"
-echo "Clear old containser"
+echo "Clear old containers"
 clearOldContainers
 # start " 
 echo "Start compose"
diff --git a/smp-docker/images/build-docker-images.sh b/smp-docker/images/build-docker-images.sh
index 7893de781..b2cc519fb 100755
--- a/smp-docker/images/build-docker-images.sh
+++ b/smp-docker/images/build-docker-images.sh
@@ -199,9 +199,9 @@ validateAndPrepareArtefacts() {
 # build docker images
 # -----------------------------------------------------------------------------
 buildImages() {
-  #buildOracleDatabaseImage
-  #buildWebLogicOracleImages12
-  #buildWebLogicOracleImages14
+  buildOracleDatabaseImage
+  buildWebLogicOracleImages12
+  buildWebLogicOracleImages14
   buildTomcatMysqlImages
   buildUtils
 }
diff --git a/smp-docker/images/shared-artefacts/sml-mysql5innodb-data.sql b/smp-docker/images/shared-artefacts/sml-mysql5innodb-data.sql
index 886595706..2b5f16a1b 100644
--- a/smp-docker/images/shared-artefacts/sml-mysql5innodb-data.sql
+++ b/smp-docker/images/shared-artefacts/sml-mysql5innodb-data.sql
@@ -35,7 +35,6 @@ insert into bdmsl_subdomain(subdomain_id, subdomain_name,dns_zone, description,
 (1, 'domain-01.test.edelivery.local','test.edelivery.local','Domain for no trestriction ','^.*$','all','all', NOW(), NOW()),
 (2, 'domain-02.test.edelivery.local', 'test.edelivery.local','Domain for with party id restriction', '^((((0002|0007|0009|0037|0060|0088|0096|0097|0106|0135|0142|9901|9902|9904|9905|9906|9907|9908|9909|9910|9912|9913|9914|9915|9916|9917|9918|9919|9920|9921|9922|9923|9924|9925|9926|9927|9928|9929|9930|9931|9932|9933|9934|9935|9936|9937|9938|9939|9940|9941|9942|9943|9944|9945|9946|9947|9948|9949|9950|9951|9952|9953|9954|9955|9956|9957|0184):).*)|(\\*))$','all','all',  NOW(), NOW());
 
-
 INSERT INTO bdmsl_certificate_domain(truststore_alias, certificate, crl_url,  is_root_ca, fk_subdomain_id, created_on, last_updated_on, is_admin) VALUES
 ('CN=smp_domain_01', 'CN=smp_domain_01,O=digit,C=eu','',0, 1, NOW(), NOW(),1),
 ('CN=smp_domain_02','CN=smp_domain_02,O=digit,C=eu','',0, 2, NOW(), NOW(),1);
diff --git a/smp-docker/images/tomcat-mysql-smp-sml/bind/db.test.edelivery.local b/smp-docker/images/tomcat-mysql-smp-sml/bind/db.test.edelivery.local
index b962adfa8..e8584a632 100755
--- a/smp-docker/images/tomcat-mysql-smp-sml/bind/db.test.edelivery.local
+++ b/smp-docker/images/tomcat-mysql-smp-sml/bind/db.test.edelivery.local
@@ -12,4 +12,7 @@ test.edelivery.local	IN SOA	ns.test.edelivery.local. root.test.edelivery.local.
 $ORIGIN test.edelivery.local.
 $TTL 60	; 1 minute
 ns			A	127.0.0.1
-CEF-SMP-002.publisher	60	IN	CNAME	localhost.
\ No newline at end of file
+DOMI-SMP-001.publisher.domain-01	60	IN	CNAME	localhost.
+B-b12b56f8cc8aa86c50e853568602d46c.iso6523-actorid-upis.domain-01	60	IN	CNAME	DOMI-SMP-001.publisher.domain-01.test.edelivery.local.
+XLUSTCNMQBBUURV46W66WAOZFI7AATDWKLJEETXSUDRXJX4QAHDA.iso6523-actorid-upis.domain-01	60	IN	NAPTR	100 10 "U" "Meta:SMP" "!.*!http://localhost:8080/smp/!" .
+
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 27194d828..e21d9e8ee 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
@@ -6,6 +6,7 @@ import eu.europa.ec.dynamicdiscovery.exception.TechnicalException;
 import eu.europa.ec.dynamicdiscovery.exception.XmlInvalidAgainstSchemaException;
 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;
@@ -46,7 +47,8 @@ public class OasisSMPServiceGroup10Handler extends AbstractOasisSMPHandler {
 
     final OasisSMP10ServiceGroupReader serviceGroupReader;
 
-    public OasisSMPServiceGroup10Handler(SmpDataServiceApi smpDataApi, SmpIdentifierServiceApi smpIdentifierApi) {
+    public OasisSMPServiceGroup10Handler(SmpDataServiceApi smpDataApi,
+                                         SmpIdentifierServiceApi smpIdentifierApi) {
         this.smpDataApi = smpDataApi;
         this.smpIdentifierApi = smpIdentifierApi;
         serviceGroupReader = new OasisSMP10ServiceGroupReader();
@@ -114,10 +116,15 @@ public class OasisSMPServiceGroup10Handler extends AbstractOasisSMPHandler {
 
     public URI buildSMPURLForParticipantAndDocumentIdentifier(ResourceIdentifier resourceIdentifier, ResourceIdentifier subresourceIdentifier) throws ResourceException {
         LOG.debug("Build SMP url for participant identifier: [{}] and document identifier [{}].", resourceIdentifier, subresourceIdentifier);
+
+
         String pathSegment = smpDataApi.getURIPathSegmentForSubresource(OasisSMPServiceMetadata10.RESOURCE_IDENTIFIER);
         String baseUrl = smpDataApi.getResourceUrl();
         String urlEncodedFormatParticipant = smpIdentifierApi.getURLEncodedResourceIdentifier(resourceIdentifier);
         String urlEncodedFormatDocument = smpIdentifierApi.getURLEncodedSubresourceIdentifier(subresourceIdentifier);
+
+        LOG.debug("Build SMP url from base path [{}], participant identifier: [{}] and document identifier [{}].",
+                baseUrl, urlEncodedFormatParticipant, urlEncodedFormatDocument);
         try {
             return new URIBuilder(baseUrl)
                     .appendPathSegments(urlEncodedFormatParticipant)
diff --git a/smp-resource-extensions/oasis-smp-spi/src/main/java/eu/europa/ec/smp/spi/handler/OasisSMPServiceGroup20Handler.java b/smp-resource-extensions/oasis-smp-spi/src/main/java/eu/europa/ec/smp/spi/handler/OasisSMPServiceGroup20Handler.java
index a72f118b8..45fd0aa99 100644
--- a/smp-resource-extensions/oasis-smp-spi/src/main/java/eu/europa/ec/smp/spi/handler/OasisSMPServiceGroup20Handler.java
+++ b/smp-resource-extensions/oasis-smp-spi/src/main/java/eu/europa/ec/smp/spi/handler/OasisSMPServiceGroup20Handler.java
@@ -6,28 +6,32 @@ import eu.europa.ec.dynamicdiscovery.exception.TechnicalException;
 import eu.europa.ec.dynamicdiscovery.exception.XmlInvalidAgainstSchemaException;
 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.OasisSMPServiceMetadata10;
+import eu.europa.ec.smp.spi.converter.ServiceMetadata10Converter;
+import eu.europa.ec.smp.spi.def.OasisSMPServiceMetadata20;
 import eu.europa.ec.smp.spi.exceptions.ResourceException;
+import eu.europa.ec.smp.spi.exceptions.SignatureException;
 import gen.eu.europa.ec.ddc.api.smp20.ServiceGroup;
 import gen.eu.europa.ec.ddc.api.smp20.aggregate.ServiceReference;
 import gen.eu.europa.ec.ddc.api.smp20.basic.ID;
 import gen.eu.europa.ec.ddc.api.smp20.basic.ParticipantID;
+import gen.eu.europa.ec.ddc.api.smp20.basic.SMPVersionID;
 import org.apache.commons.lang3.exception.ExceptionUtils;
-import org.apache.hc.core5.net.URIBuilder;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Component;
+import org.w3c.dom.Document;
 
+import javax.xml.transform.TransformerException;
 import java.io.BufferedInputStream;
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.InputStream;
-import java.net.URI;
-import java.net.URISyntaxException;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
@@ -40,13 +44,17 @@ public class OasisSMPServiceGroup20Handler extends AbstractOasisSMPHandler {
     private static final Logger LOG = LoggerFactory.getLogger(OasisSMPServiceGroup20Handler.class);
 
     final SmpDataServiceApi smpDataApi;
+    final SmpXmlSignatureApi signatureApi;
     final SmpIdentifierServiceApi smpIdentifierApi;
     final OasisSMP20ServiceGroupReader reader;
 
 
-    public OasisSMPServiceGroup20Handler(SmpDataServiceApi smpDataApi, SmpIdentifierServiceApi smpIdentifierApi) {
+    public OasisSMPServiceGroup20Handler(SmpDataServiceApi smpDataApi,
+                                         SmpIdentifierServiceApi smpIdentifierApi,
+                                         SmpXmlSignatureApi signatureApi) {
         this.smpDataApi = smpDataApi;
         this.smpIdentifierApi = smpIdentifierApi;
+        this.signatureApi = signatureApi;
         this.reader = new OasisSMP20ServiceGroupReader();
     }
 
@@ -56,6 +64,8 @@ public class OasisSMPServiceGroup20Handler extends AbstractOasisSMPHandler {
 
 
         ServiceGroup serviceGroup = new ServiceGroup();
+        serviceGroup.setSMPVersionID(new SMPVersionID());
+        serviceGroup.getSMPVersionID().setValue("2.0");
         serviceGroup.setParticipantID(new ParticipantID());
         serviceGroup.getParticipantID().setValue(identifier.getValue());
         serviceGroup.getParticipantID().setSchemeID(identifier.getScheme());
@@ -85,11 +95,14 @@ public class OasisSMPServiceGroup20Handler extends AbstractOasisSMPHandler {
         serviceGroup.getServiceReferences().clear();
         serviceGroup.getServiceReferences().addAll(buildReferences(identifier));
 
-        try {
-            reader.serializeNative(serviceGroup, responseData.getOutputStream(), false);
-        } catch (TechnicalException e) {
-            throw new ResourceException(PARSE_ERROR, "Can not marshal extension for service group: [" + identifier + "]. Error: " + ExceptionUtils.getRootCauseMessage(e), e);
 
+        try {
+            Document doc = reader.objectToDocument(serviceGroup);
+            signatureApi.createEnvelopedSignature(resourceData, doc.getDocumentElement(), Collections.emptyList());
+            ServiceMetadata10Converter.serialize(doc, responseData.getOutputStream());
+        } catch (SignatureException | TechnicalException | TransformerException e) {
+            throw new ResourceException(PROCESS_ERROR, "Error occurred while signing the service group 2.0 message!: ["
+                    + identifier + "]. Error: " + ExceptionUtils.getRootCauseMessage(e), e);
         }
     }
 
@@ -97,7 +110,8 @@ public class OasisSMPServiceGroup20Handler extends AbstractOasisSMPHandler {
     private List<ServiceReference> buildReferences(ResourceIdentifier resourceIdentifier) {
         LOG.debug("Build build References identifier [{}].", resourceIdentifier);
         // get subresource identifiers for document type
-        List<ResourceIdentifier> subResourceIdentifier = smpDataApi.getSubResourceIdentifiers(resourceIdentifier, OasisSMPServiceMetadata10.RESOURCE_IDENTIFIER);
+        List<ResourceIdentifier> subResourceIdentifier = smpDataApi.getSubResourceIdentifiers(resourceIdentifier,
+                OasisSMPServiceMetadata20.RESOURCE_IDENTIFIER);
         List<ServiceReference> referenceIds = new ArrayList<>();
         for (ResourceIdentifier subresId : subResourceIdentifier) {
             ServiceReference reference = new ServiceReference();
@@ -110,22 +124,6 @@ public class OasisSMPServiceGroup20Handler extends AbstractOasisSMPHandler {
         return referenceIds;
     }
 
-    public URI buildSMPURLForParticipantAndDocumentIdentifier(ResourceIdentifier resourceIdentifier, ResourceIdentifier subresourceIdentifier) throws ResourceException {
-        LOG.debug("Build SMP url for participant identifier: [{}] and document identifier [{}].", resourceIdentifier, subresourceIdentifier);
-        String pathSegment = smpDataApi.getURIPathSegmentForSubresource(OasisSMPServiceMetadata10.RESOURCE_IDENTIFIER);
-        String baseUrl = smpDataApi.getResourceUrl();
-        String urlEncodedFormatParticipant = smpIdentifierApi.getURLEncodedResourceIdentifier(resourceIdentifier);
-        String urlEncodedFormatDocument = smpIdentifierApi.getURLEncodedSubresourceIdentifier(subresourceIdentifier);
-        try {
-            return new URIBuilder(baseUrl)
-                    .appendPathSegments(urlEncodedFormatParticipant)
-                    .appendPathSegments(pathSegment)
-                    .appendPathSegments(urlEncodedFormatDocument).build();
-        } catch (URISyntaxException e) {
-            throw new ResourceException(INTERNAL_ERROR, "Can not build SMP document URL path! " + ExceptionUtils.getMessage(e), e);
-        }
-    }
-
 
     @Override
     public void storeResource(RequestData resourceData, ResponseData responseData) throws ResourceException {
diff --git a/smp-resource-extensions/oasis-smp-spi/src/main/java/eu/europa/ec/smp/spi/handler/OasisSMPServiceMetadata20Handler.java b/smp-resource-extensions/oasis-smp-spi/src/main/java/eu/europa/ec/smp/spi/handler/OasisSMPServiceMetadata20Handler.java
index d74138b96..b2c3260b4 100644
--- a/smp-resource-extensions/oasis-smp-spi/src/main/java/eu/europa/ec/smp/spi/handler/OasisSMPServiceMetadata20Handler.java
+++ b/smp-resource-extensions/oasis-smp-spi/src/main/java/eu/europa/ec/smp/spi/handler/OasisSMPServiceMetadata20Handler.java
@@ -15,8 +15,11 @@ import eu.europa.ec.smp.spi.exceptions.ResourceException;
 import eu.europa.ec.smp.spi.exceptions.SignatureException;
 import eu.europa.ec.smp.spi.validation.ServiceMetadata20Validator;
 import gen.eu.europa.ec.ddc.api.smp20.ServiceMetadata;
-import gen.eu.europa.ec.ddc.api.smp20.basic.ParticipantID;
-import gen.eu.europa.ec.ddc.api.smp20.basic.ServiceID;
+import gen.eu.europa.ec.ddc.api.smp20.aggregate.Certificate;
+import gen.eu.europa.ec.ddc.api.smp20.aggregate.Endpoint;
+import gen.eu.europa.ec.ddc.api.smp20.aggregate.Process;
+import gen.eu.europa.ec.ddc.api.smp20.aggregate.ProcessMetadata;
+import gen.eu.europa.ec.ddc.api.smp20.basic.*;
 import org.apache.commons.lang3.exception.ExceptionUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -29,6 +32,7 @@ import java.io.BufferedInputStream;
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.InputStream;
+import java.time.OffsetDateTime;
 import java.util.Collections;
 import java.util.List;
 
@@ -64,12 +68,64 @@ public class OasisSMPServiceMetadata20Handler extends AbstractOasisSMPHandler {
         ResourceIdentifier subresourceIdentifier = getSubresourceIdentifier(resourceData);
 
         ServiceMetadata serviceMetadata = new ServiceMetadata();
+        serviceMetadata.setSMPVersionID(new SMPVersionID());
+        serviceMetadata.getSMPVersionID().setValue("2.0");
         serviceMetadata.setParticipantID(new ParticipantID());
         serviceMetadata.getParticipantID().setValue(identifier.getValue());
         serviceMetadata.getParticipantID().setSchemeID(identifier.getScheme());
         serviceMetadata.setServiceID(new ServiceID());
-        serviceMetadata.getParticipantID().setValue(subresourceIdentifier.getValue());
-        serviceMetadata.getParticipantID().setSchemeID(subresourceIdentifier.getScheme());
+        serviceMetadata.getServiceID().setValue(subresourceIdentifier.getValue());
+        serviceMetadata.getServiceID().setSchemeID(subresourceIdentifier.getScheme());
+        ProcessMetadata processMetadata = new ProcessMetadata();
+        serviceMetadata.getProcessMetadatas().add(processMetadata);
+        Process process = new Process();
+        process.setID(new ID());
+        process.getID().setValue("Service");
+        process.getID().setSchemeID("service-namespace");
+        processMetadata.getProcesses().add(process);
+        Endpoint endpoint = new Endpoint();
+        endpoint.setExpirationDate(new ExpirationDate());
+        endpoint.setActivationDate(new ActivationDate());
+        endpoint.getExpirationDate().setValue(OffsetDateTime.now().plusYears(1));
+        endpoint.getActivationDate().setValue(OffsetDateTime.now().minusDays(1));
+        endpoint.setAddressURI(new AddressURI());
+        endpoint.getAddressURI().setValue("http://test.ap.local/msh");
+        endpoint.setTransportProfileID(new TransportProfileID());
+        endpoint.getTransportProfileID().setValue("bdxr-transport-ebms3-as4-v1p0");
+        Certificate certEnc = new Certificate();
+        certEnc.setExpirationDate(new ExpirationDate());
+        certEnc.setActivationDate(new ActivationDate());
+        certEnc.getExpirationDate().setValue(OffsetDateTime.now().plusYears(1));
+        certEnc.getActivationDate().setValue(OffsetDateTime.now().minusDays(1));
+        certEnc.setSubject(new Subject());
+        certEnc.setIssuer(new Issuer());
+        certEnc.setTypeCode(new TypeCode());
+        certEnc.setContentBinaryObject(new ContentBinaryObject());
+        certEnc.getSubject().setValue("CN=test-ap-enc,OU=edelivery,O=digit,C=EU");
+        certEnc.getIssuer().setValue("CN=test-ap-enc,OU=edelivery,O=digit,C=EU");
+        certEnc.getTypeCode().setValue("encryption");
+        certEnc.getContentBinaryObject().setValue("Put the real certificate data here".getBytes());
+        certEnc.getContentBinaryObject().setMimeCode("application/base64");
+
+        Certificate certSig = new Certificate();
+        certSig.setExpirationDate(new ExpirationDate());
+        certSig.setActivationDate(new ActivationDate());
+        certSig.getExpirationDate().setValue(OffsetDateTime.now().plusYears(1));
+        certSig.getActivationDate().setValue(OffsetDateTime.now().minusDays(1));
+        certSig.setTypeCode(new TypeCode());
+        certSig.setContentBinaryObject(new ContentBinaryObject());
+        certSig.setSubject(new Subject());
+        certSig.setIssuer(new Issuer());
+        certSig.getSubject().setValue("CN=test-ap-signature,OU=edelivery,O=digit,C=EU");
+        certSig.getIssuer().setValue("CN=test-ap-signature,OU=edelivery,O=digit,C=EU");
+        certSig.getTypeCode().setValue("signature");
+        certSig.getContentBinaryObject().setValue("Put the real certificate data here".getBytes());
+        certSig.getContentBinaryObject().setMimeCode("application/base64");
+        endpoint.getCertificates().add(certEnc);
+        endpoint.getCertificates().add(certSig);
+        processMetadata.getEndpoints().add(endpoint);
+
+
         try {
             reader.serializeNative(serviceMetadata, responseData.getOutputStream(), true);
         } catch (TechnicalException e) {
diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/conversion/DBResourceDefToResourceDefinitionROConverter.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/conversion/DBResourceDefToResourceDefinitionROConverter.java
index 86796da78..0f57a0856 100644
--- a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/conversion/DBResourceDefToResourceDefinitionROConverter.java
+++ b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/conversion/DBResourceDefToResourceDefinitionROConverter.java
@@ -37,6 +37,8 @@ public class DBResourceDefToResourceDefinitionROConverter implements Converter<D
             List<SubresourceDefinitionRO> resourceDefinitionROList = source.getSubresources().stream().map(resourceDef ->
                     conversionService.convert(resourceDef, SubresourceDefinitionRO.class)
             ).collect(Collectors.toList());
+
+
             target.getSubresourceDefinitions().addAll(resourceDefinitionROList);
         } catch (IllegalAccessException | InvocationTargetException e) {
             LOG.error("Error occurred while converting DBResourceDef", e);
diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/ui/ServiceGroupSearchRO.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/ui/ServiceGroupSearchRO.java
index 9c1e43716..b6b5cf802 100644
--- a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/ui/ServiceGroupSearchRO.java
+++ b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/ui/ServiceGroupSearchRO.java
@@ -16,6 +16,9 @@ public class ServiceGroupSearchRO extends BaseRO {
 
     private static final long serialVersionUID = 9008583888835630016L;
     private Long id;
+
+    private String domainCode;
+    private String resourceDefUrlSegment;
     private String participantIdentifier;
     private String participantScheme;
     private List<ServiceMetadataRO> lstServiceMetadata = new ArrayList<>();
@@ -45,6 +48,22 @@ public class ServiceGroupSearchRO extends BaseRO {
         this.participantScheme = participantScheme;
     }
 
+    public String getDomainCode() {
+        return domainCode;
+    }
+
+    public void setDomainCode(String domainCode) {
+        this.domainCode = domainCode;
+    }
+
+    public String getResourceDefUrlSegment() {
+        return resourceDefUrlSegment;
+    }
+
+    public void setResourceDefUrlSegment(String resourceDefUrlSegment) {
+        this.resourceDefUrlSegment = resourceDefUrlSegment;
+    }
+
     public List<ServiceMetadataRO> getServiceMetadata() {
         return lstServiceMetadata;
     }
diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/ui/ServiceMetadataRO.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/ui/ServiceMetadataRO.java
index 53583629d..d123ba811 100644
--- a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/ui/ServiceMetadataRO.java
+++ b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/ui/ServiceMetadataRO.java
@@ -17,6 +17,8 @@ public class ServiceMetadataRO extends BaseRO {
     String documentIdentifierScheme;
     String smlSubdomain;
     String domainCode;
+
+    String subresourceDefUrlSegment;
     private int xmlContentStatus = EntityROStatus.PERSISTED.getStatusNumber();
     String xmlContent;
 
@@ -36,6 +38,14 @@ public class ServiceMetadataRO extends BaseRO {
         this.documentIdentifier = documentIdentifier;
     }
 
+    public String getSubresourceDefUrlSegment() {
+        return subresourceDefUrlSegment;
+    }
+
+    public void setSubresourceDefUrlSegment(String subresourceDefUrlSegment) {
+        this.subresourceDefUrlSegment = subresourceDefUrlSegment;
+    }
+
     public String getDocumentIdentifierScheme() {
 
         return StringUtils.isEmpty(documentIdentifierScheme)?null: documentIdentifierScheme;
diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/resource/ResolvedData.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/resource/ResolvedData.java
index 416641217..c073edd9e 100644
--- a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/resource/ResolvedData.java
+++ b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/resource/ResolvedData.java
@@ -1,6 +1,7 @@
 package eu.europa.ec.edelivery.smp.services.resource;
 
 import eu.europa.ec.edelivery.smp.data.model.DBDomain;
+import eu.europa.ec.edelivery.smp.data.model.DBGroup;
 import eu.europa.ec.edelivery.smp.data.model.doc.DBResource;
 import eu.europa.ec.edelivery.smp.data.model.doc.DBSubresource;
 import eu.europa.ec.edelivery.smp.data.model.ext.DBResourceDef;
@@ -9,6 +10,7 @@ import eu.europa.ec.edelivery.smp.data.model.ext.DBSubresourceDef;
 public class ResolvedData {
     boolean resolved;
     DBDomain domain;
+    DBGroup group;
     DBResourceDef resourceDef;
     DBSubresourceDef subResourceDef;
     DBResource resource;
@@ -61,4 +63,12 @@ public class ResolvedData {
     public void setResolved(boolean resolved) {
         this.resolved = resolved;
     }
+
+    public DBGroup getGroup() {
+        return group;
+    }
+
+    public void setGroup(DBGroup group) {
+        this.group = group;
+    }
 }
diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/resource/ResourceHandlerService.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/resource/ResourceHandlerService.java
index ed8d673ef..cd1eb50d4 100644
--- a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/resource/ResourceHandlerService.java
+++ b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/resource/ResourceHandlerService.java
@@ -1,7 +1,10 @@
 package eu.europa.ec.edelivery.smp.services.resource;
 
 
+import eu.europa.ec.edelivery.smp.data.dao.GroupDao;
 import eu.europa.ec.edelivery.smp.data.dao.ResourceMemberDao;
+import eu.europa.ec.edelivery.smp.data.model.DBDomain;
+import eu.europa.ec.edelivery.smp.data.model.DBGroup;
 import eu.europa.ec.edelivery.smp.data.model.doc.DBDocument;
 import eu.europa.ec.edelivery.smp.data.model.doc.DBDocumentVersion;
 import eu.europa.ec.edelivery.smp.data.model.doc.DBResource;
@@ -13,6 +16,7 @@ import eu.europa.ec.edelivery.smp.exceptions.ErrorCode;
 import eu.europa.ec.edelivery.smp.exceptions.SMPRuntimeException;
 import eu.europa.ec.edelivery.smp.logging.SMPLogger;
 import eu.europa.ec.edelivery.smp.logging.SMPLoggerFactory;
+import eu.europa.ec.edelivery.smp.services.SMLIntegrationService;
 import eu.europa.ec.edelivery.smp.services.spi.data.SpiResponseData;
 import eu.europa.ec.edelivery.smp.servlet.ResourceRequest;
 import eu.europa.ec.edelivery.smp.servlet.ResourceResponse;
@@ -44,10 +48,15 @@ public class ResourceHandlerService extends AbstractResourceHandler {
 
     final ResourceMemberDao resourceMemberDao;
 
+    final GroupDao groupDao;
+    final SMLIntegrationService integrationService;
+
     public ResourceHandlerService(List<ResourceDefinitionSpi> resourceDefinitionSpiList, ResourceStorage resourceStorage,
-                                  ResourceMemberDao resourceMemberDao) {
+                                  ResourceMemberDao resourceMemberDao, GroupDao groupDao,SMLIntegrationService integrationService) {
         super(resourceDefinitionSpiList, resourceStorage);
         this.resourceMemberDao = resourceMemberDao;
+        this.groupDao = groupDao;
+        this.integrationService = integrationService;
     }
 
     public void readResource(ResourceRequest resourceRequest,
@@ -94,6 +103,7 @@ public class ResourceHandlerService extends AbstractResourceHandler {
 
         ResolvedData resolvedData = resourceRequest.getResolvedData();
         DBResource resource = resolvedData.getResource();
+        DBDomain domain = resolvedData.getDomain();
         ResourceHandlerSpi handlerSpi = getResourceHandler(resolvedData.getResourceDef());
 
         boolean isNewResource = resource.getId() == null;
@@ -141,8 +151,18 @@ public class ResourceHandlerService extends AbstractResourceHandler {
         DBResource managedResource = resourceStorage.addDocumentVersionForResource(resource, documentVersion);
 
         if (isNewResource) {
-            resourceRequest.getOwnerHttpParameter();
             resourceMemberDao.setAdminMemberShip(user, managedResource);
+            if (managedResource.getGroup() == null) {
+
+                if (resolvedData.getGroup() != null) {
+                    managedResource.setGroup(resolvedData.getGroup());
+                } else {
+                    // if group is empty add first group from domain
+                    List<DBGroup> groupList = groupDao.getAllGroupsForDomain(domain);
+                    managedResource.setGroup(groupList.get(0));
+                }
+            }
+            integrationService.registerParticipant(managedResource, domain);
         }
     }
 
@@ -211,6 +231,7 @@ public class ResourceHandlerService extends AbstractResourceHandler {
         // locate the resource handler
         ResolvedData resolvedData = resourceRequest.getResolvedData();
         DBResource resource = resolvedData.getResource();
+        integrationService.unregisterParticipant(resource, resolvedData.domain);
         resourceStorage.deleteResource(resource);
     }
 
diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/resource/ResourceService.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/resource/ResourceService.java
index 1b658fb1b..9a01a2a4d 100644
--- a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/resource/ResourceService.java
+++ b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/resource/ResourceService.java
@@ -127,8 +127,6 @@ public class ResourceService {
         } else if (isNotBlank(owner)) {
             LOG.warn("Owner [{}] is given for existing resource [{}]. The owner parameter is ignored!", owner, resolvedData.getResource());
         }
-
-
         resourceHandlerService.createResource(ownerUser, resourceRequest, resourceResponse);
     }
 
diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ui/UIServiceGroupSearchService.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ui/UIServiceGroupSearchService.java
index 2f1092e35..30c51c187 100644
--- a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ui/UIServiceGroupSearchService.java
+++ b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ui/UIServiceGroupSearchService.java
@@ -4,7 +4,6 @@ import eu.europa.ec.edelivery.smp.data.dao.BaseDao;
 import eu.europa.ec.edelivery.smp.data.dao.DomainDao;
 import eu.europa.ec.edelivery.smp.data.dao.ResourceDao;
 import eu.europa.ec.edelivery.smp.data.dao.UserDao;
-import eu.europa.ec.edelivery.smp.data.model.DBDomain;
 import eu.europa.ec.edelivery.smp.data.model.doc.DBResource;
 import eu.europa.ec.edelivery.smp.data.model.user.DBUser;
 import eu.europa.ec.edelivery.smp.data.ui.ServiceGroupSearchRO;
@@ -92,16 +91,16 @@ public class UIServiceGroupSearchService extends UIServiceBase<DBResource, Servi
         ServiceGroupSearchRO serviceGroupRo = new ServiceGroupSearchRO();
 
         serviceGroupRo.setId(resource.getId());
+        serviceGroupRo.setDomainCode(resource.getDomainResourceDef().getDomain().getDomainCode());
+        serviceGroupRo.setResourceDefUrlSegment(resource.getDomainResourceDef().getResourceDef().getUrlSegment());
         serviceGroupRo.setParticipantIdentifier(resource.getIdentifierValue());
         serviceGroupRo.setParticipantScheme(resource.getIdentifierScheme());
-        DBDomain domain = resource.getDomainResourceDef().getDomain();
 
         resource.getSubresources().forEach(subresource -> {
             ServiceMetadataRO smdro = new ServiceMetadataRO();
+            smdro.setSubresourceDefUrlSegment(subresource.getSubresourceDef().getUrlSegment());
             smdro.setDocumentIdentifier(subresource.getIdentifierValue());
             smdro.setDocumentIdentifierScheme(subresource.getIdentifierScheme());
-            smdro.setDomainCode(domain.getDomainCode());
-            smdro.setSmlSubdomain(domain.getSmlSubdomain());
             serviceGroupRo.getServiceMetadata().add(smdro);
 
         });
diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/utils/SmpUrlBuilder.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/utils/SmpUrlBuilder.java
index 0e564f7b2..3d48b811c 100644
--- a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/utils/SmpUrlBuilder.java
+++ b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/utils/SmpUrlBuilder.java
@@ -131,7 +131,7 @@ public class SmpUrlBuilder {
     public UriComponentsBuilder getSMPUrlBuilder() {
 
         UriComponentsBuilder uriBuilder = ServletUriComponentsBuilder.fromCurrentRequestUri();
-        uriBuilder = uriBuilder.replacePath(getUrlContext());
+       // uriBuilder = uriBuilder.replacePath(getUrlContext());
         return uriBuilder;
     }
 
diff --git a/smp-soapui-tests/groovy/mysql-4.1_integration_test_data.sql b/smp-soapui-tests/groovy/mysql-4.1_integration_test_data.sql
index 154f57978..b560056ed 100644
--- a/smp-soapui-tests/groovy/mysql-4.1_integration_test_data.sql
+++ b/smp-soapui-tests/groovy/mysql-4.1_integration_test_data.sql
@@ -37,7 +37,7 @@ insert into SMP_CERTIFICATE (ID, CERTIFICATE_ID, SUBJECT, ISSUER, SERIALNUMBER,V
 
 
 insert into SMP_DOMAIN (ID, DOMAIN_CODE, VISIBILITY, SML_SUBDOMAIN, SML_SMP_ID, SIGNATURE_KEY_ALIAS, SML_CLIENT_KEY_ALIAS, SML_CLIENT_CERT_AUTH,SML_REGISTERED, CREATED_ON, LAST_UPDATED_ON) values
-(1, 'testdomain','PUBLIC', 'test-domain', 'CEF-SMP-002','sample_key','smp_domain_01',1,0, NOW(),  NOW());
+(1, 'testdomain','PUBLIC', 'test-domain', 'DOMI-SMP-001','sample_key','smp_domain_01',1,1, NOW(),  NOW());
 
 insert into SMP_EXTENSION ( ID, IDENTIFIER,  IMPLEMENTATION_NAME, NAME, VERSION, DESCRIPTION, CREATED_ON, LAST_UPDATED_ON) values
 (1, 'edelivery-oasis-smp-extension',  'OasisSMPExtension','Oasis SMP 1.0 and 2.0','1.0', 'Oasis SMP 1.0 and 2.0 extension',  NOW(),  NOW());
@@ -57,8 +57,8 @@ insert into SMP_GROUP (ID, FK_DOMAIN_ID, NAME, VISIBILITY, CREATED_ON, LAST_UPDA
 
 insert into SMP_DOCUMENT (ID, CURRENT_VERSION, MIME_TYPE, NAME,CREATED_ON, LAST_UPDATED_ON) values
 (1, 1, 'text/xml', 'service-group', NOW(),  NOW()),
-(2, 1, 'text/xml', 'service-metadta', NOW(),  NOW()),
-(3, 0, 'text/xml', 'service-metadta', NOW(),  NOW())
+(2, 1, 'text/xml', 'service-metadata', NOW(),  NOW()),
+(3, 0, 'text/xml', 'service-metadata', NOW(),  NOW())
 ;
 
 insert into SMP_DOCUMENT_VERSION (ID, FK_DOCUMENT_ID, VERSION, DOCUMENT_CONTENT, CREATED_ON, LAST_UPDATED_ON) values
@@ -66,27 +66,7 @@ insert into SMP_DOCUMENT_VERSION (ID, FK_DOCUMENT_ID, VERSION, DOCUMENT_CONTENT,
 (2,2,  1, '<ServiceMetadata xmlns="http://docs.oasis-open.org/bdxr/ns/SMP/2016/05"><Redirect href="http://localhost:8080/url"><CertificateUID/></Redirect></ServiceMetadata>' , NOW(),  NOW());
 
 insert into SMP_RESOURCE ( ID, FK_GROUP_ID, FK_DOCUMENT_ID, FK_DOREDEF_ID,  IDENTIFIER_SCHEME, IDENTIFIER_VALUE, SML_REGISTERED, VISIBILITY, CREATED_ON, LAST_UPDATED_ON) values
-(1, 1, 1, 1, 'iso6523-actorid-upis', '0088:777002abzz777', 0, 'PUBLIC', NOW(),  NOW()),
-(2, 1, 3, 1, 'iso6523-actorid-upis', '0088:01', 0, 'PUBLIC', NOW(),  NOW()),
-(3, 1, 1, 1, 'iso6523-actorid-upis', '0088:02', 0, 'PUBLIC', NOW(),  NOW()),
-(4, 1, 1, 1, 'iso6523-actorid-upis', '0088:03', 0, 'PUBLIC', NOW(),  NOW()),
-(5, 1, 1, 1, 'iso6523-actorid-upis', '0088:04', 0, 'PUBLIC', NOW(),  NOW()),
-(6, 1, 1, 1, 'iso6523-actorid-upis', '0088:05', 0, 'PUBLIC', NOW(),  NOW()),
-(7, 1, 1, 1, 'iso6523-actorid-upis', '0088:06', 0, 'PUBLIC', NOW(),  NOW()),
-(8, 1, 1, 1, 'iso6523-actorid-upis', '0088:07', 0, 'PUBLIC', NOW(),  NOW()),
-(9, 1, 1, 1, 'iso6523-actorid-upis', '0088:08', 0, 'PUBLIC', NOW(),  NOW()),
-(10, 1, 1, 1, 'iso6523-actorid-upis', '0088:09', 0, 'PUBLIC', NOW(),  NOW()),
-(11, 1, 1, 1, 'iso6523-actorid-upis', '0088:10', 0, 'PUBLIC', NOW(),  NOW()),
-(12, 1, 1, 1, 'iso6523-actorid-upis', '0088:11', 0, 'PUBLIC', NOW(),  NOW()),
-(13, 1, 1, 1, 'iso6523-actorid-upis', '0088:12', 0, 'PUBLIC', NOW(),  NOW()),
-(14, 1, 1, 1, 'iso6523-actorid-upis', '0088:13', 0, 'PUBLIC', NOW(),  NOW()),
-(15, 1, 1, 1, 'iso6523-actorid-upis', '0088:14', 0, 'PUBLIC', NOW(),  NOW()),
-(16, 1, 1, 1, 'iso6523-actorid-upis', '0088:15', 0, 'PUBLIC', NOW(),  NOW()),
-(17, 1, 1, 1, 'iso6523-actorid-upis', '0088:16', 0, 'PUBLIC', NOW(),  NOW()),
-(18, 1, 1, 1, 'iso6523-actorid-upis', '0088:17', 0, 'PUBLIC', NOW(),  NOW()),
-(19, 1, 1, 1, 'iso6523-actorid-upis', '0088:18', 0, 'PUBLIC', NOW(),  NOW()),
-(20, 1, 1, 1, 'iso6523-actorid-upis', '0088:19', 0, 'PUBLIC', NOW(),  NOW())
-;
+(1, 1, 1, 1, 'iso6523-actorid-upis', '0088:777002abzz777', 1, 'PUBLIC', NOW(),  NOW());
 
 insert into SMP_SUBRESOURCE (ID, FK_RESOURCE_ID,FK_SUREDEF_ID, FK_DOCUMENT_ID, IDENTIFIER_VALUE, IDENTIFIER_SCHEME, CREATED_ON, LAST_UPDATED_ON) values
 (1, 1, 1, 2, 'service-value', 'service-schema', NOW(),  NOW());
@@ -95,11 +75,7 @@ insert into SMP_SUBRESOURCE (ID, FK_RESOURCE_ID,FK_SUREDEF_ID, FK_DOCUMENT_ID, I
 (2, 1, 1, 2, 'service-value2', 'service-schema2', NOW(),  NOW());
 
 insert into SMP_RESOURCE_MEMBER (ID, FK_RESOURCE_ID, FK_USER_ID, MEMBERSHIP_ROLE, CREATED_ON, LAST_UPDATED_ON) values
-(1, 1, 2, 'ADMIN', NOW(),  NOW()),
-(2, 2, 1, 'ADMIN', NOW(),  NOW()),
-(3, 3, 2, 'ADMIN', NOW(),  NOW()),
-(4, 4, 2, 'ADMIN', NOW(),  NOW()),
-(5, 5, 2, 'ADMIN', NOW(),  NOW())
+(1, 1, 2, 'ADMIN', NOW(),  NOW())
 ;
 
 insert into SMP_GROUP_MEMBER (ID, FK_GROUP_ID, FK_USER_ID, MEMBERSHIP_ROLE, CREATED_ON, LAST_UPDATED_ON) values
diff --git a/smp-soapui-tests/pom.xml b/smp-soapui-tests/pom.xml
index e44b97afa..9a2cb0bb5 100644
--- a/smp-soapui-tests/pom.xml
+++ b/smp-soapui-tests/pom.xml
@@ -115,7 +115,7 @@ has its own groovy library -->
                             <soapuiProperties>
                                 <property>
                                     <name>soapui.scripting.library</name>
-                                    <value>${basedir}/src/main/groovy</value>
+                                    <value>${basedir}/src/main/java</value>
                                 </property>
                                 <property>
                                     <name>soapui.logroot</name>
diff --git a/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/controllers/ResourceController.java b/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/controllers/ResourceController.java
index 8ef0a2e85..eeae04b83 100644
--- a/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/controllers/ResourceController.java
+++ b/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/controllers/ResourceController.java
@@ -171,8 +171,6 @@ public class ResourceController {
         }
     }
 
-
-
     protected ResourceResponse fromServletResponse(HttpServletResponse httpRes) {
         ResourceResponse resourceResponse = new ResourceResponse(httpRes);
         // try to open the output stream
diff --git a/smp-webapp/src/main/smp-setup/database-scripts/mysql5innodb-data.sql b/smp-webapp/src/main/smp-setup/database-scripts/mysql5innodb-data.sql
index 2097540b3..8e5224b67 100644
--- a/smp-webapp/src/main/smp-setup/database-scripts/mysql5innodb-data.sql
+++ b/smp-webapp/src/main/smp-setup/database-scripts/mysql5innodb-data.sql
@@ -8,7 +8,7 @@ insert into SMP_CREDENTIAL (ID, FK_USER_ID, CREDENTIAL_ACTIVE, CREDENTIAL_NAME,
 
 
 insert into SMP_DOMAIN (ID, DOMAIN_CODE, VISIBILITY, SML_SUBDOMAIN, SML_SMP_ID, SIGNATURE_KEY_ALIAS, SML_CLIENT_KEY_ALIAS, SML_CLIENT_CERT_AUTH,SML_REGISTERED, CREATED_ON, LAST_UPDATED_ON) values
-(1, 'testdomain','PUBLIC', 'test-domain', 'DOMI-SMP-001','sample_key','smp_domain_01',1,0, NOW(),  NOW());
+(1, 'testdomain','PUBLIC', 'test-domain', 'DOMI-SMP-001','sample_key','smp_domain_01',1,1, NOW(),  NOW());
 insert into SMP_GROUP (ID, FK_DOMAIN_ID, NAME, VISIBILITY, CREATED_ON, LAST_UPDATED_ON) values
 (1, 1, 'Test group', 'PUBLIC', NOW(),  NOW());
 
@@ -37,7 +37,7 @@ insert into SMP_DOCUMENT_VERSION (ID, FK_DOCUMENT_ID, VERSION, DOCUMENT_CONTENT,
 (2,2,  1, '<ServiceMetadata xmlns="http://docs.oasis-open.org/bdxr/ns/SMP/2016/05"><Redirect href="http://localhost:8080/url"><CertificateUID/></Redirect></ServiceMetadata>' , NOW(),  NOW());
 
 insert into SMP_RESOURCE ( ID, FK_GROUP_ID, FK_DOCUMENT_ID, FK_DOREDEF_ID,  IDENTIFIER_SCHEME, IDENTIFIER_VALUE, SML_REGISTERED, VISIBILITY, CREATED_ON, LAST_UPDATED_ON) values
-(1, 1, 1, 1, 'iso6523-actorid-upis', '0088:777002abzz777', 0, 'PUBLIC', NOW(),  NOW());
+(1, 1, 1, 1, 'iso6523-actorid-upis', '0088:777002abzz777', 1, 'PUBLIC', NOW(),  NOW());
 
 insert into SMP_SUBRESOURCE (ID, FK_RESOURCE_ID,FK_SUREDEF_ID, FK_DOCUMENT_ID, IDENTIFIER_VALUE, IDENTIFIER_SCHEME, CREATED_ON, LAST_UPDATED_ON) values
 (1, 1, 1, 2, 'service-value', 'service-schema', NOW(),  NOW());
-- 
GitLab