From 85b20a28e3a44e2c0fd68d10c033bcace0b6203c Mon Sep 17 00:00:00 2001
From: Thomas <>
Date: Mon, 15 Nov 2021 10:20:07 +0100
Subject: add jUnit test for InitialSearchTask that uses production like
 responses from ZMR T-stage

---
 .../auth/eidas/v2/tasks/InitialSearchTask.java     |  23 +-
 .../auth/eidas/v2/test/clients/ZmrClientTest.java  |   6 +-
 .../tasks/GenerateOtherLoginMethodGuiTaskTest.java |   7 +
 .../tasks/InitialSearchTaskWithRegistersTest.java  | 520 +++++++++++++++++++++
 .../SpringTest-context_ccSearchProcessor_test.xml  |  17 +
 .../data/zmr/seq_1-2_search_with_mds_resp.xml      | 181 +++++++
 6 files changed, 742 insertions(+), 12 deletions(-)
 create mode 100644 eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/InitialSearchTaskWithRegistersTest.java
 create mode 100644 eidas_modules/authmodule-eIDAS-v2/src/test/resources/SpringTest-context_ccSearchProcessor_test.xml
 create mode 100644 eidas_modules/authmodule-eIDAS-v2/src/test/resources/data/zmr/seq_1-2_search_with_mds_resp.xml

diff --git a/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/InitialSearchTask.java b/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/InitialSearchTask.java
index 2341b733..b9769bc4 100644
--- a/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/InitialSearchTask.java
+++ b/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/InitialSearchTask.java
@@ -23,6 +23,17 @@
 
 package at.asitplus.eidas.specific.modules.auth.eidas.v2.tasks;
 
+import static at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants.TRANSITION_TO_CREATE_NEW_ERNP_ENTRY_TASK;
+import static at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants.TRANSITION_TO_GENERATE_OTHER_LOGIN_METHOD_GUI_TASK;
+
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.jetbrains.annotations.NotNull;
+import org.springframework.stereotype.Component;
+
 import at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants;
 import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.MatchedPersonResult;
 import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.RegisterResult;
@@ -41,15 +52,6 @@ import at.gv.egiz.eaaf.core.exceptions.TaskExecutionException;
 import at.gv.egiz.eaaf.core.impl.idp.auth.modules.AbstractAuthServletTask;
 import eu.eidas.auth.commons.light.ILightResponse;
 import lombok.extern.slf4j.Slf4j;
-import org.jetbrains.annotations.NotNull;
-import org.springframework.stereotype.Component;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.util.Map;
-
-import static at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants.TRANSITION_TO_CREATE_NEW_ERNP_ENTRY_TASK;
-import static at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants.TRANSITION_TO_GENERATE_OTHER_LOGIN_METHOD_GUI_TASK;
 
 /**
  * Searches registers (ERnP and ZMR) after initial user auth, before adding person to SZR.
@@ -120,11 +122,14 @@ public class InitialSearchTask extends AbstractAuthServletTask {
       int resultCount = searchResult.getResultCount();
       if (resultCount == 0) {
         step6CountrySpecificSearch(executionContext, searchResult.getOperationStatus(), eidasData);
+        
       } else if (resultCount == 1) {
         foundMatchFinalizeTask(searchResult, eidasData);
+        
       } else {
         throw new WorkflowException("step2RegisterSearchWithPersonIdentifier",
             "More than one entry with unique personal-identifier", true);
+        
       }
     } catch (WorkflowException e) {
       //TODO: what we do in case of a workflow error and manual matching are necessary??
diff --git a/eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/clients/ZmrClientTest.java b/eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/clients/ZmrClientTest.java
index 127f5d3c..beedfda0 100644
--- a/eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/clients/ZmrClientTest.java
+++ b/eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/clients/ZmrClientTest.java
@@ -65,9 +65,9 @@ import lombok.SneakyThrows;
 @DirtiesContext(classMode = ClassMode.AFTER_CLASS)
 public class ZmrClientTest {
 
-  private static final String PROCESS_GENERAL = "GP_EIDAS";
-  private static final String PROCESS_TASK_SEARCH = "ZPR_VO_Person_suchen_Meldevorgang";
-  private static final String PROCESS_TASK_UPDATE = "ZPR_VO_Person_aendern";
+  public static final String PROCESS_GENERAL = "GP_EIDAS";
+  public static final String PROCESS_TASK_SEARCH = "ZPR_VO_Person_suchen_Meldevorgang";
+  public static final String PROCESS_TASK_UPDATE = "ZPR_VO_Person_aendern";
 
   @Autowired
   MsConnectorDummyConfigMap basicConfig;
diff --git a/eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/GenerateOtherLoginMethodGuiTaskTest.java b/eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/GenerateOtherLoginMethodGuiTaskTest.java
index 0b169ca4..eed0d53d 100644
--- a/eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/GenerateOtherLoginMethodGuiTaskTest.java
+++ b/eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/GenerateOtherLoginMethodGuiTaskTest.java
@@ -7,6 +7,7 @@ import java.util.Locale;
 import org.apache.commons.lang3.RandomStringUtils;
 import org.junit.Assert;
 import org.junit.Before;
+import org.junit.BeforeClass;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -44,6 +45,12 @@ public class GenerateOtherLoginMethodGuiTaskTest {
   private MockHttpServletRequest httpReq;
   private MockHttpServletResponse httpResp;
   
+  @BeforeClass
+  public static void classInitializer() {
+    Locale.setDefault(Locale.ENGLISH);
+   
+  }
+  
   /**
    * jUnit test set-up.
    * 
diff --git a/eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/InitialSearchTaskWithRegistersTest.java b/eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/InitialSearchTaskWithRegistersTest.java
new file mode 100644
index 00000000..11dfc522
--- /dev/null
+++ b/eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/InitialSearchTaskWithRegistersTest.java
@@ -0,0 +1,520 @@
+/*
+ * Copyright 2020 A-SIT Plus GmbH
+ * AT-specific eIDAS Connector has been developed in a cooperation between EGIZ,
+ * A-SIT Plus GmbH, A-SIT, and Graz University of Technology.
+ *
+ * Licensed under the EUPL, Version 1.2 or - as soon they will be approved by
+ * the European Commission - subsequent versions of the EUPL (the "License");
+ * You may not use this work except in compliance with the License.
+ * You may obtain a copy of the License at:
+ * https://joinup.ec.europa.eu/news/understanding-eupl-v12
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * This product combines work with different licenses. See the "NOTICE" text
+ * file for details on the various modules and licenses.
+ * The "NOTICE" text file is part of the distribution. Any derivative works
+ * that you distribute must include a readable copy of the "NOTICE" text file.
+ */
+
+package at.asitplus.eidas.specific.modules.auth.eidas.v2.test.tasks;
+
+import static org.apache.commons.lang3.RandomStringUtils.randomAlphabetic;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertThrows;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.when;
+
+import java.math.BigInteger;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBElement;
+import javax.xml.bind.JAXBException;
+import javax.xml.bind.Unmarshaller;
+import javax.xml.namespace.QName;
+
+import org.apache.commons.lang3.RandomStringUtils;
+import org.jetbrains.annotations.NotNull;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.mock.web.MockHttpServletRequest;
+import org.springframework.mock.web.MockHttpServletResponse;
+import org.springframework.test.annotation.DirtiesContext;
+import org.springframework.test.annotation.DirtiesContext.ClassMode;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+import com.github.skjolber.mockito.soap.SoapServiceRule;
+
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.clients.zmr.IZmrClient;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.clients.zmr.ZmrSoapClient.ZmrRegisterResult;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.MatchedPersonResult;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.RegisterResult;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.SimpleEidasData;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.ernp.IErnpClient;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.exception.EidPostProcessingException;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.exception.EidasAttributeException;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.exception.EidasSAuthenticationException;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.exception.WorkflowException;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.handler.CountrySpecificDetailSearchProcessor;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.handler.GenericEidProcessor;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.service.ICcSpecificEidProcessingService;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.service.RegisterSearchService;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.service.RegisterSearchService.RegisterStatusResults;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.tasks.InitialSearchTask;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.test.clients.ZmrClientTest;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.utils.MatchingTaskUtils;
+import at.gv.bmi.namespace.zmr_su.base._20040201.RequestType;
+import at.gv.bmi.namespace.zmr_su.base._20040201.ResponseType;
+import at.gv.bmi.namespace.zmr_su.base._20040201_.ServicePort;
+import at.gv.egiz.eaaf.core.api.IRequest;
+import at.gv.egiz.eaaf.core.api.idp.process.ExecutionContext;
+import at.gv.egiz.eaaf.core.exceptions.EaafStorageException;
+import at.gv.egiz.eaaf.core.exceptions.TaskExecutionException;
+import at.gv.egiz.eaaf.core.impl.idp.auth.data.AuthProcessDataWrapper;
+import at.gv.egiz.eaaf.core.impl.idp.module.test.TestRequestImpl;
+import at.gv.egiz.eaaf.core.impl.idp.process.ExecutionContextImpl;
+import eu.eidas.auth.commons.attribute.AttributeDefinition;
+import eu.eidas.auth.commons.attribute.ImmutableAttributeMap;
+import eu.eidas.auth.commons.attribute.PersonType;
+import eu.eidas.auth.commons.light.impl.LightRequest;
+import eu.eidas.auth.commons.protocol.impl.AuthenticationResponse;
+import lombok.SneakyThrows;
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration(locations = {
+    "/SpringTest-context_tasks_test.xml",
+    "/SpringTest-context_basic_mapConfig.xml",
+    "/SpringTest-context_ccSearchProcessor_test.xml"
+})
+@DirtiesContext(classMode = ClassMode.BEFORE_CLASS)
+public class InitialSearchTaskWithRegistersTest {
+
+  private static final String EE = "EE";
+  private static final String DE = "DE";
+
+  @Rule
+  public SoapServiceRule soap = SoapServiceRule.newInstance();
+  
+  @Mock private IErnpClient ernpClient;
+
+  @Autowired private IZmrClient zmrClient;
+  @Autowired private List<CountrySpecificDetailSearchProcessor> handlers;
+  private RegisterSearchService registerSearchService;
+
+  private ServicePort zmrMock = null;
+  
+  private final ICcSpecificEidProcessingService eidPostProcessor = createEidPostProcessor();
+  private InitialSearchTask task;
+
+  final ExecutionContext executionContext = new ExecutionContextImpl();
+  private TestRequestImpl pendingReq;
+  private static JAXBContext jaxbContext;
+
+  /**
+   * Initialize jUnit class.
+   */
+  @BeforeClass
+  @SneakyThrows
+  public static void classInitializer() {
+    jaxbContext = JAXBContext.newInstance(
+        at.gv.bmi.namespace.zmr_su.zmr._20040201.ObjectFactory.class,
+        at.gv.bmi.namespace.zmr_su.gis._20070725.ObjectFactory.class,
+        at.gv.bmi.namespace.zmr_su.base._20040201.ObjectFactory.class);
+  }
+
+  
+  /**
+   * jUnit test set-up.
+   */
+  @Before
+  public void setUp() throws URISyntaxException, EaafStorageException {
+    MockitoAnnotations.initMocks(this);
+
+    if (zmrMock == null) {
+      zmrMock = soap.mock(ServicePort.class, "http://localhost:1234/demozmr");
+      
+    }
+    
+    registerSearchService = new RegisterSearchService(handlers, zmrClient, ernpClient);
+    task = new InitialSearchTask(registerSearchService, eidPostProcessor);
+
+    MockHttpServletRequest httpReq = new MockHttpServletRequest("POST", "https://localhost/authhandler");
+    MockHttpServletResponse httpResp = new MockHttpServletResponse();
+    RequestContextHolder.resetRequestAttributes();
+    RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(httpReq, httpResp));
+
+    pendingReq = new TestRequestImpl();
+
+  }
+
+  /**
+   * One match, but register update needed
+   */
+  @Test
+  @DirtiesContext
+  public void singlePersonalIdMatchUpdateNecessary_Zmr() throws Exception {
+    
+    String oldGivenName = "XXXClaus - Maria";
+    
+    //inject eIDAS data
+    pendingReq.getSessionData(AuthProcessDataWrapper.class).setGenericDataToSession(
+        Constants.DATA_FULL_EIDAS_RESPONSE, 
+        buildDummyAuthResponse("XXXKlaus - Maria", "XXXvon Brandenburg", 
+            "DE/AT/7cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit", "1994-12-31"));
+
+    final ArgumentCaptor<RequestType> zmrReq = ArgumentCaptor.forClass(RequestType.class);
+    
+    // inject response
+    when(zmrMock.service(zmrReq.capture(), any()))
+        .thenReturn(loadResponseFromFile("/data/zmr/seq_1-8_search_with_personalId_only_resp.xml"))
+        .thenThrow(new RuntimeException("This request is not needed any more"));    
+
+    
+    // execute test
+    task.execute(pendingReq, executionContext);
+
+    // validate state
+    //INFO: has to be the old givenName because ZMR allows no update of MDS information
+    checkMatchingSuccessState(pendingReq, "UgeknNsc26lVuB7U/uYGVmWtnnA=", "XXXvon Brandenburg", 
+        oldGivenName, "1994-12-31", DE);
+
+    // validate request
+    assertEquals("wrong number of req.", 1, zmrReq.getAllValues().size());
+    assertNotNull("Personensuche req.", zmrReq.getValue().getPersonSuchenRequest());
+    checkBasicRequestParameters(zmrReq.getValue(), ZmrClientTest.PROCESS_TASK_SEARCH, null, "jUnit123456");
+    
+  }
+
+
+  /**
+   * Two matches by PersonalId found in ZMR
+   *
+   * @throws EidasSAuthenticationException
+   */
+  @Test
+  @DirtiesContext
+  @SneakyThrows
+  public void multiPersonalIdMatch_Zmr() throws EidasSAuthenticationException {    
+    //inject eIDAS data
+    pendingReq.getSessionData(AuthProcessDataWrapper.class).setGenericDataToSession(
+        Constants.DATA_FULL_EIDAS_RESPONSE, 
+        buildDummyAuthResponse("XXXKlaus - Maria", "XXXvon Brandenburg", 
+            "DE/AT/7cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit", "1994-12-31"));
+    
+    // inject response
+    when(zmrMock.service(any(), any()))
+        .thenReturn(loadResponseFromFile("/data/zmr/search_with_personalId_only_resp_moreThanOne.xml"))
+        .thenThrow(new RuntimeException("This request is not needed any more"));    
+
+    // execute task
+    TaskExecutionException exception = assertThrows(TaskExecutionException.class,
+        () -> task.execute(pendingReq, executionContext));
+
+    // validate state
+    assertTrue("Wrong exception", (exception.getOriginalException() instanceof WorkflowException));
+    assertTrue("Wrong flag 'manualFixNeeded'",
+        ((WorkflowException) exception.getOriginalException()).isRequiresManualFix());
+    
+  }
+  
+  
+  /**
+   * Find single person in ZMR by country specifics.
+   */
+  @Test
+  @DirtiesContext
+  public void singlePersonFindWithCountySpecifics_Zmr() throws Exception {        
+    //inject eIDAS data
+    pendingReq.getSessionData(AuthProcessDataWrapper.class).setGenericDataToSession(
+        Constants.DATA_FULL_EIDAS_RESPONSE, 
+        buildDummyAuthResponse("XXXClaus - Maria", "XXXvon Brandenburg", 
+            "DE/AT/7cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit_with_New_ID", "1994-12-31",
+            null, "Hintergigritzpotschn", "XXXvon Heuburg"));
+        
+    final ArgumentCaptor<RequestType> zmrReq = ArgumentCaptor.forClass(RequestType.class);
+    BigInteger processId = new BigInteger("367100000000079");
+    
+    // inject response
+    when(zmrMock.service(zmrReq.capture(), any()))
+        .thenReturn(loadResponseFromFile("/data/zmr/empty_zmr_result.xml"))   //personalId search
+        .thenReturn(loadResponseFromFile("/data/zmr/seq_1-8_search_with_personalId_only_resp.xml"))  //CC specific search
+        .thenReturn(loadResponseFromFile("/data/zmr/seq_1-4_kitt_get_latest_version_resp.xml"))  //KITT latest version         
+        .thenReturn(loadResponseFromFile("/data/zmr/seq_1-6_kitt_update_resp.xml"))  //KITT update
+        .thenThrow(new RuntimeException("This request is not needed any more"));
+    
+    // execute test
+    task.execute(pendingReq, executionContext);
+
+    // validate state
+    checkMatchingSuccessState(pendingReq, "UgeknNsc26lVuB7U/uYGVmWtnnA=", "XXXvon Brandenburg", 
+        "XXXClaus - Maria", "1994-12-31", DE);
+
+    // validate request
+    assertEquals("wrong number of req.", 4, zmrReq.getAllValues().size());    
+    checkBasicRequestParameters(zmrReq.getAllValues().get(0), ZmrClientTest.PROCESS_TASK_SEARCH, null, "jUnit123456");
+    checkBasicRequestParameters(zmrReq.getAllValues().get(1), ZmrClientTest.PROCESS_TASK_SEARCH, processId, "jUnit123456");
+    checkBasicRequestParameters(zmrReq.getAllValues().get(2), ZmrClientTest.PROCESS_TASK_SEARCH, processId, "jUnit123456");
+    checkBasicRequestParameters(zmrReq.getAllValues().get(3), ZmrClientTest.PROCESS_TASK_UPDATE, processId, "jUnit123456");
+    
+  }
+  
+  /**
+   * Find one match with MDS search in ZMR.
+   */
+  @Test
+  @DirtiesContext
+  @SneakyThrows
+  public void resultByMdsSearch_Zmr() throws TaskExecutionException, EidasSAuthenticationException {
+    //inject eIDAS data
+    pendingReq.getSessionData(AuthProcessDataWrapper.class).setGenericDataToSession(
+        Constants.DATA_FULL_EIDAS_RESPONSE, 
+        buildDummyAuthResponse("XXXClaus - Maria", "XXXvon Brandenburg", 
+            "DE/AT/7cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit_with_New_ID", "1994-12-31"));
+        
+    final ArgumentCaptor<RequestType> zmrReq = ArgumentCaptor.forClass(RequestType.class);
+    BigInteger processId = new BigInteger("367100000000079");
+    
+    // inject response
+    when(zmrMock.service(zmrReq.capture(), any()))
+        .thenReturn(loadResponseFromFile("/data/zmr/empty_zmr_result.xml"))   //personalId search
+        //CC-specific will be ignored because CC is DE but BirthName and PlaceOfBirth is 'null' 
+        .thenReturn(loadResponseFromFile("/data/zmr/seq_1-2_search_with_mds_resp.xml"))  //MDS specific search       
+        .thenThrow(new RuntimeException("This request is not needed any more"));
+
+
+    // execute test
+    task.execute(pendingReq, executionContext);
+
+    // validate state
+    checkIntermediateResult(1);
+
+    // validate request
+    assertEquals("wrong number of req.", 2, zmrReq.getAllValues().size());
+    checkBasicRequestParameters(zmrReq.getAllValues().get(0), ZmrClientTest.PROCESS_TASK_SEARCH, null, "jUnit123456");
+    checkBasicRequestParameters(zmrReq.getAllValues().get(1), ZmrClientTest.PROCESS_TASK_SEARCH, processId, "jUnit123456");
+    
+  }
+  
+  /**
+   * Find one match with MDS search in ZMR.
+   */
+  @Test
+  @DirtiesContext
+  @SneakyThrows
+  public void resultByMdsSearch_Zmr_Second() throws TaskExecutionException, EidasSAuthenticationException {
+    //inject eIDAS data
+    pendingReq.getSessionData(AuthProcessDataWrapper.class).setGenericDataToSession(
+        Constants.DATA_FULL_EIDAS_RESPONSE, 
+        buildDummyAuthResponse("XXXClaus - Maria", "XXXvon Brandenburg", 
+            "DE/AT/7cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit_with_New_ID", "1994-12-31",
+            null, "Hintergigritzpotschn", "XXXvon Heuburg"));
+        
+    final ArgumentCaptor<RequestType> zmrReq = ArgumentCaptor.forClass(RequestType.class);
+    BigInteger processId = new BigInteger("367100000000079");
+    
+    // inject response
+    when(zmrMock.service(zmrReq.capture(), any()))
+        .thenReturn(loadResponseFromFile("/data/zmr/empty_zmr_result.xml"))   //personalId search
+        .thenReturn(loadResponseFromFile("/data/zmr/empty_zmr_result.xml"))   //CC-specific search 
+        .thenReturn(loadResponseFromFile("/data/zmr/search_with_personalId_only_resp_moreThanOne.xml"))  //MDS specific search       
+        .thenThrow(new RuntimeException("This request is not needed any more"));
+
+
+    // execute test
+    task.execute(pendingReq, executionContext);
+
+    // validate state
+    checkIntermediateResult(2);
+
+    // validate request
+    assertEquals("wrong number of req.", 3, zmrReq.getAllValues().size());
+    checkBasicRequestParameters(zmrReq.getAllValues().get(0), ZmrClientTest.PROCESS_TASK_SEARCH, null, "jUnit123456");
+    checkBasicRequestParameters(zmrReq.getAllValues().get(1), ZmrClientTest.PROCESS_TASK_SEARCH, processId, "jUnit123456");
+    checkBasicRequestParameters(zmrReq.getAllValues().get(2), ZmrClientTest.PROCESS_TASK_SEARCH, processId, "jUnit123456");
+    
+  }
+  
+  
+  
+  @NotNull
+  private ICcSpecificEidProcessingService createEidPostProcessor() {
+    return new ICcSpecificEidProcessingService() {
+
+      private final GenericEidProcessor genericEidProcessor = new GenericEidProcessor();
+
+      @Override
+      public SimpleEidasData postProcess(Map<String, Object> eidasAttrMap) throws EidPostProcessingException, EidasAttributeException {
+        return genericEidProcessor.postProcess(eidasAttrMap);
+      }
+
+      @Override
+      public void preProcess(String selectedCC, IRequest pendingReq, LightRequest.Builder authnRequestBuilder) {
+        genericEidProcessor.preProcess(pendingReq, authnRequestBuilder);
+      }
+    };
+  }
+  
+  @NotNull
+  private ZmrRegisterResult zmrRegisterResult(RegisterResult registerResult, BigInteger processId) {
+    return new ZmrRegisterResult(Collections.singletonList(registerResult), processId);
+  }
+
+  @NotNull
+  private ZmrRegisterResult zmrRegisterResult(RegisterResult registerResult) {
+    return zmrRegisterResult(registerResult, generateRandomProcessId());
+  }
+
+
+  private BigInteger generateRandomProcessId() {
+    return new BigInteger(RandomStringUtils.randomNumeric(10));
+
+  }
+
+  private void checkMatchingSuccessState(IRequest pendingReq, String bpk, String familyName, String givenName,
+                                         String birhday, String countryCode) {
+    assertNull("Find intermediate matching data but matching should be finished",
+        MatchingTaskUtils.getIntermediateMatchingResult(pendingReq));
+    assertNotNull("find no eIDAS inbut data", MatchingTaskUtils.getInitialEidasData(pendingReq));
+
+    MatchedPersonResult personInfo = MatchingTaskUtils.getFinalMatchingResult(pendingReq);
+    assertNotNull("no final matching result", personInfo);
+    assertEquals("wrong bpk", bpk, personInfo.getBpk());
+    assertEquals("wrong givenName", givenName, personInfo.getGivenName());
+    assertEquals("wrong familyName", familyName, personInfo.getFamilyName());
+    assertEquals("wrong dateOfBirth", birhday, personInfo.getDateOfBirth());
+    assertEquals("wrong countryCode", countryCode, personInfo.getCountryCode());
+
+  }
+
+  private void checkIntermediateResult(int resultSize) {
+    Boolean transitionGUI = (Boolean) executionContext.get(Constants.TRANSITION_TO_GENERATE_OTHER_LOGIN_METHOD_GUI_TASK);
+    Assert.assertTrue("Wrong transition", transitionGUI);
+    Boolean transitionErnb = (Boolean) executionContext.get(Constants.TRANSITION_TO_CREATE_NEW_ERNP_ENTRY_TASK);
+    Assert.assertNull("Wrong transition", transitionErnb);
+
+    assertNotNull("find no eIDAS inbut data", MatchingTaskUtils.getInitialEidasData(pendingReq));
+    assertNull("Find final matching data but no match sould be found",
+        MatchingTaskUtils.getFinalMatchingResult(pendingReq));
+
+    RegisterStatusResults result = MatchingTaskUtils.getIntermediateMatchingResult(pendingReq);
+    assertNotNull("Find no intermediate matching data", result);
+    assertEquals("wrong intermediate result size", resultSize, result.getResultCount());
+
+  }
+
+  @NotNull
+  private AuthenticationResponse buildDummyAuthResponse(String givenName, String familyName, String identifier,
+                                                        String dateOfBirth) throws URISyntaxException {
+    return buildDummyAuthResponse(givenName, familyName, identifier, dateOfBirth, null, null, null);
+  }
+
+  @NotNull
+  private AuthenticationResponse buildDummyAuthResponseDE(String givenName, String familyName, String identifier,
+                                                          String dateOfBirth, String placeOfBirth,
+                                                          String birthName) throws URISyntaxException {
+    return buildDummyAuthResponse(givenName, familyName, identifier, dateOfBirth, null, placeOfBirth, birthName);
+  }
+
+  @NotNull
+  private AuthenticationResponse buildDummyAuthResponse(String givenName, String familyName, String identifier,
+                                                        String dateOfBirth, String taxNumber, String placeOfBirth,
+                                                        String birthName) throws URISyntaxException {
+    ImmutableAttributeMap.Builder builder = ImmutableAttributeMap.builder()
+        .put(generateStringAttribute(Constants.eIDAS_ATTR_PERSONALIDENTIFIER,
+            randomAlphabetic(2), randomAlphabetic(2)), identifier)
+        .put(generateStringAttribute(Constants.eIDAS_ATTR_CURRENTFAMILYNAME,
+            randomAlphabetic(3), randomAlphabetic(3)), familyName)
+        .put(generateStringAttribute(Constants.eIDAS_ATTR_CURRENTGIVENNAME,
+            randomAlphabetic(4), randomAlphabetic(4)), givenName)
+        .put(generateDateTimeAttribute(Constants.eIDAS_ATTR_DATEOFBIRTH,
+            randomAlphabetic(5), randomAlphabetic(5)), dateOfBirth);
+    if (taxNumber != null) {
+      builder.put(generateStringAttribute(Constants.eIDAS_ATTR_TAXREFERENCE,
+          randomAlphabetic(6), randomAlphabetic(6)), taxNumber);
+    }
+    if (birthName != null) {
+      builder.put(generateStringAttribute(Constants.eIDAS_ATTR_BIRTHNAME,
+          randomAlphabetic(7), randomAlphabetic(7)), birthName);
+    }
+    if (placeOfBirth != null) {
+      builder.put(generateStringAttribute(Constants.eIDAS_ATTR_PLACEOFBIRTH,
+          randomAlphabetic(8), randomAlphabetic(8)), placeOfBirth);
+    }
+    final ImmutableAttributeMap attributeMap = builder.build();
+
+    return new AuthenticationResponse.Builder().id(randomAlphabetic(5))
+        .issuer(randomAlphabetic(5)).subject(randomAlphabetic(5)).statusCode("200")
+        .inResponseTo(randomAlphabetic(5)).subjectNameIdFormat(randomAlphabetic(5))
+        .attributes(attributeMap).build();
+  }
+
+  private AttributeDefinition<Object> generateStringAttribute(String friendlyName, String fragment, String prefix)
+      throws URISyntaxException {
+    return generateAttribute(friendlyName, fragment, prefix, "eu.eidas.auth.commons.attribute.impl" +
+        ".LiteralStringAttributeValueMarshaller");
+  }
+
+  @SuppressWarnings("SameParameterValue")
+  private AttributeDefinition<Object> generateDateTimeAttribute(String friendlyName, String fragment, String prefix)
+      throws URISyntaxException {
+    return generateAttribute(friendlyName, fragment, prefix, "eu.eidas.auth.commons.attribute.impl" +
+        ".DateTimeAttributeValueMarshaller");
+  }
+
+  private AttributeDefinition<Object> generateAttribute(String friendlyName, String fragment, String prefix,
+                                                        String marshaller) throws URISyntaxException {
+    return AttributeDefinition.builder()
+        .friendlyName(friendlyName).nameUri(new URI("ad", "sd", fragment))
+        .personType(PersonType.LEGAL_PERSON).xmlType(new QName("http://saf", "as", prefix))
+        .attributeValueMarshaller(marshaller).build();
+  }
+
+  private ResponseType loadResponseFromFile(String filepath) throws JAXBException {
+    final Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
+    JAXBElement<?> resp = (JAXBElement<?>) unmarshaller.unmarshal(ZmrClientTest.class.getResourceAsStream(
+        filepath));
+    return (ResponseType) resp.getValue();
+
+  }
+  
+  private void checkBasicRequestParameters(RequestType requestType, String vorgangName, BigInteger processId,
+      String behoerdennummer) {
+    assertNotNull("no workflow infos", requestType.getWorkflowInfoClient());
+    assertEquals("processName",  ZmrClientTest.PROCESS_GENERAL, requestType.getWorkflowInfoClient().getProzessName());
+    assertEquals("vorgangsName", vorgangName, requestType.getWorkflowInfoClient().getVorgangName());
+
+    if (processId != null) {
+      assertEquals("processId", processId, requestType.getWorkflowInfoClient().getProzessInstanzID());
+    } else {
+      assertNull("processId", requestType.getWorkflowInfoClient().getProzessInstanzID());
+    }
+
+    assertNotNull("no client infos", requestType.getClientInfo());
+    assertEquals("behoerdennummer", behoerdennummer, requestType.getClientInfo().getOrganisation()
+        .getBehoerdenNr());
+  }
+}
diff --git a/eidas_modules/authmodule-eIDAS-v2/src/test/resources/SpringTest-context_ccSearchProcessor_test.xml b/eidas_modules/authmodule-eIDAS-v2/src/test/resources/SpringTest-context_ccSearchProcessor_test.xml
new file mode 100644
index 00000000..6f071b38
--- /dev/null
+++ b/eidas_modules/authmodule-eIDAS-v2/src/test/resources/SpringTest-context_ccSearchProcessor_test.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xmlns:context="http://www.springframework.org/schema/context"
+  xmlns:tx="http://www.springframework.org/schema/tx"
+  xmlns:aop="http://www.springframework.org/schema/aop"
+  xmlns:mvc="http://www.springframework.org/schema/mvc"
+  xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
+    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
+    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
+    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd 
+    http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
+
+  <bean id="deMatchingHandler"
+    class="at.asitplus.eidas.specific.modules.auth.eidas.v2.handler.DeSpecificDetailSearchProcessor" />
+
+</beans>
\ No newline at end of file
diff --git a/eidas_modules/authmodule-eIDAS-v2/src/test/resources/data/zmr/seq_1-2_search_with_mds_resp.xml b/eidas_modules/authmodule-eIDAS-v2/src/test/resources/data/zmr/seq_1-2_search_with_mds_resp.xml
new file mode 100644
index 00000000..36d8516c
--- /dev/null
+++ b/eidas_modules/authmodule-eIDAS-v2/src/test/resources/data/zmr/seq_1-2_search_with_mds_resp.xml
@@ -0,0 +1,181 @@
+<?xml version="1.0" encoding="UTF-8"?>
+    <base:Response xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#" xmlns:smi="http://bmi.gv.at/namespace/zmr-su/smi/20060901#" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:zmr="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#" xmlns:ns10="http://bmi.gv.at/namespace/zmr-su/ernp/20050901#" xmlns:ns11="http://bmi.gv.at/namespace/zmr-su/gis/20070725#" xmlns:ns12="http://egov.gv.at/pvp1.xsd" xmlns:ns13="http://schemas.xmlsoap.org/ws/2002/04/secext" xmlns:ns8="http://bmi.gv.at/namespace/zmr-su/lmr/20050401#" xmlns:ns9="http://www.w3.org/2000/09/xmldsig#">
+      <base:WorkflowInfoServer>
+        <base:ProzessName>GP_EIDAS</base:ProzessName>
+        <base:ProzessInstanzID>366200000000081</base:ProzessInstanzID>
+        <base:SequenzID>0</base:SequenzID>
+      </base:WorkflowInfoServer>
+      <base:ServerInfo>
+        <base:GeneriertVon>ZMR-Server Version: 5.9.0.0-SNAPSHOT</base:GeneriertVon>
+        <base:GeneriertAm>2021-11-12T08:24:38.905</base:GeneriertAm>
+        <base:ServerTransaktionNr>1877200000000125</base:ServerTransaktionNr>
+      </base:ServerInfo>
+      <zmr:PersonSuchenResponse>
+        <zmr:PersonensucheAnfrage>
+          <zmr:PersonensucheInfo>
+            <base:Bezugsfeld>Searching with MDS only</base:Bezugsfeld>
+            <zmr:Suchkriterien>
+              <base:InclusivHistorie>true</base:InclusivHistorie>
+              <base:Formalisiert>false</base:Formalisiert>
+            </zmr:Suchkriterien>
+            <zmr:Ergebniskriterien>
+              <base:InclusivHistorie>false</base:InclusivHistorie>
+            </zmr:Ergebniskriterien>
+            <base:AnzahlSaetze>10</base:AnzahlSaetze>
+          </zmr:PersonensucheInfo>
+          <NatuerlichePerson>
+            <PersonenName>
+              <Vorname>XXXClaus - Maria</Vorname>
+              <Familienname>XXXvon Brandenburg</Familienname>
+            </PersonenName>
+            <Geburtsdatum>1994-12-31</Geburtsdatum>
+          </NatuerlichePerson>
+        </zmr:PersonensucheAnfrage>
+        <base:Message>
+          <base:Number>5020</base:Number>
+          <base:Text>Person gefunden.</base:Text>
+        </base:Message>
+        <zmr:Personensuchergebnis>
+          <base:GefundeneSaetze>1</base:GefundeneSaetze>
+          <zmr:GefundeneSaetzeERnP>0</zmr:GefundeneSaetzeERnP>
+          <base:SaetzeVon>0</base:SaetzeVon>
+          <base:SaetzeBis>1</base:SaetzeBis>
+          <zmr:PersonErgebnisSatz>
+            <zmr:Personendaten>
+              <zmr:PersonErgebnis>
+                <base:ErgebnissatzInfo>
+                  <base:LetzteAenderung>2020-02-05T13:07:06.311</base:LetzteAenderung>
+                </base:ErgebnissatzInfo>
+                <base:EntityErgebnisReferenz>
+                  <base:Technisch>
+                    <base:EntityID>44453600000000697</base:EntityID>
+                    <base:LetzteAenderung>2020-02-05T13:07:06.311</base:LetzteAenderung>
+                  </base:Technisch>
+                  <base:Von>2020-02-05T13:07:06.311</base:Von>
+                  <base:BeginnCode>SONSTIGES</base:BeginnCode>
+                  <base:BeginnText>Sonstiges</base:BeginnText>
+                  <base:BeginnFreitext>Testerperson</base:BeginnFreitext>
+                  <base:DurchgefuehrtVon>
+                    <base:Organisation>
+                      <base:Behoerdenschluessel>109091</base:Behoerdenschluessel>
+                    </base:Organisation>
+                  </base:DurchgefuehrtVon>
+                </base:EntityErgebnisReferenz>
+                <base:ZMRZahl>000430320173</base:ZMRZahl>
+                <zmr:NatuerlichePerson>
+                  <Identification>
+                    <Value>UgeknNsc26lVuB7U/uYGVmWtnnA=</Value>
+                    <Type>urn:publicid:gv.at:cdid+ZP</Type>
+                  </Identification>
+                  <zmr:PersonenName>
+                    <Vorname>XXXClaus - Maria</Vorname>
+                    <Familienname>XXXvon Brandenburg</Familienname>
+                  </zmr:PersonenName>
+                  <Familienstand>unbekannt</Familienstand>
+                  <Geschlecht>männlich</Geschlecht>
+                  <Geburtsdatum>1994-12-31</Geburtsdatum>
+                  <Geburtsort>Wien</Geburtsort>
+                  <Geburtsbundesland>Wien</Geburtsbundesland>
+                  <Geburtsstaat>Österreich</Geburtsstaat>
+                  <zmr:Staatsangehoerigkeit>
+                    <ISOCode3>AUT</ISOCode3>
+                    <StaatsnameDE>Österreich</StaatsnameDE>
+                    <base:EntityErgebnisReferenz>
+                      <base:Technisch>
+                        <base:EntityID>44453600000000727</base:EntityID>
+                        <base:LetzteAenderung>2020-02-05T13:07:06.311</base:LetzteAenderung>
+                      </base:Technisch>
+                      <base:Von>2020-02-05T13:07:06.311</base:Von>
+                      <base:BeginnCode>STAATSANGEH_ANLEGEN</base:BeginnCode>
+                      <base:BeginnText>Staatsangehörigkeit anlegen</base:BeginnText>
+                      <base:BeginnFreitext>Testerperson</base:BeginnFreitext>
+                      <base:DurchgefuehrtVon>
+                        <base:Organisation>
+                          <base:Behoerdenschluessel>109091</base:Behoerdenschluessel>
+                        </base:Organisation>
+                      </base:DurchgefuehrtVon>
+                    </base:EntityErgebnisReferenz>
+                  </zmr:Staatsangehoerigkeit>
+                </zmr:NatuerlichePerson>
+              </zmr:PersonErgebnis>
+            </zmr:Personendaten>
+            <zmr:Meldedaten>
+              <zmr:MeldungErgebnis>
+                <base:ErgebnissatzInfo>
+                  <base:LetzteAenderung>2020-02-05T13:07:06.311</base:LetzteAenderung>
+                </base:ErgebnissatzInfo>
+                <base:EntityErgebnisReferenz>
+                  <base:Technisch>
+                    <base:EntityID>44453500000005242</base:EntityID>
+                    <base:LetzteAenderung>2020-02-05T13:07:06.311</base:LetzteAenderung>
+                  </base:Technisch>
+                  <base:Von>2020-02-05T13:07:06.311</base:Von>
+                  <base:BeginnCode>WSANM</base:BeginnCode>
+                  <base:BeginnText>Wohnsitz anmelden</base:BeginnText>
+                  <base:DurchgefuehrtVon>
+                    <base:Organisation>
+                      <base:Behoerdenschluessel>109091</base:Behoerdenschluessel>
+                    </base:Organisation>
+                  </base:DurchgefuehrtVon>
+                </base:EntityErgebnisReferenz>
+                <zmr:Wohnsitz>
+                  <zmr:PostAdresse>
+                    <Postleitzahl>0088</Postleitzahl>
+                    <Gemeinde>Testgemeinde</Gemeinde>
+                    <Gemeindekennziffer>09988</Gemeindekennziffer>
+                    <Ortschaft>Testort A</Ortschaft>
+                    <zmr:Zustelladresse>
+                      <Strassenname>Testgasse</Strassenname>
+                      <Orientierungsnummer>1a-2b</Orientierungsnummer>
+                      <Gebaeude>Stg. 3c-4d</Gebaeude>
+                      <Nutzungseinheit>5</Nutzungseinheit>
+                      <Wohnsitzqualitaet>H</Wohnsitzqualitaet>
+                      <Abgabestelle>false</Abgabestelle>
+                      <Nutzungseinheitlaufnummer>0001</Nutzungseinheitlaufnummer>
+                      <zmr:AdressRegisterEintrag>
+                        <Adresscode>T800001</Adresscode>
+                        <Subcode>001</Subcode>
+                        <Objektnummer>T800001</Objektnummer>
+                      </zmr:AdressRegisterEintrag>
+                    </zmr:Zustelladresse>
+                  </zmr:PostAdresse>
+                  <base:Adressstatus>HST111WWW</base:Adressstatus>
+                  <base:Adressschluessel>
+                    <base:OKZ>T8001</base:OKZ>
+                    <base:SKZ>T80001</base:SKZ>
+                    <base:ADRRefkey>T80000000001</base:ADRRefkey>
+                    <base:GBRRefkey>T80000000002</base:GBRRefkey>
+                  </base:Adressschluessel>
+                  <base:HauptIdent>H</base:HauptIdent>
+                  <base:Postleitzahlgebiet>Testpostort</base:Postleitzahlgebiet>
+                </zmr:Wohnsitz>
+                <base:GemeldetVon>2020-02-05T13:07:06.311</base:GemeldetVon>
+                <base:PeriodeCode>WSANM</base:PeriodeCode>
+                <base:PeriodeText>Wohnsitz anmelden</base:PeriodeText>
+                <zmr:Auskunftssperre>
+                  <base:EntityErgebnisReferenz>
+                    <base:Technisch>
+                      <base:EntityID>44453500000005262</base:EntityID>
+                      <base:LetzteAenderung>2020-02-05T13:07:06.311</base:LetzteAenderung>
+                    </base:Technisch>
+                    <base:Von>2020-02-05T13:07:06.311</base:Von>
+                    <base:BeginnCode>AUSK_SPERRE_SETZ</base:BeginnCode>
+                    <base:BeginnText>Auskunftssperre setzen</base:BeginnText>
+                    <base:DurchgefuehrtVon>
+                      <base:Organisation>
+                        <base:Behoerdenschluessel>109091</base:Behoerdenschluessel>
+                      </base:Organisation>
+                    </base:DurchgefuehrtVon>
+                  </base:EntityErgebnisReferenz>
+                  <zmr:SperreVon>2020-02-05T13:07:06.311</zmr:SperreVon>
+                  <zmr:SperreBis>9999-12-31T23:59:59.000</zmr:SperreBis>
+                  <zmr:SperrCode>ASMG</zmr:SperrCode>
+                  <zmr:SperrText>Auskunftssperre nach § 18 / 2ff MeldeG</zmr:SperrText>
+                  <zmr:SperrFreitext>automatische Auskunftssperre</zmr:SperrFreitext>
+                </zmr:Auskunftssperre>
+              </zmr:MeldungErgebnis>
+            </zmr:Meldedaten>
+          </zmr:PersonErgebnisSatz>
+        </zmr:Personensuchergebnis>
+      </zmr:PersonSuchenResponse>
+    </base:Response>
-- 
cgit v1.2.3