diff options
4 files changed, 171 insertions, 78 deletions
| diff --git a/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/szr/SzrClient.java b/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/szr/SzrClient.java index 1f5837d6..5558fdfd 100644 --- a/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/szr/SzrClient.java +++ b/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/szr/SzrClient.java @@ -234,7 +234,7 @@ public class SzrClient {      final String resp;      try { -      resp = this.szr.getStammzahlEncrypted(personInfo, true); +      resp = this.szr.getStammzahlEncrypted(personInfo, false);      } catch (SZRException_Exception e) {        throw new SzrCommunicationException("ernb.02", new Object[]{e.getMessage()}, e);      } diff --git a/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/CreateIdentityLinkTask.java b/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/CreateIdentityLinkTask.java index f4849b07..4a501ed6 100644 --- a/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/CreateIdentityLinkTask.java +++ b/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/CreateIdentityLinkTask.java @@ -55,6 +55,7 @@ import at.asitplus.eidas.specific.modules.auth.eidas.v2.service.ICcSpecificEidPr  import at.asitplus.eidas.specific.modules.auth.eidas.v2.szr.SzrClient;  import at.asitplus.eidas.specific.modules.auth.eidas.v2.utils.EidasResponseUtils;  import at.gv.e_government.reference.namespace.persondata._20020228.AlternativeNameType; +import at.gv.e_government.reference.namespace.persondata._20020228.IdentificationType;  import at.gv.e_government.reference.namespace.persondata._20020228.PersonNameType;  import at.gv.e_government.reference.namespace.persondata._20020228.PhysicalPersonType;  import at.gv.egiz.eaaf.core.api.data.EaafConstants; @@ -62,6 +63,7 @@ import at.gv.egiz.eaaf.core.api.data.PvpAttributeDefinitions;  import at.gv.egiz.eaaf.core.api.idp.IConfiguration;  import at.gv.egiz.eaaf.core.api.idp.auth.data.IIdentityLink;  import at.gv.egiz.eaaf.core.api.idp.process.ExecutionContext; +import at.gv.egiz.eaaf.core.exceptions.EaafBuilderException;  import at.gv.egiz.eaaf.core.exceptions.EaafException;  import at.gv.egiz.eaaf.core.exceptions.TaskExecutionException;  import at.gv.egiz.eaaf.core.impl.builder.BpkBuilder; @@ -147,9 +149,12 @@ public class CreateIdentityLinkTask extends AbstractAuthServletTask {          //request SZR based on IDL or E-ID mode          if (pendingReq.getServiceProviderConfiguration()              .isConfigurationValue(MsEidasNodeConstants.PROP_CONFIG_SP_NEW_EID_MODE, false)) { - +           +          // work-around, because getEncryptedStammzahl does not support insertERnP for eIDAS entities +          SzrResultHolder idlResult = requestSzrForIdentityLink(personInfo); +                                          // get encrypted baseId -          String vsz = szrClient.getEncryptedStammzahl(personInfo); +          String vsz = szrClient.getEncryptedStammzahl(buildGetEncryptedBaseIdReq(idlResult.identityLink));            //write revision-Log entry and extended infos personal-identifier mapping            revisionsLogger.logEvent(pendingReq, MsConnectorEventCodes.SZR_VSZ_RECEIVED); @@ -219,6 +224,33 @@ public class CreateIdentityLinkTask extends AbstractAuthServletTask {      }    } +  private PersonInfoType buildGetEncryptedBaseIdReq(IIdentityLink identityLink) throws EaafBuilderException { +    log.debug("Generating getVsz request from identityLink information ... "); +    final PersonInfoType personInfo = new PersonInfoType(); +    final PersonNameType personName = new PersonNameType(); +    final PhysicalPersonType naturalPerson = new PhysicalPersonType(); +    IdentificationType bpk = new IdentificationType(); +     +    naturalPerson.setName(personName); +    personInfo.setPerson(naturalPerson); +    naturalPerson.setIdentification(bpk); +     +    // person information +    personName.setFamilyName(identityLink.getFamilyName()); +    personName.setGivenName(identityLink.getGivenName()); +    naturalPerson.setDateOfBirth(identityLink.getDateOfBirth()); +     +    final Pair<String, String> bpkCalc =  +        BpkBuilder.generateAreaSpecificPersonIdentifier( +            identityLink.getIdentificationValue(), +            identityLink.getIdentificationType(), +            EaafConstants.URN_PREFIX_CDID + "ZP");     +    bpk.setValue(bpkCalc.getFirst()); +    bpk.setType(bpkCalc.getSecond());         +    return personInfo; + +  } +    private void writeExtendedRevisionLogEntry(Map<String, Object> simpleAttrMap, ErnbEidData eidData) {      // write ERnB input-data into revision-log      if (basicConfig.getBasicConfigurationBoolean( @@ -307,7 +339,6 @@ public class CreateIdentityLinkTask extends AbstractAuthServletTask {      } else {        log.debug("Calculating bPK from baseId ... "); -      new BpkBuilder();        final Pair<String, String> bpkCalc = BpkBuilder            .generateAreaSpecificPersonIdentifier(identityLink.getIdentificationValue(),                                                  identityLink.getIdentificationType(), diff --git a/eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/SzrClientTestProduction.java b/eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/SzrClientTestProduction.java index 1e7ff369..6a356d17 100644 --- a/eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/SzrClientTestProduction.java +++ b/eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/SzrClientTestProduction.java @@ -53,12 +53,16 @@ import at.asitplus.eidas.specific.modules.auth.eidas.v2.exception.EidasSAuthenti  import at.asitplus.eidas.specific.modules.auth.eidas.v2.exception.SzrCommunicationException;  import at.asitplus.eidas.specific.modules.auth.eidas.v2.szr.SzrClient;  import at.asitplus.eidas.specific.modules.auth.eidas.v2.utils.EidasResponseUtils; +import at.gv.e_government.reference.namespace.persondata._20020228.IdentificationType;  import at.gv.e_government.reference.namespace.persondata._20020228.PersonNameType;  import at.gv.e_government.reference.namespace.persondata._20020228.PhysicalPersonType;  import at.gv.egiz.eaaf.core.api.data.EaafConstants;  import at.gv.egiz.eaaf.core.api.idp.IConfiguration;  import at.gv.egiz.eaaf.core.api.idp.auth.data.IIdentityLink; +import at.gv.egiz.eaaf.core.exceptions.EaafBuilderException;  import at.gv.egiz.eaaf.core.exceptions.EaafParserException; +import at.gv.egiz.eaaf.core.impl.builder.BpkBuilder; +import at.gv.egiz.eaaf.core.impl.data.Pair;  import at.gv.egiz.eaaf.core.impl.data.Triple;  import at.gv.egiz.eaaf.core.impl.idp.auth.data.SimpleIdentityLinkAssertionParser;  import szrservices.IdentityLinkType; @@ -105,6 +109,38 @@ public class SzrClientTestProduction {    }    @Test +  public void getVszRandom() throws SzrCommunicationException, EidasSAuthenticationException, EaafBuilderException { +     +    final String givenName = "Franz"; +    final String familyName = RandomStringUtils.randomAlphabetic(10); +    final String dateOfBirth = "1989-05-04"; +    final String eIDASeID = "IS/AT/" + RandomStringUtils.randomAlphanumeric(20); +     +    IdentityLinkType idl = szrClient.getIdentityLinkInRawMode(getPersonInfo(familyName, givenName, dateOfBirth, eIDASeID)); +         +    PersonInfoType vszPerson = getPersonInfo( +        idl.getPersonInfo().getPerson().getName().getFamilyName(),  +        idl.getPersonInfo().getPerson().getName().getGivenName(),  +        idl.getPersonInfo().getPerson().getDateOfBirth(),  +        null); +     +    final Pair<String, String> bpkCalc =  +        BpkBuilder.generateAreaSpecificPersonIdentifier( +            idl.getPersonInfo().getPerson().getIdentification().getValue(), +            idl.getPersonInfo().getPerson().getIdentification().getType(), +            EaafConstants.URN_PREFIX_CDID + "ZP");     +     +    IdentificationType vszId = new IdentificationType(); +    vszPerson.getPerson().setIdentification(vszId); +    vszId.setValue(bpkCalc.getFirst()); +    vszId.setType(bpkCalc.getSecond());       +     +    String vsz = szrClient.getEncryptedStammzahl(vszPerson);    +    Assert.assertNotNull("vsz", vsz); +         +  } +   +  @Test    public void getEidasBind() throws SzrCommunicationException, EidasSAuthenticationException {          String vsz = RandomStringUtils.randomAlphanumeric(10);      String bindingPubKey = Base64.toBase64String(RandomStringUtils.random(20).getBytes()); @@ -204,6 +240,12 @@ public class SzrClientTestProduction {    }    private PersonInfoType getPersonInfo() throws EidasSAuthenticationException { +    return getPersonInfo(familyName, givenName, dateOfBirth, eIDASeID); +     +  } +   +  private PersonInfoType getPersonInfo(String familyName, String givenName, String dateOfBirth, String eIDASeID)  +      throws EidasSAuthenticationException {      final PersonInfoType personInfo = new PersonInfoType();      final PersonNameType personName = new PersonNameType();      final PhysicalPersonType naturalPerson = new PhysicalPersonType(); @@ -211,25 +253,31 @@ public class SzrClientTestProduction {      naturalPerson.setName(personName);      personInfo.setPerson(naturalPerson); -    personInfo.setTravelDocument(eDocument); - -    // parse some eID attributes -    final Triple<String, String, String> eIdentifier = -        EidasResponseUtils.parseEidasPersonalIdentifier(eIDASeID); -    final String uniqueId = createHashFromUniqueId(eIdentifier.getThird()); -    final String citizenCountry = eIdentifier.getFirst(); +          // person information      personName.setFamilyName(familyName);      personName.setGivenName(givenName);      naturalPerson.setDateOfBirth(dateOfBirth); -    eDocument.setIssuingCountry(citizenCountry); -    eDocument.setDocumentNumber(uniqueId); - -    // eID document information -    eDocument.setDocumentType(basicConfig.getBasicConfiguration( -        Constants.CONIG_PROPS_EIDAS_SZRCLIENT_PARAMS_EDOCUMENTTYPE, -        Constants.SZR_CONSTANTS_DEFAULT_DOCUMENT_TYPE)); +     +    // parse some eID attributes +    if (eIDASeID != null) {     +      final Triple<String, String, String> eIdentifier = +          EidasResponseUtils.parseEidasPersonalIdentifier(eIDASeID); +      final String uniqueId = createHashFromUniqueId(eIdentifier.getThird()); +      final String citizenCountry = eIdentifier.getFirst(); +     +      eDocument.setIssuingCountry(citizenCountry); +      eDocument.setDocumentNumber(uniqueId); + +      // eID document information +      eDocument.setDocumentType(basicConfig.getBasicConfiguration( +          Constants.CONIG_PROPS_EIDAS_SZRCLIENT_PARAMS_EDOCUMENTTYPE, +          Constants.SZR_CONSTANTS_DEFAULT_DOCUMENT_TYPE)); +       +      personInfo.setTravelDocument(eDocument); +       +    }      return personInfo;    } diff --git a/eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/CreateIdentityLinkTaskEidNewTest.java b/eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/CreateIdentityLinkTaskEidNewTest.java index 175f95e6..720365fe 100644 --- a/eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/CreateIdentityLinkTaskEidNewTest.java +++ b/eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/CreateIdentityLinkTaskEidNewTest.java @@ -17,6 +17,10 @@ import java.util.Iterator;  import java.util.List;  import java.util.Map; +import javax.xml.bind.JAXBContext; +import javax.xml.bind.JAXBException; +import javax.xml.bind.Unmarshaller; +  import org.apache.commons.lang3.RandomStringUtils;  import org.jetbrains.annotations.NotNull;  import org.jose4j.jwa.AlgorithmConstraints; @@ -73,9 +77,11 @@ import eu.eidas.auth.commons.attribute.ImmutableAttributeMap;  import eu.eidas.auth.commons.attribute.ImmutableAttributeMap.Builder;  import eu.eidas.auth.commons.protocol.impl.AuthenticationResponse;  import lombok.val; +import szrservices.GetIdentityLinkEidasResponse;  import szrservices.JwsHeaderParam;  import szrservices.PersonInfoType;  import szrservices.SZR; +import szrservices.SZRException_Exception;  import szrservices.SignContentEntry;  import szrservices.SignContentResponseType; @@ -166,7 +172,8 @@ public class CreateIdentityLinkTaskEidNewTest {      response = buildDummyAuthResponse(true);      pendingReq.getSessionData(AuthProcessDataWrapper.class)          .setGenericDataToSession(Constants.DATA_FULL_EIDAS_RESPONSE, response); -     +         +    setSzrResponseIdentityLink("/data/szr/szr_resp_valid_1.xml");      String vsz = RandomStringUtils.randomNumeric(10);      when(szrMock, "getStammzahlEncrypted", any(), any()).thenReturn(vsz);      val signContentResp = new SignContentResponseType(); @@ -230,39 +237,31 @@ public class CreateIdentityLinkTaskEidNewTest {      verify(szrMock, times(1)).getStammzahlEncrypted(argument4.capture(), argument5.capture());      Boolean param5 = argument5.getValue(); -    Assert.assertTrue("insertERnP flag", param5);     +    Assert.assertFalse("insertERnP flag", param5);          PersonInfoType person = argument4.getValue(); -    Assert.assertEquals("FamilyName",  -        response.getAttributes().getAttributeValuesByFriendlyName("FamilyName").getFirstValue( -            response.getAttributes().getDefinitionsByFriendlyName("FamilyName").iterator().next()),  -        person.getPerson().getName().getFamilyName()); -    Assert.assertEquals("GivenName",  -        response.getAttributes().getAttributeValuesByFriendlyName("FirstName").getFirstValue( -            response.getAttributes().getDefinitionsByFriendlyName("FirstName").iterator().next()),  -        person.getPerson().getName().getGivenName()); -    Assert.assertEquals("DateOfBirth",  -        response.getAttributes().getAttributeValuesByFriendlyName("DateOfBirth").getFirstValue( -            response.getAttributes().getDefinitionsByFriendlyName("DateOfBirth").iterator().next()) -            .toString().split("T")[0],  -        person.getPerson().getDateOfBirth()); -     -    Assert.assertEquals("PlaceOfBirth",  -        response.getAttributes().getAttributeValuesByFriendlyName("PlaceOfBirth").getFirstValue( -            response.getAttributes().getDefinitionsByFriendlyName("PlaceOfBirth").iterator().next()),  -        person.getPerson().getPlaceOfBirth());     -    Assert.assertEquals("BirthName",  -        response.getAttributes().getAttributeValuesByFriendlyName("BirthName").getFirstValue( -            response.getAttributes().getDefinitionsByFriendlyName("BirthName").iterator().next()),  -        person.getPerson().getAlternativeName().getFamilyName()); +    Assert.assertEquals("FamilyName", "Mustermann", person.getPerson().getName().getFamilyName()); +    Assert.assertEquals("GivenName", "Hans", person.getPerson().getName().getGivenName()); +    Assert.assertEquals("DateOfBirth", "1989-05-05", person.getPerson().getDateOfBirth()); +    Assert.assertEquals("bpk", "1NjpYBHFn6onfNp2pCM8nXrlyQc=", person.getPerson().getIdentification().getValue()); +    Assert.assertEquals("bPKType", EaafConstants.URN_PREFIX_CDID + "ZP", person.getPerson().getIdentification().getType()); -    Assert.assertEquals("CitizenCountry", "LU", person.getTravelDocument().getIssuingCountry()); -    Assert.assertEquals("DocumentType", "ELEKTR_DOKUMENT", person.getTravelDocument().getDocumentType()); -     -    Assert.assertEquals("Identifier",  -        response.getAttributes().getAttributeValuesByFriendlyName("PersonIdentifier").getFirstValue( -            response.getAttributes().getDefinitionsByFriendlyName("PersonIdentifier").iterator().next()) -            .toString().split("/")[2],  -        person.getTravelDocument().getDocumentNumber()); +//    Assert.assertEquals("PlaceOfBirth",  +//        response.getAttributes().getAttributeValuesByFriendlyName("PlaceOfBirth").getFirstValue( +//            response.getAttributes().getDefinitionsByFriendlyName("PlaceOfBirth").iterator().next()),  +//        person.getPerson().getPlaceOfBirth());     +//    Assert.assertEquals("BirthName",  +//        response.getAttributes().getAttributeValuesByFriendlyName("BirthName").getFirstValue( +//            response.getAttributes().getDefinitionsByFriendlyName("BirthName").iterator().next()),  +//        person.getPerson().getAlternativeName().getFamilyName()); +//     +//    Assert.assertEquals("CitizenCountry", "LU", person.getTravelDocument().getIssuingCountry()); +//    Assert.assertEquals("DocumentType", "ELEKTR_DOKUMENT", person.getTravelDocument().getDocumentType()); +//     +//    Assert.assertEquals("Identifier",  +//        response.getAttributes().getAttributeValuesByFriendlyName("PersonIdentifier").getFirstValue( +//            response.getAttributes().getDefinitionsByFriendlyName("PersonIdentifier").iterator().next()) +//            .toString().split("/")[2],  +//        person.getTravelDocument().getDocumentNumber());      // check bcBind singing request      ArgumentCaptor<Boolean> argument1 = ArgumentCaptor.forClass(Boolean.class); @@ -306,6 +305,7 @@ public class CreateIdentityLinkTaskEidNewTest {    @Test    public void successfulProcessWithStandardInfos() throws Exception {      //initialize test     +    setSzrResponseIdentityLink("/data/szr/szr_resp_valid_1.xml");      String vsz = RandomStringUtils.randomNumeric(10);      when(szrMock, "getStammzahlEncrypted", any(), any()).thenReturn(vsz);      val signContentResp = new SignContentResponseType(); @@ -368,34 +368,34 @@ public class CreateIdentityLinkTaskEidNewTest {      ArgumentCaptor<Boolean> argument5 = ArgumentCaptor.forClass(Boolean.class);              verify(szrMock, times(1)).getStammzahlEncrypted(argument4.capture(), argument5.capture()); -    Boolean param5 = argument5.getValue(); -    Assert.assertTrue("insertERnP flag", param5);     -    PersonInfoType person = argument4.getValue(); -    Assert.assertEquals("FamilyName",  -        response.getAttributes().getAttributeValuesByFriendlyName("FamilyName").getFirstValue( -            response.getAttributes().getDefinitionsByFriendlyName("FamilyName").iterator().next()),  -        person.getPerson().getName().getFamilyName()); -    Assert.assertEquals("GivenName",  -        response.getAttributes().getAttributeValuesByFriendlyName("FirstName").getFirstValue( -            response.getAttributes().getDefinitionsByFriendlyName("FirstName").iterator().next()),  -        person.getPerson().getName().getGivenName()); -    Assert.assertEquals("DateOfBirth",  -        response.getAttributes().getAttributeValuesByFriendlyName("DateOfBirth").getFirstValue( -            response.getAttributes().getDefinitionsByFriendlyName("DateOfBirth").iterator().next()) -            .toString().split("T")[0],  -        person.getPerson().getDateOfBirth()); -     -    Assert.assertNull("PlaceOfBirth", person.getPerson().getPlaceOfBirth());      -    Assert.assertNull("BirthName", person.getPerson().getAlternativeName()); -     -    Assert.assertEquals("CitizenCountry", "LU", person.getTravelDocument().getIssuingCountry()); -    Assert.assertEquals("DocumentType", "ELEKTR_DOKUMENT", person.getTravelDocument().getDocumentType()); -     -    Assert.assertEquals("Identifier",  -        response.getAttributes().getAttributeValuesByFriendlyName("PersonIdentifier").getFirstValue( -            response.getAttributes().getDefinitionsByFriendlyName("PersonIdentifier").iterator().next()) -            .toString().split("/")[2],  -        person.getTravelDocument().getDocumentNumber()); +//    Boolean param5 = argument5.getValue(); +//    Assert.assertTrue("insertERnP flag", param5);     +//    PersonInfoType person = argument4.getValue(); +//    Assert.assertEquals("FamilyName",  +//        response.getAttributes().getAttributeValuesByFriendlyName("FamilyName").getFirstValue( +//            response.getAttributes().getDefinitionsByFriendlyName("FamilyName").iterator().next()),  +//        person.getPerson().getName().getFamilyName()); +//    Assert.assertEquals("GivenName",  +//        response.getAttributes().getAttributeValuesByFriendlyName("FirstName").getFirstValue( +//            response.getAttributes().getDefinitionsByFriendlyName("FirstName").iterator().next()),  +//        person.getPerson().getName().getGivenName()); +//    Assert.assertEquals("DateOfBirth",  +//        response.getAttributes().getAttributeValuesByFriendlyName("DateOfBirth").getFirstValue( +//            response.getAttributes().getDefinitionsByFriendlyName("DateOfBirth").iterator().next()) +//            .toString().split("T")[0],  +//        person.getPerson().getDateOfBirth()); +//     +//    Assert.assertNull("PlaceOfBirth", person.getPerson().getPlaceOfBirth());      +//    Assert.assertNull("BirthName", person.getPerson().getAlternativeName()); +//     +//    Assert.assertEquals("CitizenCountry", "LU", person.getTravelDocument().getIssuingCountry()); +//    Assert.assertEquals("DocumentType", "ELEKTR_DOKUMENT", person.getTravelDocument().getDocumentType()); +//     +//    Assert.assertEquals("Identifier",  +//        response.getAttributes().getAttributeValuesByFriendlyName("PersonIdentifier").getFirstValue( +//            response.getAttributes().getDefinitionsByFriendlyName("PersonIdentifier").iterator().next()) +//            .toString().split("/")[2],  +//        person.getTravelDocument().getDocumentNumber());    } @@ -403,6 +403,7 @@ public class CreateIdentityLinkTaskEidNewTest {    @Test    public void getStammzahlEncryptedExceptionTest() throws Exception {      try { +      setSzrResponseIdentityLink("/data/szr/szr_resp_valid_1.xml");        when(szrMock, "getStammzahlEncrypted", any(), any()).thenReturn(null);        task.execute(pendingReq, executionContext);      } catch (TaskExecutionException e) { @@ -417,6 +418,7 @@ public class CreateIdentityLinkTaskEidNewTest {    @Test    public void signContentExceptionTest() throws Exception {      try { +      setSzrResponseIdentityLink("/data/szr/szr_resp_valid_1.xml");        when(szrMock, "getStammzahlEncrypted", any(), any()).thenReturn(RandomStringUtils.randomNumeric(10));        when(szrMock, "signContent", any(), any(), any()).thenReturn(null);        task.execute(pendingReq, executionContext); @@ -451,6 +453,18 @@ public class CreateIdentityLinkTaskEidNewTest {    } +  private void setSzrResponseIdentityLink(String responseXmlPath) throws JAXBException, SZRException_Exception { +    final JAXBContext jaxbContext = JAXBContext +        .newInstance(szrservices.ObjectFactory.class, org.w3._2001._04.xmldsig_more.ObjectFactory.class, +                     org.w3._2000._09.xmldsig.ObjectFactory.class, +                     at.gv.e_government.reference.namespace.persondata._20020228.ObjectFactory.class); +    final Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller(); +    final GetIdentityLinkEidasResponse szrResponse = (GetIdentityLinkEidasResponse) jaxbUnmarshaller +        .unmarshal(this.getClass().getResourceAsStream(responseXmlPath));         +    org.mockito.Mockito.when(szrMock.getIdentityLinkEidas(any(PersonInfoType.class))).thenReturn(szrResponse.getGetIdentityLinkReturn()); + +  } +      @NotNull    private AuthenticationResponse buildDummyAuthResponse(boolean withAll) throws URISyntaxException {      final AttributeDefinition attributeDef = attrRegistry.getCoreAttributeRegistry().getByFriendlyName( | 
