diff --git a/smp-soapui-tests/src/main/java/SMP.groovy b/smp-soapui-tests/src/main/java/SMP.groovy
index 6dc69bf134c01550864f83977eb358298446b799..149a29c9c6c50358e034f7e9cac2dd564ec1c4c2 100644
--- a/smp-soapui-tests/src/main/java/SMP.groovy
+++ b/smp-soapui-tests/src/main/java/SMP.groovy
@@ -18,86 +18,93 @@ import javax.xml.crypto.dsig.dom.DOMValidateContext
 import javax.xml.crypto.dsig.XMLSignatureFactory
 import javax.xml.crypto.dsig.XMLSignature
 import java.util.Iterator;
-import sun.misc.IOUtils;
+// Giving error Could not find artifact xmlbeans:xbean:jar:fixed-2.4.0 in cefdigital-releases (https://ec.europa.eu/digital-building-blocks/artifact/content/repositories/eDelivery/)
+//import sun.misc.IOUtils;
+import java.util.Base64
+
 import java.text.SimpleDateFormat
 import com.eviware.soapui.support.GroovyUtils
 import com.eviware.soapui.impl.wsdl.teststeps.RestTestRequestStep
 
 
 
-class SMP
+class SMP implements  AutoCloseable
 {
-    // Database parameters
-    def sqlConnection;
+	// Database parameters
+	def sqlConnection;
 	def url;
-    def driver;
-    def testDatabase="false";
+	def driver;
+	def testDatabase="false";
 	def messageExchange;
 	def context
 	def log;
-	static def DEFAULT_LOG_LEVEL = true;	
+	static def DEFAULT_LOG_LEVEL = true;
 
 	// Table allocated to store the data/parameters of the request.
 	def requestDataTable = [];
 
 	// Table allocated to store the data/parameters of the response.
 	def responseDataTable = [];
-	
+
 	// Table allocated to store the intermediate data/parameters.
 	def tempoContainer = [];
-	
+
 	// String allocated to extract parts of XML.
 	def tempoString = null;
-	
+
 	// Table allocated to store metadata.
 	def tablebuffer = [];
-	
+
 	//Signature Algorithm
 	def String SIGNATURE_ALGORITHM = "http://www.w3.org/2001/04/xmldsig-more#rsa-sha256";
 	def String SIGNATURE_XMLNS = "http://www.w3.org/2000/09/xmldsig#";
-	
+
 	// Node container
 	def Node nodeContainer = null;
-	
+
 	def dbUser=null
 	def dbPassword=null
 
 	// Constructor of the SMP Class
 	SMP(log,messageExchange,context) {
 		debugLog("Create SMP instance", log)
-		this.log = log 
+		this.log = log
 		this.messageExchange = messageExchange;
 		this.context=context;
-        this.url=context.expand( '${#Project#jdbc.url}' );
-        driver=context.expand( '${#Project#jdbc.driver}' );
-        testDatabase=context.expand( '${#Project#testDB}' );
+		this.url=context.expand( '${#Project#jdbc.url}' );
+		driver=context.expand( '${#Project#jdbc.driver}' );
+		testDatabase=context.expand( '${#Project#testDB}' );
 		dbUser=context.expand( '${#Project#dbUser}' );
-        dbPassword=context.expand( '${#Project#dbPassword}' );		
-		sqlConnection = null;	
+		dbPassword=context.expand( '${#Project#dbPassword}' );
+		sqlConnection = null;
 		debugLog("SMP instance created", log)
 	}
-	
+
 	// Class destructor
+	/*
     void finalize(){
         log.info "Test finished."
-    }	
+    }*/
+	void close(){
+		log.info "Test finished."
+	}
 
 //IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-	// Log information wrapper 
+	// Log information wrapper
 	static def void debugLog(logMsg, logObject,  logLevel = DEFAULT_LOG_LEVEL) {
-		if (logLevel.toString()=="1" || logLevel.toString() == "true") 
+		if (logLevel.toString()=="1" || logLevel.toString() == "true")
 			logObject.info (logMsg)
 	}
 //IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-    // Simply open DB connection (dev or test depending on testEnvironment variable)	
+	// Simply open DB connection (dev or test depending on testEnvironment variable)
 	def openConnection(){
-       debugLog("Open DB connections", log)
-        if(testDatabase.toLowerCase()=="true") {
-				if (sqlConnection) {
-					debugLog("DB connection seems already open", log)
-				}
-				else {
-	            try{
+		debugLog("Open DB connections", log)
+		if(testDatabase.toLowerCase()=="true") {
+			if (sqlConnection) {
+				debugLog("DB connection seems already open", log)
+			}
+			else {
+				try{
 					if(driver.contains("oracle")){
 						// Oracle DB
 						GroovyUtils.registerJdbcDriver( "oracle.jdbc.driver.OracleDriver" )
@@ -107,42 +114,42 @@ class SMP
 					}
 					debugLog("Open connection with url ${url} dbUser=${dbUser} pass=${dbPassword} driver=${driver} |", log)
 					sqlConnection = Sql.newInstance(url, dbUser, dbPassword, driver)
-					
-	            }
-	            catch (SQLException ex)
-	            {
-	                assert 0,"SQLException occurred: " + ex;
-	            }
+
+				}
+				catch (SQLException ex)
+				{
+					assert 0,"SQLException occurred: " + ex;
+				}
 			}
-	        }
-	        else // testDatabase.toLowerCase()=="false")
-	        	assert 0, "testDatabase param is set not set to true value - would not try to open DB connection"
-        }
+		}
+		else // testDatabase.toLowerCase()=="false")
+			assert 0, "testDatabase param is set not set to true value - would not try to open DB connection"
+	}
 //IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-    // Close the DB connection opened previously
-    def closeConnection(){
-	debugLog("Close DB connection", log)
-        if(testDatabase.toLowerCase()=="true"){
-            if(sqlConnection){
-                sqlConnection.connection.close();
-                sqlConnection = null;
-            }
-        }
-	debugLog("DB connection closed", log)
-    }
-	
+	// Close the DB connection opened previously
+	def closeConnection(){
+		debugLog("Close DB connection", log)
+		if(testDatabase.toLowerCase()=="true"){
+			if(sqlConnection){
+				sqlConnection.connection.close();
+				sqlConnection = null;
+			}
+		}
+		debugLog("DB connection closed", log)
+	}
+
 //IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-    def executeListOfSqlQueries(String[] sqlQueriesList) {
-        def connectionOpenedInsideMethod = false
+	def executeListOfSqlQueries(String[] sqlQueriesList) {
+		def connectionOpenedInsideMethod = false
 
-        if (!sqlConnection) {
-            debugLog("Method executed without connections open to the DB - try to open connection", log)
-            openConnection()
-            connectionOpenedInsideMethod = true
-        }
+		if (!sqlConnection) {
+			debugLog("Method executed without connections open to the DB - try to open connection", log)
+			openConnection()
+			connectionOpenedInsideMethod = true
+		}
 
-        for (query in sqlQueriesList) {
-            debugLog("Executing SQL query: " + query, log)
+		for (query in sqlQueriesList) {
+			debugLog("Executing SQL query: " + query, log)
 			try{
 				sqlConnection.execute query
 			}
@@ -150,26 +157,26 @@ class SMP
 				closeConnection();
 				assert 0,"SQLException occurred: " + ex;
 			}
-        }
+		}
 
-        if (connectionOpenedInsideMethod) {
-            debugLog("Connection to DB opened during method execution - close opened connection", log)
-            closeConnection()
-        }
-    }
+		if (connectionOpenedInsideMethod) {
+			debugLog("Connection to DB opened during method execution - close opened connection", log)
+			closeConnection()
+		}
+	}
 
 	//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-    def executeSqlAndReturnFirstRow(String query) {
-        def connectionOpenedInsideMethod = false
+	def executeSqlAndReturnFirstRow(String query) {
+		def connectionOpenedInsideMethod = false
 		def res
 
-        if (!sqlConnection) {
-            debugLog("Method executed without connections open to the DB - try to open connection", log)
-            openConnection()
-            connectionOpenedInsideMethod = true
-        }
+		if (!sqlConnection) {
+			debugLog("Method executed without connections open to the DB - try to open connection", log)
+			openConnection()
+			connectionOpenedInsideMethod = true
+		}
 
-        debugLog("Executing SQL query: " + query, log)
+		debugLog("Executing SQL query: " + query, log)
 		debugLog("Executing SQL query: " + (sqlConnection == null), log)
 		try{
 			res = sqlConnection.firstRow query
@@ -179,79 +186,79 @@ class SMP
 			assert 0,"SQLException occurred: " + ex;
 		}
 
-        if (connectionOpenedInsideMethod) {
-            debugLog("Connection to DB opened during method execution - close opened connection", log)
-            closeConnection()
-        }
+		if (connectionOpenedInsideMethod) {
+			debugLog("Connection to DB opened during method execution - close opened connection", log)
+			closeConnection()
+		}
 		return res
-    }
-	
+	}
+
 	def findDomainName() {
 		def result = executeSqlAndReturnFirstRow('SELECT DOMAIN_CODE FROM SMP_DOMAIN order by ID')
 		return result.domain_code
 	}
 
 //IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-//// filterForTestSuite = /PASSING_AUTO_BAMBOO/   // for multiple test suite use more advanced regexp like for example:  /PASSING_AUTO_BAMBOO|PASSING_NOT_FOR_BAMBOO/ 
+//// filterForTestSuite = /PASSING_AUTO_BAMBOO/   // for multiple test suite use more advanced regexp like for example:  /PASSING_AUTO_BAMBOO|PASSING_NOT_FOR_BAMBOO/
 //// filterForTestCases = /SMP001.*/   //for single test case use simple regexp like /SMP001.*/
 
-def cleanAndAddHeaderElement(filterForTestSuite,  filterForTestCases, String fieldName, String newValue = null, restMethodName = 'PUT ServiceGroup') {
-
-	debugLog("START: modyfication of test requests", log)
-	context.testCase.testSuite.project.getTestSuiteList().each { testSuite ->
-		if (testSuite.getLabel() =~ filterForTestSuite) {
-		debugLog("test suite: " + testSuite.getLabel(), log)
-			testSuite.getTestCaseList().each { testCase ->
-				if (testCase.getLabel() =~ filterForTestCases) {
-					debugLog("test label:" + testCase.getLabel(), log)
-					testCase.getTestStepList().each {testStep ->
-	      				if (testStep instanceof RestTestRequestStep && testStep.getRestMethod().name == restMethodName) {
-	
-							def hOld = testStep.getHttpRequest().getRequestHeaders()
-							hOld.remove(fieldName) 
-							hOld.remove(fieldName.capitalize())
-							hOld.remove(fieldName.toUpperCase())
-							if (newValue) 
-								hOld[fieldName] = [newValue]
-							testStep.getHttpRequest().setRequestHeaders(hOld) 
-							debugLog("For testStep:" + testStep.name + "; Header: "  + testStep.getHttpRequest().getRequestHeaders(), log)
+	def cleanAndAddHeaderElement(filterForTestSuite,  filterForTestCases, String fieldName, String newValue = null, restMethodName = 'PUT ServiceGroup') {
+
+		debugLog("START: modyfication of test requests", log)
+		context.testCase.testSuite.project.getTestSuiteList().each { testSuite ->
+			if (testSuite.getLabel() =~ filterForTestSuite) {
+				debugLog("test suite: " + testSuite.getLabel(), log)
+				testSuite.getTestCaseList().each { testCase ->
+					if (testCase.getLabel() =~ filterForTestCases) {
+						debugLog("test label:" + testCase.getLabel(), log)
+						testCase.getTestStepList().each {testStep ->
+							if (testStep instanceof RestTestRequestStep && testStep.getRestMethod().name == restMethodName) {
+
+								def hOld = testStep.getHttpRequest().getRequestHeaders()
+								hOld.remove(fieldName)
+								hOld.remove(fieldName.capitalize())
+								hOld.remove(fieldName.toUpperCase())
+								if (newValue)
+									hOld[fieldName] = [newValue]
+								testStep.getHttpRequest().setRequestHeaders(hOld)
+								debugLog("For testStep:" + testStep.name + "; Header: "  + testStep.getHttpRequest().getRequestHeaders(), log)
+							}
 						}
-		  			}
-	 			}
-	
+					}
+
+				}
 			}
 		}
-	 }
-	debugLog("END: Modification of requests hedears finished", log)
-}
+		debugLog("END: Modification of requests hedears finished", log)
+	}
 //=================================================================================
 //======================== Initialize the parameters names ========================
-//=================================================================================	
+//=================================================================================
 	def initParameters(String testType, String indicator){
 		if(indicator.toLowerCase()=="request"){
-        	switch(testType.toLowerCase()){
+			switch(testType.toLowerCase()){
 				case "servicemetadata":
 					requestDataTable[0]=["0","businessIdSchemeRequest"];
 					requestDataTable[1]=["0","ParticipantIdentifierRequest"];
 					requestDataTable[2]=["0","documentIdentSchemeRequest"];
 					requestDataTable[3]=["0","documentIdentifierRequest"];
-				break;
+					break;
 				case "servicegroup":
 					requestDataTable[0]=["0","businessIdSchemeRequest"];
 					requestDataTable[1]=["0","ParticipantIdentifierRequest"];
 					requestDataTable[2]=["0","Extension"];
 					requestDataTable[3]=["0","Certificate"];
-            	break;
+					break;
 				case "redirection":
 					requestDataTable[0]=["0","redirectUrl"];
 					requestDataTable[1]=["0","CertificateUID"];
-            		break;
-	        	default:
-            		log.info "Unknown operation";
-        	}
-		}   
+					break;
+				default:
+					log.info "Unknown operation";
+			}
+		}
 		if(indicator.toLowerCase()=="response"){
-        	switch(testType){
+			switch(testType){
 				case "servicemetadata":
 					responseDataTable[0]=["0","businessIdSchemeResponse"];
 					responseDataTable[1]=["0","ParticipantIdentifierResponse"];
@@ -263,20 +270,20 @@ def cleanAndAddHeaderElement(filterForTestSuite,  filterForTestCases, String fie
 					responseDataTable[1]=["0","ParticipantIdentifierResponse"];
 					responseDataTable[2]=["0","Extension"];
 					responseDataTable[3]=["0","Certificate"];
-            				break;
+					break;
 				case "redirection":
 					responseDataTable[0]=["0","redirectUrl"]
 					responseDataTable[1]=["0","CertificateUID"]
-            				break;
-	        		default:
-            				log.info "Unknown operation";
-        	}
-		}     
+					break;
+				default:
+					log.info "Unknown operation";
+			}
+		}
 	}
 //=================================================================================
 
 
-	
+
 //=================================================================================
 //========================== Extract request parameters ===========================
 //=================================================================================
@@ -285,16 +292,16 @@ def cleanAndAddHeaderElement(filterForTestSuite,  filterForTestCases, String fie
 
 		// Load the Request
 		requestContent = messageExchange.getOperation();
-		assert (requestContent!=null),locateTest()+"Error: Not possible to extract the request content. Request content extracted is empty."; 
-		
+		assert (requestContent!=null),locateTest()+"Error: Not possible to extract the request content. Request content extracted is empty.";
+
 		// Browse the REST request
 		extractFromURL(requestContent.toString());
-		
-        switch(testType.toLowerCase()){
-			
-			// Extract the Participant Identifier and the Business Identifier Scheme from the Request
+
+		switch(testType.toLowerCase()){
+
+		// Extract the Participant Identifier and the Business Identifier Scheme from the Request
 			case "servicegroup":
-			debugLog("In extractRequestParameters tempoContainer: $tempoContainer", log)
+				debugLog("In extractRequestParameters tempoContainer: $tempoContainer", log)
 				initParameters("servicegroup","request");
 				requestDataTable[0][0] = tempoContainer[0];
 				requestDataTable[1][0] = tempoContainer[1];
@@ -302,31 +309,31 @@ def cleanAndAddHeaderElement(filterForTestSuite,  filterForTestCases, String fie
 					requestDataTable[2][0] = extractExtValues(extractTextFromReq(testStepName));
 					requestDataTable[3][0] = extractNodeValue("CertificateIdentifier",extractTextFromReq(testStepName));
 				}
-            break;
-			
-			// Extract the Participant Identifier and the document from the Request	
+				break;
+
+				// Extract the Participant Identifier and the document from the Request
 			case "servicemetadata":
 			case "signature":
-				initParameters("servicemetadata","request");	
+				initParameters("servicemetadata","request");
 				requestDataTable[0][0] = tempoContainer[0];
 				requestDataTable[1][0] = tempoContainer[1];
 				requestDataTable[2][0] = tempoContainer[2];
 				requestDataTable[3][0] = tempoContainer[3];
-            break;
-			
-			
+				break;
+
+
 			case "redirection":
-				initParameters("redirection","request");	
-            break;
-			
-	        default:
+				initParameters("redirection","request");
+				break;
+
+			default:
 				if(testType.toLowerCase()=="contenttype"){
 					// Do nothing
 					break;
 				}
 				assert(0), locateTest()+"Error: -extractRequestParameters-Unknown operation: "+testType+"."+" Possible operations: serviceGroup, serviceMetadata, Redirection, Signature, contentType";
-			break;
-        }        
+				break;
+		}
 	}
 //=================================================================================
 
@@ -344,75 +351,75 @@ def cleanAndAddHeaderElement(filterForTestSuite,  filterForTestCases, String fie
 		def responseContent = messageExchange.getResponseContentAsXml();
 		// Extract the Participant Identifier, the references to the signed metadata and the extensions from the Response
 		def ServiceDetails = new XmlSlurper().parseText(responseContent);
-       	switch(testType.toLowerCase()){
+		switch(testType.toLowerCase()){
 			case "servicegroup":
 				initParameters("servicegroup","response");
 				urlRefCounter = 4;
 				allNodes = ServiceDetails.depthFirst().each{
-	   				if(it.name()== "ParticipantIdentifier"){
-        	 			responseDataTable[1][0]=it.text();
-        	 			responseDataTable[0][0]=it.@scheme.text();
-        			}
-        			if(it.name()== "ServiceMetadataReference"){
+					if(it.name()== "ParticipantIdentifier"){
+						responseDataTable[1][0]=it.text();
+						responseDataTable[0][0]=it.@scheme.text();
+					}
+					if(it.name()== "ServiceMetadataReference"){
 						responseDataTable[urlRefCounter]=[it.@href.text(),"ServiceMetadataReference"];
-        				urlRefCounter+=1;
-        			}
-        			/*if(it.name()== "Extension"){
-        				responseDataTable[2][0]=it.text();
-       	 			}*/
+						urlRefCounter+=1;
+					}
+					/*if(it.name()== "Extension"){
+                        responseDataTable[2][0]=it.text();
+                        }*/
 					if(it.name()== "CertificateIdentifier"){
-        				responseDataTable[3][0]=it.text();
-       	 			}
+						responseDataTable[3][0]=it.text();
+					}
 				}
-				// Extract the extension 
+				// Extract the extension
 				responseDataTable[2][0]=extractExtValues(responseContent.toString());
-            break;
-			
+				break;
+
 			case "servicemetadata":
 			case "signature":
 				tempoString = null;
 				initParameters("servicemetadata","response");
 				allNodes = ServiceDetails.depthFirst().each{
-	   				if(it.name()== "ParticipantIdentifier"){
-        	 			responseDataTable[1][0]=it.text();
-        	 			responseDataTable[0][0]=it.@scheme.text();
-        			}
+					if(it.name()== "ParticipantIdentifier"){
+						responseDataTable[1][0]=it.text();
+						responseDataTable[0][0]=it.@scheme.text();
+					}
 					if(it.name()== "DocumentIdentifier"){
 						responseDataTable[2][0]=it.@scheme.text();
-        	 			responseDataTable[3][0]=it.text();
-        			}
+						responseDataTable[3][0]=it.text();
+					}
 				}
 				tempoString = responseContent.toString();
-            break;
-			
+				break;
+
 			case "redirection":
 				initParameters("redirection","response");
 				allNodes = ServiceDetails.depthFirst().each{
 					if(it.name()== "Redirect"){
-        	 			responseDataTable[0][0]=it.@href.text();
-        			}
+						responseDataTable[0][0]=it.@href.text();
+					}
 					if(it.name()== "CertificateUID"){
-        	 			responseDataTable[1][0]=it.text();
-        			}
+						responseDataTable[1][0]=it.text();
+					}
 				}
-				assert((responseDataTable[0][0]!=null)&&(responseDataTable[0][0]!="0")), locateTest()+"Error: Redirection is expected but redirect element was not found in the response."; 
+				assert((responseDataTable[0][0]!=null)&&(responseDataTable[0][0]!="0")), locateTest()+"Error: Redirection is expected but redirect element was not found in the response.";
 				assert((responseDataTable[1][0]!=null)&&(responseDataTable[1][0]!="0")), locateTest()+"Error: Redirection is expected but CertificateUID element was not found in the response.";
-        	break;
-			
-	        default:
+				break;
+
+			default:
 				// content-Type = text/xml
 				if(testType.toLowerCase()=="contenttype"){
 					for(header in messageExchange.getResponseHeaders()){
 						if((header.toString().contains("Content-Type")) && (header.toString().contains("text/xml"))){
 							headerFound = 1;
-						} 
+						}
 					}
 					assert(headerFound==1), locateTest()+"Error: Header content-Type is not found or is not set to text/xml.";
 					break;
 				}
-            	assert(0), locateTest()+"Error: -extractResponseParameters-Unknown operation: "+testType+"."+" Possible operations: serviceGroup, serviceMetadata, Redirection, Signature, contentType.";
-			break;
-        }        
+				assert(0), locateTest()+"Error: -extractResponseParameters-Unknown operation: "+testType+"."+" Possible operations: serviceGroup, serviceMetadata, Redirection, Signature, contentType.";
+				break;
+		}
 	}
 //=================================================================================
 
@@ -422,8 +429,8 @@ def cleanAndAddHeaderElement(filterForTestSuite,  filterForTestCases, String fie
 //========================== Perform test verifications ===========================
 //=================================================================================
 	def verifyResults(String testType, String expectedResult, String testStepName="false", String redirectURL=null, String redirectCer=null, int nRef=0){
-		// In case of testType = "servicegroup", 
-			debugLog("Entering verifyResults method with testType: $testType, expectedResult: $expectedResult, testStepName: $testStepName, redirectURL: $redirectURL, redirectCer: $redirectCer, nRef: $nRef", log)	
+		// In case of testType = "servicegroup",
+		debugLog("Entering verifyResults method with testType: $testType, expectedResult: $expectedResult, testStepName: $testStepName, redirectURL: $redirectURL, redirectCer: $redirectCer, nRef: $nRef", log)
 		def counter = 0;
 		def String reqString = null;
 		def String extensionRequest = "0";
@@ -431,19 +438,19 @@ def cleanAndAddHeaderElement(filterForTestSuite,  filterForTestCases, String fie
 		def sigAlgo = "0";
 		debugLog("Befor extractRequestParameters(testType,testStepName)", log)
 		extractRequestParameters(testType,testStepName);
-		debugLog("After extractRequestParameters(testType,testStepName)", log)		
+		debugLog("After extractRequestParameters(testType,testStepName)", log)
 		extractResponseParameters(testType);
-		debugLog("After extractResponseParameters(testType)", log)		
-		switch(testType.toLowerCase()){	
+		debugLog("After extractResponseParameters(testType)", log)
+		switch(testType.toLowerCase()){
 			case "servicegroup":
 				if(expectedResult.toLowerCase()=="success"){
 					while(counter<4){
-						if ((counter==2)&&(requestDataTable[2][0]!="0")){							
+						if ((counter==2)&&(requestDataTable[2][0]!="0")){
 							if(compareXMLs(responseDataTable[counter][0],requestDataTable[counter][0])==false){
 								log.error "Extension in request: "+requestDataTable[counter][0];
 								log.error "Extension in response: "+responseDataTable[counter][0];
 								assert(0), locateTest()+"Error: Extension returned is different from Extension pushed. For details, please refer to logs in red.";
-							}						
+							}
 						}else{
 							assert(responseDataTable[counter][0].toLowerCase()==requestDataTable[counter][0].toLowerCase()), locateTest()+"Error: in request, "+requestDataTable[counter][1]+"=\""+requestDataTable[counter][0]+"\""+" wheras in response, "+responseDataTable[counter][1]+"=\""+responseDataTable[counter][0]+"\".";
 						}
@@ -464,7 +471,7 @@ def cleanAndAddHeaderElement(filterForTestSuite,  filterForTestCases, String fie
 						assert(nRef), locateTest()+"Error: in a ServiceMetadataReference in the response, participant is ("+tempoContainer[0]+","+tempoContainer[1]+") instead of ("+responseDataTable[0][0]+","+responseDataTable[1][0]+").";
 					}
 				}
-            break;
+				break;
 			case "servicemetadata":
 				counter = 0;
 				if(expectedResult.toLowerCase()=="success"){
@@ -484,36 +491,36 @@ def cleanAndAddHeaderElement(filterForTestSuite,  filterForTestCases, String fie
 						assert(0), locateTest()+"Error: Extension returned is different from Extension pushed. For details, please refer to logs in red.";
 					}
 				}
-            break;
+				break;
 			case "redirection":
 				counter = 0;
 				requestDataTable[0][0]=redirectURL;
 				requestDataTable[1][0]=redirectCer;
 				assert(requestDataTable[0][0]==responseDataTable[0][0]), locateTest()+"Error: in ServiceMetadata returned redirect URL is ------"+responseDataTable[0][0]+"------ instead of ------"+requestDataTable[0][0]+"------.";
 				assert(requestDataTable[0][0]==responseDataTable[0][0]), locateTest()+"Error: in ServiceMetadata returned certificate is ------"+responseDataTable[1][0]+"------ instead of ------"+requestDataTable[1][0]+"------.";
-            break;
+				break;
 			case "signature":
 				sigAlgo = extractNodeValue("SignatureMethod", tempoString,null, "Algorithm");
 				assert(sigAlgo!= "0"), locateTest()+"Error: Signature Algorithm couldn't be extracted from the response."
 				assert(SIGNATURE_ALGORITHM==sigAlgo), locateTest()+"Error: Signature Algorithm is "+sigAlgo+" instead of "+SIGNATURE_ALGORITHM+".";
-				// Verify the SMP signature validity	
+				// Verify the SMP signature validity
 				def Boolean validResult = validateSignature(returnDOMDocument(tempoString));
 				assert (validResult == true),locateTest()+"Error: Signature of the SMP is not valid.";
 				validResult =false;
-				
+
 				// TODO: Enable the extension signature validation.
 				validResult = validateSignatureExtension(returnDOMDocument(tempoString));
 				assert (validResult == true),locateTest()+"Error: Signature in the extension is not valid.";
-			break;
-			
-	        default:
+				break;
+
+			default:
 				if(testType.toLowerCase()=="contenttype"){
 					// Do nothing
 					break;
 				}
-            	assert(0), locateTest()+"Error: -verifyResults-Unknown operation: "+testType+"."+" Possible operations: serviceGroup, serviceMetadata, Redirection, Signature, contentType.";
-			break;
-        }
+				assert(0), locateTest()+"Error: -verifyResults-Unknown operation: "+testType+"."+" Possible operations: serviceGroup, serviceMetadata, Redirection, Signature, contentType.";
+				break;
+		}
 	}
 //=================================================================================
 
@@ -523,13 +530,13 @@ def cleanAndAddHeaderElement(filterForTestSuite,  filterForTestCases, String fie
 //=========================== Extract PUT XML contents ============================
 //=================================================================================
 	def String extractTextFromReq(String testStepName){
-	    def fullRequest = context.testCase.getTestStepByName(testStepName);
+		def fullRequest = context.testCase.getTestStepByName(testStepName);
 		assert (fullRequest != null), locateTest()+"Error in function \"extractTextFromReq\": can't find test step name: \""+testStepName+"\"";
-        def request = fullRequest.getProperty( "request" );
+		def request = fullRequest.getProperty( "request" );
 		def result = request.value.toString();
 		result = result.replace("%23","#");
 		result = result.replace("%3A",":");
-        return result;        
+		return result;
 	}
 //=================================================================================
 
@@ -556,17 +563,17 @@ def cleanAndAddHeaderElement(filterForTestSuite,  filterForTestCases, String fie
 					result=it.@{attribute.toString()}.text();
 				}
 			}
-        }
+		}
 		if(result==""){
 			result="0";
 		}
 		return result;
 	}
-	
+
 	// Extensions are extracted in a different way
 	def String extractExtValues(String extInput){
 		def String extResult = "";
-		def String inputTrimmed=extInput.replaceAll("\n","").replaceAll("\r", "").replaceAll(">\\s+<", "><").replaceAll("%23","#").replaceAll("%3A",":");		
+		def String inputTrimmed=extInput.replaceAll("\n","").replaceAll("\r", "").replaceAll(">\\s+<", "><").replaceAll("%23","#").replaceAll("%3A",":");
 		def containerExt = (inputTrimmed =~ /<Extension>((?!<Extension>).)*<\/Extension>/);
 		while(containerExt.find()){
 			extResult = extResult+containerExt.group();
@@ -577,9 +584,9 @@ def cleanAndAddHeaderElement(filterForTestSuite,  filterForTestCases, String fie
 		//log.info "<AllExtensionsRoot>"+extResult+"</AllExtensionsRoot>";
 		return "<AllExtensionsRoot>"+extResult+"</AllExtensionsRoot>";
 	}
-	
+
 	// Difference between XMLs
-	def Boolean compareXMLs(String request, String response){	
+	def Boolean compareXMLs(String request, String response){
 		def DetailedDiff myDiff = new DetailedDiff(new Diff(request, response));
 		def List allDifferences = myDiff.getAllDifferences();
 
@@ -594,7 +601,7 @@ def cleanAndAddHeaderElement(filterForTestSuite,  filterForTestCases, String fie
 		}
 		return true;
 	}
-	
+
 //=================================================================================
 
 
@@ -622,7 +629,7 @@ def cleanAndAddHeaderElement(filterForTestSuite,  filterForTestCases, String fie
 		def String startTag = null;
 		def String endTag = null;
 		def String result = null;
-		
+
 		//if(requestName.toLowerCase()=="servicegroup"){
 		//	startTag = "<ServiceMetadataReferenceCollection>";
 		//	endTag = "</ServiceGroup>";
@@ -663,9 +670,9 @@ def cleanAndAddHeaderElement(filterForTestSuite,  filterForTestCases, String fie
 		def mesure = 0;
 		def extraParts = null;
 		debugLog("entering extractFromURL", log)
-		
+
 		tempoContainer=["0","0","0","0"];
-	
+
 		Table1 = url.split('/services/');
 		parts=Table1[0].split('/');
 		mesure=parts.size();
@@ -681,30 +688,30 @@ def cleanAndAddHeaderElement(filterForTestSuite,  filterForTestCases, String fie
 		assert (Table1.size()== 2),locateTest()+"Error: Could not extract the Participant Identifier from the url. Non usual url format, :: separator not found";
 		tempoContainer[0] = Table1[0];
 		tempoContainer[1] = Table1[1];
-		debugLog("Filling tempoContainer table", log)		
+		debugLog("Filling tempoContainer table", log)
 		// TODO FIX this backward compatibility issue
 		if (messageExchange.getProperties()) {
 			debugLog("Extracting ParticipantIdentifier from property. Table1: Table1", log)
 			tempoContainer[0] = messageExchange.getProperty('ParticipantIdentifierScheme')
 			tempoContainer[1] = messageExchange.getProperty('ParticipantIdentifier')
 		}
-		
+
 		if(extraParts!=null){
-			debugLog("Filling tempoContainer table fields 2 and 3. extraParts: $extraParts", log)				
+			debugLog("Filling tempoContainer table fields 2 and 3. extraParts: $extraParts", log)
 			extraParts = extraParts.replace("%3A",":");
 			extraParts = extraParts.replace("%23","#");
 			Table1 = [];
 			Table1=extraParts.split('::',2);
 			tempoContainer[2] = Table1[0].replace("%2F","/");
 			tempoContainer[3] = Table1[1].replace("%2F","/");
-		// TODO FIX this backward compatibility issue
-		if (messageExchange.getProperties()) {
-			debugLog("Extracting DocTypeIdentifier from property", log)			
-			tempoContainer[2] = messageExchange.getProperty('DocTypeIdentifierScheme')
-			tempoContainer[3] = messageExchange.getProperty('DocTypeIdentifier')
-		}			
+			// TODO FIX this backward compatibility issue
+			if (messageExchange.getProperties()) {
+				debugLog("Extracting DocTypeIdentifier from property", log)
+				tempoContainer[2] = messageExchange.getProperty('DocTypeIdentifierScheme')
+				tempoContainer[3] = messageExchange.getProperty('DocTypeIdentifier')
+			}
 		}
-		debugLog("Leaving extractFromURL", log)		
+		debugLog("Leaving extractFromURL", log)
 	}
 //=================================================================================
 
@@ -722,7 +729,7 @@ def cleanAndAddHeaderElement(filterForTestSuite,  filterForTestCases, String fie
 		outcome = compareTables(table1,table2);
 		return (outcome);
 	}
-//=================================================================================	
+//=================================================================================
 
 
 //=================================================================================
@@ -737,8 +744,8 @@ def cleanAndAddHeaderElement(filterForTestSuite,  filterForTestCases, String fie
 		def String oldProcessScheme ="0";
 		tablebuffer=["0","0","0","0","0","0","0","0","0","0","0","0","0"];
 		def rootMT = new XmlSlurper().parseText(metadata);
-   		def allNodes = rootMT.depthFirst().each{
-	   		if(it.name()== "ProcessIdentifier"){
+		def allNodes = rootMT.depthFirst().each{
+			if(it.name()== "ProcessIdentifier"){
 				if(switchProcess==0){
 					oldProcessScheme=it.@scheme.text();
 					oldProcessId=it.text();
@@ -749,9 +756,9 @@ def cleanAndAddHeaderElement(filterForTestSuite,  filterForTestCases, String fie
 					switchProcess=0;
 				}
 				tablebuffer[0]=it.@scheme.text();
-         		tablebuffer[1]=it.text();
-        	}
-        	if(it.name()== "Endpoint"){
+				tablebuffer[1]=it.text();
+			}
+			if(it.name()== "Endpoint"){
 				if(switchEndPoint==0){
 					switchEndPoint=1;
 				}else{
@@ -760,53 +767,53 @@ def cleanAndAddHeaderElement(filterForTestSuite,  filterForTestCases, String fie
 					i=i+1;
 				}
 				tablebuffer[2]=it.@transportProfile.text();
-        	}					
+			}
 			if(it.name()== "EndpointURI"){
-         		tablebuffer[3]=it.text().trim();
-        	}
+				tablebuffer[3]=it.text().trim();
+			}
 			if(it.name()== "RequireBusinessLevelSignature"){
-			        if(it.text()=~ /[f|F][a|A][l|L][S|s]/){
-        				tablebuffer[4]="0";
-        			}else{
-        				if(it.text()=~ /[T|t][R|r][U|u]/){
-        					tablebuffer[4]="1";
-        				}
-        				else{
-        					tablebuffer[4] = it.text()
-        				}
-        			}
-        	}
+				if(it.text()=~ /[f|F][a|A][l|L][S|s]/){
+					tablebuffer[4]="0";
+				}else{
+					if(it.text()=~ /[T|t][R|r][U|u]/){
+						tablebuffer[4]="1";
+					}
+					else{
+						tablebuffer[4] = it.text()
+					}
+				}
+			}
 			if(it.name()== "ServiceActivationDate"){
-         		//tablebuffer[5]=it.text();
+				//tablebuffer[5]=it.text();
 				tablebuffer[5]=Date.parse("yyyy-MM-dd",it.text());
-        	}
+			}
 			if(it.name()== "ServiceExpirationDate"){
-         		//tablebuffer[6]=it.text();
+				//tablebuffer[6]=it.text();
 				tablebuffer[6]=Date.parse("yyyy-MM-dd",it.text());
-        	}
+			}
 			if(it.name()== "Certificate"){
-         		tablebuffer[7]=it.text();
-        	}
+				tablebuffer[7]=it.text();
+			}
 			if(it.name()== "ServiceDescription"){
-         		tablebuffer[8]=it.text();
-        	}
+				tablebuffer[8]=it.text();
+			}
 			if(it.name()== "TechnicalContactUrl"){
 				tablebuffer[9]=it.text();
-        	}
+			}
 			if(it.name()== "minimumAuthenticationLevel"){
-         		tablebuffer[10]=it.text();
-        	}
+				tablebuffer[10]=it.text();
+			}
 			if(it.name()== "TechnicalInformationUrl"){
-         		tablebuffer[11]=it.text();
-        	}
+				tablebuffer[11]=it.text();
+			}
 			if(it.name()== "extension"){
-         		tablebuffer[12]=it.text();
-        	}
-		}	
+				tablebuffer[12]=it.text();
+			}
+		}
 		result[i]=returnHash(tablebuffer.join(","));
 		return(result);
 	}
-//=================================================================================	
+//=================================================================================
 
 
 
@@ -815,7 +822,7 @@ def cleanAndAddHeaderElement(filterForTestSuite,  filterForTestCases, String fie
 //=================================================================================
 	def String compareTables(tab1,tab2){
 		def found = 0;
-        if(tab1.size()!=tab2.size()){
+		if(tab1.size()!=tab2.size()){
 			return "false";
 		}
 		for (String item1 : tab1) {
@@ -843,55 +850,55 @@ def cleanAndAddHeaderElement(filterForTestSuite,  filterForTestCases, String fie
 		}
 		return "true";
 	}
-//=================================================================================	
+//=================================================================================
 
 
 
 //=================================================================================
 //============= Locate the test case for display it in the error logs =============
-//=================================================================================	 
-    def String locateTest(){
-		// Returns: "--TestCase--testStep--" 
-        return("--"+context.testCase.name+"--"+context.testCase.getTestStepAt(context.getCurrentStepIndex()).getLabel()+"--  ");
-    }
-//=================================================================================	
+//=================================================================================
+	def String locateTest(){
+		// Returns: "--TestCase--testStep--"
+		return("--"+context.testCase.name+"--"+context.testCase.getTestStepAt(context.getCurrentStepIndex()).getLabel()+"--  ");
+	}
+//=================================================================================
 
 
 
 //=================================================================================
 //============================== Dump request table ===============================
-//=================================================================================	 
-    def String dumpRequestTable(){
+//=================================================================================
+	def String dumpRequestTable(){
 		def ii = 0;
 		log.info("== Request Table ==");
 		while(ii<requestDataTable.size()){
 			log.info "--"+requestDataTable[ii][1]+"--"+requestDataTable[ii][0]+"--";
 			ii=ii+1;
-		} 
+		}
 		log.info("================================");
-    }
-//=================================================================================	
+	}
+//=================================================================================
 
 
 //=================================================================================
 //============================== Dump response table ==============================
-//=================================================================================	 
-    def String dumpResponseTable(){
+//=================================================================================
+	def String dumpResponseTable(){
 		def ii = 0;
 		log.info("== Response Table ==");
 		while(ii<responseDataTable.size()){
 			log.info "--"+responseDataTable[ii][1]+"--"+responseDataTable[ii][0]+"--";
 			ii=ii+1;
-		} 
+		}
 		log.info("================================");
-    }
-//=================================================================================	
+	}
+//=================================================================================
 
 
 //=================================================================================
 //================================== Dump table ===================================
-//=================================================================================	 
-    def dumpTable(tableToDump, String name, dimension){
+//=================================================================================
+	def dumpTable(tableToDump, String name, dimension){
 		def ii = 0;
 		if(dimension=='2'){
 			log.info("== "+name+" Table ==");
@@ -906,9 +913,9 @@ def cleanAndAddHeaderElement(filterForTestSuite,  filterForTestCases, String fie
 				log.info "--"+tableToDump[ii]+"--";
 				ii=ii+1;
 			}
-		}		
+		}
 		log.info("================================");
-    }
+	}
 //=================================================================================
 
 //====================== Signature code ===================================
@@ -930,30 +937,31 @@ def cleanAndAddHeaderElement(filterForTestSuite,  filterForTestCases, String fie
 	def Certificate decodeX509Certificate(Document doc){
 		def Certificate cert = null;
 		def String certMessage = null;
-    
+
 		// Check Certificate
 		def Element smpSig = findElement(doc,"X509Certificate","SMP",null);
 		assert (smpSig != null),locateTest()+"Error: SMP X509Certificate Signature not found in the response.";
-		
+
 		certMessage=smpSig.getTextContent();
 		def CertificateFactory cf = CertificateFactory.getInstance("X509");
-		def InputStream is = new ByteArrayInputStream(new sun.misc.BASE64Decoder().decodeBuffer(certMessage));
+		//def InputStream is = new ByteArrayInputStream(new sun.misc.BASE64Decoder().decodeBuffer(certMessage));
+		def InputStream is = Base64.decoder.decode(certMessage);
 		cert =cf.generateCertificate(is);
 		return (cert);
 	}
-	
+
 	def Boolean validateSignature(Document doc){
 		def Boolean validFlag = true;
-		
+
 		// Find the signature of the SMP node to extract the signature algorithm
 		def Element smpSig = findElement(doc,"Signature","SMP",SIGNATURE_XMLNS);
 		assert (smpSig != null),locateTest()+"Error: SMP Signature not found in the response.";
-		
+
 		def PublicKey publicKey = decodeX509Certificate(doc).getPublicKey();
 		def XMLSignatureFactory fac = XMLSignatureFactory.getInstance("DOM");
 		def DOMValidateContext valContext = new DOMValidateContext(publicKey, smpSig);
 		valContext.setProperty("javax.xml.crypto.dsig.cacheReference", Boolean.TRUE);
-		
+
 		// Unmarshal the XMLSignature.
 		def XMLSignature signature = fac.unmarshalXMLSignature(valContext);
 		try {
@@ -964,30 +972,30 @@ def cleanAndAddHeaderElement(filterForTestSuite,  filterForTestCases, String fie
 
 		return (validFlag);
 	}
-	
+
 	def Boolean validateSignatureExtension(Document doc){
 		def Boolean validFlag = true;
-		
+
 		// Find the signature of the SMP node to extract the signature algorithm
-		def Element smpSig = findElement(doc,"Signature","Extension",SIGNATURE_XMLNS); 
+		def Element smpSig = findElement(doc,"Signature","Extension",SIGNATURE_XMLNS);
 		if(smpSig==null){
 			log.info "No extension Signature.";
 			return(true);
 		}
-		
+
 		def PublicKey publicKey = decodeX509Certificate(doc).getPublicKey();
 		def XMLSignatureFactory fac = XMLSignatureFactory.getInstance("DOM");
 		def DOMValidateContext valContext = new DOMValidateContext(publicKey, smpSig);
 		valContext.setProperty("javax.xml.crypto.dsig.cacheReference", Boolean.TRUE);
-		
-		
+
+
 		// Unmarshal the XMLSignature.
 		def XMLSignature signature = fac.unmarshalXMLSignature(valContext);
 		//displaySignatureInfo(signature,valContext);
 
 		try {
 			validFlag = signature.validate(valContext);
-		}catch(Exception ex) {			
+		}catch(Exception ex) {
 			assert (0),"-- validateSignatureExtension function -- Error occurred while trying to validate the signature: "+ex;
 		}
 		if(validFlag==false){
@@ -995,15 +1003,15 @@ def cleanAndAddHeaderElement(filterForTestSuite,  filterForTestCases, String fie
 		}
 		return (validFlag);
 	}
-	
 
-	
+
+
 	def Element findElement(Document doc, String elementName, String target, String nameSpace){
 		def elements =null;
 		if(nameSpace!=null){
-			 elements = doc.getElementsByTagNameNS(nameSpace, elementName);
+			elements = doc.getElementsByTagNameNS(nameSpace, elementName);
 		}else{
-			 elements = doc.getElementsByTagName(elementName);
+			elements = doc.getElementsByTagName(elementName);
 		}
 		if(target=="SMP"){
 			if(elements.getLength()>1){
@@ -1020,31 +1028,30 @@ def cleanAndAddHeaderElement(filterForTestSuite,  filterForTestCases, String fie
 				return (Element) elements.item(0);
 			}else{
 				return null;
-			}		
+			}
 		}
-    }
-	
+	}
+
 	def printErrorSigValDetails(DOMValidateContext valContext, XMLSignature signature){
-        boolean sv = signature.getSignatureValue().validate(valContext);
-        log.info("signature validation status: " + sv);
-        if (sv == false) {
-            // Check the validation status of each Reference.
-            Iterator i1 = signature.getSignedInfo().getReferences().iterator();
+		boolean sv = signature.getSignatureValue().validate(valContext);
+		log.info("signature validation status: " + sv);
+		if (sv == false) {
+			// Check the validation status of each Reference.
+			Iterator i1 = signature.getSignedInfo().getReferences().iterator();
 			//log.info i1.getAt(0);
 			//log.info i1.getAt(1);
 			//log.info i1.toString();
-            for (int j = 0; i1.hasNext(); j++) {
-                boolean refValid = ((org.jcp.xml.dsig.internal.dom.DOMReference) i1.next()).validate(valContext);
-                log.info("ref[" + j + "] validity status: " + refValid);
-            }
-        }
-    }
-	
+			for (int j = 0; i1.hasNext(); j++) {
+				boolean refValid = ((org.jcp.xml.dsig.internal.dom.DOMReference) i1.next()).validate(valContext);
+				log.info("ref[" + j + "] validity status: " + refValid);
+			}
+		}
+	}
+
 	def displaySignatureInfo(XMLSignature signature,DOMValidateContext valContext){
 		log.info"======== Signature ========";
 		log.info "- Signature Value: "+signature.getSignatureValue().getValue();
 		log.info"===========================";
 	}
-	
-	
+
 }
\ No newline at end of file