aboutsummaryrefslogtreecommitdiff
path: root/modules/authmodule-eIDAS-v2/src
diff options
context:
space:
mode:
Diffstat (limited to 'modules/authmodule-eIDAS-v2/src')
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/Constants.java211
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/EidasAuthenticationSpringResourceProvider.java6
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/clients/AbstractSoapClient.java199
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/clients/ernp/ErnpRestClient.java857
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/clients/ernp/IErnpClient.java114
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/clients/szr/SzrClient.java479
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/clients/szr/SzrService.java (renamed from modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/szr/SzrService.java)4
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/clients/zmr/IZmrClient.java113
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/clients/zmr/ZmrAddressSoapClient.java286
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/clients/zmr/ZmrSoapClient.java874
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/config/EidasConnectorMessageSource.java21
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/controller/AdresssucheController.java195
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/dao/MatchedPersonResult.java45
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/dao/RegisterResult.java54
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/dao/SelectedLoginMethod.java5
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/dao/SimpleEidasData.java108
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/dao/SimpleMobileSignatureData.java57
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/ernp/DummyErnpClient.java81
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/exception/ErnpRestCommunicationException.java29
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/exception/ManualFixNecessaryException.java44
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/exception/WorkflowException.java94
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/exception/ZmrCommunicationException.java38
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/handler/AbstractEidProcessor.java169
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/handler/CountrySpecificDetailSearchProcessor.java56
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/handler/DeSpecificDetailSearchProcessor.java82
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/handler/INationalEidProcessor.java16
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/handler/ItSpecificDetailSearchProcessor.java53
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/idaustriaclient/IdAustriaClientAuthConstants.java102
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/idaustriaclient/IdAustriaClientAuthEventConstants.java7
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/idaustriaclient/IdAustriaClientAuthMetadataConfiguration.java463
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/idaustriaclient/IdAustriaClientAuthRequestBuilderConfiguration.java300
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/idaustriaclient/controller/IdAustriaClientAuthMetadataController.java122
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/idaustriaclient/controller/IdAustriaClientAuthSignalController.java95
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/idaustriaclient/provider/IdAustriaClientAuthCredentialProvider.java132
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/idaustriaclient/provider/IdAustriaClientAuthHealthCheck.java80
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/idaustriaclient/provider/IdAustriaClientAuthMetadataProvider.java169
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/service/CcSpecificEidProcessingService.java4
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/service/ICcSpecificEidProcessingService.java10
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/service/RegisterSearchService.java447
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/szr/SzrClient.java540
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/AlternativeSearchTask.java246
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/CreateIdentityLinkTask.java537
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/CreateNewErnpEntryTask.java105
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/GenerateAustrianResidenceGuiTask.java105
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/GenerateAuthnRequestTask.java288
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/GenerateMobilePhoneSignatureRequestTask.java145
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/GenerateOtherLoginMethodGuiTask.java112
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/InitialSearchTask.java211
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/ReceiveAustrianResidenceGuiResponseTask.java236
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/ReceiveAuthnResponseAlternativeTask.java195
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/ReceiveAuthnResponseTask.java118
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/ReceiveMobilePhoneSignatureResponseTask.java403
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/ReceiveOtherLoginMethodGuiResponseTask.java128
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/utils/EidasResponseUtils.java262
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/utils/LoggingHandler.java24
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/utils/MatchingTaskUtils.java192
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/utils/VersionHolder.java40
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/eIDAS.Authentication.process.xml87
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/eidas_v2_auth.beans.xml118
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/eidas_v2_auth_ref_impl_config.beans.xml39
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/messages/eidas_connector_message.properties33
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/templates/eidas_node_forward.html2
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/Muster/WienBezirkRequest.xml58
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/Muster/WienBezirkResponse.xml12422
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/Muster/WienBezirkStrasseRequest.xml59
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/Muster/WienBezirkStrasseResponse.xml92
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/Muster/WienRequest.xml52
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/Muster/WienResponse.xml478
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/Muster/WienStrasseAuswahlRequest.xml60
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/Muster/WienStrasseAuswahlResponse.xml311
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/wsdl/Messages.xsd50
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/wsdl/Service.wsdl62
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/wsdl/secext.xsd150
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/wsdl/secext_pvp.xsd152
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/xsd/allgemein/Messages.xsd27
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/xsd/allgemein/Service.xsd40
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/xsd/eingebunden/AbfrageMuster.xsd140
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/xsd/eingebunden/AkademischerGradFelder.xsd61
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/xsd/eingebunden/Blaettern.xsd56
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/xsd/eingebunden/DokumentFelder.xsd74
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/xsd/eingebunden/EingebundenProxy.xsd28
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/xsd/eingebunden/Entity.xsd135
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/xsd/eingebunden/InfoFachlich.xsd103
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/xsd/eingebunden/InfoTechnisch.xsd103
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/xsd/eingebunden/MeldungFelder.xsd283
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/xsd/eingebunden/PersonDataZMR.xsd741
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/xsd/eingebunden/PersonExport.xsd107
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/xsd/eingebunden/PersonFelder.xsd70
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/xsd/eingebunden/SimpleTypes.xsd173
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/xsd/eingebunden/W3C-XMLDSig.xsd274
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/xsd/eingebunden/Workflow.xsd200
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/xsd/zmr/Adresssuche.xsd128
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/xsd/zmr/ZMRProxy.xsd33
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/ernp_client/openapi.json1940
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/szr_client/SZR-1.1.WSDL939
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/szr_client/SZR-1.WSDL901
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/szr_client/SZR_v4.0.wsdl441
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/szr_client/pvp1.xsd133
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/szr_client/pvp19.xsd133
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/szr_client/szr.xsd388
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/szr_client/szr_ecdsa.xsd30
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/szr_client/szr_persondata.xsd54
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/szr_client/szr_pvp_sec.xsd10
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/szr_client/szr_v4.0-schemas.xml54
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/szr_client/szr_v4.0-wsdl.xml10
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/szr_client/szr_v4.0.xsd443
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/szr_client/szr_xmldsig.xsd31
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/soapenv.xsd125
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/ablaufendeauskunfssperren/ablaufendeauskunftssperrenrequest.xml22
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/ablaufendeauskunfssperren/ablaufendeauskunftssperrenresponse.xml194
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/ablaufendeauskunfssperren/blaetternrequest.xml27
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/ablaufendeauskunfssperren/blaetternresponse.xml195
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/adoption/adoptionrequest.xml32
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/adoption/adoptionresponse.xml82
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/adresssuche/adresssucherequest.xml32
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/adresssuche/adresssucheresponse.xml81
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/behoerdenabfrage/behoerdenabfragerequestStufe1.xml33
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/behoerdenabfrage/behoerdenabfragerequestStufe2.xml27
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/behoerdenabfrage/behoerdenabfrageresponseStufe1.xml76
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/behoerdenabfrage/behoerdenabfrageresponseStufe2.xml200
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/bestandsaenderungen/bestandsaenderungenrequest.xml26
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/bestandsaenderungen/bestandsaenderungenresponse.xml83
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/bpabfrage/bpabfragerequest.xml31
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/bpabfrage/bpabfrageresponse.xml68
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/datenabgleich/datenabgleichrequest.xml26
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/datenabgleich/datenabgleichresponse.xml91
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/fremdenabfrage/fremdenabfragerequest.xml31
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/fremdenabfrage/fremdenabfrageresponse.xml45
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/gisadressabfrage/gisadressabfragerequest1.xml30
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/gisadressabfrage/gisadressabfragerequest2.xml23
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/gisadressabfrage/gisadressabfrageresponse1.xml50
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/gisadressabfrage/gisadressabfrageresponse2.xml91
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/hauseigentuemerabfrage/hauseigentuemerabfragerequest.xml35
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/hauseigentuemerabfrage/hauseigentuemerabfrageresponse.xml213
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/meldeauskunft/meldeauskunftrequest.xml44
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/meldeauskunft/meldeauskunftresponse.xml75
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/meldebestaetigung/meldebestaetigungrequest.xml26
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/meldebestaetigung/meldebestaetigungresponse.xml72
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/militaerbehoerden/blaetternrequest.xml27
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/militaerbehoerden/wehrpflichtigeAbfragenRequst.xml31
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/natuerlicheperson.xml30
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/personaendern/personaendernrequest1.xml40
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/personaendern/personaendernrequest2.xml42
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/personaendern/personaendernresponse1.xml85
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/personaendern/personaendernresponse2.xml110
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/personanlegen/personanlegenrequest.xml56
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/personanlegen/personanlegenresponse.xml118
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/personenabfrage/blaetternrequest.xml27
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/personenabfrage/blaetternresponse.xml210
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/personenabfrage/personenabfragedruckrequest.xml23
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/personenabfrage/personenabfragedruckresponse.xml51
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/personenabfrage/personenabfragerequest.xml37
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/personenabfrage/personenabfrageresponse.xml209
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/personensuche/blaetternrequest.xml27
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/personensuche/blaetternresponse.xml210
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/personensuche/personensucherequest.xml37
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/personensuche/personensucheresponse.xml209
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/persontrennen/persontrennenrequest.xml37
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/persontrennen/persontrennensucherequest.xml21
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/personzusammenfuehren/personzusammenfuehrenrequest.xml37
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/personzusammenfuehren/personzusammenfuehrensucherequest.xml22
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/wohnsitzabmelden/wohnsitzabmeldenrequest.xml40
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/wohnsitzabmelden/wohnsitzabmeldenresponse.xml77
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/wohnsitzanmelden/wohnsitzanmeldenrequest.xml48
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/wohnsitzanmelden/wohnsitzanmeldenresponse.xml79
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/wohnsitzummelden/wohnsitzummeldenrequest.xml60
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/wohnsitzummelden/wohnsitzummeldenresponse.xml124
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/zuzugsbestaetigung/zuzugsbestaetigungrequest.xml25
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/zuzugsbestaetigung/zuzugsbestaetigungresponse.xml64
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/wsdl/Messages.xsd215
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/wsdl/Service.wsdl62
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/wsdl/secext.xsd150
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/wsdl/secext_pvp.xsd152
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/allgemein/Auswertungen.xsd200
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/allgemein/BasTabelleAbfrage.xsd193
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/allgemein/Benutzereinstellungen.xsd102
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/allgemein/GeschaeftsprozesseAuflisten.xsd64
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/allgemein/Messages.xsd27
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/allgemein/Organisationseinstellungen.xsd151
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/allgemein/Service.xsd40
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/AbfrageMuster.xsd140
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/AkademischerGradFelder.xsd61
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/Blaettern.xsd56
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/DokumentFelder.xsd74
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/EingebundenProxy.xsd28
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/Entity.xsd135
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/InfoFachlich.xsd103
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/InfoTechnisch.xsd103
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/MeldungFelder.xsd283
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/PersonDataZMR.xsd741
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/PersonExport.xsd107
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/PersonFelder.xsd70
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/Protokollierung.xsd496
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/SimpleTypes.xsd173
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/W3C-XMLDSig.xsd274
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/Workflow.xsd200
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/gis-schnittstelle.xsd171
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/pvp1.xsd174
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/secext.xsd150
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/soapenv.xsd129
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/AblaufendeAuskunftssperrenSuche.xsd76
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Adoption.xsd63
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Adresssuche.xsd128
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Anwendungsintegration.xsd97
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/AnwendungsintegrationWiederholung.xsd117
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/AuskunftssperreAendern.xsd55
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/AvisoAendern.xsd93
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/AvisoAnlegen.xsd60
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/AvisoFreigeben.xsd69
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Avisosuche.xsd124
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/BKMeldeauskunft.xsd69
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/BPKPruefung.xsd76
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Behoerdenabfrage.xsd126
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/BehoerdenattributeAendern.xsd68
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Bestandsaenderungen.xsd140
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/BusinesspartnerAnfrage.xsd131
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Businesspartnerabfrage.xsd94
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/BusinesspartnerabfrageErweitert.xsd67
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Datenabgleich.xsd280
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/ErnpAbfrage.xsd191
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Fremdenabfrage.xsd108
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/GISAdressabfrage.xsd79
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/GISSuche.xsd74
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Gemeindeeinstellungen.xsd71
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Gerichtskommissaerabfrage.xsd93
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/GleichsetzungstabelleWarten.xsd185
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Hauseigentuemerabfrage.xsd117
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/IAPPersonenabfrage.xsd120
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Meldeauskunft.xsd102
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Meldebestaetigung.xsd127
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/MeldebestaetigungenAnfordern.xsd55
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/MeldungHistKorrigieren.xsd112
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/ORFGISAnforderung.xsd65
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/ObjektsucheMindestsicherung.xsd88
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/ObjektsucheSteuerfahndung.xsd91
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/PersonAendern.xsd78
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/PersonAnlegen.xsd67
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/PersonExport.xsd74
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/PersonKorrigieren.xsd74
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/PersonTrennen.xsd75
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/PersonZusammenfuehren.xsd75
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/PersonenIndex.xsd73
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Personenabfrage.xsd139
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Personenlisten.xsd131
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Personensuche.xsd255
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/QKZAuswertung.xsd82
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/QKZBearbeiten.xsd71
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/SZREinzelabfrage.xsd85
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/SZRPersonenbindung.xsd84
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/SZRPersonensuche.xsd75
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/SZRSammelabfrage.xsd54
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Sperrliste.xsd129
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Storno.xsd146
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/SzrAbfrage.xsd59
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/TechnischeAnsicht.xsd132
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Ummeldeserviceabfrage.xsd79
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/WehrpflichtigeAbfragen.xsd99
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/WohnsitzAbmelden.xsd68
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/WohnsitzAnmelden.xsd68
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/WohnsitzKorrigieren.xsd73
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/WohnsitzUmmelden.xsd126
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/ZMRDatenauszug.xsd32
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/ZMRProxy.xsd96
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/ZmrBuergerService.xsd373
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Zuzugsbestaetigung.xsd105
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/entities/AkademischerGrad.xsd84
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/entities/Auskunftssperre.xsd95
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/entities/Aviso.xsd176
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/entities/Behoerdenattribute.xsd67
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/entities/ERnPAnschrift.xsd73
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/entities/ERnPPerson.xsd114
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/entities/EidasIdentitaet.xsd107
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/entities/EidasIdentitaet.xsd.svntmp106
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/entities/Meldung.xsd189
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/entities/Person.xsd233
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/entities/Qualifikationskennzeichen.xsd75
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/entities/Reisedokument.xsd82
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/entities/Staatsangehoerigkeit.xsd73
-rw-r--r--modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/entities/Standarddokument.xsd74
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/EidasSignalServletTest.java131
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/SzrClientTestProduction.java294
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/clients/ErnpRestClientProductionTest.java486
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/clients/ErnpRestClientTest.java1085
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/clients/SzrClientProductionTest.java140
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/clients/SzrClientTest.java (renamed from modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/SzrClientTest.java)253
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/clients/ZmrAddressSearchClientProductionTest.java169
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/clients/ZmrClientProductionTest.java478
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/clients/ZmrClientTest.java1242
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/config/EidasConnectorMessageSourceTest.java43
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/dummy/DummyAuthConfigMap.java144
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/dummy/DummyOA.java304
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/dummy/DummyPendingRequest.java8
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/dummy/IAhSpConfiguration.java152
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/handler/DeSpecificDetailSearchProcessorTest.java105
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/handler/ItSpecificDetailSearchProcessorTes.java84
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/idaustriaclient/IdAustriaAuthSignalControllerTest.java197
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/idaustriaclient/IdAustriaClientAuthHealthCheckTest.java130
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/idaustriaclient/IdAustriaClientAuthMetadataControllerTest.java136
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/idaustriaclient/IdAustriaClientAuthMetadataProviderFirstTest.java239
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/idaustriaclient/IdAustriaClientAuthMetadataProviderSecondTest.java66
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/idaustriaclient/IdAustriaClientCredentialProviderTest.java414
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/AlternativeSearchTaskWithRegisterTest.java1042
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/CreateIdentityLinkTaskEidNewTest.java379
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/CreateIdentityLinkTaskTest.java350
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/CreateNewErnpEntryTaskTest.java198
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/GenerateAustrianResidenceGuiTaskTest.java172
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/GenerateMobilePhoneSignatureRequestTaskTest.java282
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/GenerateOtherLoginMethodGuiTaskTest.java293
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/InitialSearchTaskTest.java939
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/InitialSearchTaskWithRegistersTest.java683
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/ReceiveAustrianResidenceGuiResponseTaskRegisterTest.java339
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/ReceiveAustrianResidenceGuiResponseTaskTest.java320
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/ReceiveAuthnResponseTaskTest.java254
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/ReceiveEidasResponseTaskTest.java69
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/ReceiveMobilePhoneSignatureResponseTaskTest.java502
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/ReceiveOtherLoginMethodGuiResponseTaskTest.java154
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/utils/JoseUtilsTest.java55
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/validation/EidasAttributePostProcessingTest.java47
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/validation/EidasRequestPreProcessingFirstTest.java7
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/validation/EidasRequestPreProcessingSecondTest.java2
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/validation/EidasResponseValidatorTest.java221
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/resources/SpringTest-context_basic_lazy.xml24
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/resources/SpringTest-context_basic_test.xml3
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/resources/SpringTest-context_ccSearchProcessor_test.xml17
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/resources/SpringTest-context_tasks_test.xml37
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/resources/config/junit_config_1.properties57
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/resources/config/junit_config_1_springboot.properties143
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/resources/config/junit_config_2.properties7
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/resources/config/junit_config_3.properties7
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/resources/config/junit_config_4.properties7
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/resources/config/junit_config_de_attributes.properties7
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/resources/config/keys/junit_test.jksbin0 -> 8410 bytes
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/resources/config/keys/teststore.jksbin0 -> 2028 bytes
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/resources/data/Response_with_EID.xml52
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/resources/data/Response_with_EID_deprecated_bpk_encoding.xml52
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/resources/data/Response_with_wrong_destination_endpoint.xml56
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/resources/data/Response_without_sig_classpath_entityid.xml50
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/resources/data/Response_without_sig_with_error.xml46
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/resources/data/Response_without_sig_with_error_empty_subcode.xml46
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/resources/data/Response_without_sig_with_error_userstop.xml46
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/resources/data/Response_without_sig_with_error_without_subcode.xml45
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/1_add_req.json30
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/1_add_resp.json60
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/1_kitt_search_latest_req.json19
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/1_kitt_search_latest_resp.json62
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/1_kitt_update_req.json17
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/1_kitt_update_resp.json60
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/1_search_with_personalId_req.json20
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/1_search_with_personalId_resp.json62
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/2_add_req.json30
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/2_add_resp.json60
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/2_kitt_search_latest_req.json19
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/2_kitt_search_latest_resp.json62
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/2_kitt_update_req.json14
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/2_kitt_update_resp.json69
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/2_search_with_cc_specific_req.json30
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/2_search_with_cc_specific_resp.json62
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/3_search_with_mds_req.json18
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/3_search_with_mds_resp.json44
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/4_search_with_mds_multi_resp.json84
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/4_search_with_mds_req.json18
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/ernp_empty_resp.json1
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/ernp_handbook_example.json85
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/error_resp.json12
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/resources/data/idp_metadata_classpath_entity.xml146
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/resources/data/idp_metadata_no_sig.xml46
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/resources/data/idp_metadata_no_sig2.xml46
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/resources/data/idp_metadata_sig_notvalid.xml84
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/resources/data/idp_metadata_sig_valid_wrong_alg.xml74
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/resources/data/pvp_postbinding_template.html3
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/resources/data/sp_metadata_junit.xml66
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/resources/data/zmr/empty_zmr_result.xml39
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/resources/data/zmr/no_bpk_zp.xml290
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/resources/data/zmr/search_with_personalId_only_resp.xml290
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/resources/data/zmr/search_with_personalId_only_resp_historicIncluded.xml389
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/resources/data/zmr/search_with_personalId_only_resp_moreThanOne.xml488
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/resources/data/zmr/search_with_personalId_only_resp_moreThanOne_2.xml465
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/resources/data/zmr/seq_1-2_search_with_mds_resp.xml181
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/resources/data/zmr/seq_1-4_kitt_get_latest_version_resp.xml185
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/resources/data/zmr/seq_1-6_kitt_update_resp.xml146
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/resources/data/zmr/seq_1-8_search_with_personalId_only_resp.xml336
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/resources/data/zmr/seq_1-8_search_with_personalId_only_resp_no_additional_attributes.xml221
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/resources/data/zmr/seq_3-10_kitt_update_resp.xml123
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/resources/data/zmr/seq_3-4_kitt_get_latest_version_resp.xml208
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/resources/data/zmr/seq_3-6_kitt_update_resp.xml123
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/resources/data/zmr/seq_3-8_kitt_get_latest_version_resp.xml300
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/resources/keystore/junit_test.jksbin0 -> 8410 bytes
-rw-r--r--modules/authmodule-eIDAS-v2/src/test/resources/keystore/pvp.p12bin0 -> 5494 bytes
388 files changed, 66340 insertions, 2432 deletions
diff --git a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/Constants.java b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/Constants.java
index 40b953b1..0b5d086d 100644
--- a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/Constants.java
+++ b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/Constants.java
@@ -27,11 +27,32 @@ import at.gv.egiz.eaaf.core.api.data.EaafConstants;
public class Constants {
+ //TODO: should we make it configurable?
+ public static final String MATCHING_INTERNAL_BPK_TARGET = EaafConstants.URN_PREFIX_CDID + "ZP";
+
+ public static final String ERRORCODE_00 = "module.eidasauth.00";
+
public static final String DATA_REQUESTERID = "req_requesterId";
public static final String DATA_PROVIDERNAME = "req_providerName";
public static final String DATA_REQUESTED_LOA_LIST = "req_requestedLoA";
public static final String DATA_REQUESTED_LOA_COMPERISON = "req_requestedLoAComperision";
public static final String DATA_FULL_EIDAS_RESPONSE = "resp_fulleIDASResponse";
+ public static final String DATA_FULL_EIDAS_RESPONSE_ALTERNATIVE = "resp_fulleIDASResponseAlternative";
+
+ /**
+ * Stored before Step 2 from Matching Concept, input from user eIDAS authn.
+ */
+ public static final String DATA_SIMPLE_EIDAS = "matching_simple_eidas_data";
+
+ /**
+ * Stored intermediate mathing results where matching is still on-going.
+ */
+ public static final String DATA_INTERMEDIATE_RESULT = "matching_intermediate_result";
+
+ /**
+ * Stored after Step 8 from Matching Concept, results from search in registers with MDS.
+ */
+ public static final String DATA_PERSON_MATCH_RESULT = "matching_result";
// templates for post-binding forwarding
public static final String TEMPLATE_POST_FORWARD_NAME = "eidas_node_forward.html";
@@ -43,10 +64,10 @@ public class Constants {
public static final String CONIG_PROPS_EIDAS_PREFIX = "auth.eIDAS";
public static final String CONIG_PROPS_EIDAS_WORKAROUND_STAGING_MS_CONNECTOR =
- CONIG_PROPS_EIDAS_PREFIX + ".workarounds.staging.msconnector.endpoint";
+ CONIG_PROPS_EIDAS_PREFIX + ".workarounds.staging.msconnector.endpoint";
+ public static final String CONIG_PROPS_EIDAS_IS_TEST_IDENTITY =
+ CONIG_PROPS_EIDAS_PREFIX + ".eid.testidentity.default";
- public static final String CONIG_PROPS_EIDAS_IS_TEST_IDENTITY = CONIG_PROPS_EIDAS_PREFIX
- + ".eid.testidentity.default";
public static final String CONIG_PROPS_EIDAS_NODE = CONIG_PROPS_EIDAS_PREFIX + ".node_v2";
public static final String CONIG_PROPS_EIDAS_NODE_COUNTRYCODE = CONIG_PROPS_EIDAS_NODE + ".countrycode";
public static final String CONIG_PROPS_EIDAS_NODE_PUBLICSECTOR_TARGETS = CONIG_PROPS_EIDAS_NODE
@@ -62,20 +83,20 @@ public class Constants {
CONIG_PROPS_EIDAS_NODE + ".attributes.requested.{0}.onlynatural";
public static final String CONIG_PROPS_EIDAS_NODE_ATTRIBUTES_REQUESTED_REPRESENTATION =
CONIG_PROPS_EIDAS_NODE + ".attributes.requested.representation";
-
+
public static final String CONIG_PROPS_EIDAS_NODE_REQUESTERID_USE_HASHED_VERSION =
CONIG_PROPS_EIDAS_NODE + ".requesterId.useHashedForm";
public static final String CONIG_PROPS_EIDAS_NODE_WORKAROUND_USE_STATIC_REQUESTERID_FOR_LUX =
CONIG_PROPS_EIDAS_NODE + ".requesterId.lu.useStaticRequesterForAll";
-
+
public static final String CONIG_PROPS_EIDAS_NODE_WORKAROUND_ADD_ALWAYS_PROVIDERNAME =
- CONIG_PROPS_EIDAS_NODE + ".workarounds.addAlwaysProviderName";
+ CONIG_PROPS_EIDAS_NODE + ".workarounds.addAlwaysProviderName";
public static final String CONIG_PROPS_EIDAS_NODE_WORKAROUND_USEREQUESTIDASTRANSACTIONIDENTIFIER =
CONIG_PROPS_EIDAS_NODE + ".workarounds.useRequestIdAsTransactionIdentifier";
-
- public static final String CONFIG_PROP_EIDAS_NODE_NAMEIDFORMAT =
+
+ public static final String CONFIG_PROP_EIDAS_NODE_NAMEIDFORMAT =
CONIG_PROPS_EIDAS_NODE + ".requested.nameIdFormat";
-
+
public static final String CONIG_PROPS_EIDAS_NODE_STATIC_PROVIDERNAME_FOR_PUBLIC_SP = CONIG_PROPS_EIDAS_NODE
+ ".staticProviderNameForPublicSPs";
public static final String DEFAULT_PROPS_EIDAS_NODE_STATIC_PROVIDERNAME_FOR_PUBLIC_SP = "Austria";
@@ -83,6 +104,81 @@ public class Constants {
public static final String FORWARD_METHOD_POST = "POST";
public static final String FORWARD_METHOD_GET = "GET";
+
+ // Common SSL client configuration
+ public static final String CONIG_PROPS_EIDAS_COMMON_CLIENT = CONIG_PROPS_EIDAS_PREFIX + ".client.common";
+ public static final String CONIG_PROPS_EIDAS_COMMON_CLIENT_SSL_KEYSTORE_PATH = CONIG_PROPS_EIDAS_COMMON_CLIENT
+ + ".ssl.keyStore.path";
+ public static final String CONIG_PROPS_EIDAS_COMMON_CLIENT_SSL_KEYSTORE_PASSWORD = CONIG_PROPS_EIDAS_COMMON_CLIENT
+ + ".ssl.keyStore.password";
+ public static final String CONIG_PROPS_EIDAS_COMMON_CLIENT_SSL_KEYSTORE_TYPE = CONIG_PROPS_EIDAS_COMMON_CLIENT
+ + ".ssl.keyStore.type";
+ public static final String CONIG_PROPS_EIDAS_COMMON_CLIENT_SSL_KEYSTORE_NAME = CONIG_PROPS_EIDAS_COMMON_CLIENT
+ + ".ssl.keyStore.name";
+ public static final String CONIG_PROPS_EIDAS_COMMON_CLIENT_SSL_KEYS_ALIAS = CONIG_PROPS_EIDAS_COMMON_CLIENT
+ + ".ssl.key.alias";
+ public static final String CONIG_PROPS_EIDAS_COMMON_CLIENT_SSL_KEY_PASSWORD = CONIG_PROPS_EIDAS_COMMON_CLIENT
+ + ".ssl.key.password";
+ public static final String CONIG_PROPS_EIDAS_COMMON_CLIENT_SSL_TRUSTSTORE_PATH = CONIG_PROPS_EIDAS_COMMON_CLIENT
+ + ".ssl.trustStore.path";
+ public static final String CONIG_PROPS_EIDAS_COMMON_CLIENT_SSL_TRUSTSTORE_PASSWORD = CONIG_PROPS_EIDAS_COMMON_CLIENT
+ + ".ssl.trustStore.password";
+ public static final String CONIG_PROPS_EIDAS_COMMON_CLIENT_SSL_TRUSTSTORE_TYPE = CONIG_PROPS_EIDAS_COMMON_CLIENT
+ + ".ssl.trustStore.type";
+ public static final String CONIG_PROPS_EIDAS_COMMON_CLIENT_SSL_TRUSTSTORE_NAME = CONIG_PROPS_EIDAS_COMMON_CLIENT
+ + ".ssl.trustStore.name";
+
+
+ // ZMR Client configuration properties
+ public static final String CONIG_PROPS_EIDAS_ZMRCLIENT = CONIG_PROPS_EIDAS_PREFIX + ".zmrclient";
+ public static final String CONIG_PROPS_EIDAS_ZMRCLIENT_ENDPOINT = CONIG_PROPS_EIDAS_ZMRCLIENT
+ + ".endpoint";
+ public static final String CONIG_PROPS_EIDAS_ZMRCLIENT_DEBUG_TRACEMESSAGES = CONIG_PROPS_EIDAS_ZMRCLIENT
+ + ".debug.logfullmessages";
+ public static final String CONIG_PROPS_EIDAS_ZMRCLIENT_TIMEOUT_CONNECTION = CONIG_PROPS_EIDAS_ZMRCLIENT
+ + ".timeout.connection";
+ public static final String CONIG_PROPS_EIDAS_ZMRCLIENT_TIMEOUT_RESPONSE = CONIG_PROPS_EIDAS_ZMRCLIENT
+ + ".timeout.response";
+ public static final String CONIG_PROPS_EIDAS_ZMRCLIENT_REQ_ORGANIZATION_NR = CONIG_PROPS_EIDAS_ZMRCLIENT
+ + ".req.organisation.behoerdennr";
+ public static final String CONIG_PROPS_EIDAS_ZMRCLIENT_REQ_UPDATE_REASON_CODE = CONIG_PROPS_EIDAS_ZMRCLIENT
+ + ".req.update.reason.code";
+ public static final String CONIG_PROPS_EIDAS_ZMRCLIENT_REQ_UPDATE_REASON_TEXT = CONIG_PROPS_EIDAS_ZMRCLIENT
+ + ".req.update.reason.text";
+ public static final String CONIG_PROPS_EIDAS_ZMRCLIENT_SSL_KEYSTORE_PATH = CONIG_PROPS_EIDAS_ZMRCLIENT
+ + ".ssl.keyStore.path";
+ public static final String CONIG_PROPS_EIDAS_ZMRCLIENT_SSL_KEYSTORE_PASSWORD = CONIG_PROPS_EIDAS_ZMRCLIENT
+ + ".ssl.keyStore.password";
+ public static final String CONIG_PROPS_EIDAS_ZMRCLIENT_SSL_KEYSTORE_TYPE = CONIG_PROPS_EIDAS_ZMRCLIENT
+ + ".ssl.keyStore.type";
+ public static final String CONIG_PROPS_EIDAS_ZMRCLIENT_SSL_KEYSTORE_NAME = CONIG_PROPS_EIDAS_ZMRCLIENT
+ + ".ssl.keyStore.name";
+ public static final String CONIG_PROPS_EIDAS_ZMRCLIENT_SSL_KEYS_ALIAS = CONIG_PROPS_EIDAS_ZMRCLIENT
+ + ".ssl.key.alias";
+ public static final String CONIG_PROPS_EIDAS_ZMRCLIENT_SSL_KEY_PASSWORD = CONIG_PROPS_EIDAS_ZMRCLIENT
+ + ".ssl.key.password";
+ public static final String CONIG_PROPS_EIDAS_ZMRCLIENT_SSL_TRUSTSTORE_PATH = CONIG_PROPS_EIDAS_ZMRCLIENT
+ + ".ssl.trustStore.path";
+ public static final String CONIG_PROPS_EIDAS_ZMRCLIENT_SSL_TRUSTSTORE_PASSWORD = CONIG_PROPS_EIDAS_ZMRCLIENT
+ + ".ssl.trustStore.password";
+ public static final String CONIG_PROPS_EIDAS_ZMRCLIENT_SSL_TRUSTSTORE_TYPE = CONIG_PROPS_EIDAS_ZMRCLIENT
+ + ".ssl.trustStore.type";
+ public static final String CONIG_PROPS_EIDAS_ZMRCLIENT_SSL_TRUSTSTORE_NAME = CONIG_PROPS_EIDAS_ZMRCLIENT
+ + ".ssl.trustStore.name";
+
+ // ErnP Client configuration properties
+ public static final String CONIG_PROPS_EIDAS_ERNPCLIENT = CONIG_PROPS_EIDAS_PREFIX + ".ernpclient";
+ public static final String CONIG_PROPS_EIDAS_ERNPCLIENT_ENDPOINT = CONIG_PROPS_EIDAS_ERNPCLIENT
+ + ".endpoint";
+ public static final String CONIG_PROPS_EIDAS_ERNPCLIENT_TIMEOUT_CONNECTION = CONIG_PROPS_EIDAS_ERNPCLIENT
+ + ".timeout.connection";
+ public static final String CONIG_PROPS_EIDAS_ERNPCLIENT_TIMEOUT_RESPONSE = CONIG_PROPS_EIDAS_ERNPCLIENT
+ + ".timeout.response";
+ public static final String CONIG_PROPS_EIDAS_ERNPCLIENT_REQ_ORGANIZATION_NR = CONIG_PROPS_EIDAS_ERNPCLIENT
+ + ".req.organisation.behoerdennr";
+
+
+ // SZR Client configuration properties
public static final String CONIG_PROPS_EIDAS_SZRCLIENT = CONIG_PROPS_EIDAS_PREFIX + ".szrclient";
public static final String CONIG_PROPS_EIDAS_SZRCLIENT_USETESTSERVICE = CONIG_PROPS_EIDAS_SZRCLIENT
+ ".useTestService";
@@ -104,10 +200,22 @@ public class Constants {
+ ".ssl.keyStore.path";
public static final String CONIG_PROPS_EIDAS_SZRCLIENT_SSL_KEYSTORE_PASSWORD = CONIG_PROPS_EIDAS_SZRCLIENT
+ ".ssl.keyStore.password";
+ public static final String CONIG_PROPS_EIDAS_SZRCLIENT_SSL_KEYSTORE_TYPE = CONIG_PROPS_EIDAS_SZRCLIENT
+ + ".ssl.keyStore.type";
+ public static final String CONIG_PROPS_EIDAS_SZRCLIENT_SSL_KEYSTORE_NAME = CONIG_PROPS_EIDAS_SZRCLIENT
+ + ".ssl.keyStore.name";
+ public static final String CONIG_PROPS_EIDAS_SZRCLIENT_SSL_KEYS_ALIAS = CONIG_PROPS_EIDAS_SZRCLIENT
+ + ".ssl.key.alias";
+ public static final String CONIG_PROPS_EIDAS_SZRCLIENT_SSL_KEY_PASSWORD = CONIG_PROPS_EIDAS_SZRCLIENT
+ + ".ssl.key.password";
public static final String CONIG_PROPS_EIDAS_SZRCLIENT_SSL_TRUSTSTORE_PATH = CONIG_PROPS_EIDAS_SZRCLIENT
+ ".ssl.trustStore.path";
public static final String CONIG_PROPS_EIDAS_SZRCLIENT_SSL_TRUSTSTORE_PASSWORD = CONIG_PROPS_EIDAS_SZRCLIENT
+ ".ssl.trustStore.password";
+ public static final String CONIG_PROPS_EIDAS_SZRCLIENT_SSL_TRUSTSTORE_TYPE = CONIG_PROPS_EIDAS_SZRCLIENT
+ + ".ssl.trustStore.type";
+ public static final String CONIG_PROPS_EIDAS_SZRCLIENT_SSL_TRUSTSTORE_NAME = CONIG_PROPS_EIDAS_SZRCLIENT
+ + ".ssl.trustStore.name";
public static final String CONIG_PROPS_EIDAS_SZRCLIENT_PARAMS_EDOCUMENTTYPE = CONIG_PROPS_EIDAS_SZRCLIENT
+ ".params.documenttype";
@@ -137,10 +245,6 @@ public class Constants {
@Deprecated
public static final String CONIG_PROPS_EIDAS_SZRCLIENT_WORKAROUND_SQLLITEDATASTORE_ACTIVE =
CONIG_PROPS_EIDAS_SZRCLIENT + ".workarounds.datastore.sqlite.active";
-
- public static final String CONIG_PROPS_EIDAS_SZRCLIENT_WORKAROUND_IDA_VSZ_IDL =
- CONIG_PROPS_EIDAS_SZRCLIENT + ".workarounds.use.getidentitylink.for.ida";
-
// http endpoint descriptions
public static final String eIDAS_HTTP_ENDPOINT_SP_POST = "/eidas/light/sp/post";
@@ -159,13 +263,33 @@ public class Constants {
public static final String eIDAS_ATTR_PLACEOFBIRTH = "PlaceOfBirth";
public static final String eIDAS_ATTR_BIRTHNAME = "BirthName";
public static final String eIDAS_ATTR_CURRENTADDRESS = "CurrentAddress";
+ public static final String eIDAS_ATTR_TAXREFERENCE = "TaxReference";
public static final String eIDAS_ATTR_LEGALPERSONIDENTIFIER = "LegalPersonIdentifier";
public static final String eIDAS_ATTR_LEGALNAME = "LegalName";
+
+ //eIDAS attribute URN
+ public static final String eIDAS_ATTRURN_PREFIX = "http://eidas.europa.eu/attributes/";
+ public static final String eIDAS_ATTRURN_PREFIX_NATURAL = eIDAS_ATTRURN_PREFIX + "naturalperson/";
+
+ public static final String eIDAS_ATTRURN_PERSONALIDENTIFIER =
+ eIDAS_ATTRURN_PREFIX_NATURAL + eIDAS_ATTR_PERSONALIDENTIFIER;
+ public static final String eIDAS_ATTRURN_CURRENTGIVENNAME =
+ eIDAS_ATTRURN_PREFIX_NATURAL + "CurrentGivenName";
+ public static final String eIDAS_ATTRURN_CURRENTFAMILYNAME =
+ eIDAS_ATTRURN_PREFIX_NATURAL + "CurrentFamilyName";
+ public static final String eIDAS_ATTRURN_DATEOFBIRTH =
+ eIDAS_ATTRURN_PREFIX_NATURAL + eIDAS_ATTR_DATEOFBIRTH;
+ public static final String eIDAS_ATTRURN_PLACEOFBIRTH =
+ eIDAS_ATTRURN_PREFIX_NATURAL + eIDAS_ATTR_PLACEOFBIRTH;
+ public static final String eIDAS_ATTRURN_BIRTHNAME =
+ eIDAS_ATTRURN_PREFIX_NATURAL + eIDAS_ATTR_BIRTHNAME;
+
+
public static final String eIDAS_REQ_PARAM_SECTOR_PUBLIC = "public";
public static final String eIDAS_REQ_PARAM_SECTOR_PRIVATE = "private";
-
+
public static final String POLICY_DEFAULT_ALLOWED_TARGETS =
EaafConstants.URN_PREFIX_CDID.replaceAll("\\.", "\\\\.").replaceAll("\\+", "\\\\+") + ".*";
@@ -178,8 +302,10 @@ public class Constants {
public static final String SZR_SCHEMA_LOCATIONS =
"urn:SZRServices" + " " + "/szr_client/szr.xsd";
- // Default values for SZR communication
+ // Default values for SZR / ZMR / ERnP communication
public static final String SZR_CONSTANTS_DEFAULT_DOCUMENT_TYPE = "ELEKTR_DOKUMENT";
+ public static final String CLIENT_INFO = "eIDAS MS-Connector v{0}";
+
// TODO remove!!!
public static final String SZR_CONSTANTS_DEFAULT_ISSUING_DATE = "2014-01-01";
@@ -189,4 +315,59 @@ public class Constants {
"AJZyj/+sdCMDRq9RkvbFcgSTVn/OfS8EUE81ddwP8MNuJ1kd1SWBUJPaQX2JLJHrL54mkOhrkhH2M/zcuOTu8nW9TOEg"
+ "XGjrRB/0HpiYKpV+VDJViyyc/GacNLxN4Anw4pima6gHYaJIw9hQkL/nuO2hyh8PGJd7rxeFXJmbLy+X";
+ public static final String COUNTRY_CODE_DE = "DE";
+ public static final String COUNTRY_CODE_IT = "IT";
+
+
+ // UI options
+ public static final String HTML_FORM_CREATE_NEW_ERNP_ENTRY = "createNewErnpEntry";
+ public static final String HTML_FORM_ADVANCED_MATCHING_FAILED = "advancedMatchingFailed";
+ public static final String HTML_FORM_ADVANCED_MATCHING_FAILED_REASON =
+ HTML_FORM_ADVANCED_MATCHING_FAILED + "Reason";
+
+
+ // ProcessEngine context
+ public static final String CONTEXT_FLAG_ADVANCED_MATCHING_FAILED = HTML_FORM_ADVANCED_MATCHING_FAILED;
+ public static final String CONTEXT_FLAG_ADVANCED_MATCHING_FAILED_REASON =
+ HTML_FORM_ADVANCED_MATCHING_FAILED_REASON;
+
+ /**
+ * {@link at.asitplus.eidas.specific.modules.auth.eidas.v2.tasks.CreateNewErnpEntryTask}.
+ */
+ public static final String TRANSITION_TO_CREATE_NEW_ERNP_ENTRY_TASK = "TASK_CreateNewErnpEntryTask";
+
+ /**
+ * {@link at.asitplus.eidas.specific.modules.auth.eidas.v2.tasks.GenerateOtherLoginMethodGuiTask}.
+ */
+ public static final String TRANSITION_TO_GENERATE_OTHER_LOGIN_METHOD_GUI_TASK =
+ "TASK_GenerateOtherLoginMethodGuiTask";
+
+ /**
+ * {@link at.asitplus.eidas.specific.modules.auth.eidas.v2.tasks.GenerateAustrianResidenceGuiTask}.
+ */
+ public static final String TRANSITION_TO_GENERATE_GUI_QUERY_AUSTRIAN_RESIDENCE_TASK =
+ "TASK_GenerateAustrianResidenceGuiTask";
+
+ /**
+ * {@link at.asitplus.eidas.specific.modules.auth.eidas.v2.tasks.CreateNewErnpEntryTask}.
+ */
+ public static final String TRANSITION_TO_REQUESTING_NEW_ERNP_ENTRY_TASK = "TASK_RequestingNewErnpEntryTask";
+
+
+ /**
+ * {@link at.asitplus.eidas.specific.modules.auth.eidas.v2.tasks.GenerateMobilePhoneSignatureRequestTask}.
+ */
+ public static final String TRANSITION_TO_GENERATE_MOBILE_PHONE_SIGNATURE_REQUEST_TASK =
+ "TASK_GenerateMobilePhoneSignatureRequestTask";
+
+ /**
+ * {@link at.asitplus.eidas.specific.modules.auth.eidas.v2.tasks.GenerateAuthnRequestTask}.
+ */
+ public static final String TRANSITION_TO_GENERATE_EIDAS_LOGIN = "TASK_GenerateAlternativeEidasAuthn";
+
+
+ /**
+ * Stores login selection from user.
+ */
+ public static final String REQ_SELECTED_LOGIN_METHOD_PARAMETER = "loginSelection";
}
diff --git a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/EidasAuthenticationSpringResourceProvider.java b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/EidasAuthenticationSpringResourceProvider.java
index 535e4f97..e5b10185 100644
--- a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/EidasAuthenticationSpringResourceProvider.java
+++ b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/EidasAuthenticationSpringResourceProvider.java
@@ -45,8 +45,10 @@ public class EidasAuthenticationSpringResourceProvider implements SpringResource
public Resource[] getResourcesToLoad() {
final ClassPathResource eidasAuthConfig = new ClassPathResource("/eidas_v2_auth.beans.xml",
EidasAuthenticationSpringResourceProvider.class);
-
- return new Resource[] { eidasAuthConfig };
+ final ClassPathResource eidasRefImplConfig = new ClassPathResource("/eidas_v2_auth_ref_impl_config.beans.xml",
+ EidasAuthenticationSpringResourceProvider.class);
+
+ return new Resource[] { eidasRefImplConfig, eidasAuthConfig };
}
}
diff --git a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/clients/AbstractSoapClient.java b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/clients/AbstractSoapClient.java
new file mode 100644
index 00000000..a039881c
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/clients/AbstractSoapClient.java
@@ -0,0 +1,199 @@
+package at.asitplus.eidas.specific.modules.auth.eidas.v2.clients;
+
+import java.security.KeyManagementException;
+import java.security.KeyStore;
+import java.security.NoSuchAlgorithmException;
+import java.security.Provider;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import javax.net.ssl.SSLContext;
+import javax.xml.ws.BindingProvider;
+import javax.xml.ws.handler.Handler;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.cxf.configuration.jsse.TLSClientParameters;
+import org.apache.cxf.endpoint.Client;
+import org.apache.cxf.frontend.ClientProxy;
+import org.apache.cxf.jaxws.DispatchImpl;
+import org.apache.cxf.transport.http.HTTPConduit;
+import org.apache.cxf.transports.http.configuration.HTTPClientPolicy;
+import org.apache.http.ssl.SSLContextBuilder;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.lang.Nullable;
+
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.utils.LoggingHandler;
+import at.gv.egiz.eaaf.core.api.idp.IConfiguration;
+import at.gv.egiz.eaaf.core.exceptions.EaafConfigurationException;
+import at.gv.egiz.eaaf.core.exceptions.EaafException;
+import at.gv.egiz.eaaf.core.impl.credential.EaafKeyStoreFactory;
+import at.gv.egiz.eaaf.core.impl.credential.KeyStoreConfiguration;
+import at.gv.egiz.eaaf.core.impl.credential.KeyStoreConfiguration.KeyStoreType;
+import at.gv.egiz.eaaf.core.impl.data.Pair;
+import at.gv.egiz.eaaf.core.impl.http.HttpUtils;
+import lombok.Builder;
+import lombok.Getter;
+import lombok.extern.slf4j.Slf4j;
+
+@Slf4j
+public class AbstractSoapClient {
+
+ @Autowired
+ protected IConfiguration basicConfig;
+ @Autowired
+ EaafKeyStoreFactory keyStoreFactory;
+
+ @Builder
+ @Getter
+ public static class HttpClientConfig {
+
+ private final String clientName;
+
+ private final String clientUrl;
+ private final String clientType;
+
+ private final String connectionTimeout;
+ private final String responseTimeout;
+
+ private final KeyStoreConfiguration keyStoreConfig;
+ private final String keyAlias;
+ private final String keyPassword;
+
+ private final KeyStoreConfiguration trustStoreConfig;
+
+ @Builder.Default
+ private final boolean trustAll = false;
+
+ }
+
+ /**
+ * Build a validated KeyStore Configuration-Object from configuration keys.
+ *
+ * @param keyStoreTypeKey Configuration key for type
+ * @param keyStorePathKey Configuration key for path
+ * @param keyStorePasswordKey Configuration key for password
+ * @param keyStoreNameKey Configuration key for name
+ * @param friendlyName Friendlyname for logging and errorhandling
+ * @return Valid KeyStore configuration or <code>null</code> if no type was
+ * defined
+ * @throws EaafConfigurationException In case of validation error
+ */
+ @Nullable
+ protected KeyStoreConfiguration buildKeyStoreConfiguration(String keyStoreTypeKey, String keyStorePathKey,
+ String keyStorePasswordKey, String keyStoreNameKey, String friendlyName)
+ throws EaafConfigurationException {
+ if (StringUtils.isNotEmpty(basicConfig.getBasicConfiguration(keyStoreTypeKey))) {
+ log.debug("Starting configuration of: {} ... ", friendlyName);
+ final KeyStoreConfiguration config = new KeyStoreConfiguration();
+ config.setFriendlyName(friendlyName);
+ config.setKeyStoreType(basicConfig.getBasicConfiguration(keyStoreTypeKey, KeyStoreType.PKCS12.name()));
+ config.setKeyStoreName(basicConfig.getBasicConfiguration(keyStoreNameKey));
+ config.setSoftKeyStoreFilePath(basicConfig.getBasicConfiguration(keyStorePathKey));
+ config.setSoftKeyStorePassword(basicConfig.getBasicConfiguration(keyStorePasswordKey));
+
+ // validate keystore configuration
+ config.validate();
+
+ return config;
+
+ } else {
+ log.info("Skipping configuration of: {}", friendlyName);
+ return null;
+
+ }
+
+ }
+
+ protected void injectHttpClient(Object raw, HttpClientConfig config) {
+ // extract client from implementation
+ Client client;
+ if (raw instanceof DispatchImpl<?>) {
+ client = ((DispatchImpl<?>) raw).getClient();
+ } else if (raw instanceof Client) {
+ client = ClientProxy.getClient(raw);
+ } else {
+ throw new RuntimeException("SOAP Client for SZR connection is of UNSUPPORTED type: " + raw.getClass()
+ .getName());
+ }
+
+ // set basic connection policies
+ final HTTPConduit http = (HTTPConduit) client.getConduit();
+
+ // set timeout policy
+ final HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();
+ httpClientPolicy.setConnectionTimeout(Integer.parseInt(config.getConnectionTimeout()) * 1000L);
+ httpClientPolicy.setReceiveTimeout(Integer.parseInt(config.getResponseTimeout()) * 1000L);
+ http.setClient(httpClientPolicy);
+
+ // inject SSL context in case of https
+ if (config.getClientUrl().toLowerCase().startsWith("https")) {
+ try {
+ log.debug("Adding SSLContext to client: " + config.getClientType() + " ... ");
+
+ final TLSClientParameters tlsParams = new TLSClientParameters();
+ if (config.getKeyStoreConfig() != null) {
+ final SSLContext sslContext = HttpUtils.buildSslContextWithSslClientAuthentication(
+ keyStoreFactory.buildNewKeyStore(config.getKeyStoreConfig()),
+ config.getKeyAlias(),
+ config.getKeyPassword(),
+ loadTrustStore(config.getTrustStoreConfig(), config.getClientName()),
+ config.isTrustAll(),
+ config.getClientName());
+ tlsParams.setSSLSocketFactory(sslContext.getSocketFactory());
+
+ } else {
+ log.debug(
+ "No KeyStore for SSL Client Auth. found. Initializing SSLContext for: {} without authentication ... ",
+ config.getClientName());
+ tlsParams.setSSLSocketFactory(SSLContextBuilder.create().build().getSocketFactory());
+
+ }
+
+ http.setTlsClientParameters(tlsParams);
+ log.info("SSLContext initialized for client: " + config.getClientType());
+
+ } catch (EaafException | KeyManagementException | NoSuchAlgorithmException e) {
+ log.error("SSLContext initialization FAILED.", e);
+ throw new RuntimeException("SSLContext initialization FAILED.", e);
+
+ }
+ }
+ }
+
+ private Pair<KeyStore, Provider> loadTrustStore(KeyStoreConfiguration trustStoreConfig, String friendlyName)
+ throws EaafException {
+ if (trustStoreConfig != null) {
+ log.info("Build custom SSL truststore for: {}", friendlyName);
+ return keyStoreFactory.buildNewKeyStore(trustStoreConfig);
+
+ } else {
+ log.info("Use default SSL truststore for: {}", friendlyName);
+ return null;
+
+ }
+
+ }
+
+ protected void injectBindingProvider(BindingProvider bindingProvider, String clientType, String szrUrl,
+ boolean enableTraceLogging) {
+ final Map<String, Object> requestContext = bindingProvider.getRequestContext();
+ requestContext.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, szrUrl);
+
+ log.trace("Adding JAX-WS request/response trace handler to client: " + clientType);
+ List<Handler> handlerList = bindingProvider.getBinding().getHandlerChain();
+ if (handlerList == null) {
+ handlerList = new ArrayList<>();
+ bindingProvider.getBinding().setHandlerChain(handlerList);
+
+ }
+
+ // add logging handler to trace messages if required
+ if (enableTraceLogging) {
+ final LoggingHandler loggingHandler = new LoggingHandler();
+ handlerList.add(loggingHandler);
+
+ }
+ bindingProvider.getBinding().setHandlerChain(handlerList);
+ }
+}
diff --git a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/clients/ernp/ErnpRestClient.java b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/clients/ernp/ErnpRestClient.java
new file mode 100644
index 00000000..4c4e3d87
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/clients/ernp/ErnpRestClient.java
@@ -0,0 +1,857 @@
+package at.asitplus.eidas.specific.modules.auth.eidas.v2.clients.ernp;
+
+import java.io.IOException;
+import java.text.MessageFormat;
+import java.time.LocalDate;
+import java.time.OffsetDateTime;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import javax.annotation.Nonnull;
+import javax.annotation.PostConstruct;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.http.client.HttpClient;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.MediaType;
+import org.springframework.http.client.ClientHttpRequestFactory;
+import org.springframework.http.client.ClientHttpResponse;
+import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
+import org.springframework.http.converter.HttpMessageConverter;
+import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
+import org.springframework.lang.NonNull;
+import org.springframework.lang.Nullable;
+import org.springframework.util.Assert;
+import org.springframework.web.client.ResponseErrorHandler;
+import org.springframework.web.client.RestClientException;
+import org.springframework.web.client.RestTemplate;
+
+import com.fasterxml.jackson.annotation.JsonInclude.Include;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
+
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants;
+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.dao.SimpleEidasData.SimpleEidasDataBuilder;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.ernp.api.DefaultApi;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.ernp.invoker.ApiClient;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.ernp.model.Aendern;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.ernp.model.AendernResponse;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.ernp.model.Anlegen;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.ernp.model.AnlegenResponse;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.ernp.model.Eidas;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.ernp.model.PartialDate;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.ernp.model.Person;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.ernp.model.PersonAendern;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.ernp.model.PersonAnlegen;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.ernp.model.PersonSuchen;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.ernp.model.Personendaten;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.ernp.model.PersonendatenErgebnis;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.ernp.model.SuchEidas;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.ernp.model.Suchdaten;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.ernp.model.SuchenResponse;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.ernp.model.Suchoptionen;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.ernp.model.Suchoptionen.HistorischEnum;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.exception.EidasSAuthenticationException;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.exception.ErnpRestCommunicationException;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.exception.WorkflowException;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.utils.VersionHolder;
+import at.gv.bmi.namespace.zmr_su.base._20040201_.ServiceFault;
+import at.gv.bmi.namespace.zmr_su.zmr._20040201.EidasSuchdatenType;
+import at.gv.bmi.namespace.zmr_su.zmr._20040201.PersonSuchenRequest;
+import at.gv.egiz.eaaf.core.api.idp.IConfiguration;
+import at.gv.egiz.eaaf.core.exceptions.EaafAuthenticationException;
+import at.gv.egiz.eaaf.core.exceptions.EaafException;
+import at.gv.egiz.eaaf.core.impl.credential.EaafKeyStoreFactory;
+import at.gv.egiz.eaaf.core.impl.http.HttpClientConfiguration;
+import at.gv.egiz.eaaf.core.impl.http.HttpClientConfiguration.ClientAuthMode;
+import at.gv.egiz.eaaf.core.impl.http.IHttpClientFactory;
+import at.gv.egiz.eaaf.core.impl.utils.TransactionIdUtils;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Getter;
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * Implements an ERnP client that uses REST API for communication.
+ *
+ * @author tlenz
+ *
+ */
+@Slf4j
+public class ErnpRestClient implements IErnpClient {
+
+ private static final String ERROR_MATCHING_11 = "module.eidasauth.matching.11";
+ //private static final String ERROR_MATCHING_12 = "module.eidasauth.matching.12";
+ private static final String ERROR_MATCHING_99 = "module.eidasauth.matching.99";
+
+ private static final String LOGMSG_MISSING_CONFIG = "Missing configuration with key: {0}";
+ private static final String LOGMSG_ERNP_ERROR =
+ "Receive an error from ERnP during '{}' operation with msg: {}";
+ private static final String LOGMSG_ERNP_RESP_PROCESS =
+ "Proces ERnP response during '{}' operation failes with msg: {}";
+
+ //private static final String LOGMSG_ERNP_REST_ERROR =
+ // "ERnP anwser for transaction: {0} with code: {1} and message: {2}";
+
+ private static final String PROCESS_SEARCH_PERSONAL_IDENTIFIER =
+ "Searching " + Constants.eIDAS_ATTR_PERSONALIDENTIFIER;
+ private static final String PROCESS_SEARCH_MDS_ONLY = "Searching with MDS only";
+ private static final String PROCESS_SEARCH_COUNTRY_SPECIFIC = "Searching {0} specific";
+
+ private static final String PROCESS_KITT_GENERAL = "KITT general-processing";
+ private static final String PROCESS_KITT_IDENITIES_GET = "KITT get-latest-version";
+ private static final String PROCESS_KITT_IDENITIES_UPDATE = "KITT update dataset";
+ private static final String PROCESS_ADD_IDENITY = "Add new person";
+
+ private static final String FRIENDLYNAME_HTTP_CLIENT = "ERnP Client";
+
+ // HTTP header-names from ERnP response
+ private static final String ERNP_RESPONSE_HEADER_SERVER_ID = "Server-Request-Id";
+
+
+ @Autowired
+ IConfiguration basicConfig;
+ @Autowired
+ EaafKeyStoreFactory keyStoreFactory;
+ @Autowired
+ IHttpClientFactory httpClientFactory;
+ @Autowired
+ VersionHolder versionHolder;
+
+ private DefaultApi ernpClient;
+
+ @Override
+ public ErnpRegisterResult searchWithPersonIdentifier(String personIdentifier, String citizenCountryCode)
+ throws EidasSAuthenticationException {
+ try {
+ // build generic request metadata
+ final GenericRequestParams generic = buildGenericRequestParameters("stepId");
+
+ // build search request
+ final SuchEidas eidasInfos = new SuchEidas();
+ eidasInfos.setArt(Constants.eIDAS_ATTRURN_PERSONALIDENTIFIER);
+ eidasInfos.setWert(personIdentifier);
+ eidasInfos.setStaatscode2(citizenCountryCode);
+
+ final PersonSuchen personSuchen = new PersonSuchen();
+ personSuchen.setSuchoptionen(generateSearchParameters());
+ personSuchen.setBegruendung(PROCESS_SEARCH_PERSONAL_IDENTIFIER);
+ final Suchdaten searchInfos = new Suchdaten();
+ searchInfos.setEidas(Arrays.asList(eidasInfos));
+ personSuchen.setSuchdaten(searchInfos);
+
+ // request ERnP
+ log.trace("Requesting ERnP for '{}' operation", PROCESS_SEARCH_PERSONAL_IDENTIFIER);
+ final SuchenResponse resp = ernpClient.suchen(generic.getClientBehkz(), generic.clientName,
+ generic.getClientRequestTime(), generic.getClientRequestId(), personSuchen);
+
+ // parse ZMR response
+ return processErnpResponse(resp, citizenCountryCode, true, PROCESS_SEARCH_PERSONAL_IDENTIFIER);
+
+ } catch (RestClientException e) {
+ log.warn(LOGMSG_ERNP_ERROR, PROCESS_SEARCH_PERSONAL_IDENTIFIER, e.getMessage());
+ throw new EidasSAuthenticationException(ERROR_MATCHING_11, new Object[] { e.getMessage() }, e);
+
+ } catch (final EidasSAuthenticationException e) {
+ throw e;
+
+ } catch (final Exception e) {
+ log.warn(LOGMSG_ERNP_RESP_PROCESS, PROCESS_SEARCH_PERSONAL_IDENTIFIER, e.getMessage());
+ throw new EidasSAuthenticationException(ERROR_MATCHING_99, new Object[] { e.getMessage() }, e);
+ }
+
+ }
+
+ @Override
+ public ErnpRegisterResult searchWithMds(String givenName, String familyName, String dateOfBirth,
+ String citizenCountryCode) throws EidasSAuthenticationException {
+ try {
+ // build generic request metadata
+ final GenericRequestParams generic = buildGenericRequestParameters("stepMDS");
+
+ // build search request
+ final Suchdaten searchInfos = new Suchdaten();
+ searchInfos.setFamilienname(familyName);
+ searchInfos.setVorname(givenName);
+ searchInfos.setGeburtsdatum(buildErnpBirthday(dateOfBirth));
+
+ final PersonSuchen personSuchen = new PersonSuchen();
+ personSuchen.setSuchoptionen(generateSearchParameters());
+ personSuchen.setBegruendung(PROCESS_SEARCH_MDS_ONLY);
+ personSuchen.setSuchdaten(searchInfos);
+
+ // request ERnP
+ log.trace("Requesting ERnP for '{}' operation", PROCESS_SEARCH_MDS_ONLY);
+ final SuchenResponse resp = ernpClient.suchen(generic.getClientBehkz(), generic.clientName,
+ generic.getClientRequestTime(), generic.getClientRequestId(), personSuchen);
+
+ // parse ZMR response
+ return processErnpResponse(resp, citizenCountryCode, false, PROCESS_SEARCH_MDS_ONLY);
+
+ } catch (RestClientException e) {
+ log.warn(LOGMSG_ERNP_ERROR, PROCESS_SEARCH_MDS_ONLY, e.getMessage());
+ throw new EidasSAuthenticationException(ERROR_MATCHING_11, new Object[] { e.getMessage() }, e);
+
+ } catch (final EidasSAuthenticationException e) {
+ throw e;
+
+ } catch (final Exception e) {
+ log.warn(LOGMSG_ERNP_RESP_PROCESS, PROCESS_SEARCH_MDS_ONLY, e.getMessage());
+ throw new EidasSAuthenticationException(ERROR_MATCHING_99, new Object[] { e.getMessage() }, e);
+ }
+ }
+
+ @Override
+ public ErnpRegisterResult searchCountrySpecific(PersonSuchenRequest personSearchDao,
+ String citizenCountryCode) throws EidasSAuthenticationException {
+ String countrySearchMsg = MessageFormat.format(PROCESS_SEARCH_COUNTRY_SPECIFIC, citizenCountryCode);
+
+ try {
+ // build generic request metadata
+ final GenericRequestParams generic = buildGenericRequestParameters("stepCC");
+
+ // build search request
+ final PersonSuchen personSuchen = new PersonSuchen();
+ personSuchen.setSuchoptionen(generateSearchParameters());
+ personSuchen.setBegruendung(countrySearchMsg);
+ personSuchen.setSuchdaten(mapCountrySpecificSearchData(personSearchDao));
+
+ // request ERnP
+ log.trace("Requesting ERnP for '{}' operation", countrySearchMsg);
+ final SuchenResponse resp = ernpClient.suchen(generic.getClientBehkz(), generic.clientName,
+ generic.getClientRequestTime(), generic.getClientRequestId(), personSuchen);
+
+ // parse ZMR response
+ return processErnpResponse(resp, citizenCountryCode, true, countrySearchMsg);
+
+ } catch (RestClientException e) {
+ log.warn(LOGMSG_ERNP_ERROR, countrySearchMsg, e.getMessage());
+ throw new EidasSAuthenticationException(ERROR_MATCHING_11, new Object[] { e.getMessage() }, e);
+
+ } catch (final EidasSAuthenticationException e) {
+ throw e;
+
+ } catch (final Exception e) {
+ log.warn(LOGMSG_ERNP_RESP_PROCESS, countrySearchMsg, e.getMessage());
+ throw new EidasSAuthenticationException(ERROR_MATCHING_99, new Object[] { e.getMessage() }, e);
+
+ }
+ }
+
+ @Override
+ public ErnpRegisterResult update(RegisterResult registerResult, SimpleEidasData eidData)
+ throws EidasSAuthenticationException {
+ try {
+ //search person with register result, because update needs information from search response
+ Person ernpPersonToKitt = searchPersonForUpdate(registerResult);
+
+ // select elements that have to be updated
+ Collection<? extends Eidas> eidasDocumentToAdd =
+ selectEidasDocumentsToAdd(ernpPersonToKitt, eidData);
+ SimpleEidasData mdsToUpdate = selectMdsInformationToUpdate(ernpPersonToKitt, eidData);
+
+ if (eidasDocumentToAdd.isEmpty() && mdsToUpdate == null) {
+ log.info("Find no eIDAS document or MDS for update during: {}. Nothing todo on ERnP side",
+ PROCESS_KITT_GENERAL);
+ return new ErnpRegisterResult(Arrays.asList(registerResult));
+
+ } else {
+ log.info("Find #{} eIDAS documents for update during: {}", eidasDocumentToAdd.size(), PROCESS_KITT_GENERAL);
+
+ // update entry based on selected update info's and results from search response
+ return updatePersonInErnp(ernpPersonToKitt, eidasDocumentToAdd, mdsToUpdate, eidData.getCitizenCountryCode());
+
+ }
+
+ } catch (RestClientException e) {
+ log.warn(LOGMSG_ERNP_ERROR, PROCESS_KITT_GENERAL, e.getMessage());
+ throw new EidasSAuthenticationException(ERROR_MATCHING_11, new Object[] { e.getMessage() }, e);
+
+ } catch (final EidasSAuthenticationException e) {
+ throw e;
+
+ } catch (final Exception e) {
+ log.warn(LOGMSG_ERNP_RESP_PROCESS, PROCESS_KITT_GENERAL, e.getMessage());
+ throw new EidasSAuthenticationException(ERROR_MATCHING_99, new Object[] { e.getMessage() }, e);
+
+ }
+ }
+
+ @Override
+ public ErnpRegisterResult add(SimpleEidasData eidData) throws EidasSAuthenticationException {
+ try {
+ // build generic request metadata
+ final GenericRequestParams generic = buildGenericRequestParameters("stepNew");
+
+ // build update request
+ PersonAnlegen ernpReq = new PersonAnlegen();
+ ernpReq.setBegruendung(PROCESS_ADD_IDENITY);
+
+ // inject person data
+ Personendaten person = new Personendaten();
+ person.setFamilienname(eidData.getFamilyName());
+ person.setVorname(eidData.getGivenName());
+ person.setGeburtsdatum(buildErnpBirthday(eidData.getDateOfBirth()));
+ ernpReq.setPersonendaten(person);
+
+ buildNewEidasDocumens(ernpReq, eidData);
+
+ // request ERnP
+ log.trace("Requesting ERnP for '{}' operation", PROCESS_ADD_IDENITY);
+ AnlegenResponse ernpResp = ernpClient.anlegen(generic.getClientBehkz(), generic.clientName,
+ generic.getClientRequestTime(), generic.getClientRequestId(), ernpReq);
+ log.trace("Receive response from ERnP for '{}' operation", PROCESS_ADD_IDENITY);
+
+ return new ErnpRegisterResult(Arrays.asList(
+ mapErnpResponseToRegisterResult(ernpResp.getPerson(), eidData.getCitizenCountryCode())));
+
+ } catch (RestClientException e) {
+ log.warn(LOGMSG_ERNP_ERROR, PROCESS_ADD_IDENITY, e.getMessage());
+ throw new EidasSAuthenticationException(ERROR_MATCHING_11, new Object[] { e.getMessage() }, e);
+
+ } catch (final Exception e) {
+ log.warn(LOGMSG_ERNP_RESP_PROCESS, PROCESS_ADD_IDENITY, e.getMessage());
+ throw new EidasSAuthenticationException(ERROR_MATCHING_99, new Object[] { e.getMessage() }, e);
+
+ }
+ }
+
+ @Override
+ public ErnpRegisterResult searchWithResidenceData(String givenName, String familyName, String dateOfBirth,
+ String zipcode, String city, String street) {
+ log.warn("Matching with residence information is prohibited by design! This requests will be ignored");
+ return new ErnpRegisterResult(Collections.emptyList());
+
+ }
+
+ @PostConstruct
+ private void initialize() throws EaafException {
+ // validate additional Ernp communication parameters
+ valdiateAdditionalConfigParameters();
+
+ // set-up the Ernp client
+ final ApiClient baseClient = new ApiClient(buildRestClient());
+ baseClient.setBasePath(basicConfig.getBasicConfiguration(
+ Constants.CONIG_PROPS_EIDAS_ERNPCLIENT_ENDPOINT));
+ ernpClient = new DefaultApi(baseClient);
+
+ }
+
+ private void valdiateAdditionalConfigParameters() {
+ checkConfigurationValue(Constants.CONIG_PROPS_EIDAS_ERNPCLIENT_ENDPOINT);
+ checkConfigurationValue(Constants.CONIG_PROPS_EIDAS_ERNPCLIENT_REQ_ORGANIZATION_NR);
+
+ }
+
+ private void checkConfigurationValue(String key) {
+ if (StringUtils.isEmpty(basicConfig.getBasicConfiguration(key))) {
+ throw new RuntimeException(MessageFormat.format(LOGMSG_MISSING_CONFIG, key));
+
+ }
+ }
+
+ private Suchoptionen generateSearchParameters() {
+ final Suchoptionen options = new Suchoptionen();
+ options.setZmr(false);
+ options.setHistorisch(HistorischEnum.AKTUELLUNDHISTORISCH);
+ options.setSucheMitNamensteilen(false);
+ options.setSuchwizard(false);
+ return options;
+
+ }
+
+ @Nonnull
+ private ErnpRegisterResult processErnpResponse(SuchenResponse resp, @Nonnull String citizenCountryCode,
+ boolean forceSinglePersonMatch, @Nonnull String processStepFiendlyname)
+ throws EaafAuthenticationException {
+ if (resp.getPerson() == null
+ || resp.getPerson().isEmpty()) {
+ log.debug("ERnP result contains NO 'Person' or 'Person' is empty");
+ return new ErnpRegisterResult(Collections.emptyList());
+
+ } else {
+ log.debug("Get #{} person results from '{}' operation",
+ resp.getPerson().size(), processStepFiendlyname);
+
+ if (forceSinglePersonMatch) {
+ return new ErnpRegisterResult(processSearchPersonResponseSingleResult(
+ resp.getPerson(), citizenCountryCode, processStepFiendlyname));
+
+ } else {
+ return new ErnpRegisterResult(processSearchPersonResponse(
+ resp.getPerson(), citizenCountryCode));
+
+ }
+ }
+ }
+
+ @Nonnull
+ private List<RegisterResult> processSearchPersonResponse(
+ @Nonnull List<Person> list,
+ @Nonnull String citizenCountryCode) throws EaafAuthenticationException {
+ return list.stream()
+ .map(el -> mapErnpResponseToRegisterResult(el, citizenCountryCode))
+ .filter(Objects::nonNull)
+ .collect(Collectors.toList());
+
+ }
+
+ @NonNull
+ private List<RegisterResult> processSearchPersonResponseSingleResult(
+ @Nonnull List<Person> persons,
+ @Nonnull String citizenCountryCode, String processStepFiendlyname) throws EaafAuthenticationException {
+ if (persons.size() > 1) {
+ log.error("Find more-than-one ERnP entry with search criteria that has to be unique");
+ throw new WorkflowException(processStepFiendlyname,
+ "Find more-than-one ERnP entry with search criteria that has to be unique", true);
+
+ } else {
+ return Arrays.asList(mapErnpResponseToRegisterResult(persons.get(0), citizenCountryCode));
+
+ }
+ }
+
+ @Nonnull
+ private RegisterResult mapErnpResponseToRegisterResult(@Nonnull Person person,
+ @Nonnull String citizenCountryCode) {
+ // build result
+ return RegisterResult.builder()
+ .pseudonym(selectAllEidasDocument(person, citizenCountryCode,
+ Constants.eIDAS_ATTRURN_PERSONALIDENTIFIER))
+ .familyName(person.getPersonendaten().getFamilienname())
+ .givenName(person.getPersonendaten().getVorname())
+ .dateOfBirth(getTextualBirthday(person.getPersonendaten().getGeburtsdatum()))
+ .bpk(person.getPersonendaten().getBpkZp())
+ .placeOfBirth(selectSingleEidasDocument(person, citizenCountryCode,
+ Constants.eIDAS_ATTRURN_PLACEOFBIRTH))
+ .birthName(selectSingleEidasDocument(person, citizenCountryCode,
+ Constants.eIDAS_ATTRURN_BIRTHNAME))
+ .build();
+
+ }
+
+ private Suchdaten mapCountrySpecificSearchData(PersonSuchenRequest personSearchDao) {
+ final Suchdaten searchInfos = new Suchdaten();
+ searchInfos.setFamilienname(personSearchDao.getNatuerlichePerson().getPersonenName().getFamilienname());
+ searchInfos.setVorname(personSearchDao.getNatuerlichePerson().getPersonenName().getVorname());
+ searchInfos.setGeburtsdatum(buildErnpBirthday(personSearchDao.getNatuerlichePerson().getGeburtsdatum()));
+
+ // map all eIDAS documents into ERnP format
+ searchInfos.setEidas(personSearchDao.getEidasSuchdaten().stream()
+ .map(el -> buildErnpEidasDocument(el))
+ .collect(Collectors.toList()));
+
+ return searchInfos;
+
+ }
+
+ private ErnpRegisterResult updatePersonInErnp(Person ernpPersonToKitt,
+ Collection<? extends Eidas> eidasDocumentToAdd, SimpleEidasData mdsToUpdate, String citizenCountryCode)
+ throws ServiceFault {
+ // build generic request metadata
+ final GenericRequestParams generic = buildGenericRequestParameters("stepKittUpdate");
+
+ // build update request
+ PersonAendern ernpReq = new PersonAendern();
+ ernpReq.setBegruendung(PROCESS_KITT_IDENITIES_UPDATE);
+
+ // set reference elements for person update
+ ernpReq.setEntityId(ernpPersonToKitt.getEntityId());
+ ernpReq.setVersion(ernpPersonToKitt.getVersion());
+
+ // add new eIDAS attributes
+ if (!eidasDocumentToAdd.isEmpty()) {
+ log.debug("Find eIDAS Documents to update. Injection update entries into ERnP request ... ");
+ ernpReq.setAnlegen(new Anlegen());
+ eidasDocumentToAdd.stream().forEach(el -> ernpReq.getAnlegen().addEidasItem(el));
+
+ }
+
+ // update MDS if required
+ if (mdsToUpdate != null) {
+ log.debug("Find MDS to update. Injection update entries into ERnP request ... ");
+ ernpReq.setAendern(generateMdsChangeRequest(ernpPersonToKitt, mdsToUpdate));
+
+ }
+
+ // request ERnP
+ log.trace("Requesting ERnP for '{}' operation", PROCESS_KITT_IDENITIES_UPDATE);
+ AendernResponse ernpResp = ernpClient.aendern(generic.getClientBehkz(), generic.clientName,
+ generic.getClientRequestTime(), generic.getClientRequestId(), ernpReq);
+ log.trace("Receive response from ERnP for '{}' operation", PROCESS_KITT_IDENITIES_UPDATE);
+
+ return new ErnpRegisterResult(Arrays.asList(
+ mapErnpResponseToRegisterResult(ernpResp.getPerson(), citizenCountryCode)));
+
+ }
+
+ private Collection<? extends Eidas> selectEidasDocumentsToAdd(
+ Person ernpPersonToKitt, SimpleEidasData eidData) {
+
+ //TODO: maybe we should re-factor SimpleEidasData to a generic data-model to facilitate arbitrary eIDAS attributes
+ Set<Eidas> result = new HashSet<>();
+ addEidasDocumentIfNotAvailable(result, ernpPersonToKitt, eidData.getCitizenCountryCode(),
+ Constants.eIDAS_ATTRURN_PERSONALIDENTIFIER, eidData.getPseudonym(), true);
+ addEidasDocumentIfNotAvailable(result, ernpPersonToKitt, eidData.getCitizenCountryCode(),
+ Constants.eIDAS_ATTRURN_PLACEOFBIRTH, eidData.getPlaceOfBirth(), false);
+ addEidasDocumentIfNotAvailable(result, ernpPersonToKitt, eidData.getCitizenCountryCode(),
+ Constants.eIDAS_ATTRURN_BIRTHNAME, eidData.getBirthName(), false);
+
+ return result;
+
+ }
+
+ private void addEidasDocumentIfNotAvailable(Set<Eidas> result,
+ Person ernpPersonToKitt, String citizenCountryCode,
+ String attrName, String attrValue, boolean allowMoreThanOneEntry) {
+
+ if (StringUtils.isEmpty(attrValue)) {
+ log.trace("No eIDAS document: {}. Nothing todo for KITT process ... ", attrName);
+ return;
+
+ }
+
+ // check if eIDAS attribute is already includes an eIDAS-Document
+ boolean alreadyExist = ernpPersonToKitt.getEidas().stream()
+ .filter(el -> el.getWert().equals(attrValue)
+ && el.getArt().equals(attrName)
+ && el.getStaatscode2().equals(citizenCountryCode))
+ .findAny()
+ .isPresent();
+
+ if (!alreadyExist) {
+ // check eIDAS documents already contains a document with this pair of country-code and attribute-name
+ Optional<Eidas> oneDocWithNameExists = ernpPersonToKitt.getEidas().stream()
+ .filter(el -> el.getStaatscode2().equals(citizenCountryCode)
+ && el.getArt().equals(attrName))
+ .findAny();
+
+ if (!allowMoreThanOneEntry && oneDocWithNameExists.isPresent()
+ && !oneDocWithNameExists.get().getWert().equals(attrValue)) {
+ log.warn("eIDAS document: {} already exists for country: {} but attribute-value does not match. "
+ + "Skip update process because no multi-value allowed for this ... ",
+ attrName, citizenCountryCode);
+
+ } else {
+
+ Eidas eidasDocToAdd = new Eidas();
+ eidasDocToAdd.setStaatscode2(citizenCountryCode);
+ eidasDocToAdd.setArt(attrName);
+ eidasDocToAdd.setWert(attrValue);
+ log.info("Add eIDAS document: {} for country: {} to ERnP person", attrName, citizenCountryCode);
+ result.add(eidasDocToAdd);
+
+ }
+
+ } else {
+ log.debug("eIDAS document: {} already exists for country: {}. Skip update process for this ... ",
+ attrName, citizenCountryCode);
+
+ }
+ }
+
+ private Person searchPersonForUpdate(RegisterResult registerResult) throws WorkflowException {
+ // build generic request metadata
+ final GenericRequestParams generic = buildGenericRequestParameters("stepKittSearch");
+
+ // build search request
+ final Suchdaten searchInfos = new Suchdaten();
+ searchInfos.setBpkZp(registerResult.getBpk());
+ searchInfos.setFamilienname(registerResult.getFamilyName());
+ searchInfos.setVorname(registerResult.getGivenName());
+ searchInfos.setGeburtsdatum(buildErnpBirthday(registerResult.getDateOfBirth()));
+
+ final PersonSuchen personSuchen = new PersonSuchen();
+ personSuchen.setSuchoptionen(generateSearchParameters());
+ personSuchen.setBegruendung(PROCESS_KITT_IDENITIES_GET);
+ personSuchen.setSuchdaten(searchInfos);
+
+ // request ERnP
+ log.trace("Requesting ERnP for '{}' operation", PROCESS_KITT_IDENITIES_GET);
+ final SuchenResponse resp = ernpClient.suchen(generic.getClientBehkz(), generic.clientName,
+ generic.getClientRequestTime(), generic.getClientRequestId(), personSuchen);
+
+ // perform shot validation of ERnP response
+ if (resp.getPerson() == null || resp.getPerson().size() != 1) {
+ log.error("ERnP result contains NO 'Person' or 'Person' is empty");
+ throw new WorkflowException(PROCESS_KITT_IDENITIES_GET,
+ "Find NO data-set with already matchted eID during ERnP KITT process");
+
+ } else {
+ log.debug("Find person for '{}' operation", PROCESS_KITT_IDENITIES_GET);
+ return resp.getPerson().get(0);
+
+ }
+ }
+
+ private void buildNewEidasDocumens(PersonAnlegen ernpReq, SimpleEidasData eidData) {
+ ernpReq.addEidasItem(buildNewEidasDocument(eidData.getCitizenCountryCode(),
+ Constants.eIDAS_ATTRURN_PERSONALIDENTIFIER, eidData.getPseudonym()));
+
+ if (StringUtils.isNotEmpty(eidData.getPlaceOfBirth())) {
+ ernpReq.addEidasItem(buildNewEidasDocument(eidData.getCitizenCountryCode(),
+ Constants.eIDAS_ATTRURN_PLACEOFBIRTH, eidData.getPlaceOfBirth()));
+
+ }
+
+ if (StringUtils.isNotEmpty(eidData.getBirthName())) {
+ ernpReq.addEidasItem(buildNewEidasDocument(eidData.getCitizenCountryCode(),
+ Constants.eIDAS_ATTRURN_BIRTHNAME, eidData.getBirthName()));
+
+ }
+ }
+
+ private Eidas buildNewEidasDocument(String citizenCountryCode, String eidasAttrName,
+ String eidasAddrValue) {
+ Eidas el = new Eidas();
+ el.setArt(eidasAttrName);
+ el.setWert(eidasAddrValue);
+ el.setStaatscode2(citizenCountryCode);
+ return el;
+ }
+
+ private SimpleEidasData selectMdsInformationToUpdate(Person ernpPersonToKitt, SimpleEidasData eidData) {
+ PersonendatenErgebnis person = ernpPersonToKitt.getPersonendaten();
+ SimpleEidasDataBuilder builder = SimpleEidasData.builder()
+ .givenName(eidData.getGivenName())
+ .familyName(eidData.getFamilyName())
+ .dateOfBirth(eidData.getDateOfBirth());
+
+ boolean findMatch = person.getVorname().equals(eidData.getGivenName())
+ && person.getFamilienname().equals(eidData.getFamilyName())
+ && getTextualBirthday(person.getGeburtsdatum()).equals(eidData.getDateOfBirth());
+ return findMatch ? null : builder.build();
+
+ }
+
+ private Aendern generateMdsChangeRequest(Person ernpPersonToKitt, SimpleEidasData mdsToUpdate) {
+ Aendern el = new Aendern();
+ Personendaten person = new Personendaten();
+ person.setEntityId(ernpPersonToKitt.getPersonendaten().getEntityId());
+ el.setPersonendaten(person);
+ person.setFamilienname(mdsToUpdate.getFamilyName());
+ person.setVorname(mdsToUpdate.getGivenName());
+ person.setGeburtsdatum(buildErnpBirthday(mdsToUpdate.getDateOfBirth()));
+ return el;
+
+ }
+
+ /**
+ * Map an AT specific Date String 'yyyy-MM-dd' to ERnP birthday representation.
+ *
+ * <p>
+ * <b>Info:</b> {@link LocalDate} can not be used, because '1940-00-00' is also
+ * a valid birthday.
+ * </p>
+ *
+ * @param dateOfBirth in 'yyyy-MM-dd' format
+ * @return ERnP birthday representation
+ */
+ private PartialDate buildErnpBirthday(String dateOfBirth) {
+ String[] elements = dateOfBirth.split("-");
+ Assert.isTrue(elements.length == 3, "Find invalid dateOfBirth element: " + dateOfBirth);
+
+ PartialDate result = new PartialDate();
+ result.setJahr(Integer.valueOf(elements[0]));
+ result.setMonat(Integer.valueOf(elements[1]));
+ result.setTag(Integer.valueOf(elements[2]));
+ return result;
+
+ }
+
+ /**
+ * Map eIDAS search-data from ZMR model into ERnP model.
+ *
+ * @param daten eIDAS document as ZMR model
+ * @return the same eIDAS document as an ERnP model
+ */
+ private SuchEidas buildErnpEidasDocument(EidasSuchdatenType daten) {
+ return new SuchEidas()
+ .art(daten.getEidasArt())
+ .wert(daten.getEidasWert())
+ .staatscode2(daten.getStaatscode2());
+ }
+
+
+ /**
+ * Build AT specific Date String 'yyyy-MM-dd' from ERnP birthday representation.
+ *
+ * <p>
+ * <b>Info:</b> {@link LocalDate} can not be used, because '1940-00-00' is also
+ * a valid birthday on ERnP site.
+ * </p>
+ *
+ * @param geburtsdatum ERnP birthday representation
+ * @return birthday in 'yyyy-MM-dd' format
+ */
+ private String getTextualBirthday(PartialDate geburtsdatum) {
+ return MessageFormat.format("{0}-{1}-{2}",
+ String.valueOf(geburtsdatum.getJahr()),
+ String.format("%02d", geburtsdatum.getMonat()),
+ String.format("%02d", geburtsdatum.getTag()));
+
+ }
+
+
+ /**
+ * Get all eIDAS document with the specified country code and document type.
+ *
+ * @param person Person information from ERnP
+ * @param citizenCountryCode Country code of the eIDAS attribute
+ * @param eidasAttrurnPersonalidentifier eIDAS attribute identifier
+ * @return {@link List} of eIDAS attribute values or an empty list if's not
+ * found
+ */
+ @NonNull
+ private List<String> selectAllEidasDocument(Person person, String citizenCountryCode,
+ String eidasAttrurnPersonalidentifier) {
+ if (person.getEidas() != null) {
+ return person.getEidas().stream()
+ .filter(el -> eidasAttrurnPersonalidentifier.equals(el.getArt())
+ && el.getStaatscode2().equals(citizenCountryCode))
+ .map(el -> el.getWert())
+ .collect(Collectors.toList());
+
+ } else {
+ return Collections.emptyList();
+
+ }
+
+ }
+
+ /**
+ * Get the first eIDAS document with the specified country code and document
+ * type.
+ *
+ * @param person Person information from ERnP
+ * @param citizenCountryCode Country code of the eIDAS attribute
+ * @param eidasAttrurnPersonalidentifier eIDAS attribute identifier
+ * @return Value of this eIDAS attribute or <code>null</code> if's not found
+ */
+ @Nullable
+ private String selectSingleEidasDocument(Person person, String citizenCountryCode,
+ String eidasAttrurnPersonalidentifier) {
+ if (person.getEidas() != null) {
+ return person.getEidas().stream()
+ .filter(el -> eidasAttrurnPersonalidentifier.equals(el.getArt())
+ && el.getStaatscode2().equals(citizenCountryCode))
+ .findFirst()
+ .map(el -> el.getWert())
+ .orElse(null);
+
+ } else {
+ return null;
+
+ }
+ }
+
+ private RestTemplate buildRestClient() throws EaafException {
+ log.debug("Building REST-Client for ERnP communication ... ");
+ final HttpClient httpClient = httpClientFactory.getHttpClient(buildHttpClientConfiguration());
+ final ClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpClient);
+ final RestTemplate springClient = new RestTemplate(requestFactory);
+ springClient.setErrorHandler(buildErrorHandler());
+ springClient.getMessageConverters().add(0, buildCustomJacksonObjectMapper());
+ return springClient;
+
+ }
+
+ private HttpMessageConverter<?> buildCustomJacksonObjectMapper() {
+ final MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
+ converter.setSupportedMediaTypes(Collections.singletonList(MediaType.APPLICATION_JSON));
+ converter.getObjectMapper().setSerializationInclusion(Include.NON_NULL);
+
+ converter.getObjectMapper().registerModule(new JavaTimeModule());
+ converter.getObjectMapper().configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
+ return converter;
+
+ }
+
+ @Nonnull
+ private ResponseErrorHandler buildErrorHandler() {
+ return new ResponseErrorHandler() {
+
+ @Override
+ public boolean hasError(ClientHttpResponse response) throws IOException {
+ return response.getStatusCode().is4xxClientError()
+ || response.getStatusCode().is5xxServerError();
+
+ }
+
+ @Override
+ public void handleError(ClientHttpResponse response) throws IOException {
+ // TODO: opimize errorHandling based on response info's from real ERnP
+
+ List<String> serverId = response.getHeaders().getOrEmpty(ERNP_RESPONSE_HEADER_SERVER_ID);
+ log.warn("Receive http-error: {} from ERnP with serverTransactionId {}",
+ response.getRawStatusCode(), serverId.isEmpty() ? "'not set'" : serverId.get(0));
+ log.warn(" Full ERnP response-body: {}", IOUtils.toString(response.getBody(), "UTF-8"));
+ throw new ErnpRestCommunicationException(response.getRawStatusCode());
+
+ }
+ };
+ }
+
+ @Nonnull
+ private HttpClientConfiguration buildHttpClientConfiguration() throws EaafException {
+ final HttpClientConfiguration config = new HttpClientConfiguration(FRIENDLYNAME_HTTP_CLIENT);
+ config.setAuthMode(ClientAuthMode.SSL.getMode());
+
+ // Set keystore configuration
+ config.buildKeyStoreConfig(
+ basicConfig.getBasicConfiguration(Constants.CONIG_PROPS_EIDAS_COMMON_CLIENT_SSL_KEYSTORE_TYPE),
+ basicConfig.getBasicConfiguration(Constants.CONIG_PROPS_EIDAS_COMMON_CLIENT_SSL_KEYSTORE_PATH),
+ basicConfig.getBasicConfiguration(Constants.CONIG_PROPS_EIDAS_COMMON_CLIENT_SSL_KEYSTORE_PASSWORD),
+ basicConfig.getBasicConfiguration(Constants.CONIG_PROPS_EIDAS_COMMON_CLIENT_SSL_KEYSTORE_NAME));
+
+ // Set key information
+ config.setSslKeyAlias(
+ basicConfig.getBasicConfiguration(Constants.CONIG_PROPS_EIDAS_COMMON_CLIENT_SSL_KEYS_ALIAS));
+ config.setSslKeyPassword(
+ basicConfig.getBasicConfiguration(Constants.CONIG_PROPS_EIDAS_COMMON_CLIENT_SSL_KEY_PASSWORD));
+
+ // Set connection parameters
+ // TODO: update EAAF-components to allow custom HTTP Connection-Timeouts
+
+ return config;
+ }
+
+ @AllArgsConstructor
+ @Getter
+ public static class ErnpRegisterResult {
+ private final List<RegisterResult> personResult;
+
+ }
+
+ private GenericRequestParams buildGenericRequestParameters(String operationIdentifier) {
+ return GenericRequestParams.builder()
+ .clientBehkz(basicConfig.getBasicConfiguration(
+ Constants.CONIG_PROPS_EIDAS_ZMRCLIENT_REQ_ORGANIZATION_NR))
+ .clientName(MessageFormat.format(Constants.CLIENT_INFO, versionHolder.getVersion()))
+ .clientRequestTime(OffsetDateTime.now())
+ .clientRequestId(TransactionIdUtils.getTransactionId() + "_" + operationIdentifier)
+ .build();
+
+ }
+
+ @Builder
+ @Getter
+ private static class GenericRequestParams {
+ String clientBehkz;
+ String clientName;
+ OffsetDateTime clientRequestTime;
+ String clientRequestId;
+
+ }
+
+}
diff --git a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/clients/ernp/IErnpClient.java b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/clients/ernp/IErnpClient.java
new file mode 100644
index 00000000..7a957531
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/clients/ernp/IErnpClient.java
@@ -0,0 +1,114 @@
+/*
+ * 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.clients.ernp;
+
+import javax.annotation.Nonnull;
+
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.clients.ernp.ErnpRestClient.ErnpRegisterResult;
+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.exception.EidasSAuthenticationException;
+import at.gv.bmi.namespace.zmr_su.zmr._20040201.PersonSuchenRequest;
+
+public interface IErnpClient {
+
+ /**
+ * Search person based on eIDAS personal identifier.
+ *
+ * @param personIdentifier Full eIDAS personal identifier with prefix
+ * @param citizenCountryCode CountryCode of the eIDAS proxy-service
+ * @return Search result but never <code>null</code>
+ * @throws EidasSAuthenticationException In case of a communication error
+ */
+ @Nonnull
+ ErnpRegisterResult searchWithPersonIdentifier(@Nonnull String personIdentifier,
+ @Nonnull String citizenCountryCode) throws EidasSAuthenticationException;
+
+ /**
+ * Search person based on eIDSA MDS information.
+ *
+ * @param givenName eIDAS given name
+ * @param familyName eIDAS principle name
+ * @param dateOfBirth eIDAS date-of-birth
+ * @param citizenCountryCode CountryCode of the eIDAS proxy-service
+ * @return Search result but never <code>null</code>
+ * @throws EidasSAuthenticationException In case of a communication error
+ */
+ @Nonnull
+ ErnpRegisterResult searchWithMds(@Nonnull String givenName, @Nonnull String familyName,
+ @Nonnull String dateOfBirth, @Nonnull String citizenCountryCode)
+ throws EidasSAuthenticationException;
+
+ /**
+ * Search person based on country-specific natural person set.
+ *
+ * @param personSearchDao Specific set of natural person informations.
+ * @param citizenCountryCode CountryCode of the eIDAS proxy-service
+ * @return Search result but never <code>null</code>
+ * @throws EidasSAuthenticationException In case of a communication error
+ */
+ @Nonnull
+ ErnpRegisterResult searchCountrySpecific(@Nonnull PersonSuchenRequest personSearchDao,
+ @Nonnull String citizenCountryCode) throws EidasSAuthenticationException;
+
+ /**
+ * Update ERnP entry to KITT existing ERnP identity with this eIDAS authentication.
+ *
+ * @param registerResult Already matched eIDAS identity that should be KITT
+ * @param eidData eIDAS eID information from current authentication process
+ * @return Update result but never <code>null</code>
+ * @throws EidasSAuthenticationException In case of a communication error
+ */
+ @Nonnull
+ ErnpRegisterResult update(RegisterResult registerResult, SimpleEidasData eidData)
+ throws EidasSAuthenticationException;
+
+
+ /**
+ * Add new entry into ERnP by using identity from this eIDAS authentication.
+ *
+ * @param eidData eIDAS eID information from current authentication process
+ * @return Update result but never <code>null</code>
+ * @throws EidasSAuthenticationException In case of a communication error
+ */
+ @Nonnull
+ ErnpRegisterResult add(SimpleEidasData eidData) throws EidasSAuthenticationException;
+
+
+ /**
+ * Search person based on address information.
+ *
+ * @param givenName eIDAS given name
+ * @param familyName eIDAS principle name
+ * @param dateOfBirth eIDAS date-of-birth
+ * @param zipcode ZipCode
+ * @param city City
+ * @param street Street
+ * @return Search result but never <code>null</code>
+ */
+ @Nonnull
+ ErnpRegisterResult searchWithResidenceData(String givenName, String familyName,
+ String dateOfBirth, String zipcode, String city, String street);
+
+}
diff --git a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/clients/szr/SzrClient.java b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/clients/szr/SzrClient.java
new file mode 100644
index 00000000..8c294c97
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/clients/szr/SzrClient.java
@@ -0,0 +1,479 @@
+/*
+ * Copyright 2018 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.clients.szr;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.net.URL;
+import java.nio.charset.StandardCharsets;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.annotation.PostConstruct;
+import javax.xml.XMLConstants;
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.Marshaller;
+import javax.xml.namespace.QName;
+import javax.xml.transform.Source;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.stream.StreamResult;
+import javax.xml.transform.stream.StreamSource;
+import javax.xml.ws.BindingProvider;
+import javax.xml.ws.Dispatch;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.xpath.XPathAPI;
+import org.springframework.stereotype.Service;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.clients.AbstractSoapClient;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.clients.AbstractSoapClient.HttpClientConfig.HttpClientConfigBuilder;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.MatchedPersonResult;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.SimpleEidasData;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.exception.SzrCommunicationException;
+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;
+import at.gv.egiz.eaaf.core.api.data.PvpAttributeDefinitions;
+import at.gv.egiz.eaaf.core.api.data.XmlNamespaceConstants;
+import at.gv.egiz.eaaf.core.exceptions.EaafConfigurationException;
+import at.gv.egiz.eaaf.core.impl.utils.DomUtils;
+import lombok.extern.slf4j.Slf4j;
+import szrservices.GetBPK;
+import szrservices.GetBPKResponse;
+import szrservices.GetIdentityLinkEidas;
+import szrservices.GetIdentityLinkEidasResponse;
+import szrservices.IdentityLinkType;
+import szrservices.JwsHeaderParam;
+import szrservices.ObjectFactory;
+import szrservices.PersonInfoType;
+import szrservices.SZR;
+import szrservices.SZRException_Exception;
+import szrservices.SignContent;
+import szrservices.SignContentEntry;
+import szrservices.SignContentResponseType;
+import szrservices.TravelDocumentType;
+
+
+@Slf4j
+@Service("SZRClientForeIDAS")
+public class SzrClient extends AbstractSoapClient {
+
+ private static final String CLIENT_DEFAULT = "DefaultClient";
+ private static final String CLIENT_RAW = "RawClient";
+
+ private static final String ATTR_NAME_VSZ = "urn:eidgvat:attributes.vsz.value";
+ private static final String ATTR_NAME_PUBKEYS = "urn:eidgvat:attributes.user.pubkeys";
+ private static final String ATTR_NAME_STATUS = "urn:eidgvat:attributes.eid.status";
+ private static final String KEY_BC_BIND = "bcBindReq";
+ private static final String JOSE_HEADER_USERCERTPINNING_TYPE = "urn:at.gv.eid:bindtype";
+ private static final String JOSE_HEADER_USERCERTPINNING_EIDASBIND = "urn:at.gv.eid:eidasBind";
+ public static final String ATTR_NAME_MDS = "urn:eidgvat:mds";
+
+ // client for anything, without identitylink
+ private SZR szr = null;
+
+ // RAW client is needed for identitylink
+ private Dispatch<Source> dispatch = null;
+
+ final ObjectMapper mapper = new ObjectMapper();
+
+
+ /**
+ * Get IdentityLink of a person.
+ *
+ *
+ * @param matchedPersonData eID information of an already matched person.
+ * @return IdentityLink
+ * @throws SzrCommunicationException In case of a SZR error
+ */
+ public IdentityLinkType getIdentityLinkInRawMode(MatchedPersonResult matchedPersonData)
+ throws SzrCommunicationException {
+ try {
+ final GetIdentityLinkEidas getIdl = new GetIdentityLinkEidas();
+ getIdl.setPersonInfo(generateSzrRequest(matchedPersonData));
+
+ return getIdentityLinkGeneric(getIdl);
+
+ } catch (final Exception e) {
+ log.warn("SZR communication FAILED for operation: {} Reason: {}",
+ "GetIdentityLinkEidas", e.getMessage(), e);
+ throw new SzrCommunicationException("ernb.02", new Object[]{e.getMessage()}, e);
+
+ }
+ }
+
+ /**
+ * Get bPK of person.
+ *
+ *
+ * @param eidData Minimum dataset of person
+ * @param target requested bPK target
+ * @param vkz Verfahrenskennzeichen
+ * @return bPK for this person
+ * @throws SzrCommunicationException In case of a SZR error
+ */
+ public List<String> getBpk(SimpleEidasData eidData, String target, String vkz)
+ throws SzrCommunicationException {
+ try {
+ final GetBPK parameters = new GetBPK();
+ parameters.setPersonInfo(generateSzrRequest(eidData));
+ parameters.getBereichsKennung().add(target);
+ parameters.setVKZ(vkz);
+ final GetBPKResponse result = this.szr.getBPK(parameters);
+
+ return result.getGetBPKReturn();
+
+ } catch (final SZRException_Exception e) {
+ log.warn("SZR communication FAILED for operation: {} Reason: {}",
+ "GetBPK", e.getMessage(), e);
+ throw new SzrCommunicationException("ernb.02", new Object[]{e.getMessage()}, e);
+
+ }
+
+ }
+
+ /**
+ * Request a encrypted baseId from SZR.
+ *
+ * @param matchedPersonData eID information of an already matched person.
+ * @return encrypted baseId
+ * @throws SzrCommunicationException In case of a SZR error
+ */
+ public String getEncryptedStammzahl(MatchedPersonResult matchedPersonData) throws SzrCommunicationException {
+ final String resp;
+ try {
+ resp = this.szr.getStammzahlEncrypted(generateSzrRequest(matchedPersonData), false);
+
+ } catch (SZRException_Exception e) {
+ throw new SzrCommunicationException("ernb.02", new Object[]{e.getMessage()}, e);
+
+ }
+
+ if (StringUtils.isEmpty(resp)) {
+ throw new SzrCommunicationException("ernb.01", new Object[]{"Stammzahl response empty"}); // TODO error handling
+
+ }
+
+ return resp;
+ }
+
+ /**
+ * Sign an eidasBind data-structure that combines vsz with user's pubKey and E-ID status.
+ *
+ * @param vsz encrypted baseId
+ * @param bindingPubKey binding PublicKey as PKCS1# (ASN.1) container
+ * @param eidStatus Status of the E-ID
+ * @param eidData eID information that was used for ERnP registration
+ * @return bPK for this person
+ * @throws SzrCommunicationException In case of a SZR error
+ */
+ public String getEidasBind(final String vsz, final String bindingPubKey, final String eidStatus,
+ SimpleEidasData eidData)throws SzrCommunicationException {
+
+ final Map<String, Object> eidsaBindMap = new HashMap<>();
+ eidsaBindMap.put(ATTR_NAME_VSZ, vsz);
+ eidsaBindMap.put(ATTR_NAME_STATUS, eidStatus);
+ eidsaBindMap.put(ATTR_NAME_PUBKEYS, Collections.singletonList(bindingPubKey));
+ eidsaBindMap.put(PvpAttributeDefinitions.EID_ISSUING_NATION_NAME, eidData.getCitizenCountryCode());
+ injectMdsIfAvailableAndActive(eidsaBindMap, eidData);
+
+ try {
+ final String serializedEidasBind = mapper.writeValueAsString(eidsaBindMap);
+ final SignContent req = new SignContent();
+ final SignContentEntry eidasBindInfo = new SignContentEntry();
+ eidasBindInfo.setKey(KEY_BC_BIND);
+ eidasBindInfo.setValue(serializedEidasBind);
+ req.getIn().add(eidasBindInfo);
+ req.setAppendCert(false);
+ final JwsHeaderParam eidasBindJoseHeader = new JwsHeaderParam();
+ eidasBindJoseHeader.setKey(JOSE_HEADER_USERCERTPINNING_TYPE);
+ eidasBindJoseHeader.setValue(JOSE_HEADER_USERCERTPINNING_EIDASBIND);
+ req.getJWSHeaderParam().add(eidasBindJoseHeader);
+
+ log.trace("Requesting SZR to sign bcBind datastructure ... ");
+ final SignContentResponseType resp = szr.signContent(req.isAppendCert(), req.getJWSHeaderParam(), req.getIn());
+ log.trace("Receive SZR response on bcBind siging operation ");
+
+ if (resp == null || resp.getOut() == null
+ || resp.getOut().isEmpty()
+ || StringUtils.isEmpty(resp.getOut().get(0).getValue())) {
+ throw new SzrCommunicationException("ernb.01", new Object[]{"BcBind response empty"});
+ }
+
+ return resp.getOut().get(0).getValue();
+
+ } catch (final JsonProcessingException | SZRException_Exception e) {
+ log.warn("SZR communication FAILED for operation: {} Reason: {}",
+ "SignContent", e.getMessage(), e);
+ throw new SzrCommunicationException("ernb.02",
+ new Object[]{e.getMessage()}, e);
+ }
+ }
+
+ private PersonInfoType generateSzrRequest(MatchedPersonResult matchedPersonData) {
+ log.trace("Starting connecting SZR Gateway");
+ 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(matchedPersonData.getFamilyName());
+ personName.setGivenName(matchedPersonData.getGivenName());
+ naturalPerson.setDateOfBirth(matchedPersonData.getDateOfBirth());
+ bpk.setValue(matchedPersonData.getBpk());
+ bpk.setType(EaafConstants.URN_PREFIX_CDID + "ZP");
+
+ return personInfo;
+ }
+
+ private PersonInfoType generateSzrRequest(SimpleEidasData eidData) {
+ log.trace("Starting connecting SZR Gateway");
+ final PersonInfoType personInfo = new PersonInfoType();
+ final PersonNameType personName = new PersonNameType();
+ final PhysicalPersonType naturalPerson = new PhysicalPersonType();
+ final TravelDocumentType eDocument = new TravelDocumentType();
+
+ naturalPerson.setName(personName);
+ personInfo.setPerson(naturalPerson);
+ personInfo.setTravelDocument(eDocument);
+
+ // person information
+ personName.setFamilyName(eidData.getFamilyName());
+ personName.setGivenName(eidData.getGivenName());
+ naturalPerson.setDateOfBirth(eidData.getDateOfBirth());
+
+ //TODO: need to be updated to new eIDAS document interface!!!!
+ eDocument.setIssuingCountry(eidData.getCitizenCountryCode());
+ eDocument.setDocumentNumber(eidData.getPseudonym());
+
+ // eID document information
+ String documentType = basicConfig
+ .getBasicConfiguration(Constants.CONIG_PROPS_EIDAS_SZRCLIENT_PARAMS_EDOCUMENTTYPE,
+ Constants.SZR_CONSTANTS_DEFAULT_DOCUMENT_TYPE);
+ eDocument.setDocumentType(documentType);
+
+ // set PlaceOfBirth if available
+ if (eidData.getPlaceOfBirth() != null) {
+ log.trace("Find 'PlaceOfBirth' attribute: " + eidData.getPlaceOfBirth());
+ boolean setPlaceOfBirth = basicConfig
+ .getBasicConfigurationBoolean(Constants.CONIG_PROPS_EIDAS_SZRCLIENT_PARAMS_SETPLACEOFBIRTHIFAVAILABLE, true);
+ if (setPlaceOfBirth) {
+ naturalPerson.setPlaceOfBirth(eidData.getPlaceOfBirth());
+ log.trace("Adding 'PlaceOfBirth' to ERnB request ... ");
+ }
+ }
+
+ // set BirthName if available
+ if (eidData.getBirthName() != null) {
+ log.trace("Find 'BirthName' attribute: " + eidData.getBirthName());
+ boolean setBirthName = basicConfig
+ .getBasicConfigurationBoolean(Constants.CONIG_PROPS_EIDAS_SZRCLIENT_PARAMS_SETBIRTHNAMEIFAVAILABLE, true);
+ if (setBirthName) {
+ final AlternativeNameType alternativeName = new AlternativeNameType();
+ naturalPerson.setAlternativeName(alternativeName);
+ alternativeName.setFamilyName(eidData.getBirthName());
+ log.trace("Adding 'BirthName' to ERnB request ... ");
+ }
+ }
+
+ return personInfo;
+ }
+
+ private IdentityLinkType getIdentityLinkGeneric(GetIdentityLinkEidas getIdl) throws Exception {
+ final JAXBContext jaxbContext = JAXBContext.newInstance(ObjectFactory.class);
+ final Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
+
+ final ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+ jaxbMarshaller.marshal(getIdl, outputStream);
+ outputStream.flush();
+
+ final Source source = new StreamSource(new ByteArrayInputStream(outputStream.toByteArray()));
+ outputStream.close();
+
+ log.trace("Requesting SZR ... ");
+ final Source response = dispatch.invoke(source);
+ log.trace("Receive RAW response from SZR");
+
+ final byte[] szrResponse = sourceToByteArray(response);
+ final GetIdentityLinkEidasResponse jaxbElement = (GetIdentityLinkEidasResponse) jaxbContext
+ .createUnmarshaller().unmarshal(new ByteArrayInputStream(szrResponse));
+
+ // build response
+ log.trace(new String(szrResponse, StandardCharsets.UTF_8));
+
+ // ok, we have success
+ final Document doc = DomUtils.parseDocument(
+ new ByteArrayInputStream(szrResponse),
+ true,
+ XmlNamespaceConstants.ALL_SCHEMA_LOCATIONS + " " + Constants.SZR_SCHEMA_LOCATIONS,
+ null, null);
+ final String xpathExpression = "//saml:Assertion";
+ final Element nsNode = doc.createElementNS("urn:oasis:names:tc:SAML:1.0:assertion", "saml:NSNode");
+
+ log.trace("Selecting signed doc " + xpathExpression);
+ final Element documentNode = (Element) XPathAPI.selectSingleNode(doc,
+ xpathExpression, nsNode);
+ log.trace("Signed document: " + DomUtils.serializeNode(documentNode));
+
+ final IdentityLinkType idl = new IdentityLinkType();
+ idl.setAssertion(documentNode);
+ idl.setPersonInfo(jaxbElement.getGetIdentityLinkReturn().getPersonInfo());
+
+ return idl;
+
+ }
+
+ @PostConstruct
+ private void initialize() throws EaafConfigurationException {
+ log.info("Starting SZR-Client initialization .... ");
+ final URL url = SzrClient.class.getResource("/wsdl/szr_client/SZR_v4.0.wsdl");
+
+ final boolean useTestSzr = basicConfig.getBasicConfigurationBoolean(
+ Constants.CONIG_PROPS_EIDAS_SZRCLIENT_USETESTSERVICE,
+ true);
+
+ SzrService szrService;
+ QName qname;
+ String szrUrl;
+ if (useTestSzr) {
+ log.debug("Initializing SZR test environment configuration.");
+ qname = SzrService.SZRTestumgebung;
+ szrService = new SzrService(url, new QName("urn:SZRServices", "SZRService"));
+ szr = szrService.getSzrTestumgebung();
+ szrUrl = basicConfig.getBasicConfiguration(Constants.CONIG_PROPS_EIDAS_SZRCLIENT_ENDPOINT_TEST);
+
+ } else {
+ log.debug("Initializing SZR productive configuration.");
+ qname = SzrService.SZRProduktionsumgebung;
+ szrService = new SzrService(url, new QName("urn:SZRServices", "SZRService"));
+ szr = szrService.getSzrProduktionsumgebung();
+ szrUrl = basicConfig.getBasicConfiguration(Constants.CONIG_PROPS_EIDAS_SZRCLIENT_ENDPOINT_PROD);
+
+ }
+
+ // create raw client;
+ dispatch = szrService.createDispatch(qname, Source.class, javax.xml.ws.Service.Mode.PAYLOAD);
+
+ if (StringUtils.isEmpty(szrUrl)) {
+ log.error("No SZR service-URL found. SZR-Client initalisiation failed.");
+ throw new RuntimeException("No SZR service URL found. SZR-Client initalisiation failed.");
+
+ }
+
+ // check if Clients can be initialized
+ if (szr == null) {
+ log.error("SZR " + CLIENT_DEFAULT + " is 'NULL'. Something goes wrong");
+ throw new RuntimeException("SZR " + CLIENT_DEFAULT + " is 'NULL'. Something goes wrong");
+
+ }
+ if (dispatch == null) {
+ log.error("SZR " + CLIENT_RAW + " is 'NULL'. Something goes wrong");
+ throw new RuntimeException("SZR " + CLIENT_RAW + " is 'NULL'. Something goes wrong");
+
+ }
+
+ // inject handler
+ log.info("Use SZR service-URL: " + szrUrl);
+ injectBindingProvider((BindingProvider) szr, CLIENT_DEFAULT, szrUrl,
+ basicConfig.getBasicConfigurationBoolean(Constants.CONIG_PROPS_EIDAS_SZRCLIENT_DEBUG_TRACEMESSAGES, false));
+ injectBindingProvider(dispatch, CLIENT_RAW, szrUrl,
+ basicConfig.getBasicConfigurationBoolean(Constants.CONIG_PROPS_EIDAS_SZRCLIENT_DEBUG_TRACEMESSAGES, false));
+
+ // inject http parameters and SSL context
+ log.debug("Inject HTTP client settings ... ");
+ HttpClientConfigBuilder httpClientBuilder = HttpClientConfig.builder()
+ .clientName("SZR Client")
+ .clientUrl(szrUrl)
+ .connectionTimeout(basicConfig.getBasicConfiguration(
+ Constants.CONIG_PROPS_EIDAS_SZRCLIENT_TIMEOUT_CONNECTION,
+ Constants.HTTP_CLIENT_DEFAULT_TIMEOUT_CONNECTION))
+ .responseTimeout(basicConfig.getBasicConfiguration(
+ Constants.CONIG_PROPS_EIDAS_SZRCLIENT_TIMEOUT_RESPONSE,
+ Constants.HTTP_CLIENT_DEFAULT_TIMEOUT_RESPONSE))
+ .keyStoreConfig(buildKeyStoreConfiguration(
+ Constants.CONIG_PROPS_EIDAS_SZRCLIENT_SSL_KEYSTORE_TYPE,
+ Constants.CONIG_PROPS_EIDAS_SZRCLIENT_SSL_KEYSTORE_PATH,
+ Constants.CONIG_PROPS_EIDAS_SZRCLIENT_SSL_KEYSTORE_PASSWORD,
+ Constants.CONIG_PROPS_EIDAS_SZRCLIENT_SSL_KEYSTORE_NAME,
+ "SZR SSL Client-Authentication KeyStore"))
+ .keyAlias(basicConfig.getBasicConfiguration(Constants.CONIG_PROPS_EIDAS_SZRCLIENT_SSL_KEYS_ALIAS))
+ .keyPassword(basicConfig.getBasicConfiguration(Constants.CONIG_PROPS_EIDAS_SZRCLIENT_SSL_KEY_PASSWORD))
+ .trustAll(false)
+ .trustStoreConfig(buildKeyStoreConfiguration(
+ Constants.CONIG_PROPS_EIDAS_SZRCLIENT_SSL_TRUSTSTORE_TYPE,
+ Constants.CONIG_PROPS_EIDAS_SZRCLIENT_SSL_TRUSTSTORE_PATH,
+ Constants.CONIG_PROPS_EIDAS_SZRCLIENT_SSL_TRUSTSTORE_PASSWORD,
+ Constants.CONIG_PROPS_EIDAS_SZRCLIENT_SSL_TRUSTSTORE_NAME,
+ "SZR SSL Client-Authentication KeyStore"));
+
+ injectHttpClient(szr, httpClientBuilder.clientType(CLIENT_DEFAULT).build());
+ injectHttpClient(dispatch, httpClientBuilder.clientType(CLIENT_RAW).build());
+
+ log.info("SZR-Client initialization successfull");
+ }
+
+ private void injectMdsIfAvailableAndActive(Map<String, Object> eidsaBindMap, SimpleEidasData eidData) {
+ if (basicConfig.getBasicConfigurationBoolean(
+ Constants.CONIG_PROPS_EIDAS_SZRCLIENT_SET_MDS_TO_EIDASBIND, false)) {
+ log.info("Injecting MDS into eidasBind ... ");
+ final Map<String, Object> mds = new HashMap<>();
+ mds.put(PvpAttributeDefinitions.PRINCIPAL_NAME_NAME, eidData.getFamilyName());
+ mds.put(PvpAttributeDefinitions.GIVEN_NAME_NAME, eidData.getGivenName());
+ mds.put(PvpAttributeDefinitions.BIRTHDATE_NAME, eidData.getDateOfBirth());
+ eidsaBindMap.put(ATTR_NAME_MDS, mds);
+
+ }
+ }
+
+ private byte[] sourceToByteArray(Source result) throws TransformerException {
+ final TransformerFactory factory = TransformerFactory.newInstance();
+ factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
+ final Transformer transformer = factory.newTransformer();
+ transformer.setOutputProperty("omit-xml-declaration", "yes");
+ transformer.setOutputProperty("method", "xml");
+ final ByteArrayOutputStream out = new ByteArrayOutputStream();
+ final StreamResult streamResult = new StreamResult();
+ streamResult.setOutputStream(out);
+ transformer.transform(result, streamResult);
+ return out.toByteArray();
+ }
+
+}
diff --git a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/szr/SzrService.java b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/clients/szr/SzrService.java
index dde868b1..590f88a4 100644
--- a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/szr/SzrService.java
+++ b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/clients/szr/SzrService.java
@@ -21,7 +21,7 @@
* that you distribute must include a readable copy of the "NOTICE" text file.
*/
-package at.asitplus.eidas.specific.modules.auth.eidas.v2.szr;
+package at.asitplus.eidas.specific.modules.auth.eidas.v2.clients.szr;
import java.net.URL;
@@ -52,7 +52,7 @@ public class SzrService extends Service {
"SZRBusinesspartnerTestumgebung");
static {
- URL url = SzrService.class.getResource("./src/main/resources/szr_client/SZR-1.WSDL");
+ URL url = SzrService.class.getResource("./src/main/resources/wsdl/szr_client/SZR-1.WSDL");
if (url == null) {
url = SzrService.class.getClassLoader().getResource("/szr_client/SZR-1.WSDL");
}
diff --git a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/clients/zmr/IZmrClient.java b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/clients/zmr/IZmrClient.java
new file mode 100644
index 00000000..f3c32c96
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/clients/zmr/IZmrClient.java
@@ -0,0 +1,113 @@
+/*
+ * 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.clients.zmr;
+
+import java.math.BigInteger;
+
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.clients.zmr.ZmrSoapClient.ZmrRegisterResult;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.controller.AdresssucheController.AdresssucheOutput;
+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.exception.EidasSAuthenticationException;
+import at.gv.bmi.namespace.zmr_su.zmr._20040201.PersonSuchenRequest;
+
+public interface IZmrClient {
+
+ /**
+ * Search person based on eIDAS personal identifier.
+ *
+ * @param zmrProzessId ProcessId from ZMR or <code>null</code> if no processId exists
+ * @param personIdentifier Full eIDAS personal identifier with prefix
+ * @param citizenCountryCode CountryCode of the eIDAS proxy-service
+ * @return Search result but never <code>null</code>
+ * @throws EidasSAuthenticationException In case of a communication error
+ */
+ @Nonnull
+ ZmrRegisterResult searchWithPersonIdentifier(@Nullable BigInteger zmrProzessId, @Nonnull String personIdentifier,
+ @Nonnull String citizenCountryCode) throws EidasSAuthenticationException;
+
+ /**
+ * Search person based on eIDSA MDS information.
+ *
+ * @param zmrProzessId ProcessId from ZMR or <code>null</code> if no processId exists
+ * @param givenName eIDAS given name
+ * @param familyName eIDAS principle name
+ * @param dateOfBirth eIDAS date-of-birth
+ * @param citizenCountryCode CountryCode of the eIDAS proxy-service
+ * @return Search result but never <code>null</code>
+ * @throws EidasSAuthenticationException In case of a communication error
+ */
+ @Nonnull
+ ZmrRegisterResult searchWithMds(@Nullable BigInteger zmrProzessId, @Nonnull String givenName,
+ @Nonnull String familyName, @Nonnull String dateOfBirth, @Nonnull String citizenCountryCode)
+ throws EidasSAuthenticationException;
+
+ /**
+ * Search person based on country-specific natural person set.
+ *
+ * @param zmrProzessId ProcessId from ZMR or <code>null</code> if no processId exists
+ * @param personSearchDao Specific set of natural person informations.
+ * @param citizenCountryCode CountryCode of the eIDAS proxy-service
+ * @return Search result but never <code>null</code>
+ * @throws EidasSAuthenticationException In case of a communication error
+ */
+ @Nonnull
+ ZmrRegisterResult searchCountrySpecific(@Nullable BigInteger zmrProzessId,
+ @Nonnull PersonSuchenRequest personSearchDao, @Nonnull String citizenCountryCode)
+ throws EidasSAuthenticationException;
+
+ /**
+ * Search person based on MDS information and Austrian residence.
+ *
+ * @param zmrProzessId zmrProzessId zmrProzessId ProcessId from ZMR or <code>null</code> if no processId exists
+ * @param givenName eIDAS given name
+ * @param familyName eIDAS principle name
+ * @param dateOfBirth eIDAS date-of-birth
+ * @param citizenCountryCode citizenCountryCode CountryCode of the eIDAS proxy-service
+ * @param address Address information for searching
+ * @return Search result but never <code>null</code>
+ * @throws EidasSAuthenticationException In case of a communication error
+ */
+ @Nonnull
+ ZmrRegisterResult searchWithResidenceData(@Nullable BigInteger zmrProzessId, @Nonnull String givenName,
+ @Nonnull String familyName, @Nonnull String dateOfBirth, @Nonnull String citizenCountryCode,
+ @Nonnull AdresssucheOutput address) throws EidasSAuthenticationException;
+
+ /**
+ * Update ZMR entry to KITT existing ZMR identity with this eIDAS authentication.
+ *
+ * @param zmrProzessId zmrProzessId ProcessId from ZMR or <code>null</code> if no processId exists
+ * @param registerResult Already matched eIDAS identity that should be KITT
+ * @param eidData eIDAS eID information from current authentication process
+ * @return Update result but never <code>null</code>
+ * @throws EidasSAuthenticationException In case of a communication error
+ */
+ @Nonnull
+ ZmrRegisterResult update(@Nullable BigInteger zmrProzessId, RegisterResult registerResult, SimpleEidasData eidData)
+ throws EidasSAuthenticationException;
+
+}
diff --git a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/clients/zmr/ZmrAddressSoapClient.java b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/clients/zmr/ZmrAddressSoapClient.java
new file mode 100644
index 00000000..6e146ddf
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/clients/zmr/ZmrAddressSoapClient.java
@@ -0,0 +1,286 @@
+package at.asitplus.eidas.specific.modules.auth.eidas.v2.clients.zmr;
+
+import java.math.BigInteger;
+import java.net.URL;
+import java.text.MessageFormat;
+import java.util.List;
+
+import javax.annotation.Nonnull;
+import javax.annotation.PostConstruct;
+import javax.xml.ws.BindingProvider;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.lang.Nullable;
+
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.clients.AbstractSoapClient;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.exception.EidasSAuthenticationException;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.exception.ZmrCommunicationException;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.utils.VersionHolder;
+import at.gv.bmi.namespace.zmr_su.base._20040201_.address.ClientInfoType;
+import at.gv.bmi.namespace.zmr_su.base._20040201_.address.Organisation;
+import at.gv.bmi.namespace.zmr_su.base._20040201_.address.RequestType;
+import at.gv.bmi.namespace.zmr_su.base._20040201_.address.ResponseType;
+import at.gv.bmi.namespace.zmr_su.base._20040201_.address.Service;
+import at.gv.bmi.namespace.zmr_su.base._20040201_.address.ServiceFault_Exception;
+import at.gv.bmi.namespace.zmr_su.base._20040201_.address.ServicePort;
+import at.gv.bmi.namespace.zmr_su.base._20040201_.address.WorkflowInfoClient;
+import at.gv.bmi.namespace.zmr_su.base._20040201_.address.WorkflowInfoServer;
+import at.gv.bmi.namespace.zmr_su.zrm._20040201_.address.Adressdaten;
+import at.gv.bmi.namespace.zmr_su.zrm._20040201_.address.AdresssucheInfoType;
+import at.gv.bmi.namespace.zmr_su.zrm._20040201_.address.AdresssucheRequest;
+import at.gv.bmi.namespace.zmr_su.zrm._20040201_.address.AdresssuchergebnisType;
+import at.gv.egiz.eaaf.core.exceptions.EaafConfigurationException;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NonNull;
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * ZMR SOAP client for search-address operations.
+ *
+ * @author tlenz
+ *
+ */
+@Slf4j
+public class ZmrAddressSoapClient extends AbstractSoapClient {
+
+ private static final String CLIENT_DEFAULT = "ZMR-AddressSearch Client";
+ private static final String CLIENT_INFO = "eIDAS MS-Connector v{0}";
+
+ private static final String LOGMSG_ZMR_SOAP_ERROR =
+ "ZMR anwser for transaction: {0} with code: {1} and message: {2}";
+ private static final String LOGMSG_ZMR_ERROR =
+ "Receive an error from ZMR during '{}' operation with msg: {}";
+ private static final String LOGMSG_ZMR_RESP_PROCESS =
+ "Proces ZMR response during '{}' operation failes with msg: {}";
+
+ private static final String ERROR_MATCHING_07 = "module.eidasauth.matching.07";
+ private static final String ERROR_MATCHING_99 = "module.eidasauth.matching.99";
+
+ private static final String PROCESS_GENERAL = "GP_Abfragen";
+ private static final String PROCESS_TASK_ADDRESS_WIZZARD = "ZMR_VO_Adresssuche_im_GWR__6";
+
+ private static final String PROCESS_TASK_RESPONSE_LEVEL_CITY = "Ortschaft";
+ private static final String PROCESS_TASK_RESPONSE_LEVEL_STREET = "Strassenname";
+ private static final String PROCESS_TASK_RESPONSE_LEVEL_NUMBER = "Orientierungsnummer";
+
+
+ private static final String PROCESS_ADDRESS_WIZZARD = "PROCESS_SEARCH_WITH_ADDRESS_WIZZARD";
+
+ private static final String SEARCH_TYPE = "ADRESSSUCHE";
+
+
+ @Autowired VersionHolder versionHolder;
+ private ServicePort zmrClient;
+
+ @Getter
+ @AllArgsConstructor
+ public static class AddressInfo {
+ private final BigInteger processId;
+ private final List<Adressdaten> personResult;
+ private final DetailLevel level;
+
+ }
+
+ public enum DetailLevel { CITY, STREET, NUMBER, UNKNOWN }
+
+ /**
+ * Get address information based on ZMR data.
+ *
+ * @param addressInfo Search parameters
+ * @return Address data
+ * @throws EidasSAuthenticationException In case of an error
+ */
+ public AddressInfo searchAddress(@NonNull Adressdaten addressInfo)
+ throws EidasSAuthenticationException {
+ return searchAddress(addressInfo, null);
+
+ }
+
+ /**
+ * Get address information based on ZMR data.
+ *
+ * @param addressInfo Search parameters
+ * @param prozessInstanzId processId in case of associated requests
+ * @return Address data
+ * @throws EidasSAuthenticationException In case of an error
+ */
+ public AddressInfo searchAddress(@NonNull Adressdaten addressInfo, @Nullable BigInteger prozessInstanzId)
+ throws EidasSAuthenticationException {
+ try {
+ RequestType req = new RequestType();
+
+ // set generic informations
+ req.setClientInfo(generateClientInfos());
+ req.setWorkflowInfoClient(generateWorkFlowInfos(PROCESS_TASK_ADDRESS_WIZZARD, null));
+
+ AdresssucheRequest search = new AdresssucheRequest();
+ req.setAdresssucheRequest(search);
+
+ // set static search type
+ AdresssucheInfoType searchType = new AdresssucheInfoType();
+ searchType.setSuchart(SEARCH_TYPE);
+ search.setAdresssucheInfo(searchType);
+
+ // set search parameters
+ search.setAdressdaten(addressInfo);
+
+ // request ZMR address services
+ log.debug("Requesting ZMR for adddress search ....");
+ ResponseType resp = zmrClient.service(req, null);
+ log.debug("Receice response for address search with #{} elements",
+ resp.getAdresssucheResponse().getAdresssuchergebnis().getGefundeneSaetze());
+
+ return new AddressInfo(
+ extractZmrProcessId(resp.getWorkflowInfoServer()),
+ resp.getAdresssucheResponse().getAdresssuchergebnis().getAdressdaten(),
+ extractAddressDetailLevel(resp.getAdresssucheResponse().getAdresssuchergebnis()));
+
+ } catch (final ServiceFault_Exception e) {
+ final String errorMsg = extractReasonFromError(e);
+ log.warn(LOGMSG_ZMR_ERROR, PROCESS_ADDRESS_WIZZARD, errorMsg);
+ throw new ZmrCommunicationException(ERROR_MATCHING_07, new Object[] { errorMsg }, e);
+
+ } catch (final Exception e) {
+ log.warn(LOGMSG_ZMR_RESP_PROCESS, PROCESS_ADDRESS_WIZZARD, e.getMessage());
+ throw new EidasSAuthenticationException(ERROR_MATCHING_99, new Object[] { e.getMessage() }, e);
+
+ }
+ }
+
+ @PostConstruct
+ private void initialize() throws EaafConfigurationException {
+ // set-up the ZMR client
+ initializeTechnicalZmrClient();
+
+ }
+
+ private void initializeTechnicalZmrClient() throws EaafConfigurationException {
+ log.info("Starting ZMR-AddressSearch Client initialization .... ");
+ final URL url = ZmrAddressSoapClient.class.getResource("/wsdl/addresssearching_client/wsdl/Service.wsdl");
+ final Service zmrService = new Service(url);
+ zmrClient = zmrService.getService();
+
+ final String zmrServiceUrl = basicConfig.getBasicConfiguration(
+ Constants.CONIG_PROPS_EIDAS_ZMRCLIENT_ENDPOINT);
+ if (StringUtils.isEmpty(zmrServiceUrl)) {
+ log.error("No ZMR-AddressSearch service-URL found. ZMR-AddressSearch-Client initalisiation failed.");
+ throw new RuntimeException(
+ "No ZMR-AddressSearch service URL found. ZMR-AddressSearch-Client initalisiation failed.");
+
+ }
+
+ // inject handler
+ log.info("Use ZMR-AddressSearch service-URL: " + zmrServiceUrl);
+ injectBindingProvider((BindingProvider) zmrClient, CLIENT_DEFAULT, zmrServiceUrl,
+ basicConfig.getBasicConfigurationBoolean(Constants.CONIG_PROPS_EIDAS_ZMRCLIENT_DEBUG_TRACEMESSAGES,
+ false));
+
+ // inject http parameters and SSL context
+ log.debug("Inject HTTP client settings ... ");
+ injectHttpClient(zmrClient, HttpClientConfig.builder()
+ .clientName(CLIENT_DEFAULT)
+ .clientType(CLIENT_DEFAULT)
+ .clientUrl(zmrServiceUrl)
+ .connectionTimeout(basicConfig.getBasicConfiguration(
+ Constants.CONIG_PROPS_EIDAS_ZMRCLIENT_TIMEOUT_CONNECTION,
+ Constants.HTTP_CLIENT_DEFAULT_TIMEOUT_CONNECTION))
+ .responseTimeout(basicConfig.getBasicConfiguration(
+ Constants.CONIG_PROPS_EIDAS_ZMRCLIENT_TIMEOUT_RESPONSE,
+ Constants.HTTP_CLIENT_DEFAULT_TIMEOUT_RESPONSE))
+ .keyStoreConfig(buildKeyStoreConfiguration(
+ Constants.CONIG_PROPS_EIDAS_ZMRCLIENT_SSL_KEYSTORE_TYPE,
+ Constants.CONIG_PROPS_EIDAS_ZMRCLIENT_SSL_KEYSTORE_PATH,
+ Constants.CONIG_PROPS_EIDAS_ZMRCLIENT_SSL_KEYSTORE_PASSWORD,
+ Constants.CONIG_PROPS_EIDAS_ZMRCLIENT_SSL_KEYSTORE_NAME,
+ "ZMR-AddressSearch SSL Client-Authentication KeyStore"))
+ .keyAlias(basicConfig.getBasicConfiguration(Constants.CONIG_PROPS_EIDAS_ZMRCLIENT_SSL_KEYS_ALIAS))
+ .keyPassword(basicConfig.getBasicConfiguration(
+ Constants.CONIG_PROPS_EIDAS_ZMRCLIENT_SSL_KEY_PASSWORD))
+ .trustAll(false)
+ .trustStoreConfig(buildKeyStoreConfiguration(
+ Constants.CONIG_PROPS_EIDAS_ZMRCLIENT_SSL_TRUSTSTORE_TYPE,
+ Constants.CONIG_PROPS_EIDAS_ZMRCLIENT_SSL_TRUSTSTORE_PATH,
+ Constants.CONIG_PROPS_EIDAS_ZMRCLIENT_SSL_TRUSTSTORE_PASSWORD,
+ Constants.CONIG_PROPS_EIDAS_ZMRCLIENT_SSL_TRUSTSTORE_NAME,
+ "ZMR-AddressSearch SSL Client-Authentication TrustStore"))
+ .build());
+
+ }
+
+ @Nonnull
+ private ClientInfoType generateClientInfos() {
+ final ClientInfoType clientInfo = new ClientInfoType();
+ final Organisation clientOrganisation = new Organisation();
+ clientInfo.setOrganisation(clientOrganisation);
+
+ // set client information
+ clientInfo.setClient(MessageFormat.format(CLIENT_INFO, versionHolder.getVersion()));
+
+ // set Behoerdennummer as organization identifier
+ clientOrganisation.setBehoerdenNr(basicConfig.getBasicConfiguration(
+ Constants.CONIG_PROPS_EIDAS_ZMRCLIENT_REQ_ORGANIZATION_NR));
+
+ return clientInfo;
+ }
+
+ @Nonnull
+ private static String extractReasonFromError(ServiceFault_Exception e) {
+ if (e.getFaultInfo() != null) {
+ return MessageFormat.format(LOGMSG_ZMR_SOAP_ERROR,
+ e.getFaultInfo().getServerTransaktionNr().toString(),
+ e.getFaultInfo().getErrorCode(),
+ e.getFaultInfo().getErrorMessage());
+
+ } else {
+ log.error("ZMR response without error code", e);
+ return e.getMessage();
+
+ }
+ }
+
+ @Nonnull
+ private static WorkflowInfoClient generateWorkFlowInfos(@Nonnull String subStepName,
+ @Nullable BigInteger prozessInstanzId) {
+ final WorkflowInfoClient infos = new WorkflowInfoClient();
+ infos.setProzessName(PROCESS_GENERAL);
+ infos.setVorgangName(subStepName);
+
+ //set processId that we received from ZMR before, if already available
+ if (prozessInstanzId != null) {
+ infos.setProzessInstanzID(prozessInstanzId);
+
+ }
+
+ return infos;
+
+ }
+
+ private static BigInteger extractZmrProcessId(WorkflowInfoServer workflowInfoServer) {
+ return workflowInfoServer != null ? workflowInfoServer.getProzessInstanzID() : null;
+
+ }
+
+ private static DetailLevel extractAddressDetailLevel(AdresssuchergebnisType value) {
+ if (value.getDetailgrad() == null) {
+ return DetailLevel.UNKNOWN;
+ }
+ switch (value.getDetailgrad()) {
+ case PROCESS_TASK_RESPONSE_LEVEL_CITY:
+ return DetailLevel.CITY;
+
+ case PROCESS_TASK_RESPONSE_LEVEL_STREET:
+ return DetailLevel.STREET;
+
+ case PROCESS_TASK_RESPONSE_LEVEL_NUMBER:
+ return DetailLevel.NUMBER;
+
+ default:
+ return DetailLevel.UNKNOWN;
+
+ }
+ }
+
+}
diff --git a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/clients/zmr/ZmrSoapClient.java b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/clients/zmr/ZmrSoapClient.java
new file mode 100644
index 00000000..8dbd0632
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/clients/zmr/ZmrSoapClient.java
@@ -0,0 +1,874 @@
+package at.asitplus.eidas.specific.modules.auth.eidas.v2.clients.zmr;
+
+import java.math.BigInteger;
+import java.net.URL;
+import java.text.MessageFormat;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import javax.annotation.Nonnull;
+import javax.annotation.PostConstruct;
+import javax.xml.ws.BindingProvider;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.lang.NonNull;
+import org.springframework.lang.Nullable;
+
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.clients.AbstractSoapClient;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.controller.AdresssucheController.AdresssucheOutput;
+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.exception.EidasSAuthenticationException;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.exception.WorkflowException;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.exception.ZmrCommunicationException;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.utils.VersionHolder;
+import at.gv.bmi.namespace.zmr_su.base._20040201.ClientInfoType;
+import at.gv.bmi.namespace.zmr_su.base._20040201.Organisation;
+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.WorkflowInfoClient;
+import at.gv.bmi.namespace.zmr_su.base._20040201.WorkflowInfoServer;
+import at.gv.bmi.namespace.zmr_su.base._20040201_.Service;
+import at.gv.bmi.namespace.zmr_su.base._20040201_.ServiceFault;
+import at.gv.bmi.namespace.zmr_su.base._20040201_.ServicePort;
+import at.gv.bmi.namespace.zmr_su.zmr._20040201.EidasIdentitaetAnlageType;
+import at.gv.bmi.namespace.zmr_su.zmr._20040201.EidasIdentitaetErgebnisType;
+import at.gv.bmi.namespace.zmr_su.zmr._20040201.EidasSuchdatenType;
+import at.gv.bmi.namespace.zmr_su.zmr._20040201.ErgebniskriterienType;
+import at.gv.bmi.namespace.zmr_su.zmr._20040201.NatuerlichePersonErgebnisType;
+import at.gv.bmi.namespace.zmr_su.zmr._20040201.PersonAendernInfoType;
+import at.gv.bmi.namespace.zmr_su.zmr._20040201.PersonAendernRequest;
+import at.gv.bmi.namespace.zmr_su.zmr._20040201.PersonErgebnisSatzType;
+import at.gv.bmi.namespace.zmr_su.zmr._20040201.PersonErgebnisType;
+import at.gv.bmi.namespace.zmr_su.zmr._20040201.PersonReferenzType;
+import at.gv.bmi.namespace.zmr_su.zmr._20040201.PersonSuchenRequest;
+import at.gv.bmi.namespace.zmr_su.zmr._20040201.PersonSuchenResponse;
+import at.gv.bmi.namespace.zmr_su.zmr._20040201.PersonensucheInfoType;
+import at.gv.bmi.namespace.zmr_su.zmr._20040201.SuchkriterienType;
+import at.gv.e_government.reference.namespace.persondata.de._20040201.IdentificationType;
+import at.gv.e_government.reference.namespace.persondata.de._20040201.NatuerlichePersonTyp;
+import at.gv.e_government.reference.namespace.persondata.de._20040201.PersonenNameTyp;
+import at.gv.e_government.reference.namespace.persondata.de._20040201.PostAdresseTyp;
+import at.gv.e_government.reference.namespace.persondata.de._20040201.ZustelladresseTyp;
+import at.gv.egiz.eaaf.core.api.data.EaafConstants;
+import at.gv.egiz.eaaf.core.exceptions.EaafAuthenticationException;
+import at.gv.egiz.eaaf.core.exceptions.EaafConfigurationException;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * ZMR client implementation for eIDAS matching operations.
+ *
+ * @author tlenz
+ *
+ */
+@Slf4j
+public class ZmrSoapClient extends AbstractSoapClient implements IZmrClient {
+
+ private static final String ERROR_MATCHING_01 = "module.eidasauth.matching.01";
+ private static final String ERROR_MATCHING_02 = "module.eidasauth.matching.02";
+ private static final String ERROR_MATCHING_99 = "module.eidasauth.matching.99";
+
+ private static final String LOGMSG_MISSING_CONFIG = "Missing configuration with key: {0}";
+
+ private static final String LOGMSG_ZMR_ERROR =
+ "Receive an error from ZMR during '{}' operation with msg: {}";
+ private static final String LOGMSG_ZMR_RESP_PROCESS =
+ "Proces ZMR response during '{}' operation failes with msg: {}";
+
+ private static final String LOGMSG_ZMR_SOAP_ERROR =
+ "ZMR anwser for transaction: {0} with code: {1} and message: {2}";
+
+ 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_ADD = "ZPR_VO_Person_anlegen";
+ private static final String PROCESS_TASK_UPDATE = "ZPR_VO_Person_aendern";
+
+ private static final String PROCESS_SEARCH_PERSONAL_IDENTIFIER =
+ "Searching " + Constants.eIDAS_ATTR_PERSONALIDENTIFIER;
+ private static final String PROCESS_SEARCH_MDS_ONLY = "Searching with MDS only";
+ private static final String PROCESS_SEARCH_COUNTRY_SPECIFIC = "Searching {0} specific";
+ private static final String PROCESS_SEARCH_BY_RESIDENCE = "Searching by residence";
+
+ private static final String PROCESS_KITT_GENERAL = "KITT general-processing";
+ private static final String PROCESS_KITT_IDENITIES_GET = "KITT get-latest-version";
+ private static final String PROCESS_KITT_IDENITIES_UPDATE = "KITT update dataset";
+
+ private static final String CLIENT_DEFAULT = "ZMR Client";
+
+
+ @Autowired VersionHolder versionHolder;
+
+ private ServicePort zmrClient;
+
+
+ @AllArgsConstructor
+ @Getter
+ public static class ZmrRegisterResult {
+ private final List<RegisterResult> personResult;
+ private final BigInteger processId;
+
+ }
+
+ @Override
+ public ZmrRegisterResult searchWithPersonIdentifier(BigInteger zmrProzessId, String personPseudonym,
+ String citizenCountryCode) throws EidasSAuthenticationException {
+
+ try {
+ // build search request
+ final RequestType req = new RequestType();
+
+ // set eIDAS person information
+ final PersonSuchenRequest searchPersonReq = new PersonSuchenRequest();
+ req.setPersonSuchenRequest(searchPersonReq);
+ final EidasSuchdatenType eidasInfos = new EidasSuchdatenType();
+ searchPersonReq.getEidasSuchdaten().add(eidasInfos);
+ eidasInfos.setEidasArt(Constants.eIDAS_ATTRURN_PERSONALIDENTIFIER);
+ eidasInfos.setEidasWert(personPseudonym);
+ eidasInfos.setStaatscode2(citizenCountryCode);
+
+ // set work-flow client information
+ req.setWorkflowInfoClient(generateWorkFlowInfos(PROCESS_TASK_SEARCH, zmrProzessId));
+ req.setClientInfo(generateClientInfos());
+
+ // set additionl search parameters
+ searchPersonReq.setPersonensucheInfo(generateSearchCriteria(
+ PROCESS_SEARCH_PERSONAL_IDENTIFIER, false, true, false));
+
+ // request ZMR
+ log.trace("Requesting ZMR for '{}' operation", PROCESS_SEARCH_PERSONAL_IDENTIFIER);
+ final ResponseType resp = zmrClient.service(req, null);
+
+ // parse ZMR response
+ return processZmrResponse(resp, citizenCountryCode, true, PROCESS_SEARCH_PERSONAL_IDENTIFIER);
+
+ } catch (final ServiceFault e) {
+ final String errorMsg = extractReasonFromError(e);
+ log.warn(LOGMSG_ZMR_ERROR, PROCESS_SEARCH_PERSONAL_IDENTIFIER, errorMsg);
+ throw new ZmrCommunicationException(ERROR_MATCHING_01, new Object[] { errorMsg }, e);
+
+ } catch (EidasSAuthenticationException e) {
+ throw e;
+
+ } catch (final Exception e) {
+ log.warn(LOGMSG_ZMR_RESP_PROCESS, PROCESS_SEARCH_PERSONAL_IDENTIFIER, e.getMessage());
+ throw new EidasSAuthenticationException(ERROR_MATCHING_99, new Object[] { e.getMessage() }, e);
+
+ }
+ }
+
+ @Override
+ public ZmrRegisterResult searchWithMds(BigInteger zmrProzessId, String givenName, String familyName,
+ String dateOfBirth, String citizenCountryCode) throws EidasSAuthenticationException {
+ try {
+ // build search request
+ final RequestType req = new RequestType();
+
+ // set eIDAS person information
+ final PersonSuchenRequest searchPersonReq = new PersonSuchenRequest();
+ req.setPersonSuchenRequest(searchPersonReq);
+ searchPersonReq.setNatuerlichePerson(buildSearchNatPerson(givenName, familyName, dateOfBirth));
+
+ // set work-flow client information
+ req.setWorkflowInfoClient(generateWorkFlowInfos(PROCESS_TASK_SEARCH, zmrProzessId));
+ req.setClientInfo(generateClientInfos());
+
+ // set additionl search parameters
+ searchPersonReq.setPersonensucheInfo(generateSearchCriteria(
+ PROCESS_SEARCH_MDS_ONLY, false, true, false));
+
+ // request ZMR
+ log.trace("Requesting ZMR for '{}' operation", PROCESS_SEARCH_MDS_ONLY);
+ final ResponseType resp = zmrClient.service(req, null);
+
+ // parse ZMR response
+ return processZmrResponse(resp, citizenCountryCode, false, PROCESS_SEARCH_MDS_ONLY);
+
+ } catch (final ServiceFault e) {
+ final String errorMsg = extractReasonFromError(e);
+ log.warn(LOGMSG_ZMR_ERROR, PROCESS_SEARCH_MDS_ONLY, errorMsg);
+ throw new ZmrCommunicationException(ERROR_MATCHING_01, new Object[] { errorMsg }, e);
+
+ } catch (EidasSAuthenticationException e) {
+ throw e;
+
+ } catch (final Exception e) {
+ log.warn(LOGMSG_ZMR_RESP_PROCESS, PROCESS_SEARCH_MDS_ONLY, e.getMessage());
+ throw new EidasSAuthenticationException(ERROR_MATCHING_99, new Object[] { e.getMessage() }, e);
+
+ }
+
+ }
+
+ @Override
+ public ZmrRegisterResult searchCountrySpecific(BigInteger zmrProzessId, PersonSuchenRequest personSearchDao,
+ String citizenCountryCode)
+ throws EidasSAuthenticationException {
+ final String friendlyMsg = MessageFormat.format(PROCESS_SEARCH_COUNTRY_SPECIFIC, citizenCountryCode);
+
+ try {
+ // build search request
+ final RequestType req = new RequestType();
+
+ // set eIDAS person information
+ req.setPersonSuchenRequest(personSearchDao);
+
+ // set work-flow client information
+ req.setWorkflowInfoClient(generateWorkFlowInfos(PROCESS_TASK_SEARCH, zmrProzessId));
+ req.setClientInfo(generateClientInfos());
+
+ // set additionl search parameters
+ personSearchDao.setPersonensucheInfo(generateSearchCriteria(friendlyMsg, false, true, false));
+
+ // request ZMR
+ log.trace("Requesting ZMR for '{}' operation", friendlyMsg);
+ final ResponseType resp = zmrClient.service(req, null);
+
+ // parse ZMR response
+ return processZmrResponse(resp, citizenCountryCode, true,
+ friendlyMsg);
+
+ } catch (final ServiceFault e) {
+ final String errorMsg = extractReasonFromError(e);
+ log.warn(LOGMSG_ZMR_ERROR, friendlyMsg, errorMsg);
+ throw new ZmrCommunicationException(ERROR_MATCHING_01, new Object[] { errorMsg }, e);
+
+ } catch (EidasSAuthenticationException e) {
+ throw e;
+
+ } catch (final Exception e) {
+ log.warn(LOGMSG_ZMR_RESP_PROCESS, friendlyMsg, e.getMessage());
+ throw new EidasSAuthenticationException(ERROR_MATCHING_99, new Object[] { e.getMessage() }, e);
+
+ }
+ }
+
+ @Override
+ public ZmrRegisterResult update(BigInteger zmrProzessId, RegisterResult registerResult,
+ SimpleEidasData eidData) throws EidasSAuthenticationException {
+ try {
+ //search person with register result, because update needs information from search response
+ PersonErgebnisType zmrPersonToKitt = searchPersonForUpdate(zmrProzessId, registerResult);
+
+ // select elements that have to be updated
+ Collection<? extends EidasIdentitaetAnlageType> eidasDocumentToAdd =
+ selectEidasDocumentsToAdd(zmrPersonToKitt, eidData);
+
+ /*TODO: Is there a requirement to change 'eIDAS-Documents'?
+ * We add MDS information as 'eIDAS-Documents' too. Maybe, we should update that in a later version.
+ */
+
+ if (eidasDocumentToAdd.isEmpty()) {
+ log.info("Find no eIDAS document for update during: {}. Nothing todo on ZMR side",
+ PROCESS_KITT_GENERAL);
+ return new ZmrRegisterResult(Arrays.asList(registerResult), zmrProzessId);
+
+ } else {
+ log.info("Find #{} eIDAS documents for update during: {}", eidasDocumentToAdd.size(), PROCESS_KITT_GENERAL);
+
+ // update entry based on selected update info's and results from search response
+ return updatePersonInZmr(zmrProzessId, zmrPersonToKitt, eidasDocumentToAdd, eidData.getCitizenCountryCode());
+
+ }
+
+ } catch (final ServiceFault e) {
+ final String errorMsg = extractReasonFromError(e);
+ log.warn(LOGMSG_ZMR_ERROR, PROCESS_KITT_GENERAL, errorMsg);
+ throw new ZmrCommunicationException(ERROR_MATCHING_01, new Object[] { errorMsg }, e);
+
+ } catch (EidasSAuthenticationException e) {
+ throw e;
+
+ } catch (final Exception e) {
+ log.warn(LOGMSG_ZMR_RESP_PROCESS, PROCESS_KITT_GENERAL, e.getMessage());
+ throw new EidasSAuthenticationException(ERROR_MATCHING_99, new Object[] { e.getMessage() }, e);
+
+ }
+
+ }
+
+ @Override
+ public ZmrRegisterResult searchWithResidenceData(BigInteger zmrProzessId, String givenName, String familyName,
+ String dateOfBirth, String citizenCountryCode, AdresssucheOutput address)
+ throws EidasSAuthenticationException {
+ try {
+ // build search request
+ final RequestType req = new RequestType();
+
+ // set person information
+ final PersonSuchenRequest searchPersonReq = new PersonSuchenRequest();
+ req.setPersonSuchenRequest(searchPersonReq);
+ searchPersonReq.setNatuerlichePerson(buildSearchNatPerson(givenName, familyName, dateOfBirth));
+ searchPersonReq.setPostAdresse(buildSearchAddress(address));
+
+ // set work-flow client information
+ req.setWorkflowInfoClient(generateWorkFlowInfos(PROCESS_TASK_SEARCH, zmrProzessId));
+ req.setClientInfo(generateClientInfos());
+
+ // set additionl search parameters
+ searchPersonReq.setPersonensucheInfo(generateSearchCriteria(
+ PROCESS_SEARCH_BY_RESIDENCE, false, true, false));
+
+ // request ZMR
+ log.trace("Requesting ZMR for '{}' operation", PROCESS_SEARCH_BY_RESIDENCE);
+ final ResponseType resp = zmrClient.service(req, null);
+
+ // parse ZMR response
+ return processZmrResponse(resp, citizenCountryCode, false, PROCESS_SEARCH_BY_RESIDENCE);
+
+ } catch (final ServiceFault e) {
+ final String errorMsg = extractReasonFromError(e);
+ log.warn(LOGMSG_ZMR_ERROR, PROCESS_SEARCH_BY_RESIDENCE, errorMsg);
+ throw new ZmrCommunicationException(ERROR_MATCHING_01, new Object[] { errorMsg }, e);
+
+ } catch (EidasSAuthenticationException e) {
+ throw e;
+
+ } catch (final Exception e) {
+ log.warn(LOGMSG_ZMR_RESP_PROCESS, PROCESS_SEARCH_BY_RESIDENCE, e.getMessage());
+ throw new EidasSAuthenticationException(ERROR_MATCHING_99, new Object[] { e.getMessage() }, e);
+
+ }
+ }
+
+ @PostConstruct
+ private void initialize() throws EaafConfigurationException {
+ // set-up the ZMR client
+ initializeTechnicalZmrClient();
+
+ // validate additional ZMR communication parameters
+ valdiateAdditionalConfigParameters();
+
+ }
+
+ private void initializeTechnicalZmrClient() throws EaafConfigurationException {
+ log.info("Starting ZMR-Client initialization .... ");
+ final URL url = ZmrSoapClient.class.getResource("/wsdl/zmr_client/wsdl/Service.wsdl");
+ final Service zmrService = new Service(url);
+ zmrClient = zmrService.getService();
+
+ final String zmrServiceUrl = basicConfig.getBasicConfiguration(
+ Constants.CONIG_PROPS_EIDAS_ZMRCLIENT_ENDPOINT);
+ if (StringUtils.isEmpty(zmrServiceUrl)) {
+ log.error("No ZMR service-URL found. ZMR-Client initalisiation failed.");
+ throw new RuntimeException("No ZMR service URL found. ZMR-Client initalisiation failed.");
+
+ }
+
+ // inject handler
+ log.info("Use ZMR service-URL: " + zmrServiceUrl);
+ injectBindingProvider((BindingProvider) zmrClient, CLIENT_DEFAULT, zmrServiceUrl,
+ basicConfig.getBasicConfigurationBoolean(Constants.CONIG_PROPS_EIDAS_ZMRCLIENT_DEBUG_TRACEMESSAGES,
+ false));
+
+ // inject http parameters and SSL context
+ log.debug("Inject HTTP client settings ... ");
+ injectHttpClient(zmrClient, HttpClientConfig.builder()
+ .clientName(CLIENT_DEFAULT)
+ .clientType(CLIENT_DEFAULT)
+ .clientUrl(zmrServiceUrl)
+ .connectionTimeout(basicConfig.getBasicConfiguration(
+ Constants.CONIG_PROPS_EIDAS_ZMRCLIENT_TIMEOUT_CONNECTION,
+ Constants.HTTP_CLIENT_DEFAULT_TIMEOUT_CONNECTION))
+ .responseTimeout(basicConfig.getBasicConfiguration(
+ Constants.CONIG_PROPS_EIDAS_ZMRCLIENT_TIMEOUT_RESPONSE,
+ Constants.HTTP_CLIENT_DEFAULT_TIMEOUT_RESPONSE))
+ .keyStoreConfig(buildKeyStoreConfiguration(
+ Constants.CONIG_PROPS_EIDAS_ZMRCLIENT_SSL_KEYSTORE_TYPE,
+ Constants.CONIG_PROPS_EIDAS_ZMRCLIENT_SSL_KEYSTORE_PATH,
+ Constants.CONIG_PROPS_EIDAS_ZMRCLIENT_SSL_KEYSTORE_PASSWORD,
+ Constants.CONIG_PROPS_EIDAS_ZMRCLIENT_SSL_KEYSTORE_NAME,
+ "ZMR SSL Client-Authentication KeyStore"))
+ .keyAlias(basicConfig.getBasicConfiguration(Constants.CONIG_PROPS_EIDAS_ZMRCLIENT_SSL_KEYS_ALIAS))
+ .keyPassword(basicConfig.getBasicConfiguration(
+ Constants.CONIG_PROPS_EIDAS_ZMRCLIENT_SSL_KEY_PASSWORD))
+ .trustAll(false)
+ .trustStoreConfig(buildKeyStoreConfiguration(
+ Constants.CONIG_PROPS_EIDAS_ZMRCLIENT_SSL_TRUSTSTORE_TYPE,
+ Constants.CONIG_PROPS_EIDAS_ZMRCLIENT_SSL_TRUSTSTORE_PATH,
+ Constants.CONIG_PROPS_EIDAS_ZMRCLIENT_SSL_TRUSTSTORE_PASSWORD,
+ Constants.CONIG_PROPS_EIDAS_ZMRCLIENT_SSL_TRUSTSTORE_NAME,
+ "ZMR SSL Client-Authentication TrustStore"))
+ .build());
+
+ }
+
+ private void valdiateAdditionalConfigParameters() {
+ checkConfigurationValue(Constants.CONIG_PROPS_EIDAS_ZMRCLIENT_REQ_ORGANIZATION_NR);
+ checkConfigurationValue(Constants.CONIG_PROPS_EIDAS_ZMRCLIENT_REQ_UPDATE_REASON_CODE);
+
+ }
+
+ private void checkConfigurationValue(String key) {
+ if (StringUtils.isEmpty(basicConfig.getBasicConfiguration(key))) {
+ throw new RuntimeException(MessageFormat.format(LOGMSG_MISSING_CONFIG, key));
+
+ }
+ }
+
+ @Nonnull
+ private WorkflowInfoClient generateWorkFlowInfos(@Nonnull String subStepName,
+ @Nullable BigInteger prozessInstanzId) {
+ final WorkflowInfoClient infos = new WorkflowInfoClient();
+ infos.setProzessName(PROCESS_GENERAL);
+ infos.setVorgangName(subStepName);
+
+ //set processId that we received from ZMR before, if already available
+ if (prozessInstanzId != null) {
+ infos.setProzessInstanzID(prozessInstanzId);
+
+ }
+
+ return infos;
+
+ }
+
+ @Nonnull
+ private PersonensucheInfoType generateSearchCriteria(String infoElement, boolean searchInErnp,
+ boolean searchInZmrHistory, boolean includeHistoryResults) {
+ final PersonensucheInfoType personSearchInfo = new PersonensucheInfoType();
+ final SuchkriterienType searchCriteria = new SuchkriterienType();
+ final ErgebniskriterienType resultCriteria = new ErgebniskriterienType();
+
+ personSearchInfo.setBezugsfeld(infoElement);
+ personSearchInfo.setSuchkriterien(searchCriteria);
+ personSearchInfo.setErgebniskriterien(resultCriteria);
+
+ // TODO: are these flags valid?
+ searchCriteria.setInclusivERnP(searchInErnp);
+ searchCriteria.setInclusivHistorie(searchInZmrHistory);
+
+ // TODO: check 'processSearchPersonResponse' if we change this to 'true'
+ resultCriteria.setInclusivHistorie(includeHistoryResults);
+
+ // TODO: are these flags valid?
+ personSearchInfo.setAnzahlSaetze(10);
+
+ return personSearchInfo;
+
+ }
+
+ @Nonnull
+ private ClientInfoType generateClientInfos() {
+ final ClientInfoType clientInfo = new ClientInfoType();
+ final Organisation clientOrganisation = new Organisation();
+ clientInfo.setOrganisation(clientOrganisation);
+
+ // set client information
+ clientInfo.setClient(MessageFormat.format(Constants.CLIENT_INFO, versionHolder.getVersion()));
+
+ // set Behoerdennummer as organization identifier
+ clientOrganisation.setBehoerdenNr(basicConfig.getBasicConfiguration(
+ Constants.CONIG_PROPS_EIDAS_ZMRCLIENT_REQ_ORGANIZATION_NR));
+
+ return clientInfo;
+ }
+
+ @Nonnull
+ private String extractReasonFromError(ServiceFault e) {
+ if (e.getFaultInfo() != null) {
+ return MessageFormat.format(LOGMSG_ZMR_SOAP_ERROR,
+ e.getFaultInfo().getServerTransaktionNr().toString(),
+ e.getFaultInfo().getErrorCode(),
+ e.getFaultInfo().getErrorMessage());
+
+ } else {
+ log.error("ZMR response without error code", e);
+ return e.getMessage();
+
+ }
+ }
+
+ @Nonnull
+ private ZmrRegisterResult processZmrResponse(@Nonnull ResponseType resp,
+ @Nonnull String citizenCountryCode,
+ boolean forceSinglePersonMatch, @Nonnull String processStepFiendlyname)
+ throws EaafAuthenticationException {
+ final PersonSuchenResponse searchPersonResp = resp.getPersonSuchenResponse();
+ if (searchPersonResp.getPersonensuchergebnis() == null
+ || searchPersonResp.getPersonensuchergebnis().getPersonErgebnisSatz().isEmpty()) {
+ log.debug("ZMR result contains NO 'Personensuchergebnis' or 'PersonErgebnisSatz' is empty");
+ return new ZmrRegisterResult(Collections.emptyList(), extractZmrProcessId(resp.getWorkflowInfoServer()));
+
+ } else {
+ log.debug("Get #{} person results from '{}' operation",
+ searchPersonResp.getPersonensuchergebnis().getGefundeneSaetze(), processStepFiendlyname);
+
+ if (forceSinglePersonMatch) {
+ return new ZmrRegisterResult(processSearchPersonResponseSingleResult(
+ searchPersonResp.getPersonensuchergebnis().getPersonErgebnisSatz(),
+ citizenCountryCode, processStepFiendlyname),
+ extractZmrProcessId(resp.getWorkflowInfoServer()));
+
+ } else {
+ return new ZmrRegisterResult(processSearchPersonResponse(
+ searchPersonResp.getPersonensuchergebnis().getPersonErgebnisSatz(), citizenCountryCode),
+ extractZmrProcessId(resp.getWorkflowInfoServer()));
+
+ }
+ }
+ }
+
+ private BigInteger extractZmrProcessId(WorkflowInfoServer workflowInfoServer) {
+ return workflowInfoServer != null ? workflowInfoServer.getProzessInstanzID() : null;
+
+ }
+
+ @Nonnull
+ private List<RegisterResult> processSearchPersonResponse(
+ @Nonnull List<PersonErgebnisSatzType> personErgebnisSatz,
+ @Nonnull String citizenCountryCode) throws EaafAuthenticationException {
+
+ return personErgebnisSatz.stream()
+ .map(el -> {
+ try {
+ return processPersonResult(el, citizenCountryCode);
+
+ } catch (final EaafAuthenticationException e) {
+ log.warn("Skip ZMR person result by reason: {}", e.getMessage(), e);
+ return null;
+
+ }
+ })
+ .filter(Objects::nonNull)
+ .collect(Collectors.toList());
+
+ }
+
+ @NonNull
+ private List<RegisterResult> processSearchPersonResponseSingleResult(
+ @Nonnull List<PersonErgebnisSatzType> personErgebnisSatz,
+ @Nonnull String citizenCountryCode, String processStepFiendlyname) throws EaafAuthenticationException {
+ if (personErgebnisSatz.size() > 1) {
+ log.error("Find more-than-one ZMR entry with search criteria that has to be unique");
+ throw new WorkflowException(processStepFiendlyname,
+ "Find more-than-one ZMR entry with search criteria that has to be unique", true);
+
+ } else {
+ return Arrays.asList(processPersonResult(personErgebnisSatz.get(0), citizenCountryCode));
+
+ }
+ }
+
+ @Nonnull
+ private RegisterResult processPersonResult(
+ @Nonnull PersonErgebnisSatzType personEl, @Nonnull String citizenCountryCode)
+ throws EaafAuthenticationException {
+ // TODO: maybe check on 'null' if ERnP data is also allowed
+ log.debug("Find #{} data sets in person information",
+ personEl.getPersonendaten().getPersonErgebnis().size());
+
+ if (personEl.getPersonendaten().getPersonErgebnis().size() > 1) {
+ log.error("Find more than on PersoenErgebnis in Personendaten.");
+ throw new EaafAuthenticationException(ERROR_MATCHING_02, null);
+
+ } else {
+ return mapZmrResponseToRegisterResult(
+ personEl.getPersonendaten().getPersonErgebnis().get(0), citizenCountryCode);
+
+ }
+
+ }
+
+ @Nonnull
+ private RegisterResult mapZmrResponseToRegisterResult(@Nonnull PersonErgebnisType person,
+ @Nonnull String citizenCountryCode) {
+ // TODO: kann ich bei historischen daten davon ausgehen dass die Reihenfolge der
+ // Ergebnisse von aktuell --> alt ist?
+
+ // build result
+ return RegisterResult.builder()
+ .pseudonym(selectAllEidasDocument(person, citizenCountryCode,
+ Constants.eIDAS_ATTRURN_PERSONALIDENTIFIER))
+ .familyName(person.getNatuerlichePerson().getPersonenName().getFamilienname())
+ .givenName(person.getNatuerlichePerson().getPersonenName().getVorname())
+ .dateOfBirth(person.getNatuerlichePerson().getGeburtsdatum())
+ .bpk(extractBpkZp(person.getNatuerlichePerson()))
+ .placeOfBirth(selectSingleEidasDocument(person, citizenCountryCode,
+ Constants.eIDAS_ATTRURN_PLACEOFBIRTH))
+ .birthName(selectSingleEidasDocument(person, citizenCountryCode,
+ Constants.eIDAS_ATTRURN_BIRTHNAME))
+ .build();
+
+ }
+
+ private String extractBpkZp(NatuerlichePersonErgebnisType natuerlichePerson) {
+ String bpk = natuerlichePerson.getIdentification().stream()
+ .filter(el -> Constants.MATCHING_INTERNAL_BPK_TARGET.equals(el.getType()))
+ .findFirst()
+ .map(el -> el.getValue())
+ .orElse(null);
+ if (StringUtils.isEmpty(bpk)) {
+ //TODO: should we throw an error in that case?
+ log.warn("ZMR response contains no 'bPK' for target: 'ZP'");
+
+ }
+ return bpk;
+
+ }
+
+ /**
+ * Get all eIDAS document with the specified country code and document type.
+ *
+ * @param person Person information from ZMR
+ * @param citizenCountryCode Country code of the eIDAS attribute
+ * @param eidasAttrurnPersonalidentifier eIDAS attribute identifier
+ * @return {@link List} of eIDAS attribute values or an empty list if's not
+ * found
+ */
+ @NonNull
+ private List<String> selectAllEidasDocument(PersonErgebnisType person, String citizenCountryCode,
+ String eidasAttrurnPersonalidentifier) {
+ return person.getEidasIdentitaet().stream()
+ .filter(el -> eidasAttrurnPersonalidentifier.equals(el.getEidasArt())
+ && el.getStaatscode2().equals(citizenCountryCode))
+ .map(el -> el.getEidasWert())
+ .collect(Collectors.toList());
+
+ }
+
+ /**
+ * Get the first eIDAS document with the specified country code and document
+ * type.
+ *
+ * @param person Person information from ZMR
+ * @param citizenCountryCode Country code of the eIDAS attribute
+ * @param eidasAttrurnPersonalidentifier eIDAS attribute identifier
+ * @return Value of this eIDAS attribute or <code>null</code> if's not found
+ */
+ @Nullable
+ private String selectSingleEidasDocument(PersonErgebnisType person, String citizenCountryCode,
+ String eidasAttrurnPersonalidentifier) {
+ return person.getEidasIdentitaet().stream()
+ .filter(el -> eidasAttrurnPersonalidentifier.equals(el.getEidasArt())
+ && el.getStaatscode2().equals(citizenCountryCode))
+ .findFirst()
+ .map(el -> el.getEidasWert())
+ .orElse(null);
+
+ }
+
+ private PersonErgebnisType searchPersonForUpdate(BigInteger zmrProzessId, RegisterResult registerResult)
+ throws ServiceFault, WorkflowException {
+ // build search request
+ final RequestType req = new RequestType();
+
+ // set eIDAS person information
+ final PersonSuchenRequest searchPersonReq = new PersonSuchenRequest();
+ req.setPersonSuchenRequest(searchPersonReq);
+ NatuerlichePersonTyp natPersonInfos = new NatuerlichePersonTyp();
+ searchPersonReq.setNatuerlichePerson(natPersonInfos);
+ PersonenNameTyp nameInfo = new PersonenNameTyp();
+ natPersonInfos.setPersonenName(nameInfo);
+ IdentificationType bpkInfo = new IdentificationType();
+ natPersonInfos.getIdentification().add(bpkInfo);
+
+ // set MDS
+ nameInfo.setVorname(registerResult.getGivenName());
+ nameInfo.setFamilienname(registerResult.getFamilyName());
+ natPersonInfos.setGeburtsdatum(registerResult.getDateOfBirth());
+
+ //set bPK
+ bpkInfo.setValue(registerResult.getBpk());
+ bpkInfo.setType(EaafConstants.URN_PREFIX_CDID + "ZP");
+
+ // set work-flow client information
+ req.setWorkflowInfoClient(generateWorkFlowInfos(PROCESS_TASK_SEARCH, zmrProzessId));
+ req.setClientInfo(generateClientInfos());
+
+ // set additionl search parameters
+ searchPersonReq.setPersonensucheInfo(generateSearchCriteria(
+ PROCESS_KITT_IDENITIES_GET, false, true, false));
+
+ // request ZMR
+ log.trace("Requesting ZMR for '{}' operation", PROCESS_KITT_IDENITIES_GET);
+ ResponseType resp = zmrClient.service(req, null);
+ log.trace("Receive response from ZMR for '{}' operation", PROCESS_KITT_IDENITIES_GET);
+
+ return extractPersonResultForUpdaste(resp);
+
+ }
+
+ private PersonErgebnisType extractPersonResultForUpdaste(ResponseType resp) throws WorkflowException {
+ final PersonSuchenResponse searchPersonResp = resp.getPersonSuchenResponse();
+ if (searchPersonResp.getPersonensuchergebnis() == null
+ || searchPersonResp.getPersonensuchergebnis().getPersonErgebnisSatz().isEmpty()) {
+ log.error("ZMR result contains NO 'Personensuchergebnis' or 'PersonErgebnisSatz' is empty");
+ throw new WorkflowException(PROCESS_KITT_IDENITIES_GET,
+ "Find NO data-set with already matchted eID during ZMR KITT process");
+
+ } else {
+ List<PersonErgebnisSatzType> personErgebnisSatz =
+ searchPersonResp.getPersonensuchergebnis().getPersonErgebnisSatz();
+ if (personErgebnisSatz.size() > 1) {
+ log.error("Find more than on person with aleady matched information.");
+ throw new WorkflowException(PROCESS_KITT_IDENITIES_GET,
+ "Find MORE-THAN-ONE data-sets with already matchted eID during ZMR KITT process");
+
+ } else {
+ return personErgebnisSatz.get(0).getPersonendaten().getPersonErgebnis().get(0);
+
+ }
+ }
+ }
+
+ private NatuerlichePersonTyp buildSearchNatPerson(String givenName, String familyName, String dateOfBirth) {
+ final NatuerlichePersonTyp searchNatPerson = new NatuerlichePersonTyp();
+ final PersonenNameTyp searchNatPersonName = new PersonenNameTyp();
+ searchNatPerson.setPersonenName(searchNatPersonName);
+ searchNatPersonName.setFamilienname(familyName);
+ searchNatPersonName.setVorname(givenName);
+ searchNatPerson.setGeburtsdatum(dateOfBirth);
+ return searchNatPerson;
+
+ }
+
+ private PostAdresseTyp buildSearchAddress(AdresssucheOutput address) {
+ PostAdresseTyp postAdresse = new PostAdresseTyp();
+ if (StringUtils.isNotBlank(address.getPostleitzahl())) {
+ postAdresse.setPostleitzahl(address.getPostleitzahl());
+ }
+ if (StringUtils.isNotBlank(address.getMunicipality())) {
+ postAdresse.setGemeinde(address.getMunicipality());
+ }
+ if (StringUtils.isNotBlank(address.getVillage())) {
+ postAdresse.setOrtschaft(address.getVillage());
+ }
+ if (StringUtils.isNotBlank(address.getStreet()) || StringUtils.isNotBlank(address.getNumber())) {
+ ZustelladresseTyp zustelladresse = new ZustelladresseTyp();
+ if (StringUtils.isNotBlank(address.getStreet())) {
+ zustelladresse.setStrassenname(address.getStreet());
+ }
+ if (StringUtils.isNotBlank(address.getNumber())) {
+ zustelladresse.setOrientierungsnummer(address.getNumber());
+ }
+ postAdresse.setZustelladresse(zustelladresse);
+ }
+
+ return postAdresse;
+
+ }
+
+ private Collection<? extends EidasIdentitaetAnlageType> selectEidasDocumentsToAdd(
+ PersonErgebnisType zmrPersonToKitt, SimpleEidasData eidData) {
+
+ //TODO: maybe we should re-factor SimpleEidasData to a generic data-model to facilitate arbitrary eIDAS attributes
+ Set<EidasIdentitaetAnlageType> result = new HashSet<>();
+ addEidasDocumentIfNotAvailable(result, zmrPersonToKitt, eidData.getCitizenCountryCode(),
+ Constants.eIDAS_ATTRURN_PERSONALIDENTIFIER, eidData.getPseudonym(), true);
+ addEidasDocumentIfNotAvailable(result, zmrPersonToKitt, eidData.getCitizenCountryCode(),
+ Constants.eIDAS_ATTRURN_PLACEOFBIRTH, eidData.getPlaceOfBirth(), false);
+ addEidasDocumentIfNotAvailable(result, zmrPersonToKitt, eidData.getCitizenCountryCode(),
+ Constants.eIDAS_ATTRURN_BIRTHNAME, eidData.getBirthName(), false);
+
+ // add MDS attributes as 'eIDAS-Documents' too, because ZMR does not allow a MDS update on regular places.
+ addEidasDocumentIfNotAvailable(result, zmrPersonToKitt, eidData.getCitizenCountryCode(),
+ Constants.eIDAS_ATTRURN_CURRENTGIVENNAME, eidData.getGivenName(), false);
+ addEidasDocumentIfNotAvailable(result, zmrPersonToKitt, eidData.getCitizenCountryCode(),
+ Constants.eIDAS_ATTRURN_CURRENTFAMILYNAME, eidData.getFamilyName(), false);
+ addEidasDocumentIfNotAvailable(result, zmrPersonToKitt, eidData.getCitizenCountryCode(),
+ Constants.eIDAS_ATTRURN_DATEOFBIRTH, eidData.getDateOfBirth(), false);
+
+ return result;
+
+ }
+
+ private void addEidasDocumentIfNotAvailable(Set<EidasIdentitaetAnlageType> result,
+ PersonErgebnisType zmrPersonToKitt, String citizenCountryCode,
+ String attrName, String attrValue, boolean allowMoreThanOneEntry) {
+
+ if (StringUtils.isEmpty(attrValue)) {
+ log.trace("No eIDAS document: {}. Nothing todo for KITT process ... ", attrName);
+ return;
+
+ }
+
+ // check if eIDAS attribute is already includes an eIDAS-Document
+ boolean alreadyExist = zmrPersonToKitt.getEidasIdentitaet().stream()
+ .filter(el -> el.getEidasWert().equals(attrValue)
+ && el.getEidasArt().equals(attrName)
+ && el.getStaatscode2().equals(citizenCountryCode))
+ .findAny()
+ .isPresent();
+
+ if (!alreadyExist) {
+ // check eIDAS documents already contains a document with this pair of country-code and attribute-name
+ Optional<EidasIdentitaetErgebnisType> oneDocWithNameExists = zmrPersonToKitt.getEidasIdentitaet().stream()
+ .filter(el -> el.getStaatscode2().equals(citizenCountryCode)
+ && el.getEidasArt().equals(attrName))
+ .findAny();
+
+ if (!allowMoreThanOneEntry && oneDocWithNameExists.isPresent()
+ && !oneDocWithNameExists.get().getEidasWert().equals(attrValue)) {
+ log.warn("eIDAS document: {} already exists for country: {} but attribute-value does not match. "
+ + "Skip update process because no multi-value allowed for this ... ",
+ attrName, citizenCountryCode);
+
+ } else {
+ EidasIdentitaetAnlageType eidasDocToAdd = new EidasIdentitaetAnlageType();
+ eidasDocToAdd.setStaatscode2(citizenCountryCode);
+ eidasDocToAdd.setEidasArt(attrName);
+ eidasDocToAdd.setEidasWert(attrValue);
+ log.info("Add eIDAS document: {} for country: {} to ZMR person", attrName, citizenCountryCode);
+ result.add(eidasDocToAdd);
+
+ }
+
+ } else {
+ log.debug("eIDAS document: {} already exists for country: {}. Skip update process for this ... ",
+ attrName, citizenCountryCode);
+
+ }
+ }
+
+ private ZmrRegisterResult updatePersonInZmr(BigInteger zmrProzessId, PersonErgebnisType zmrPersonToKitt,
+ Collection<? extends EidasIdentitaetAnlageType> eidasDocumentToAdd, String citizenCountryCode)
+ throws ServiceFault {
+ final RequestType req = new RequestType();
+
+ // set work-flow client information
+ req.setWorkflowInfoClient(generateWorkFlowInfos(PROCESS_TASK_UPDATE, zmrProzessId));
+ req.setClientInfo(generateClientInfos());
+
+ PersonAendernRequest updateReq = new PersonAendernRequest();
+ req.setPersonAendernRequest(updateReq);
+
+ // set reference elements for person update
+ PersonReferenzType updateRef = new PersonReferenzType();
+ updateRef.setTechnisch(zmrPersonToKitt.getEntityErgebnisReferenz().getTechnisch());
+ updateRef.setZMRZahl(zmrPersonToKitt.getZMRZahl());
+ updateReq.setPersonReferenz(updateRef);
+
+ // set reason from this update
+ PersonAendernInfoType updateInfo = new PersonAendernInfoType();
+ updateInfo.setGrundCode(basicConfig.getBasicConfiguration(
+ Constants.CONIG_PROPS_EIDAS_ZMRCLIENT_REQ_UPDATE_REASON_CODE));
+ updateInfo.setGrundFreitext(basicConfig.getBasicConfiguration(
+ Constants.CONIG_PROPS_EIDAS_ZMRCLIENT_REQ_UPDATE_REASON_TEXT));
+ updateReq.setPersonAendernInfo(updateInfo);
+
+ // add new eIDAS documents that should be added
+ updateReq.getEidasIdentitaetAnlage().addAll(eidasDocumentToAdd);
+
+ // request ZMR
+ log.trace("Requesting ZMR for '{}' operation", PROCESS_KITT_IDENITIES_UPDATE);
+ ResponseType resp = zmrClient.service(req, null);
+ log.trace("Receive response from ZMR for '{}' operation", PROCESS_KITT_IDENITIES_UPDATE);
+
+ return new ZmrRegisterResult(Arrays.asList(
+ mapZmrResponseToRegisterResult(resp.getPersonAendernResponse().getPersonErgebnis(), citizenCountryCode)),
+ extractZmrProcessId(resp.getWorkflowInfoServer()));
+
+ }
+
+}
diff --git a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/config/EidasConnectorMessageSource.java b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/config/EidasConnectorMessageSource.java
new file mode 100644
index 00000000..7a9f472a
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/config/EidasConnectorMessageSource.java
@@ -0,0 +1,21 @@
+package at.asitplus.eidas.specific.modules.auth.eidas.v2.config;
+
+import java.util.Arrays;
+import java.util.List;
+
+import at.gv.egiz.eaaf.core.api.logging.IMessageSourceLocation;
+
+/**
+ * Inject eIDAS Connector specific messages into Spring based message-source.
+ *
+ * @author tlenz
+ *
+ */
+public class EidasConnectorMessageSource implements IMessageSourceLocation {
+
+ @Override
+ public List<String> getMessageSourceLocation() {
+ return Arrays.asList("classpath:/messages/eidas_connector_message");
+ }
+
+}
diff --git a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/controller/AdresssucheController.java b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/controller/AdresssucheController.java
new file mode 100644
index 00000000..6f49c700
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/controller/AdresssucheController.java
@@ -0,0 +1,195 @@
+/*
+ * Copyright 2018 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.controller;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.builder.CompareToBuilder;
+import org.jetbrains.annotations.NotNull;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import at.asitplus.eidas.specific.core.MsEidasNodeConstants;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.clients.zmr.ZmrAddressSoapClient;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.exception.EidasSAuthenticationException;
+import at.gv.bmi.namespace.zmr_su.zrm._20040201_.address.Adressdaten;
+import at.gv.e_government.reference.namespace.persondata.de._20040201.PostAdresseTyp;
+import at.gv.e_government.reference.namespace.persondata.de._20040201.ZustelladresseTyp;
+import at.gv.egiz.eaaf.core.api.data.EaafConstants;
+import at.gv.egiz.eaaf.core.api.utils.IPendingRequestIdGenerationStrategy;
+import at.gv.egiz.eaaf.core.exceptions.PendingReqIdValidationException;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * Default process-engine signaling controller.
+ *
+ * @author tlenz
+ */
+@Controller
+@Slf4j
+public class AdresssucheController {
+
+ public static final String PARAM_POSTLEITZAHL = "postleitzahl";
+ public static final String PARAM_MUNIPICALITY = "municipality";
+ public static final String PARAM_VILLAGE = "village";
+ public static final String PARAM_STREET = "street";
+ public static final String PARAM_NUMBER = "number";
+
+ @Autowired
+ private ZmrAddressSoapClient client;
+
+ @Autowired
+ private IPendingRequestIdGenerationStrategy pendingReqGeneration;
+
+ /**
+ * Performs search for addresses in ZMR.
+ */
+ @RequestMapping(value = {MsEidasNodeConstants.ENDPOINT_RESIDENCY_SEARCH}, method = {RequestMethod.POST})
+ public ResponseEntity<AdresssucheResult> search(
+ @RequestParam(PARAM_POSTLEITZAHL) String postleitzahl,
+ @RequestParam(PARAM_MUNIPICALITY) String municipality,
+ @RequestParam(PARAM_VILLAGE) String village,
+ @RequestParam(PARAM_STREET) String street,
+ @RequestParam(PARAM_NUMBER) String number,
+ @RequestParam(EaafConstants.PARAM_HTTP_TARGET_PENDINGREQUESTID) String pendingId) {
+ log.info("Search with '{}', '{}', '{}', '{}', '{}'",
+ postleitzahl.replaceAll("[\r\n]", ""),
+ municipality.replaceAll("[\r\n]", ""),
+ village.replaceAll("[\r\n]", ""),
+ street.replaceAll("[\r\n]", ""),
+ number.replaceAll("[\r\n]", ""));
+ try {
+ pendingReqGeneration.validateAndGetPendingRequestId(pendingId);
+
+ } catch (PendingReqIdValidationException e) {
+ log.warn("Search with pendingId '{}' is not valid", pendingId.replaceAll("[\r\n]", ""));
+ return ResponseEntity.badRequest().build();
+
+ }
+
+ try {
+ Adressdaten searchInput = buildSearchInput(postleitzahl, municipality, village, street, number);
+ ZmrAddressSoapClient.AddressInfo searchOutput = client.searchAddress(searchInput);
+ AdresssucheResult output = buildResponse(searchOutput);
+ return ResponseEntity.ok(output);
+
+ } catch (EidasSAuthenticationException e) {
+ log.warn("Search failed", e);
+ return ResponseEntity.badRequest().build();
+
+ }
+ }
+
+ private AdresssucheResult buildResponse(ZmrAddressSoapClient.AddressInfo searchOutput) {
+ if (searchOutput.getPersonResult().isEmpty()) {
+ log.warn("No result from ZMR");
+ return new AdresssucheResult(Collections.emptyList(), 0);
+
+ }
+
+ log.info("Result level is {}", searchOutput.getLevel());
+ Set<AdresssucheOutput> result = searchOutput.getPersonResult().stream()
+ .map(Adressdaten::getPostAdresse)
+ .map(it -> new AdresssucheOutput(it.getPostleitzahl(), it.getGemeinde(), it.getOrtschaft(),
+ it.getZustelladresse().getStrassenname(), it.getZustelladresse().getOrientierungsnummer()))
+ .collect(Collectors.toSet());
+ // TODO Add configuration option for the limit of 30
+ List<AdresssucheOutput> sorted = result.stream().sorted().limit(30).collect(Collectors.toList());
+ return new AdresssucheResult(sorted, result.size());
+
+ }
+
+ private Adressdaten buildSearchInput(String postleitzahl,
+ String municipality,
+ String village,
+ String street,
+ String number) {
+ PostAdresseTyp postAdresse = new PostAdresseTyp();
+ if (StringUtils.isNotBlank(postleitzahl)) {
+ postAdresse.setPostleitzahl(postleitzahl);
+ }
+ if (StringUtils.isNotBlank(municipality)) {
+ postAdresse.setGemeinde(municipality);
+ }
+ if (StringUtils.isNotBlank(village)) {
+ postAdresse.setOrtschaft(village);
+ }
+ if (StringUtils.isNotBlank(street) || StringUtils.isNotBlank(number)) {
+ ZustelladresseTyp zustelladresse = new ZustelladresseTyp();
+ if (StringUtils.isNotBlank(street)) {
+ zustelladresse.setStrassenname(street);
+ }
+ if (StringUtils.isNotBlank(number)) {
+ zustelladresse.setOrientierungsnummer(number);
+ }
+ postAdresse.setZustelladresse(zustelladresse);
+ }
+ Adressdaten searchInput = new Adressdaten();
+ searchInput.setPostAdresse(postAdresse);
+ return searchInput;
+
+ }
+
+ @Data
+ @AllArgsConstructor
+ public static class AdresssucheResult {
+ private final Collection<AdresssucheOutput> results;
+ private final int resultCount;
+ }
+
+ @Data
+ @AllArgsConstructor
+ @Builder
+ public static class AdresssucheOutput implements Comparable<AdresssucheOutput> {
+ private final String postleitzahl;
+ private final String municipality;
+ private final String village;
+ private final String street;
+ private final String number;
+
+ @Override
+ public int compareTo(@NotNull AdresssucheOutput o) {
+ return new CompareToBuilder()
+ .append(this.postleitzahl, o.postleitzahl)
+ .append(this.municipality, o.municipality)
+ .append(this.village, o.village)
+ .append(this.street, o.street)
+ .append(this.number, o.number)
+ .toComparison();
+ }
+ }
+
+}
diff --git a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/dao/MatchedPersonResult.java b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/dao/MatchedPersonResult.java
new file mode 100644
index 00000000..1dcea7fc
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/dao/MatchedPersonResult.java
@@ -0,0 +1,45 @@
+package at.asitplus.eidas.specific.modules.auth.eidas.v2.dao;
+
+import java.io.Serializable;
+
+import lombok.Builder;
+import lombok.Getter;
+
+/**
+ * Information about a natural person that is already matched.
+ *
+ * @author tlenz
+ *
+ */
+@Getter
+@Builder
+public class MatchedPersonResult implements Serializable {
+
+ private static final long serialVersionUID = 9110998952621456281L;
+
+ /**
+ * Matched person result from matching result.
+ *
+ * @param matchingResult Result of the matching process
+ * @param citizenCountryCode Country-Code of the eIDAS Proxy-Service
+ */
+ public static MatchedPersonResult generateFormMatchingResult(RegisterResult matchingResult,
+ String citizenCountryCode) {
+ return MatchedPersonResult.builder()
+ .familyName(matchingResult.getFamilyName())
+ .givenName(matchingResult.getGivenName())
+ .dateOfBirth(matchingResult.getDateOfBirth())
+ .bpk(matchingResult.getBpk())
+ .countryCode(citizenCountryCode)
+ .build();
+ }
+
+ private final String countryCode;
+ private final String givenName;
+ private final String familyName;
+ private final String dateOfBirth;
+ private final String bpk;
+
+ private String vsz;
+
+}
diff --git a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/dao/RegisterResult.java b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/dao/RegisterResult.java
new file mode 100644
index 00000000..e5878ff3
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/dao/RegisterResult.java
@@ -0,0 +1,54 @@
+/*
+ * 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.dao;
+
+import java.io.Serializable;
+import java.util.List;
+
+import at.gv.e_government.reference.namespace.persondata._20020228.PostalAddressType;
+import lombok.Builder;
+import lombok.Getter;
+
+@Builder
+@Getter
+public class RegisterResult implements Serializable {
+
+ private static final long serialVersionUID = 762728480185716130L;
+
+ // MDS
+ private final List<String> pseudonym;
+ private final String givenName;
+ private final String familyName;
+ private final String dateOfBirth;
+
+ // additional attributes
+ private String placeOfBirth;
+ private String birthName;
+ private String taxNumber;
+ private PostalAddressType address;
+
+ private String bpk;
+
+
+}
diff --git a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/dao/SelectedLoginMethod.java b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/dao/SelectedLoginMethod.java
new file mode 100644
index 00000000..70904e4f
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/dao/SelectedLoginMethod.java
@@ -0,0 +1,5 @@
+package at.asitplus.eidas.specific.modules.auth.eidas.v2.dao;
+
+public enum SelectedLoginMethod {
+ EIDAS_LOGIN, MOBILE_PHONE_SIGNATURE_LOGIN, NO_OTHER_LOGIN, ADD_ME_AS_NEW
+}
diff --git a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/dao/SimpleEidasData.java b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/dao/SimpleEidasData.java
new file mode 100644
index 00000000..aca5025f
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/dao/SimpleEidasData.java
@@ -0,0 +1,108 @@
+/*
+ * 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.dao;
+
+import java.io.Serializable;
+
+import org.apache.commons.lang3.builder.EqualsBuilder;
+
+import at.gv.e_government.reference.namespace.persondata._20020228.PostalAddressType;
+import lombok.Builder;
+import lombok.Data;
+
+@Data
+@Builder(toBuilder = true)
+public class SimpleEidasData implements Serializable {
+
+ private static final long serialVersionUID = 2848914124372968418L;
+
+ /**
+ * Full eIDAS personal identifier with prefix.
+ */
+ private final String personalIdentifier;
+
+ /**
+ * Citizen country-code from eIDAS personal-identifier.
+ */
+ private final String citizenCountryCode;
+
+ // MDS
+ /**
+ * eIDAS personal identifier without prefix.
+ */
+ private final String pseudonym;
+ private final String givenName;
+ private final String familyName;
+ private final String dateOfBirth;
+
+ // additional attributes
+ private final String placeOfBirth;
+ private final String birthName;
+ private final PostalAddressType address;
+ private final String taxNumber;
+
+ /**
+ * Compares the register result with the EIDAS data (given name, family name, date of birth, personal identifier).
+ *
+ * @param result The register data to use for comparison
+ * @return whether the data (given name, family name, date of birth, personal identifier) match
+ */
+ public boolean equalsRegisterData(RegisterResult result) {
+ return new EqualsBuilder()
+ .append(result.getGivenName(), givenName)
+ .append(result.getFamilyName(), familyName)
+ .append(result.getDateOfBirth(), dateOfBirth)
+ .appendSuper(result.getPseudonym().stream().anyMatch(el -> el.equals(pseudonym)))
+ .appendSuper(checkOptionalAttributes(result.getPlaceOfBirth(), placeOfBirth))
+ .appendSuper(checkOptionalAttributes(result.getBirthName(), birthName))
+ .isEquals();
+
+ }
+
+ /**
+ * Checks if the MDS (<code>givenName</code>, <code>familyName</code>,
+ * <code>dateOfBirth</code>) matches.
+ */
+ public boolean equalsMds(SimpleEidasData other) {
+ return new EqualsBuilder()
+ .append(other.givenName, givenName)
+ .append(other.familyName, familyName)
+ .append(other.dateOfBirth, dateOfBirth)
+ .isEquals();
+ }
+
+ /**
+ * Check if eIDAS attribute is available.
+ *
+ * @param registerData Attribute value from register
+ * @param eidasData Attribute value from eIDAS
+ * @return <code>true</code> if eidasData is <code>null</code> or eidasData does not match to register value,
+ * otherwise <code>false</code>
+ */
+ private static boolean checkOptionalAttributes(String registerData, String eidasData) {
+ return eidasData == null || eidasData.equals(registerData);
+
+ }
+
+}
diff --git a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/dao/SimpleMobileSignatureData.java b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/dao/SimpleMobileSignatureData.java
new file mode 100644
index 00000000..54cb3f31
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/dao/SimpleMobileSignatureData.java
@@ -0,0 +1,57 @@
+/*
+ * 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.dao;
+
+import java.io.Serializable;
+
+import org.apache.commons.lang3.builder.EqualsBuilder;
+
+import lombok.Builder;
+import lombok.Data;
+
+@Data
+@Builder
+public class SimpleMobileSignatureData implements Serializable {
+
+ private static final long serialVersionUID = 7775305733438275312L;
+
+ private final String bpk;
+ private final String givenName;
+ private final String familyName;
+ private final String dateOfBirth;
+
+ /**
+ * Compares the received authentication data from the mobile phone signature with the eid data received via eIDAS.
+ *
+ * @param simpleEidasData The extracted eIDAS data
+ * @return Returns true, if the eIDAS data matches the mobile phone signature data and false otherwise.
+ */
+ public boolean equalsSimpleEidasData(SimpleEidasData simpleEidasData) {
+ return new EqualsBuilder()
+ .append(simpleEidasData.getGivenName(), givenName)
+ .append(simpleEidasData.getFamilyName(), familyName)
+ .append(simpleEidasData.getDateOfBirth(), dateOfBirth)
+ .isEquals();
+ }
+}
diff --git a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/ernp/DummyErnpClient.java b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/ernp/DummyErnpClient.java
new file mode 100644
index 00000000..dabb73dc
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/ernp/DummyErnpClient.java
@@ -0,0 +1,81 @@
+/*
+ * 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.ernp;
+
+import java.util.Collections;
+
+import org.springframework.stereotype.Service;
+
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.clients.ernp.ErnpRestClient.ErnpRegisterResult;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.clients.ernp.IErnpClient;
+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.exception.EidasSAuthenticationException;
+import at.gv.bmi.namespace.zmr_su.zmr._20040201.PersonSuchenRequest;
+
+@Service("ErnbClientForeIDAS")
+public class DummyErnpClient implements IErnpClient {
+
+
+ @Override
+ public ErnpRegisterResult searchWithPersonIdentifier(String personIdentifier, String citizenCountryCode)
+ throws EidasSAuthenticationException {
+ return buildEmptyResult();
+ }
+
+ @Override
+ public ErnpRegisterResult searchWithMds(String givenName, String familyName, String dateOfBirth,
+ String citizenCountryCode) throws EidasSAuthenticationException {
+ return buildEmptyResult();
+ }
+
+ @Override
+ public ErnpRegisterResult searchCountrySpecific(PersonSuchenRequest personSearchDao,
+ String citizenCountryCode) throws EidasSAuthenticationException {
+ return buildEmptyResult();
+ }
+
+ @Override
+ public ErnpRegisterResult update(RegisterResult registerResult, SimpleEidasData eidData)
+ throws EidasSAuthenticationException {
+ return buildEmptyResult();
+ }
+
+ @Override
+ public ErnpRegisterResult searchWithResidenceData(String givenName, String familyName, String dateOfBirth,
+ String zipcode, String city, String street) {
+ return buildEmptyResult();
+ }
+
+ private static ErnpRegisterResult buildEmptyResult() {
+ return new ErnpRegisterResult(Collections.emptyList());
+
+ }
+
+ @Override
+ public ErnpRegisterResult add(SimpleEidasData eidData) throws EidasSAuthenticationException {
+ return buildEmptyResult();
+ }
+
+}
diff --git a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/exception/ErnpRestCommunicationException.java b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/exception/ErnpRestCommunicationException.java
new file mode 100644
index 00000000..566a8fa4
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/exception/ErnpRestCommunicationException.java
@@ -0,0 +1,29 @@
+package at.asitplus.eidas.specific.modules.auth.eidas.v2.exception;
+
+import java.io.IOException;
+
+import lombok.Getter;
+
+/**
+ * ERnP exception in case of a REST communication error.
+ *
+ * @author tlenz
+ *
+ */
+public class ErnpRestCommunicationException extends IOException {
+ private static final long serialVersionUID = -3178689122077228976L;
+
+ @Getter
+ int httpStatusCode;
+
+ /**
+ * ERnP communication error on HTTP REST level.
+ *
+ * @param rawStatusCode HTTP statuscode
+ */
+ public ErnpRestCommunicationException(int rawStatusCode) {
+ super("ERnP service answers with an error and HTTP status-code: " + rawStatusCode);
+ this.httpStatusCode = rawStatusCode;
+
+ }
+}
diff --git a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/exception/ManualFixNecessaryException.java b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/exception/ManualFixNecessaryException.java
new file mode 100644
index 00000000..cf69bd2c
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/exception/ManualFixNecessaryException.java
@@ -0,0 +1,44 @@
+/*
+ * 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.exception;
+
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.SimpleEidasData;
+
+public class ManualFixNecessaryException extends EidasSAuthenticationException {
+ private static final long serialVersionUID = 1L;
+
+ //TODO: should we pass some infos?
+ public ManualFixNecessaryException(String personIdentifier) {
+ super("module.eidasauth.matching.04", new Object[] { personIdentifier });
+ }
+
+ public ManualFixNecessaryException(SimpleEidasData eidData) {
+ super("module.eidasauth.matching.04", new Object[] { eidData.getPseudonym() });
+ }
+
+ public ManualFixNecessaryException(SimpleEidasData eidData, Throwable e) {
+ super("module.eidasauth.matching.04", new Object[] { eidData.getPseudonym() }, e);
+ }
+
+}
diff --git a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/exception/WorkflowException.java b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/exception/WorkflowException.java
new file mode 100644
index 00000000..795b4386
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/exception/WorkflowException.java
@@ -0,0 +1,94 @@
+/*
+ * 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.exception;
+
+import lombok.Getter;
+
+@Getter
+public class WorkflowException extends EidasSAuthenticationException {
+ private static final long serialVersionUID = 1L;
+
+ private String processStepName;
+ private String errorReason;
+ private boolean requiresManualFix = false;
+
+ /**
+ * In case of a error during matching work-flow.
+ *
+ * @param processStep Matching step identifier
+ * @param errorReason Reason for this error
+ */
+ public WorkflowException(String processStep, String errorReason) {
+ super("module.eidasauth.matching.03", new Object[]{processStep, errorReason});
+ this.processStepName = processStep;
+ this.errorReason = errorReason;
+
+ }
+
+ /**
+ * In case of a error during matching work-flow.
+ *
+ * @param processStep Matching step identifier
+ * @param errorReason Reason for this error
+ * @param e Catched exception
+ */
+ public WorkflowException(String processStep, String errorReason, Throwable e) {
+ super("module.eidasauth.matching.03", new Object[]{processStep, errorReason}, e);
+ this.processStepName = processStep;
+ this.errorReason = errorReason;
+
+ }
+
+ /**
+ * In case of a error during matching work-flow.
+ *
+ * @param processStep Matching step identifier
+ * @param errorReason Reason for this error
+ * @param needsManualFix Mark this work-flow as manually fixable
+ */
+ public WorkflowException(String processStep, String errorReason, boolean needsManualFix) {
+ super("module.eidasauth.matching.03", new Object[]{processStep, errorReason});
+ this.processStepName = processStep;
+ this.errorReason = errorReason;
+ this.requiresManualFix = needsManualFix;
+
+ }
+
+ /**
+ * In case of a error during matching work-flow.
+ *
+ * @param processStep Matching step identifier
+ * @param errorReason Reason for this error
+ * @param needsManualFix Mark this work-flow as manually fixable
+ * @param e Catched exception
+ */
+ public WorkflowException(String processStep, String errorReason, boolean needsManualFix, Throwable e) {
+ super("module.eidasauth.matching.03", new Object[]{processStep, errorReason}, e);
+ this.processStepName = processStep;
+ this.errorReason = errorReason;
+ this.requiresManualFix = needsManualFix;
+
+ }
+
+}
diff --git a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/exception/ZmrCommunicationException.java b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/exception/ZmrCommunicationException.java
new file mode 100644
index 00000000..a6978458
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/exception/ZmrCommunicationException.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2018 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.exception;
+
+public class ZmrCommunicationException extends EidasSAuthenticationException {
+
+ private static final long serialVersionUID = 1L;
+
+ public ZmrCommunicationException(String internalMsgId, Object[] params) {
+ super(internalMsgId, params);
+ }
+
+ public ZmrCommunicationException(String internalMsgId, Object[] params, Throwable e) {
+ super(internalMsgId, params, e);
+ }
+
+}
diff --git a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/handler/AbstractEidProcessor.java b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/handler/AbstractEidProcessor.java
index 323a37e2..60138027 100644
--- a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/handler/AbstractEidProcessor.java
+++ b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/handler/AbstractEidProcessor.java
@@ -23,6 +23,11 @@
package at.asitplus.eidas.specific.modules.auth.eidas.v2.handler;
+
+
+import static at.asitplus.eidas.specific.modules.auth.eidas.v2.utils.EidasResponseUtils.processCountryCode;
+import static at.asitplus.eidas.specific.modules.auth.eidas.v2.utils.EidasResponseUtils.processDateOfBirthToString;
+
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
@@ -33,15 +38,13 @@ import java.util.regex.Pattern;
import org.apache.commons.lang3.StringUtils;
import org.joda.time.DateTime;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.lang.NonNull;
import com.google.common.collect.ImmutableSortedSet;
import at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants;
-import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.ErnbEidData;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.SimpleEidasData;
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.service.EidasAttributeRegistry;
@@ -51,15 +54,14 @@ import at.gv.egiz.eaaf.core.api.IRequest;
import at.gv.egiz.eaaf.core.api.data.EaafConstants;
import at.gv.egiz.eaaf.core.api.idp.IConfigurationWithSP;
import at.gv.egiz.eaaf.core.api.idp.ISpConfiguration;
-import at.gv.egiz.eaaf.core.impl.data.Triple;
import eu.eidas.auth.commons.attribute.AttributeDefinition;
import eu.eidas.auth.commons.attribute.ImmutableAttributeMap;
import eu.eidas.auth.commons.light.impl.LightRequest.Builder;
import eu.eidas.auth.commons.protocol.eidas.SpType;
-import eu.eidas.auth.commons.protocol.eidas.impl.PostalAddress;
+import lombok.extern.slf4j.Slf4j;
+@Slf4j
public abstract class AbstractEidProcessor implements INationalEidProcessor {
- private static final Logger log = LoggerFactory.getLogger(AbstractEidProcessor.class);
@Autowired
protected EidasAttributeRegistry attrRegistry;
@@ -72,39 +74,40 @@ public abstract class AbstractEidProcessor implements INationalEidProcessor {
buildLevelOfAssurance(pendingReq.getServiceProviderConfiguration(), authnRequestBuilder);
buildProviderNameAndRequesterIdAttribute(pendingReq, authnRequestBuilder);
buildRequestedAttributes(authnRequestBuilder);
-
}
@Override
- public final ErnbEidData postProcess(Map<String, Object> eidasAttrMap) throws EidPostProcessingException,
+ public final SimpleEidasData postProcess(Map<String, Object> eidasAttrMap) throws EidPostProcessingException,
EidasAttributeException {
- final ErnbEidData result = new ErnbEidData();
-
- final Object eIdentifierObj = eidasAttrMap.get(Constants.eIDAS_ATTR_PERSONALIDENTIFIER);
- final Triple<String, String, String> eIdentifier =
- EidasResponseUtils.parseEidasPersonalIdentifier((String) eIdentifierObj);
- result.setCitizenCountryCode(eIdentifier.getFirst());
-
- // MDS attributes
- result.setPseudonym(processPseudonym(eidasAttrMap.get(Constants.eIDAS_ATTR_PERSONALIDENTIFIER)));
- result.setFamilyName(processFamilyName(eidasAttrMap.get(Constants.eIDAS_ATTR_CURRENTFAMILYNAME)));
- result.setGivenName(processGivenName(eidasAttrMap.get(Constants.eIDAS_ATTR_CURRENTGIVENNAME)));
- result.setDateOfBirth(processDateOfBirth(eidasAttrMap.get(Constants.eIDAS_ATTR_DATEOFBIRTH)));
-
- // additional attributes
- result.setPlaceOfBirth(processPlaceOfBirth(eidasAttrMap.get(Constants.eIDAS_ATTR_PLACEOFBIRTH)));
- result.setBirthName(processBirthName(eidasAttrMap.get(Constants.eIDAS_ATTR_BIRTHNAME)));
- result.setAddress(processAddress(eidasAttrMap.get(Constants.eIDAS_ATTR_CURRENTADDRESS)));
-
- return result;
-
+ SimpleEidasData.SimpleEidasDataBuilder builder = SimpleEidasData.builder()
+ .personalIdentifier(EidasResponseUtils.processPersonalIdentifier(
+ eidasAttrMap.get(Constants.eIDAS_ATTR_PERSONALIDENTIFIER)))
+
+ // MDS attributes
+ .citizenCountryCode(processCountryCode(eidasAttrMap.get(Constants.eIDAS_ATTR_PERSONALIDENTIFIER)))
+ .pseudonym(processPseudonym(eidasAttrMap.get(Constants.eIDAS_ATTR_PERSONALIDENTIFIER)))
+ .familyName(processFamilyName(eidasAttrMap.get(Constants.eIDAS_ATTR_CURRENTFAMILYNAME)))
+ .givenName(processGivenName(eidasAttrMap.get(Constants.eIDAS_ATTR_CURRENTGIVENNAME)))
+ .dateOfBirth(processDateOfBirthToString(eidasAttrMap.get(Constants.eIDAS_ATTR_DATEOFBIRTH)))
+
+ // additional attributes
+ .placeOfBirth(processPlaceOfBirth(eidasAttrMap.get(Constants.eIDAS_ATTR_PLACEOFBIRTH)))
+ .birthName(processBirthName(eidasAttrMap.get(Constants.eIDAS_ATTR_BIRTHNAME)))
+ .address(processAddress(eidasAttrMap.get(Constants.eIDAS_ATTR_CURRENTADDRESS)));
+
+ if (eidasAttrMap.containsKey(Constants.eIDAS_ATTR_TAXREFERENCE)) {
+ builder.taxNumber(EidasResponseUtils.processTaxReference(eidasAttrMap.get(Constants.eIDAS_ATTR_TAXREFERENCE)));
+
+ }
+
+ return builder.build();
}
-
+
/**
* Get a Map of country-specific requested attributes.
- *
+ *
* @return
*/
@NonNull
@@ -112,7 +115,7 @@ public abstract class AbstractEidProcessor implements INationalEidProcessor {
/**
* Post-Process the eIDAS CurrentAddress attribute.
- *
+ *
* @param currentAddressObj eIDAS current address information
* @return current address or null if no attribute is available
* @throws EidPostProcessingException if post-processing fails
@@ -120,34 +123,12 @@ public abstract class AbstractEidProcessor implements INationalEidProcessor {
*/
protected PostalAddressType processAddress(Object currentAddressObj) throws EidPostProcessingException,
EidasAttributeException {
-
- if (currentAddressObj != null) {
- if (currentAddressObj instanceof PostalAddress) {
- final PostalAddressType result = new PostalAddressType();
- result.setPostalCode(((PostalAddress) currentAddressObj).getPostCode());
- result.setMunicipality(((PostalAddress) currentAddressObj).getPostName());
-
- // TODO: add more mappings
-
- return result;
-
- } else {
- log.warn("eIDAS attr: " + Constants.eIDAS_ATTR_CURRENTADDRESS + " is of WRONG type");
- throw new EidasAttributeException(Constants.eIDAS_ATTR_CURRENTADDRESS);
-
- }
-
- } else {
- log.debug("NO '" + Constants.eIDAS_ATTR_CURRENTADDRESS + "' attribute. Post-Processing skipped ... ");
- }
-
- return null;
-
+ return EidasResponseUtils.processAddress(currentAddressObj);
}
/**
* Post-Process the eIDAS BirthName attribute.
- *
+ *
* @param birthNameObj eIDAS birthname information
* @return birthName or null if no attribute is available
* @throws EidPostProcessingException if post-processing fails
@@ -155,27 +136,12 @@ public abstract class AbstractEidProcessor implements INationalEidProcessor {
*/
protected String processBirthName(Object birthNameObj) throws EidPostProcessingException,
EidasAttributeException {
- if (birthNameObj != null) {
- if (birthNameObj instanceof String) {
- return (String) birthNameObj;
-
- } else {
- log.warn("eIDAS attr: " + Constants.eIDAS_ATTR_BIRTHNAME + " is of WRONG type");
- throw new EidasAttributeException(Constants.eIDAS_ATTR_BIRTHNAME);
-
- }
-
- } else {
- log.debug("NO '" + Constants.eIDAS_ATTR_BIRTHNAME + "' attribute. Post-Processing skipped ... ");
- }
-
- return null;
-
+ return EidasResponseUtils.processBirthName(birthNameObj);
}
/**
* Post-Process the eIDAS PlaceOfBirth attribute.
- *
+ *
* @param placeOfBirthObj eIDAS Place-of-Birth information
* @return place of Birth or null if no attribute is available
* @throws EidPostProcessingException if post-processing fails
@@ -183,27 +149,12 @@ public abstract class AbstractEidProcessor implements INationalEidProcessor {
*/
protected String processPlaceOfBirth(Object placeOfBirthObj) throws EidPostProcessingException,
EidasAttributeException {
- if (placeOfBirthObj != null) {
- if (placeOfBirthObj instanceof String) {
- return (String) placeOfBirthObj;
-
- } else {
- log.warn("eIDAS attr: " + Constants.eIDAS_ATTR_PLACEOFBIRTH + " is of WRONG type");
- throw new EidasAttributeException(Constants.eIDAS_ATTR_PLACEOFBIRTH);
-
- }
-
- } else {
- log.debug("NO '" + Constants.eIDAS_ATTR_PLACEOFBIRTH + "' attribute. Post-Processing skipped ... ");
- }
-
- return null;
-
+ return EidasResponseUtils.processPlaceOfBirth(placeOfBirthObj);
}
/**
* Post-Process the eIDAS DateOfBirth attribute.
- *
+ *
* @param dateOfBirthObj eIDAS date-of-birth attribute information
* @return formated user's date-of-birth
* @throws EidasAttributeException if NO attribute is available
@@ -211,17 +162,12 @@ public abstract class AbstractEidProcessor implements INationalEidProcessor {
*/
protected DateTime processDateOfBirth(Object dateOfBirthObj) throws EidPostProcessingException,
EidasAttributeException {
- if (dateOfBirthObj == null || !(dateOfBirthObj instanceof DateTime)) {
- throw new EidasAttributeException(Constants.eIDAS_ATTR_DATEOFBIRTH);
- }
-
- return (DateTime) dateOfBirthObj;
-
+ return EidasResponseUtils.processDateOfBirth(dateOfBirthObj);
}
/**
* Post-Process the eIDAS GivenName attribute.
- *
+ *
* @param givenNameObj eIDAS givenName attribute information
* @return formated user's givenname
* @throws EidasAttributeException if NO attribute is available
@@ -229,17 +175,12 @@ public abstract class AbstractEidProcessor implements INationalEidProcessor {
*/
protected String processGivenName(Object givenNameObj) throws EidPostProcessingException,
EidasAttributeException {
- if (givenNameObj == null || !(givenNameObj instanceof String)) {
- throw new EidasAttributeException(Constants.eIDAS_ATTR_CURRENTGIVENNAME);
- }
-
- return (String) givenNameObj;
-
+ return EidasResponseUtils.processGivenName(givenNameObj);
}
/**
* Post-Process the eIDAS FamilyName attribute.
- *
+ *
* @param familyNameObj eIDAS familyName attribute information
* @return formated user's familyname
* @throws EidasAttributeException if NO attribute is available
@@ -247,17 +188,12 @@ public abstract class AbstractEidProcessor implements INationalEidProcessor {
*/
protected String processFamilyName(Object familyNameObj) throws EidPostProcessingException,
EidasAttributeException {
- if (familyNameObj == null || !(familyNameObj instanceof String)) {
- throw new EidasAttributeException(Constants.eIDAS_ATTR_CURRENTFAMILYNAME);
- }
-
- return (String) familyNameObj;
-
+ return EidasResponseUtils.processFamilyName(familyNameObj);
}
/**
* Post-Process the eIDAS pseudonym to ERnB unique identifier.
- *
+ *
* @param personalIdObj eIDAS PersonalIdentifierAttribute
* @return Unique personal identifier without country-code information
* @throws EidasAttributeException if NO attribute is available
@@ -265,15 +201,7 @@ public abstract class AbstractEidProcessor implements INationalEidProcessor {
*/
protected String processPseudonym(Object personalIdObj) throws EidPostProcessingException,
EidasAttributeException {
- if (personalIdObj == null || !(personalIdObj instanceof String)) {
- throw new EidasAttributeException(Constants.eIDAS_ATTR_PERSONALIDENTIFIER);
- }
-
- final Triple<String, String, String> eIdentifier =
- EidasResponseUtils.parseEidasPersonalIdentifier((String) personalIdObj);
-
- return eIdentifier.getThird();
-
+ return EidasResponseUtils.processPseudonym(personalIdObj);
}
/**
@@ -391,6 +319,7 @@ public abstract class AbstractEidProcessor implements INationalEidProcessor {
}
protected void buildLevelOfAssurance(ISpConfiguration spConfig, Builder authnRequestBuilder) {
+
// TODO: set matching mode if eIDAS ref. impl. support this method
// TODO: update if eIDAS ref. impl. supports exact matching for non-notified LoA
@@ -412,7 +341,7 @@ public abstract class AbstractEidProcessor implements INationalEidProcessor {
log.debug("Request eIdAS node with LoA: " + loa);
authnRequestBuilder.levelOfAssurance(loa);
-
+
}
}
diff --git a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/handler/CountrySpecificDetailSearchProcessor.java b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/handler/CountrySpecificDetailSearchProcessor.java
new file mode 100644
index 00000000..c2a62f5c
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/handler/CountrySpecificDetailSearchProcessor.java
@@ -0,0 +1,56 @@
+/*
+ * 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.handler;
+
+import javax.annotation.Nonnull;
+
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.SimpleEidasData;
+import at.gv.bmi.namespace.zmr_su.zmr._20040201.PersonSuchenRequest;
+
+public interface CountrySpecificDetailSearchProcessor {
+
+ /**
+ * Get a friendlyName of this post-processor implementation.
+ */
+ String getName();
+
+ /**
+ * Check if this postProcessor is sensitive for a specific country.
+ *
+ * @param countryCode of the eID data that should be processed
+ * @param eidData eID information from eIDAS Proxy-Service
+ * @return true if this implementation can handle the country, otherwise false
+ */
+ boolean canHandle(String countryCode, SimpleEidasData eidData);
+
+ /**
+ * Builds a country-specific search person request for ZMR.
+ *
+ * @param eidData eID information from eIDAS Proxy-Service
+ * @return {@link PersonSuchenRequest} but never <code>null</code>
+ */
+ @Nonnull
+ PersonSuchenRequest generateSearchRequest(SimpleEidasData eidData);
+
+}
diff --git a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/handler/DeSpecificDetailSearchProcessor.java b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/handler/DeSpecificDetailSearchProcessor.java
new file mode 100644
index 00000000..e05fe86b
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/handler/DeSpecificDetailSearchProcessor.java
@@ -0,0 +1,82 @@
+/*
+ * 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.handler;
+
+import org.apache.commons.lang3.StringUtils;
+
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.SimpleEidasData;
+import at.gv.bmi.namespace.zmr_su.zmr._20040201.EidasSuchdatenType;
+import at.gv.bmi.namespace.zmr_su.zmr._20040201.PersonSuchenRequest;
+import at.gv.e_government.reference.namespace.persondata.de._20040201.NatuerlichePersonTyp;
+import at.gv.e_government.reference.namespace.persondata.de._20040201.PersonenNameTyp;
+
+public class DeSpecificDetailSearchProcessor implements CountrySpecificDetailSearchProcessor {
+
+ @Override
+ public String getName() {
+ return this.getClass().getSimpleName();
+ }
+
+ @Override
+ public boolean canHandle(String countryCode, SimpleEidasData eidData) {
+ return countryCode.equalsIgnoreCase(Constants.COUNTRY_CODE_DE)
+ && StringUtils.isNotEmpty(eidData.getBirthName())
+ && StringUtils.isNotEmpty(eidData.getPlaceOfBirth());
+
+ }
+
+ @Override
+ public PersonSuchenRequest generateSearchRequest(SimpleEidasData eidData) {
+ PersonSuchenRequest req = new PersonSuchenRequest();
+
+ //set basic MDS information
+ final NatuerlichePersonTyp searchNatPerson = new NatuerlichePersonTyp();
+ req.setNatuerlichePerson(searchNatPerson);
+ final PersonenNameTyp searchNatPersonName = new PersonenNameTyp();
+ searchNatPerson.setPersonenName(searchNatPersonName);
+ searchNatPersonName.setFamilienname(eidData.getFamilyName());
+ searchNatPersonName.setVorname(eidData.getGivenName());
+ searchNatPerson.setGeburtsdatum(eidData.getDateOfBirth());
+
+ //add addtional eIDAS attributes from DE
+ req.getEidasSuchdaten().add(buildEidasSuchData(
+ Constants.eIDAS_ATTRURN_PLACEOFBIRTH, eidData.getPlaceOfBirth()));
+ req.getEidasSuchdaten().add(buildEidasSuchData(
+ Constants.eIDAS_ATTRURN_BIRTHNAME, eidData.getBirthName()));
+
+ return req;
+
+ }
+
+ private EidasSuchdatenType buildEidasSuchData(String attrName, String attrValue) {
+ EidasSuchdatenType eidasInfos = new EidasSuchdatenType();
+ eidasInfos.setStaatscode2(Constants.COUNTRY_CODE_DE);
+ eidasInfos.setEidasArt(attrName);
+ eidasInfos.setEidasWert(attrValue);
+ return eidasInfos;
+
+ }
+
+}
diff --git a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/handler/INationalEidProcessor.java b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/handler/INationalEidProcessor.java
index 577efbcd..79a261fe 100644
--- a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/handler/INationalEidProcessor.java
+++ b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/handler/INationalEidProcessor.java
@@ -25,7 +25,7 @@ package at.asitplus.eidas.specific.modules.auth.eidas.v2.handler;
import java.util.Map;
-import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.ErnbEidData;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.SimpleEidasData;
import at.asitplus.eidas.specific.modules.auth.eidas.v2.exception.EidasAttributeException;
import at.asitplus.eidas.specific.modules.auth.eidas.v2.exception.EidPostProcessingException;
import at.gv.egiz.eaaf.core.api.IRequest;
@@ -36,7 +36,7 @@ public interface INationalEidProcessor {
/**
* Get a friendlyName of this post-processor implementation.
- *
+ *
* @return
*/
String getName();
@@ -46,34 +46,34 @@ public interface INationalEidProcessor {
* If more than one Post-Processor implementations can handle the eID data, the
* post-processor with the highest priority are selected. The Default-Processor
* has priority '0'
- *
+ *
* @return Priority of this handler
*/
int getPriority();
/**
* Check if this postProcessor is sensitive for a specific country.
- *
+ *
* @param countryCode of the eID data that should be processed
* @return true if this implementation can handle the country, otherwise false
- *
+ *
*/
boolean canHandle(String countryCode);
/**
* Post-Process eIDAS eID data into national format.
- *
+ *
* @param eidasAttrMap Map of eIDAS attributes in format friendlyName and
* attribute
* @throws EidPostProcessingException In case of a post-processing error
* @throws EidasAttributeException In case of an invalid eIDAS attribute
*/
- ErnbEidData postProcess(Map<String, Object> eidasAttrMap) throws EidPostProcessingException,
+ SimpleEidasData postProcess(Map<String, Object> eidasAttrMap) throws EidPostProcessingException,
EidasAttributeException;
/**
* Pre-Process eIDAS Request to national requirements.
- *
+ *
* @param pendingReq current pending request
* @param authnRequestBuilder eIDAS {@link ILightRequest} builder
*/
diff --git a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/handler/ItSpecificDetailSearchProcessor.java b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/handler/ItSpecificDetailSearchProcessor.java
new file mode 100644
index 00000000..b49c355d
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/handler/ItSpecificDetailSearchProcessor.java
@@ -0,0 +1,53 @@
+/*
+ * 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.handler;
+
+import org.apache.commons.lang3.StringUtils;
+
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.SimpleEidasData;
+import at.gv.bmi.namespace.zmr_su.zmr._20040201.PersonSuchenRequest;
+
+public class ItSpecificDetailSearchProcessor implements CountrySpecificDetailSearchProcessor {
+
+ @Override
+ public String getName() {
+ return this.getClass().getSimpleName();
+ }
+
+ @Override
+ public boolean canHandle(String countryCode, SimpleEidasData eidData) {
+ return countryCode.equalsIgnoreCase(Constants.COUNTRY_CODE_IT)
+ && StringUtils.isNotEmpty(eidData.getTaxNumber());
+
+ }
+
+ @Override
+ public PersonSuchenRequest generateSearchRequest(SimpleEidasData eidData) {
+
+ //TODO: add IT specific search request if TaxNumber attribute is defined by IT
+ return new PersonSuchenRequest();
+
+ }
+}
diff --git a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/idaustriaclient/IdAustriaClientAuthConstants.java b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/idaustriaclient/IdAustriaClientAuthConstants.java
new file mode 100644
index 00000000..67dfd7d8
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/idaustriaclient/IdAustriaClientAuthConstants.java
@@ -0,0 +1,102 @@
+package at.asitplus.eidas.specific.modules.auth.eidas.v2.idaustriaclient;
+
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import at.gv.egiz.eaaf.core.api.data.EaafConstants;
+import at.gv.egiz.eaaf.core.api.data.PvpAttributeDefinitions;
+import at.gv.egiz.eaaf.core.impl.data.Triple;
+
+
+public class IdAustriaClientAuthConstants {
+
+ private IdAustriaClientAuthConstants() {
+
+ }
+
+ public static final String ERRORCODE_02 = "module.eidasauth.idaustria.02";
+ public static final String ERRORCODE_05 = "module.eidasauth.idaustria.05";
+
+ public static final String SAML2_STATUSCODE_USERSTOP = "1005";
+
+ public static final String MODULE_NAME_FOR_LOGGING = "ID Austria Client";
+
+ public static final int METADATA_VALIDUNTIL_IN_HOURS = 24;
+
+ // public static final String HTTP_PARAM_CENTRAL_EIDAS_AUTH_SELECTION =
+ // AuthHandlerConstants.HTTP_PARAM_EIDAS_PROCESS;
+
+ public static final String ENDPOINT_POST = "/sp/idaustria/post";
+ public static final String ENDPOINT_REDIRECT = "/sp/idaustria/redirect";
+ public static final String ENDPOINT_METADATA = "/sp/idaustria/metadata";
+
+ public static final String CONFIG_PROPS_PREFIX = "modules.idaustriaclient.";
+ public static final String CONFIG_PROPS_KEYSTORE_TYPE = CONFIG_PROPS_PREFIX + "keystore.type";
+ public static final String CONFIG_PROPS_KEYSTORE_NAME = CONFIG_PROPS_PREFIX + "keystore.name";
+ public static final String CONFIG_PROPS_KEYSTORE_PATH = CONFIG_PROPS_PREFIX + "keystore.path";
+ public static final String CONFIG_PROPS_KEYSTORE_PASSWORD = CONFIG_PROPS_PREFIX + "keystore.password";
+ public static final String CONFIG_PROPS_SIGN_METADATA_KEY_PASSWORD = CONFIG_PROPS_PREFIX
+ + "metadata.sign.password";
+ public static final String CONFIG_PROPS_SIGN_METADATA_ALIAS = CONFIG_PROPS_PREFIX
+ + "metadata.sign.alias";
+ public static final String CONFIG_PROPS_SIGN_SIGNING_KEY_PASSWORD = CONFIG_PROPS_PREFIX
+ + "request.sign.password";
+ public static final String CONFIG_PROPS_SIGN_SIGNING_ALIAS = CONFIG_PROPS_PREFIX
+ + "request.sign.alias";
+ public static final String CONFIG_PROPS_ENCRYPTION_KEY_PASSWORD = CONFIG_PROPS_PREFIX
+ + "response.encryption.password";
+ public static final String CONFIG_PROPS_ENCRYPTION_ALIAS = CONFIG_PROPS_PREFIX
+ + "response.encryption.alias";
+
+ public static final String CONFIG_PROPS_TRUSTSTORE_TYPE = CONFIG_PROPS_PREFIX + "truststore.type";
+ public static final String CONFIG_PROPS_TRUSTSTORE_NAME = CONFIG_PROPS_PREFIX + "truststore.name";
+ public static final String CONFIG_PROPS_TRUSTSTORE_PATH = CONFIG_PROPS_PREFIX + "truststore.path";
+ public static final String CONFIG_PROPS_TRUSTSTORE_PASSWORD = CONFIG_PROPS_PREFIX + "truststore.password";
+
+ public static final String CONFIG_PROPS_REQUIRED_PVP_ATTRIBUTES_LIST = CONFIG_PROPS_PREFIX
+ + "required.additional.attributes";
+ public static final String CONFIG_PROPS_REQUIRED_LOA = CONFIG_PROPS_PREFIX
+ + "required.loa";
+ public static final String CONFIG_PROPS_ID_AUSTRIA_ENTITYID = CONFIG_PROPS_PREFIX + "idaustria.idp.entityId";
+ public static final String CONFIG_PROPS_ID_AUSTRIA_METADATAURL = CONFIG_PROPS_PREFIX + "idaustria.idp.metadataUrl";
+
+ public static final String CONFIG_DEFAULT_LOA_EIDAS_LEVEL = EaafConstants.EIDAS_LOA_HIGH;
+
+ public static final List<Triple<String, String, Boolean>> DEFAULT_REQUIRED_PVP_ATTRIBUTES =
+ Collections.unmodifiableList(new ArrayList<Triple<String, String, Boolean>>() {
+ private static final long serialVersionUID = 1L;
+
+ {
+ // entity metadata information
+ add(Triple.newInstance(PvpAttributeDefinitions.EID_CITIZEN_EIDAS_QAA_LEVEL_NAME,
+ PvpAttributeDefinitions.EID_CITIZEN_EIDAS_QAA_LEVEL_FRIENDLY_NAME, true));
+ add(Triple.newInstance(PvpAttributeDefinitions.EID_ISSUING_NATION_NAME,
+ PvpAttributeDefinitions.EID_ISSUING_NATION_FRIENDLY_NAME, true));
+
+ add(Triple.newInstance(PvpAttributeDefinitions.PRINCIPAL_NAME_NAME,
+ PvpAttributeDefinitions.PRINCIPAL_NAME_FRIENDLY_NAME, true));
+ add(Triple.newInstance(PvpAttributeDefinitions.GIVEN_NAME_NAME,
+ PvpAttributeDefinitions.GIVEN_NAME_FRIENDLY_NAME, true));
+ add(Triple.newInstance(PvpAttributeDefinitions.BIRTHDATE_NAME,
+ PvpAttributeDefinitions.BIRTHDATE_FRIENDLY_NAME, true));
+ add(Triple.newInstance(PvpAttributeDefinitions.BPK_NAME,
+ PvpAttributeDefinitions.BPK_FRIENDLY_NAME, true));
+
+ }
+ });
+
+ public static final List<String> DEFAULT_REQUIRED_PVP_ATTRIBUTE_NAMES =
+
+ Collections.unmodifiableList(new ArrayList<String>() {
+ private static final long serialVersionUID = 1L;
+
+ {
+ for (final Triple<String, String, Boolean> el : DEFAULT_REQUIRED_PVP_ATTRIBUTES) {
+ add(el.getFirst());
+ }
+ }
+ });
+
+}
diff --git a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/idaustriaclient/IdAustriaClientAuthEventConstants.java b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/idaustriaclient/IdAustriaClientAuthEventConstants.java
new file mode 100644
index 00000000..03e570fc
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/idaustriaclient/IdAustriaClientAuthEventConstants.java
@@ -0,0 +1,7 @@
+package at.asitplus.eidas.specific.modules.auth.eidas.v2.idaustriaclient;
+
+public class IdAustriaClientAuthEventConstants {
+
+ public static final int AUTHPROCESS_ID_AUSTRIA_RESPONSE_RECEIVED = 6202;
+ public static final int AUTHPROCESS_ID_AUSTRIA_RESPONSE_RECEIVED_ERROR = 6203;
+}
diff --git a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/idaustriaclient/IdAustriaClientAuthMetadataConfiguration.java b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/idaustriaclient/IdAustriaClientAuthMetadataConfiguration.java
new file mode 100644
index 00000000..4527ced4
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/idaustriaclient/IdAustriaClientAuthMetadataConfiguration.java
@@ -0,0 +1,463 @@
+package at.asitplus.eidas.specific.modules.auth.eidas.v2.idaustriaclient;
+
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.opensaml.saml.saml2.core.Attribute;
+import org.opensaml.saml.saml2.core.NameIDType;
+import org.opensaml.saml.saml2.metadata.ContactPerson;
+import org.opensaml.saml.saml2.metadata.Organization;
+import org.opensaml.saml.saml2.metadata.RequestedAttribute;
+import org.opensaml.security.credential.Credential;
+
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.idaustriaclient.provider.IdAustriaClientAuthCredentialProvider;
+import at.gv.egiz.eaaf.core.exceptions.EaafException;
+import at.gv.egiz.eaaf.core.impl.data.Pair;
+import at.gv.egiz.eaaf.core.impl.data.Triple;
+import at.gv.egiz.eaaf.modules.pvp2.api.IPvp2BasicConfiguration;
+import at.gv.egiz.eaaf.modules.pvp2.api.credential.EaafX509Credential;
+import at.gv.egiz.eaaf.modules.pvp2.api.metadata.IPvpMetadataBuilderConfiguration;
+import at.gv.egiz.eaaf.modules.pvp2.exception.CredentialsNotAvailableException;
+import at.gv.egiz.eaaf.modules.pvp2.impl.builder.PvpAttributeBuilder;
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * Configuration object to generate PVP S-Profile metadata for SAML2 client.
+ *
+ * @author tlenz
+ *
+ */
+@Slf4j
+public class IdAustriaClientAuthMetadataConfiguration implements IPvpMetadataBuilderConfiguration {
+
+ private Collection<RequestedAttribute> additionalAttributes = null;
+
+ private final String authUrl;
+ private final IdAustriaClientAuthCredentialProvider credentialProvider;
+ private final IPvp2BasicConfiguration pvpConfiguration;
+
+ /**
+ * Configuration object to create PVP2 S-Profile metadata information.
+ *
+ * @param authUrl Public URL prefix of the application
+ * @param credentialProvider Credentials used by PVP2 S-Profile end-point
+ * @param pvpConfiguration Basic PVP2 S-Profile end-point configuration
+ */
+ public IdAustriaClientAuthMetadataConfiguration(String authUrl,
+ IdAustriaClientAuthCredentialProvider credentialProvider,
+ IPvp2BasicConfiguration pvpConfiguration) {
+ this.authUrl = authUrl;
+ this.credentialProvider = credentialProvider;
+ this.pvpConfiguration = pvpConfiguration;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * at.gv.egovernment.moa.id.protocols.pvp2x.builder.AbstractPVPMetadataBuilder#
+ * getMetadataValidUntil()
+ */
+ @Override
+ public int getMetadataValidUntil() {
+ return IdAustriaClientAuthConstants.METADATA_VALIDUNTIL_IN_HOURS;
+
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * at.gv.egovernment.moa.id.protocols.pvp2x.builder.AbstractPVPMetadataBuilder#
+ * buildEntitiesDescriptorAsRootElement()
+ */
+ @Override
+ public boolean buildEntitiesDescriptorAsRootElement() {
+ return false;
+
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * at.gv.egovernment.moa.id.protocols.pvp2x.builder.AbstractPVPMetadataBuilder#
+ * buildIDPSSODescriptor()
+ */
+ @Override
+ public boolean buildIdpSsoDescriptor() {
+ return false;
+
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * at.gv.egovernment.moa.id.protocols.pvp2x.builder.AbstractPVPMetadataBuilder#
+ * buildSPSSODescriptor()
+ */
+ @Override
+ public boolean buildSpSsoDescriptor() {
+ return true;
+
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * at.gv.egovernment.moa.id.protocols.pvp2x.builder.AbstractPVPMetadataBuilder#
+ * getEntityIDPostfix()
+ */
+ @Override
+ public String getEntityID() {
+ return authUrl + IdAustriaClientAuthConstants.ENDPOINT_METADATA;
+
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * at.gv.egovernment.moa.id.protocols.pvp2x.builder.AbstractPVPMetadataBuilder#
+ * getEntityFriendlyName()
+ */
+ @Override
+ public String getEntityFriendlyName() {
+ return null;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * at.gv.egovernment.moa.id.protocols.pvp2x.builder.AbstractPVPMetadataBuilder#
+ * getContactPersonInformation()
+ */
+ @Override
+ public List<ContactPerson> getContactPersonInformation() {
+ try {
+ return pvpConfiguration.getIdpContacts();
+
+ } catch (final EaafException e) {
+ log.warn("Can not load Metadata entry: Contect Person", e);
+ return null;
+
+ }
+
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * at.gv.egovernment.moa.id.protocols.pvp2x.builder.AbstractPVPMetadataBuilder#
+ * getOrgansiationInformation()
+ */
+ @Override
+ public Organization getOrgansiationInformation() {
+ try {
+ return pvpConfiguration.getIdpOrganisation();
+
+ } catch (final EaafException e) {
+ log.warn("Can not load Metadata entry: Organisation", e);
+ return null;
+
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * at.gv.egovernment.moa.id.protocols.pvp2x.builder.AbstractPVPMetadataBuilder#
+ * getMetadataSigningCredentials()
+ */
+ @Override
+ public EaafX509Credential getMetadataSigningCredentials() throws CredentialsNotAvailableException {
+ return credentialProvider.getMetaDataSigningCredential();
+
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * at.gv.egovernment.moa.id.protocols.pvp2x.builder.AbstractPVPMetadataBuilder#
+ * getRequestorResponseSigningCredentials()
+ */
+ @Override
+ public Credential getRequestorResponseSigningCredentials() throws CredentialsNotAvailableException {
+ return credentialProvider.getMessageSigningCredential();
+
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * at.gv.egovernment.moa.id.protocols.pvp2x.builder.AbstractPVPMetadataBuilder#
+ * getEncryptionCredentials()
+ */
+ @Override
+ public Credential getEncryptionCredentials() throws CredentialsNotAvailableException {
+ return credentialProvider.getMessageEncryptionCredential();
+
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * at.gv.egovernment.moa.id.protocols.pvp2x.builder.AbstractPVPMetadataBuilder#
+ * getIDPWebSSOPostBindingURL()
+ */
+ @Override
+ public String getIdpWebSsoPostBindingUrl() {
+ return null;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * at.gv.egovernment.moa.id.protocols.pvp2x.builder.AbstractPVPMetadataBuilder#
+ * getIDPWebSSORedirectBindingURL()
+ */
+ @Override
+ public String getIdpWebSsoRedirectBindingUrl() {
+ return null;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * at.gv.egovernment.moa.id.protocols.pvp2x.builder.AbstractPVPMetadataBuilder#
+ * getIDPSLOPostBindingURL()
+ */
+ @Override
+ public String getIdpSloPostBindingUrl() {
+ return null;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * at.gv.egovernment.moa.id.protocols.pvp2x.builder.AbstractPVPMetadataBuilder#
+ * getIDPSLORedirectBindingURL()
+ */
+ @Override
+ public String getIdpSloRedirectBindingUrl() {
+ return null;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * at.gv.egovernment.moa.id.protocols.pvp2x.builder.AbstractPVPMetadataBuilder#
+ * getSPAssertionConsumerServicePostBindingURL()
+ */
+ @Override
+ public String getSpAssertionConsumerServicePostBindingUrl() {
+ return authUrl + IdAustriaClientAuthConstants.ENDPOINT_POST;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * at.gv.egovernment.moa.id.protocols.pvp2x.builder.AbstractPVPMetadataBuilder#
+ * getSPAssertionConsumerServiceRedirectBindingURL()
+ */
+ @Override
+ public String getSpAssertionConsumerServiceRedirectBindingUrl() {
+ return authUrl + IdAustriaClientAuthConstants.ENDPOINT_REDIRECT;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * at.gv.egovernment.moa.id.protocols.pvp2x.builder.AbstractPVPMetadataBuilder#
+ * getSPSLOPostBindingURL()
+ */
+ @Override
+ public String getSpSloPostBindingUrl() {
+ return null;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * at.gv.egovernment.moa.id.protocols.pvp2x.builder.AbstractPVPMetadataBuilder#
+ * getSPSLORedirectBindingURL()
+ */
+ @Override
+ public String getSpSloRedirectBindingUrl() {
+ return null;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * at.gv.egovernment.moa.id.protocols.pvp2x.builder.AbstractPVPMetadataBuilder#
+ * getSPSLOSOAPBindingURL()
+ */
+ @Override
+ public String getSpSloSoapBindingUrl() {
+ return null;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * at.gv.egovernment.moa.id.protocols.pvp2x.builder.AbstractPVPMetadataBuilder#
+ * getIDPPossibleAttributes()
+ */
+ @Override
+ public List<Attribute> getIdpPossibleAttributes() {
+ return null;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * at.gv.egovernment.moa.id.protocols.pvp2x.builder.AbstractPVPMetadataBuilder#
+ * getIDPPossibleNameITTypes()
+ */
+ @Override
+ public List<String> getIdpPossibleNameIdTypes() {
+ return null;
+ }
+
+
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * at.gv.egovernment.moa.id.protocols.pvp2x.builder.AbstractPVPMetadataBuilder#
+ * getSPRequiredAttributes()
+ */
+ @Override
+ public Collection<RequestedAttribute> getSpRequiredAttributes() {
+ final Map<String, RequestedAttribute> requestedAttributes = new HashMap<>();
+
+
+ log.trace("Build required attributes for ID Austria operaton ... ");
+ injectDefinedAttributes(requestedAttributes,
+ IdAustriaClientAuthConstants.DEFAULT_REQUIRED_PVP_ATTRIBUTES);
+
+
+
+ if (additionalAttributes != null) {
+ log.trace("Add additional PVP attributes into metadata ... ");
+ for (final RequestedAttribute el : additionalAttributes) {
+ if (requestedAttributes.containsKey(el.getName())) {
+ log.debug("Attribute " + el.getName()
+ + " is already added by default configuration. Overwrite it by user configuration");
+ }
+ requestedAttributes.put(el.getName(), el);
+ }
+ }
+
+ return requestedAttributes.values();
+
+ }
+
+
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * at.gv.egovernment.moa.id.protocols.pvp2x.builder.AbstractPVPMetadataBuilder#
+ * getSPAllowedNameITTypes()
+ */
+ @Override
+ public List<String> getSpAllowedNameIdTypes() {
+ return Arrays.asList(NameIDType.PERSISTENT);
+
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see at.gv.egovernment.moa.id.protocols.pvp2x.config.
+ * IPVPMetadataBuilderConfiguration#getSPNameForLogging()
+ */
+ @Override
+ public String getSpNameForLogging() {
+ return IdAustriaClientAuthConstants.MODULE_NAME_FOR_LOGGING;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see at.gv.egovernment.moa.id.protocols.pvp2x.config.
+ * IPVPMetadataBuilderConfiguration#wantAssertionSigned()
+ */
+ @Override
+ public boolean wantAssertionSigned() {
+ return false;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see at.gv.egovernment.moa.id.protocols.pvp2x.config.
+ * IPVPMetadataBuilderConfiguration#wantAuthnRequestSigned()
+ */
+ @Override
+ public boolean wantAuthnRequestSigned() {
+ return true;
+ }
+
+ /**
+ * Add additonal PVP attributes that are required by this deployment.
+ *
+ * @param additionalAttr List of PVP attribute name and isRequired flag
+ */
+ public void setAdditionalRequiredAttributes(List<Pair<String, Boolean>> additionalAttr) {
+ if (additionalAttr != null && !additionalAttr.isEmpty()) {
+ additionalAttributes = new ArrayList<>();
+ for (final Pair<String, Boolean> el : additionalAttr) {
+ final Attribute attributBuilder = PvpAttributeBuilder.buildEmptyAttribute(el.getFirst());
+ if (attributBuilder != null) {
+ additionalAttributes.add(
+ PvpAttributeBuilder.buildReqAttribute(
+ attributBuilder.getName(),
+ attributBuilder.getFriendlyName(),
+ el.getSecond()));
+
+ } else {
+ log.info("NO PVP attribute with name: " + el.getFirst());
+ }
+
+ }
+ }
+ }
+
+ private void injectDefinedAttributes(Map<String, RequestedAttribute> requestedAttributes,
+ List<Triple<String, String, Boolean>> attributes) {
+ for (final Triple<String, String, Boolean> el : attributes) {
+ requestedAttributes.put(el.getFirst(), PvpAttributeBuilder.buildReqAttribute(el.getFirst(), el
+ .getSecond(), el.getThird()));
+
+ }
+ }
+
+}
diff --git a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/idaustriaclient/IdAustriaClientAuthRequestBuilderConfiguration.java b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/idaustriaclient/IdAustriaClientAuthRequestBuilderConfiguration.java
new file mode 100644
index 00000000..65b6a198
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/idaustriaclient/IdAustriaClientAuthRequestBuilderConfiguration.java
@@ -0,0 +1,300 @@
+package at.asitplus.eidas.specific.modules.auth.eidas.v2.idaustriaclient;
+
+import java.util.List;
+
+import at.gv.egiz.eaaf.modules.pvp2.api.credential.EaafX509Credential;
+import at.gv.egiz.eaaf.modules.pvp2.api.reqattr.EaafRequestedAttribute;
+import at.gv.egiz.eaaf.modules.pvp2.sp.api.IPvpAuthnRequestBuilderConfiguruation;
+
+import org.opensaml.saml.saml2.core.AuthnContextComparisonTypeEnumeration;
+import org.opensaml.saml.saml2.core.NameIDType;
+import org.opensaml.saml.saml2.metadata.EntityDescriptor;
+import org.w3c.dom.Element;
+
+public class IdAustriaClientAuthRequestBuilderConfiguration implements IPvpAuthnRequestBuilderConfiguruation {
+
+ private boolean isPassive;
+ private String spEntityId;
+ private String qaaLevel;
+ private EntityDescriptor idpEntity;
+ private EaafX509Credential signCred;
+ private String scopeRequesterId;
+ private String providerName;
+ private List<EaafRequestedAttribute> requestedAttributes;
+ private String reqId;
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see at.gv.egovernment.moa.id.protocols.pvp2x.config.
+ * IPVPAuthnRequestBuilderConfiguruation#isPassivRequest()
+ */
+ @Override
+ public Boolean isPassivRequest() {
+ return this.isPassive;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see at.gv.egovernment.moa.id.protocols.pvp2x.config.
+ * IPVPAuthnRequestBuilderConfiguruation#getAssertionConsumerServiceId()
+ */
+ @Override
+ public Integer getAssertionConsumerServiceId() {
+ return 0;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see at.gv.egovernment.moa.id.protocols.pvp2x.config.
+ * IPVPAuthnRequestBuilderConfiguruation#getEntityID()
+ */
+ @Override
+ public String getSpEntityID() {
+ return this.spEntityId;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see at.gv.egovernment.moa.id.protocols.pvp2x.config.
+ * IPVPAuthnRequestBuilderConfiguruation#getNameIDPolicy()
+ */
+ @Override
+ public String getNameIdPolicyFormat() {
+ return NameIDType.PERSISTENT;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see at.gv.egovernment.moa.id.protocols.pvp2x.config.
+ * IPVPAuthnRequestBuilderConfiguruation#getNameIDPolicy()
+ */
+ @Override
+ public boolean getNameIdPolicyAllowCreation() {
+ return true;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see at.gv.egovernment.moa.id.protocols.pvp2x.config.
+ * IPVPAuthnRequestBuilderConfiguruation#getAuthnContextClassRef()
+ */
+ @Override
+ public String getAuthnContextClassRef() {
+ return this.qaaLevel;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see at.gv.egovernment.moa.id.protocols.pvp2x.config.
+ * IPVPAuthnRequestBuilderConfiguruation#getAuthnContextComparison()
+ */
+ @Override
+ public AuthnContextComparisonTypeEnumeration getAuthnContextComparison() {
+ return AuthnContextComparisonTypeEnumeration.MINIMUM;
+ }
+
+ /**
+ * Set isPassive flag in SAML2 request.
+ *
+ * @param isPassive the isPassive to set.
+ */
+ public void setPassive(boolean isPassive) {
+ this.isPassive = isPassive;
+ }
+
+ /**
+ * Set the requester EntityId.
+ *
+ * @param spEntityId EntityId of SP
+ */
+ public void setSpEntityID(String spEntityId) {
+ this.spEntityId = spEntityId;
+ }
+
+ /**
+ * Set required LoA.
+ *
+ * @param loa the LoA to set.
+ */
+ public void setRequestedLoA(String loa) {
+ qaaLevel = loa;
+ }
+
+ /**
+ * Set EntityId of IDP.
+ *
+ * @param idpEntity the idpEntity to set.
+ */
+ public void setIdpEntity(EntityDescriptor idpEntity) {
+ this.idpEntity = idpEntity;
+ }
+
+ /**
+ * Set message signing credentials.
+ *
+ * @param signCred the signCred to set.
+ */
+ public void setSignCred(EaafX509Credential signCred) {
+ this.signCred = signCred;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see at.gv.egovernment.moa.id.protocols.pvp2x.config.
+ * IPVPAuthnRequestBuilderConfiguruation#getAuthnRequestSigningCredential()
+ */
+ @Override
+ public EaafX509Credential getAuthnRequestSigningCredential() {
+ return this.signCred;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see at.gv.egovernment.moa.id.protocols.pvp2x.config.
+ * IPVPAuthnRequestBuilderConfiguruation#getIDPEntityDescriptor()
+ */
+ @Override
+ public EntityDescriptor getIdpEntityDescriptor() {
+ return this.idpEntity;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see at.gv.egovernment.moa.id.protocols.pvp2x.config.
+ * IPVPAuthnRequestBuilderConfiguruation#getSubjectNameID()
+ */
+ @Override
+ public String getSubjectNameID() {
+ return null;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see at.gv.egovernment.moa.id.protocols.pvp2x.config.
+ * IPVPAuthnRequestBuilderConfiguruation#getSPNameForLogging()
+ */
+ @Override
+ public String getSpNameForLogging() {
+ return IdAustriaClientAuthConstants.MODULE_NAME_FOR_LOGGING;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see at.gv.egovernment.moa.id.protocols.pvp2x.config.
+ * IPVPAuthnRequestBuilderConfiguruation#getSubjectNameIDFormat()
+ */
+ @Override
+ public String getSubjectNameIdFormat() {
+ return null;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see at.gv.egovernment.moa.id.protocols.pvp2x.config.
+ * IPVPAuthnRequestBuilderConfiguruation#getRequestID()
+ */
+ @Override
+ public String getRequestID() {
+ return this.reqId;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see at.gv.egovernment.moa.id.protocols.pvp2x.config.
+ * IPVPAuthnRequestBuilderConfiguruation#getSubjectNameIDQualifier()
+ */
+ @Override
+ public String getSubjectNameIdQualifier() {
+ return null;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see at.gv.egovernment.moa.id.protocols.pvp2x.config.
+ * IPVPAuthnRequestBuilderConfiguruation#getSubjectConformationMethode()
+ */
+ @Override
+ public String getSubjectConformationMethode() {
+ return null;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see at.gv.egovernment.moa.id.protocols.pvp2x.config.
+ * IPVPAuthnRequestBuilderConfiguruation#getSubjectConformationDate()
+ */
+ @Override
+ public Element getSubjectConformationDate() {
+ return null;
+ }
+
+ @Override
+ public List<EaafRequestedAttribute> getRequestedAttributes() {
+ return this.requestedAttributes;
+
+ }
+
+ @Override
+ public String getProviderName() {
+ return this.providerName;
+ }
+
+ @Override
+ public String getScopeRequesterId() {
+ return this.scopeRequesterId;
+ }
+
+ /**
+ * Set the entityId of the SP that requests the proxy for eIDAS authentication.
+ *
+ * @param scopeRequesterId RequestId in SAML2 Proxy extension
+ */
+ public void setScopeRequesterId(String scopeRequesterId) {
+ this.scopeRequesterId = scopeRequesterId;
+ }
+
+ /**
+ * Set a friendlyName for the SP that requests the proxy for eIDAS
+ * authentication.
+ *
+ * @param providerName SAML2 provider-name attribute-value
+ */
+ public void setProviderName(String providerName) {
+ this.providerName = providerName;
+ }
+
+ /**
+ * Set a Set of PVP attributes that a requested by using requested attributes.
+ *
+ * @param requestedAttributes Requested SAML2 attributes
+ */
+ public void setRequestedAttributes(List<EaafRequestedAttribute> requestedAttributes) {
+ this.requestedAttributes = requestedAttributes;
+ }
+
+ /**
+ * Set a RequestId for this Authn. Request.
+ *
+ * @param reqId SAML2 message requestId
+ */
+ public void setRequestId(String reqId) {
+ this.reqId = reqId;
+ }
+
+}
diff --git a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/idaustriaclient/controller/IdAustriaClientAuthMetadataController.java b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/idaustriaclient/controller/IdAustriaClientAuthMetadataController.java
new file mode 100644
index 00000000..1e4b27f7
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/idaustriaclient/controller/IdAustriaClientAuthMetadataController.java
@@ -0,0 +1,122 @@
+package at.asitplus.eidas.specific.modules.auth.eidas.v2.idaustriaclient.controller;
+
+
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+
+import com.google.common.net.MediaType;
+
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.idaustriaclient.IdAustriaClientAuthConstants;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.idaustriaclient.IdAustriaClientAuthMetadataConfiguration;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.idaustriaclient.provider.IdAustriaClientAuthCredentialProvider;
+import at.gv.egiz.eaaf.core.exceptions.EaafAuthenticationException;
+import at.gv.egiz.eaaf.core.exceptions.EaafException;
+import at.gv.egiz.eaaf.core.impl.http.HttpUtils;
+import at.gv.egiz.eaaf.core.impl.idp.controller.AbstractController;
+import at.gv.egiz.eaaf.modules.pvp2.api.IPvp2BasicConfiguration;
+import at.gv.egiz.eaaf.modules.pvp2.impl.builder.PvpMetadataBuilder;
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * Controller that generates SAML2 metadata for eIDAS authentication client.
+ *
+ * @author tlenz
+ *
+ */
+@Slf4j
+@Controller
+public class IdAustriaClientAuthMetadataController extends AbstractController {
+
+ private static final String ERROR_CODE_INTERNAL_00 = "eaaf.core.00";
+
+ @Autowired
+ PvpMetadataBuilder metadatabuilder;
+ @Autowired
+ IdAustriaClientAuthCredentialProvider credentialProvider;
+ @Autowired
+ IPvp2BasicConfiguration pvpConfiguration;
+
+ /**
+ * Default construction with logging.
+ *
+ */
+ public IdAustriaClientAuthMetadataController() {
+ super();
+ log.debug("Registering servlet " + getClass().getName()
+ + " with mappings '" + IdAustriaClientAuthConstants.ENDPOINT_METADATA
+ + "'.");
+
+ }
+
+ /**
+ * End-point that produce PVP2 metadata for eIDAS authentication client.
+ *
+ * @param req http Request
+ * @param resp http Response
+ * @throws IOException In case of an I/O error
+ * @throws EaafException In case of a metadata generation error
+ */
+ @RequestMapping(value = IdAustriaClientAuthConstants.ENDPOINT_METADATA,
+ method = { RequestMethod.GET })
+ public void getSpMetadata(HttpServletRequest req, HttpServletResponse resp) throws IOException,
+ EaafException {
+ // check PublicURL prefix
+ try {
+ final String authUrl = getAuthUrlFromHttpContext(req);
+
+ // initialize metadata builder configuration
+ final IdAustriaClientAuthMetadataConfiguration metadataConfig =
+ new IdAustriaClientAuthMetadataConfiguration(authUrl, credentialProvider, pvpConfiguration);
+ // metadataConfig.setAdditionalRequiredAttributes(getAdditionalRequiredAttributes());
+
+ // build metadata
+ final String xmlMetadata = metadatabuilder.buildPvpMetadata(metadataConfig);
+
+ // write response
+ final byte[] content = xmlMetadata.getBytes("UTF-8");
+ resp.setStatus(HttpServletResponse.SC_OK);
+ resp.setContentLength(content.length);
+ resp.setContentType(MediaType.XML_UTF_8.toString());
+ resp.getOutputStream().write(content);
+
+ } catch (final Exception e) {
+ log.warn("Build federated-authentication PVP metadata FAILED.", e);
+ protAuthService.handleErrorNoRedirect(e, req, resp, false);
+
+ }
+
+ }
+
+ private String getAuthUrlFromHttpContext(HttpServletRequest req) throws EaafException {
+ // check if End-Point is valid
+ final String authUrlString = HttpUtils.extractAuthUrlFromRequest(req);
+ URL authReqUrl;
+ try {
+ authReqUrl = new URL(authUrlString);
+
+ } catch (final MalformedURLException e) {
+ log.warn("Requested URL: {} is not a valid URL.", authUrlString);
+ throw new EaafAuthenticationException(ERROR_CODE_INTERNAL_00, new Object[] { authUrlString }, e);
+
+ }
+
+ final String idpAuthUrl = authConfig.validateIdpUrl(authReqUrl);
+ if (idpAuthUrl == null) {
+ log.warn("Requested URL: {} is NOT found in configuration.", authReqUrl);
+ throw new EaafAuthenticationException(ERROR_CODE_INTERNAL_00, new Object[] { authUrlString });
+
+ }
+
+ return idpAuthUrl;
+ }
+
+}
diff --git a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/idaustriaclient/controller/IdAustriaClientAuthSignalController.java b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/idaustriaclient/controller/IdAustriaClientAuthSignalController.java
new file mode 100644
index 00000000..eca21683
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/idaustriaclient/controller/IdAustriaClientAuthSignalController.java
@@ -0,0 +1,95 @@
+package at.asitplus.eidas.specific.modules.auth.eidas.v2.idaustriaclient.controller;
+
+
+import java.io.IOException;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.text.StringEscapeUtils;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.idaustriaclient.IdAustriaClientAuthConstants;
+import at.gv.egiz.eaaf.core.exceptions.EaafException;
+import at.gv.egiz.eaaf.core.impl.idp.controller.AbstractProcessEngineSignalController;
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * IdAustria client controller that receives the response from ID Austria system.
+ *
+ * @author tlenz
+ *
+ */
+@Slf4j
+@Controller
+public class IdAustriaClientAuthSignalController extends AbstractProcessEngineSignalController {
+
+ public static final String HTTP_PARAM_RELAYSTATE = "RelayState";
+
+ /**
+ * Default constructor with logging.
+ *
+ */
+ public IdAustriaClientAuthSignalController() {
+ super();
+ log.debug("Registering servlet " + getClass().getName()
+ + " with mappings '" + IdAustriaClientAuthConstants.ENDPOINT_POST
+ + "' and '" + IdAustriaClientAuthConstants.ENDPOINT_REDIRECT + "'.");
+
+ }
+
+ /**
+ * HTTP end-point for incoming SAML2 Response from ID Austria system.
+ *
+ * @param req HTTP request
+ * @param resp HTTP response
+ * @throws IOException In case of a HTTP communication error
+ * @throws EaafException In case of a state-validation problem
+ */
+ @RequestMapping(value = { IdAustriaClientAuthConstants.ENDPOINT_POST,
+ IdAustriaClientAuthConstants.ENDPOINT_REDIRECT },
+ method = { RequestMethod.POST, RequestMethod.GET })
+ public void performAuthentication(HttpServletRequest req, HttpServletResponse resp)
+ throws IOException, EaafException {
+ signalProcessManagement(req, resp);
+
+ }
+
+ /**
+ * Read the PendingRequestId from SAML2 RelayState parameter.
+ */
+ @Override
+ public String getPendingRequestId(HttpServletRequest request) {
+ String relayState = StringEscapeUtils.escapeHtml4(request.getParameter(HTTP_PARAM_RELAYSTATE));
+ if (StringUtils.isNotEmpty(relayState)) {
+ try {
+ String pendingReqId = transactionStorage.get(relayState, String.class);
+ if (StringUtils.isNotEmpty(pendingReqId)) {
+
+ return pendingReqId;
+
+ } else {
+ log.info("SAML2 RelayState from request is unknown. Can NOT restore session ... ");
+
+ }
+
+ } catch (EaafException e) {
+ log.error("Can NOT map SAML2 RelayState to pendingRequestId", e);
+
+ } finally {
+ transactionStorage.remove(relayState);
+
+ }
+
+ } else {
+ log.info("No SAML2 relaystate. Can NOT restore session ... ");
+
+ }
+
+ return null;
+
+ }
+}
diff --git a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/idaustriaclient/provider/IdAustriaClientAuthCredentialProvider.java b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/idaustriaclient/provider/IdAustriaClientAuthCredentialProvider.java
new file mode 100644
index 00000000..5b6085c1
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/idaustriaclient/provider/IdAustriaClientAuthCredentialProvider.java
@@ -0,0 +1,132 @@
+package at.asitplus.eidas.specific.modules.auth.eidas.v2.idaustriaclient.provider;
+
+import org.springframework.beans.factory.annotation.Autowired;
+
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.idaustriaclient.IdAustriaClientAuthConstants;
+import at.gv.egiz.eaaf.core.api.idp.IConfiguration;
+import at.gv.egiz.eaaf.core.exceptions.EaafConfigurationException;
+import at.gv.egiz.eaaf.core.impl.credential.KeyStoreConfiguration;
+import at.gv.egiz.eaaf.core.impl.credential.KeyStoreConfiguration.KeyStoreType;
+import at.gv.egiz.eaaf.modules.pvp2.impl.utils.AbstractCredentialProvider;
+
+/**
+ * Credential provider for eIDAS PVP S-Profile client.
+ *
+ * @author tlenz
+ *
+ */
+public class IdAustriaClientAuthCredentialProvider extends AbstractCredentialProvider {
+
+ @Autowired
+ IConfiguration authConfig;
+
+ private static final String FRIENDLYNAME = "ID Austria authentication";
+
+ @Override
+ public KeyStoreConfiguration getBasicKeyStoreConfig() throws EaafConfigurationException {
+ final KeyStoreConfiguration keyStoreConfig = new KeyStoreConfiguration();
+ keyStoreConfig.setFriendlyName(FRIENDLYNAME);
+ keyStoreConfig.setKeyStoreType(
+ authConfig.getBasicConfiguration(IdAustriaClientAuthConstants.CONFIG_PROPS_KEYSTORE_TYPE,
+ KeyStoreType.PKCS12.getKeyStoreType()));
+ keyStoreConfig.setKeyStoreName(
+ authConfig.getBasicConfiguration(IdAustriaClientAuthConstants.CONFIG_PROPS_KEYSTORE_NAME));
+ keyStoreConfig.setSoftKeyStoreFilePath(getKeyStoreFilePath());
+ keyStoreConfig.setSoftKeyStorePassword(
+ authConfig.getBasicConfiguration(IdAustriaClientAuthConstants.CONFIG_PROPS_KEYSTORE_PASSWORD));
+
+ return keyStoreConfig;
+
+ }
+
+ private String getKeyStoreFilePath() throws EaafConfigurationException {
+ final String path = authConfig.getBasicConfiguration(
+ IdAustriaClientAuthConstants.CONFIG_PROPS_KEYSTORE_PATH);
+ if (path == null) {
+ throw new EaafConfigurationException(Constants.ERRORCODE_00,
+ new Object[] { IdAustriaClientAuthConstants.CONFIG_PROPS_KEYSTORE_PATH });
+
+ }
+ return path;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * at.gv.egovernment.moa.id.protocols.pvp2x.signer.AbstractCredentialProvider#
+ * getMetadataKeyAlias()
+ */
+ @Override
+ public String getMetadataKeyAlias() {
+ return authConfig.getBasicConfiguration(
+ IdAustriaClientAuthConstants.CONFIG_PROPS_SIGN_METADATA_ALIAS);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * at.gv.egovernment.moa.id.protocols.pvp2x.signer.AbstractCredentialProvider#
+ * getMetadataKeyPassword()
+ */
+ @Override
+ public String getMetadataKeyPassword() {
+ return authConfig.getBasicConfiguration(
+ IdAustriaClientAuthConstants.CONFIG_PROPS_SIGN_METADATA_KEY_PASSWORD);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * at.gv.egovernment.moa.id.protocols.pvp2x.signer.AbstractCredentialProvider#
+ * getSignatureKeyAlias()
+ */
+ @Override
+ public String getSignatureKeyAlias() {
+ return authConfig.getBasicConfiguration(
+ IdAustriaClientAuthConstants.CONFIG_PROPS_SIGN_SIGNING_ALIAS);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * at.gv.egovernment.moa.id.protocols.pvp2x.signer.AbstractCredentialProvider#
+ * getSignatureKeyPassword()
+ */
+ @Override
+ public String getSignatureKeyPassword() {
+ return authConfig.getBasicConfiguration(
+ IdAustriaClientAuthConstants.CONFIG_PROPS_SIGN_SIGNING_KEY_PASSWORD);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * at.gv.egovernment.moa.id.protocols.pvp2x.signer.AbstractCredentialProvider#
+ * getEncryptionKeyAlias()
+ */
+ @Override
+ public String getEncryptionKeyAlias() {
+ return authConfig.getBasicConfiguration(
+ IdAustriaClientAuthConstants.CONFIG_PROPS_ENCRYPTION_ALIAS);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * at.gv.egovernment.moa.id.protocols.pvp2x.signer.AbstractCredentialProvider#
+ * getEncryptionKeyPassword()
+ */
+ @Override
+ public String getEncryptionKeyPassword() {
+ return authConfig.getBasicConfiguration(
+ IdAustriaClientAuthConstants.CONFIG_PROPS_ENCRYPTION_KEY_PASSWORD);
+ }
+
+}
diff --git a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/idaustriaclient/provider/IdAustriaClientAuthHealthCheck.java b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/idaustriaclient/provider/IdAustriaClientAuthHealthCheck.java
new file mode 100644
index 00000000..bd5e220b
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/idaustriaclient/provider/IdAustriaClientAuthHealthCheck.java
@@ -0,0 +1,80 @@
+package at.asitplus.eidas.specific.modules.auth.eidas.v2.idaustriaclient.provider;
+
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Executors;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+
+import org.apache.commons.lang3.StringUtils;
+import org.opensaml.saml.saml2.metadata.EntityDescriptor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.actuate.health.Health;
+import org.springframework.boot.actuate.health.HealthIndicator;
+
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.idaustriaclient.IdAustriaClientAuthConstants;
+import at.gv.egiz.eaaf.core.api.idp.IConfiguration;
+import lombok.extern.slf4j.Slf4j;
+import net.shibboleth.utilities.java.support.resolver.ResolverException;
+
+/**
+ * Spring Actuator HealthCheck for ID Austria client that evaluates the current status of
+ * ID Austria SAML2 metadata that are loaded into MS-Connector.
+ *
+ * @author tlenz
+ *
+ */
+@Slf4j
+public class IdAustriaClientAuthHealthCheck implements HealthIndicator {
+
+ private static final int DEADLINE = 3;
+
+ @Autowired IConfiguration authConfig;
+ @Autowired IdAustriaClientAuthMetadataProvider metadataService;
+
+ @Override
+ public Health health() {
+ String msNodeEntityID = authConfig.getBasicConfiguration(
+ IdAustriaClientAuthConstants.CONFIG_PROPS_ID_AUSTRIA_ENTITYID);
+
+ if (StringUtils.isEmpty(msNodeEntityID)) {
+ log.trace("No ID Austria EntityId in configuration. Skipping tests ... ");
+ return Health.unknown().build();
+
+ }
+
+ CompletableFuture<Health> asynchTestOperation = new CompletableFuture<>();
+ Executors.newCachedThreadPool().submit(() -> runConnectionTest(asynchTestOperation, msNodeEntityID));
+ try {
+ return asynchTestOperation.get(DEADLINE, TimeUnit.SECONDS);
+
+ } catch (InterruptedException | ExecutionException | TimeoutException e) {
+ log.info("Receive no respose from Health-Check after {} seconds.", DEADLINE);
+ return Health.outOfService().withException(e).build();
+
+ }
+
+
+ }
+
+
+ private void runConnectionTest(CompletableFuture<Health> completableFuture, String entityId) {
+ try {
+ EntityDescriptor connectorMetadata =
+ metadataService.getEntityDescriptor(entityId);
+ if (connectorMetadata != null) {
+ completableFuture.complete(Health.up().build());
+
+ } else {
+ completableFuture.complete(Health.outOfService().withDetail("Reason", "No SAML2 metadata").build());
+
+ }
+
+ } catch (ResolverException e) {
+ completableFuture.complete(Health.down(e).build());
+
+ }
+
+ }
+
+}
diff --git a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/idaustriaclient/provider/IdAustriaClientAuthMetadataProvider.java b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/idaustriaclient/provider/IdAustriaClientAuthMetadataProvider.java
new file mode 100644
index 00000000..7c87548f
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/idaustriaclient/provider/IdAustriaClientAuthMetadataProvider.java
@@ -0,0 +1,169 @@
+package at.asitplus.eidas.specific.modules.auth.eidas.v2.idaustriaclient.provider;
+
+import java.io.IOException;
+import java.security.KeyStore;
+import java.security.Provider;
+import java.security.cert.CertificateException;
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import javax.annotation.PostConstruct;
+
+import org.apache.commons.lang3.StringUtils;
+import org.opensaml.saml.metadata.resolver.MetadataResolver;
+import org.opensaml.saml.metadata.resolver.filter.MetadataFilter;
+import org.opensaml.saml.metadata.resolver.filter.MetadataFilterChain;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.idaustriaclient.IdAustriaClientAuthConstants;
+import at.gv.egiz.eaaf.core.api.idp.IConfiguration;
+import at.gv.egiz.eaaf.core.exceptions.EaafConfigurationException;
+import at.gv.egiz.eaaf.core.exceptions.EaafException;
+import at.gv.egiz.eaaf.core.impl.credential.EaafKeyStoreFactory;
+import at.gv.egiz.eaaf.core.impl.credential.KeyStoreConfiguration;
+import at.gv.egiz.eaaf.core.impl.credential.KeyStoreConfiguration.KeyStoreType;
+import at.gv.egiz.eaaf.core.impl.data.Pair;
+import at.gv.egiz.eaaf.core.impl.http.IHttpClientFactory;
+import at.gv.egiz.eaaf.modules.pvp2.exception.Pvp2MetadataException;
+import at.gv.egiz.eaaf.modules.pvp2.impl.metadata.AbstractChainingMetadataProvider;
+import at.gv.egiz.eaaf.modules.pvp2.impl.metadata.PvpMetadataResolverFactory;
+import at.gv.egiz.eaaf.modules.pvp2.impl.validation.metadata.SchemaValidationFilter;
+import at.gv.egiz.eaaf.modules.pvp2.impl.validation.metadata.SimpleMetadataSignatureVerificationFilter;
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * SAML2 metadata-provider implementation for ID Austria client.
+ *
+ * @author tlenz
+ *
+ */
+@Slf4j
+public class IdAustriaClientAuthMetadataProvider extends AbstractChainingMetadataProvider {
+
+ private static final String FRIENDLYNAME_METADATA_TRUSTSTORE = "'ID Austria client metadata truststore'";
+ private static final String PROVIDER_ID_PATTERN = "eIDAS resolver: {0}";
+ public static final String PROVIDER_ID = "'ID Austria client metadata-provider'";
+
+ @Autowired
+ private IConfiguration basicConfig;
+
+ @Autowired
+ private PvpMetadataResolverFactory metadataProviderFactory;
+ @Autowired
+ private IHttpClientFactory httpClientFactory;
+
+ @Autowired
+ private EaafKeyStoreFactory keyStoreFactory;
+
+ private Pair<KeyStore, Provider> metadataSigningTrustStore;
+
+ @Override
+ protected String getMetadataUrl(String entityId) throws EaafConfigurationException {
+ log.trace("ID Austria. uses SAML2 well-known location approach. EntityId is Metadata-URL");
+ return entityId;
+
+ }
+
+ @Override
+ protected MetadataResolver createNewMetadataProvider(String entityId) throws EaafConfigurationException,
+ IOException, CertificateException {
+ final List<MetadataFilter> filterList = new ArrayList<>();
+ filterList.add(new SchemaValidationFilter(true));
+ filterList.add(new SimpleMetadataSignatureVerificationFilter(
+ metadataSigningTrustStore.getFirst(), entityId));
+
+ final MetadataFilterChain filter = new MetadataFilterChain();
+ filter.setFilters(filterList);
+
+ try {
+ return metadataProviderFactory.createMetadataProvider(getMetadataUrl(entityId),
+ filter,
+ MessageFormat.format(PROVIDER_ID_PATTERN, entityId),
+ httpClientFactory.getHttpClient());
+
+ } catch (final Pvp2MetadataException e) {
+ log.info("Can NOT build metadata provider for entityId: {}", entityId);
+ throw new EaafConfigurationException(IdAustriaClientAuthConstants.ERRORCODE_05,
+ new Object[] { entityId, e.getMessage() }, e);
+
+ }
+ }
+
+ @Override
+ protected List<String> getAllMetadataUrlsFromConfiguration() throws EaafConfigurationException {
+ return Collections.emptyList();
+
+ }
+
+ @Override
+ protected String getMetadataProviderId() {
+ return PROVIDER_ID;
+
+ }
+
+ @Override
+ public void runGarbageCollector() {
+ log.trace("Garbage collection is NOT supported by: {}", getId());
+ }
+
+ @Override
+ public void doDestroy() {
+ super.fullyDestroy();
+
+ }
+
+ @PostConstruct
+ private void initialize() throws EaafException {
+ // initialize truststore to validate metadata signing certificates
+ initializeTrustStore();
+
+ // load metadata with metadataURL, as backup
+ initializeFileSystemMetadata();
+
+ }
+
+ private void initializeFileSystemMetadata() {
+ try {
+ final String metadataUrl = basicConfig.getBasicConfiguration(
+ IdAustriaClientAuthConstants.CONFIG_PROPS_ID_AUSTRIA_METADATAURL);
+ if (StringUtils.isNotEmpty(metadataUrl)) {
+ log.info("Use not recommended metadata-provider initialization!"
+ + " SAML2 'Well-Known-Location' is the preferred methode.");
+ log.info("Initialize 'ms-specific eIDAS node' metadata-provider with URL: {}", metadataUrl);
+
+ addMetadataResolverIntoChain(createNewMetadataProvider(metadataUrl));
+ }
+
+ } catch (final EaafConfigurationException | CertificateException | IOException e) {
+ log.warn("Can NOT inject static eIDAS Node metadata-soure.", e);
+ log.warn("eIDAS Node communication can be FAIL.");
+
+ }
+ }
+
+ private void initializeTrustStore() throws EaafException {
+ // set configuration
+ final KeyStoreConfiguration trustStoreConfig = new KeyStoreConfiguration();
+ trustStoreConfig.setFriendlyName(FRIENDLYNAME_METADATA_TRUSTSTORE);
+ trustStoreConfig.setKeyStoreType(basicConfig.getBasicConfiguration(
+ IdAustriaClientAuthConstants.CONFIG_PROPS_TRUSTSTORE_TYPE,
+ KeyStoreType.JKS.getKeyStoreType()));
+ trustStoreConfig.setKeyStoreName(basicConfig.getBasicConfiguration(
+ IdAustriaClientAuthConstants.CONFIG_PROPS_TRUSTSTORE_NAME));
+ trustStoreConfig.setSoftKeyStoreFilePath(basicConfig.getBasicConfiguration(
+ IdAustriaClientAuthConstants.CONFIG_PROPS_TRUSTSTORE_PATH));
+ trustStoreConfig.setSoftKeyStorePassword(basicConfig.getBasicConfiguration(
+ IdAustriaClientAuthConstants.CONFIG_PROPS_TRUSTSTORE_PASSWORD));
+
+ // validate configuration
+ trustStoreConfig.validate();
+
+ // open new TrustStore
+ metadataSigningTrustStore = keyStoreFactory.buildNewKeyStore(trustStoreConfig);
+
+ }
+
+}
+
diff --git a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/service/CcSpecificEidProcessingService.java b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/service/CcSpecificEidProcessingService.java
index 230d6052..b5493edb 100644
--- a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/service/CcSpecificEidProcessingService.java
+++ b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/service/CcSpecificEidProcessingService.java
@@ -32,6 +32,7 @@ import java.util.Map.Entry;
import javax.annotation.PostConstruct;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.SimpleEidasData;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -40,7 +41,6 @@ import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Service;
import at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants;
-import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.ErnbEidData;
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.handler.INationalEidProcessor;
@@ -104,7 +104,7 @@ public class CcSpecificEidProcessingService implements ICcSpecificEidProcessingS
}
@Override
- public ErnbEidData postProcess(Map<String, Object> eidasAttrMap) throws EidPostProcessingException,
+ public SimpleEidasData postProcess(Map<String, Object> eidasAttrMap) throws EidPostProcessingException,
EidasAttributeException {
// extract citizen country from eIDAS unique identifier
final Object eIdentifierObj = eidasAttrMap.get(Constants.eIDAS_ATTR_PERSONALIDENTIFIER);
diff --git a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/service/ICcSpecificEidProcessingService.java b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/service/ICcSpecificEidProcessingService.java
index ebbc15e4..fb9ba318 100644
--- a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/service/ICcSpecificEidProcessingService.java
+++ b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/service/ICcSpecificEidProcessingService.java
@@ -25,7 +25,7 @@ package at.asitplus.eidas.specific.modules.auth.eidas.v2.service;
import java.util.Map;
-import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.ErnbEidData;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.SimpleEidasData;
import at.asitplus.eidas.specific.modules.auth.eidas.v2.exception.EidasAttributeException;
import at.asitplus.eidas.specific.modules.auth.eidas.v2.exception.EidPostProcessingException;
import at.gv.egiz.eaaf.core.api.IRequest;
@@ -36,20 +36,20 @@ public interface ICcSpecificEidProcessingService {
/**
* Post-process eIDAS eID attributes into national format.
- *
+ *
* @param eidasAttrMap Map of eIDAS attributes in format friendlyName and
* attribute
- *
+ *
* @return eID attributes for SZR request
* @throws EidPostProcessingException In case of a post-processing error
* @throws EidasAttributeException In case of an invalid eIDAS attribute value
*/
- ErnbEidData postProcess(Map<String, Object> eidasAttrMap) throws EidPostProcessingException,
+ SimpleEidasData postProcess(Map<String, Object> eidasAttrMap) throws EidPostProcessingException,
EidasAttributeException;
/**
* Pre Process eIDAS request into national requirements.
- *
+ *
* @param selectedCC Citizen Country from selection
* @param pendingReq current pending request
* @param authnRequestBuilder eIDAS {@link ILightRequest} builder
diff --git a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/service/RegisterSearchService.java b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/service/RegisterSearchService.java
new file mode 100644
index 00000000..5e1e4839
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/service/RegisterSearchService.java
@@ -0,0 +1,447 @@
+package at.asitplus.eidas.specific.modules.auth.eidas.v2.service;
+
+import java.io.Serializable;
+import java.math.BigInteger;
+import java.util.Collections;
+import java.util.List;
+
+import javax.annotation.Nonnull;
+
+import org.jetbrains.annotations.Nullable;
+import org.springframework.lang.NonNull;
+import org.springframework.stereotype.Service;
+
+import com.google.common.collect.Streams;
+
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.clients.ernp.ErnpRestClient.ErnpRegisterResult;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.clients.ernp.IErnpClient;
+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.controller.AdresssucheController.AdresssucheOutput;
+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.exception.EidasSAuthenticationException;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.exception.WorkflowException;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.exception.ZmrCommunicationException;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.handler.CountrySpecificDetailSearchProcessor;
+import at.gv.bmi.namespace.zmr_su.zmr._20040201.PersonSuchenRequest;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+
+@Slf4j
+@Service("registerSearchService")
+public class RegisterSearchService {
+
+ private static final String LOG_MSG_RESULTS = "Matching operation: {} results: ZMR: {} | ERnP: {}";
+
+ private final IZmrClient zmrClient;
+ private final IErnpClient ernpClient;
+
+ private final List<CountrySpecificDetailSearchProcessor> handlers;
+
+ /**
+ * Service that combines ZMR and ERnP register search operations.
+ *
+ * @param handlers Available country-specific search processors
+ * @param zmrClient ZMR client
+ * @param ernpClient ERnP client
+ */
+ public RegisterSearchService(List<CountrySpecificDetailSearchProcessor> handlers, IZmrClient zmrClient,
+ IErnpClient ernpClient) {
+ this.zmrClient = zmrClient;
+ this.ernpClient = ernpClient;
+ this.handlers = handlers;
+ log.info("Init with #{} search services for country-specific details", handlers.size());
+
+ }
+
+ /**
+ * Search with Person Identifier (eIDAS Pseudonym) in ZMR and ERnP.
+ *
+ * @param eidasData Received eIDAS data
+ * @throws WorkflowException In case of a register interaction error
+ */
+ @Nonnull
+ public RegisterStatusResults searchWithPersonIdentifier(SimpleEidasData eidasData)
+ throws WorkflowException {
+ return searchWithPersonIdentifier(null, eidasData);
+
+ }
+
+ /**
+ * Search with Person Identifier (eIDAS Pseudonym) in ZMR and ERnP.
+ *
+ * @param operationStatus Current register-operation status that contains processing informations
+ * @param eidasData Received eIDAS data
+ * @throws WorkflowException In case of a register interaction error
+ */
+ @Nonnull
+ public RegisterStatusResults searchWithPersonIdentifier(@Nullable RegisterOperationStatus operationStatus,
+ @Nonnull SimpleEidasData eidasData) throws WorkflowException {
+ try {
+ final ZmrRegisterResult resultsZmr = zmrClient.searchWithPersonIdentifier(
+ operationStatus != null ? operationStatus.getZmrProcessId() : null,
+ eidasData.getPseudonym(), eidasData.getCitizenCountryCode());
+ final ErnpRegisterResult resultsErnp = ernpClient.searchWithPersonIdentifier(
+ eidasData.getPseudonym(), eidasData.getCitizenCountryCode());
+
+ log.debug(LOG_MSG_RESULTS, "seachByPersonalId",
+ resultsZmr.getPersonResult().size(), resultsErnp.getPersonResult().size());
+
+ return RegisterStatusResults.fromZmrAndErnp(resultsZmr, resultsErnp);
+
+ } catch (final EidasSAuthenticationException e) {
+ throw new WorkflowException("searchWithPersonalIdentifier", e.getMessage(),
+ !(e instanceof ZmrCommunicationException), e);
+
+ }
+ }
+
+ /**
+ * Search with MDS (Given Name, Family Name, Date of Birth) in ZMR and ERnP.
+ *
+ * @param operationStatus Current register-operation status that contains processing informations
+ * @param eidasData Received eIDAS data
+ * @throws WorkflowException In case of a register interaction error
+ */
+ @Nonnull
+ public RegisterStatusResults searchWithMds(RegisterOperationStatus operationStatus, SimpleEidasData eidasData)
+ throws WorkflowException {
+ try {
+ final ZmrRegisterResult resultsZmr =
+ zmrClient.searchWithMds(operationStatus.getZmrProcessId(), eidasData.getGivenName(),
+ eidasData.getFamilyName(), eidasData.getDateOfBirth(), eidasData.getCitizenCountryCode());
+
+ final ErnpRegisterResult resultsErnp =
+ ernpClient.searchWithMds(eidasData.getGivenName(),
+ eidasData.getFamilyName(), eidasData.getDateOfBirth(), eidasData.getCitizenCountryCode());
+
+ log.debug(LOG_MSG_RESULTS, "seachByMDS",
+ resultsZmr.getPersonResult().size(), resultsErnp.getPersonResult().size());
+
+ return RegisterStatusResults.fromZmrAndErnp(resultsZmr, resultsErnp);
+
+ } catch (final EidasSAuthenticationException e) {
+ throw new WorkflowException("searchWithMDSOnly", e.getMessage(),
+ !(e instanceof ZmrCommunicationException), e);
+
+ }
+ }
+
+ /**
+ * Search with country-specific parameters based on information from available
+ * {@link CountrySpecificDetailSearchProcessor} implementations.
+ *
+ * @param operationStatus Current register-operation status that contains processing informations
+ * @param eidasData Receive eIDAS eID information
+ * @return Results from ZMR or ERnP search
+ * @throws WorkflowException In case of a register interaction error
+ */
+ @Nonnull
+ public RegisterStatusResults searchWithCountrySpecifics(RegisterOperationStatus operationStatus,
+ SimpleEidasData eidasData) throws WorkflowException {
+ try {
+ @Nullable final CountrySpecificDetailSearchProcessor ccSpecificProcessor = findSpecificProcessor(eidasData);
+ if (ccSpecificProcessor != null) {
+ log.debug("Selecting country-specific search processor: {}", ccSpecificProcessor.getName());
+ PersonSuchenRequest ccSpecificSearchReq = ccSpecificProcessor.generateSearchRequest(eidasData);
+
+ // search in ZMR
+ final ZmrRegisterResult resultsZmr =
+ zmrClient.searchCountrySpecific(operationStatus.getZmrProcessId(),
+ ccSpecificSearchReq, eidasData.getCitizenCountryCode());
+
+ //search in ERnP
+ ErnpRegisterResult resultErnp = ernpClient.searchCountrySpecific(
+ ccSpecificSearchReq, eidasData.getCitizenCountryCode());
+
+ log.debug(LOG_MSG_RESULTS, "seachByCountrySpecifics",
+ resultsZmr.getPersonResult().size(), resultErnp.getPersonResult().size());
+
+ return RegisterStatusResults.fromZmrAndErnp(resultsZmr, resultErnp);
+
+ } else {
+ return RegisterStatusResults.fromEmpty(operationStatus);
+
+ }
+
+ } catch (final EidasSAuthenticationException e) {
+ throw new WorkflowException("searchWithCountrySpecifics", e.getMessage(),
+ !(e instanceof ZmrCommunicationException), e);
+
+ }
+ }
+
+ /**
+ * Search with residence infos.
+ *
+ * @param operationStatus Current register-operation status that contains processing informations
+ * @param eidasData Receive eIDAS eID information
+ * @param address Address information provided by user
+ * @return Results from ZMR or ERnP search
+ * @throws WorkflowException In case of a register interaction error
+ */
+ public RegisterStatusResults searchWithResidence(RegisterOperationStatus operationStatus, SimpleEidasData eidasData,
+ AdresssucheOutput address) throws WorkflowException {
+ try {
+ final ZmrRegisterResult resultsZmr = zmrClient.searchWithResidenceData(
+ operationStatus.getZmrProcessId(), eidasData.getGivenName(), eidasData.getFamilyName(),
+ eidasData.getDateOfBirth(), eidasData.getCitizenCountryCode(), address);
+
+ /* ERnP search is not used here,
+ * because we only search for people with Austrian residence and they are in ZMR only
+ */
+
+ log.debug(LOG_MSG_RESULTS, "seachByResidence",
+ resultsZmr.getPersonResult().size(), 0);
+
+ return RegisterStatusResults.fromZmr(resultsZmr);
+
+ } catch (final EidasSAuthenticationException e) {
+ throw new WorkflowException("searchWithResidenceInformation", e.getMessage(),
+ !(e instanceof ZmrCommunicationException), e);
+
+ }
+ }
+
+ /**
+ * Automatic process to fix the register entries.
+ * Called when the initial eIDAS authn leads to a match in a register.
+ *
+ * @param registerResult Result of last register search
+ * @param initialEidasData Received eidas data from initial authn
+ * @return
+ */
+ @NonNull
+ public RegisterStatusResults step7aKittProcess(RegisterStatusResults registerResult,
+ SimpleEidasData initialEidasData) throws WorkflowException {
+ log.trace("Starting step7aKittProcess");
+
+ // check if only one single result was found
+ if (registerResult.getResultCount() != 1) {
+ throw new WorkflowException("step7aKittProcess", "getResultCount() != 1");
+
+ }
+
+ // perform updated operation in respect to register results
+ try {
+ if (registerResult.getResultsZmr().size() == 1) {
+ RegisterResult entryZmr = registerResult.getResultsZmr().get(0);
+ ZmrRegisterResult updateZmr = zmrClient
+ .update(registerResult.getOperationStatus().getZmrProcessId(), entryZmr, initialEidasData);
+ return RegisterStatusResults.fromZmr(updateZmr);
+
+ } else {
+ RegisterResult entryErnp = registerResult.getResultsErnp().get(0);
+ ErnpRegisterResult updateErnp = ernpClient.update(entryErnp, initialEidasData);
+ return RegisterStatusResults.fromErnp(registerResult.operationStatus, updateErnp);
+
+ }
+ } catch (final EidasSAuthenticationException e) {
+ throw new WorkflowException("kittMatchedIdentitiess", e.getMessage(),
+ !(e instanceof ZmrCommunicationException), e);
+
+ }
+ }
+
+ /**
+ * Automatic process to fix the register entries.
+ * Called when the alternative eIDAS authn leads to a match in a register.
+ *
+ * <p>This method perform two additional operations:
+ * <ul>
+ * <li>Use bPK to check if <i>altSearchResult</i> is part of <i>initialSearchResult</i>.</li>
+ * <li>Update register entry twice, be using information from alternative authentication <i>altEidasData</i>
+ * and from initial authentication <i>initialEidasData</i>.</li>
+ * </ul>
+ * </p>
+ *
+ * @param initialSearchResult Register results from initial authentication
+ * @param initialEidasData Received eIDAS data from initial authentication
+ * @param altSearchResult Register results from alternative authentication
+ * @param altEidasData Received eIDAS data from alternative authentication
+ * @return
+ */
+ public RegisterStatusResults step7bKittProcess(
+ RegisterStatusResults initialSearchResult, SimpleEidasData initialEidasData,
+ RegisterStatusResults altSearchResult, SimpleEidasData altEidasData) throws WorkflowException {
+ log.trace("Starting step7bKittProcess");
+
+ // check if alternative authentication ends in a single result
+ if (altSearchResult.getResultCount() != 1) {
+ throw new WorkflowException("step7bKittProcess", "getResultCount() != 1");
+
+ }
+
+ // check if alternative authentication result is part of initialSearchResults
+ if (!Streams.concat(initialSearchResult.getResultsZmr().stream(), initialSearchResult.getResultsErnp().stream())
+ .filter(el -> {
+ try {
+ return altSearchResult.getResult().getBpk().equals(el.getBpk());
+
+ } catch (WorkflowException e1) {
+ //can not appear because it's already validated above.
+ return false;
+ }
+ })
+ .findFirst()
+ .isPresent()) {
+ throw new WorkflowException("step7bKittProcess",
+ "Register result from alternativ authentication does not fit into intermediate state");
+
+ }
+
+ // perform KITT operations
+ try {
+ if (altSearchResult.getResultsZmr().size() == 1) {
+ RegisterResult entryZmr = altSearchResult.getResultsZmr().get(0);
+
+ // update ZMR entry by using eIDAS information from initial authentication
+ zmrClient.update(altSearchResult.getOperationStatus().getZmrProcessId(), entryZmr, initialEidasData);
+
+ // update ZMR entry by using eIDAS information from alternative authentication
+ ZmrRegisterResult updateAlt = zmrClient.update(
+ altSearchResult.getOperationStatus().getZmrProcessId(), entryZmr, altEidasData);
+
+ return RegisterStatusResults.fromZmr(updateAlt);
+
+ } else {
+ RegisterResult entryErnp = altSearchResult.getResultsErnp().get(0);
+
+ // update ZMR entry by using eIDAS information from initial authentication
+ ernpClient.update(entryErnp, initialEidasData);
+
+ // update ZMR entry by using eIDAS information from alternative authentication
+ ErnpRegisterResult updateAlt = ernpClient.update(entryErnp, altEidasData);
+
+ return RegisterStatusResults.fromErnp(altSearchResult.getOperationStatus(), updateAlt);
+ }
+ } catch (final EidasSAuthenticationException e) {
+ throw new WorkflowException("kittMatchedIdentitiess", e.getMessage(),
+ !(e instanceof ZmrCommunicationException), e);
+ }
+ }
+
+ @Nullable
+ private CountrySpecificDetailSearchProcessor findSpecificProcessor(SimpleEidasData eidasData) {
+ final String citizenCountry = eidasData.getCitizenCountryCode();
+ for (final CountrySpecificDetailSearchProcessor processor : handlers) {
+ if (processor.canHandle(citizenCountry, eidasData)) {
+ log.debug("Found suitable search handler for {} by using: {}", citizenCountry, processor.getName());
+ return processor;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Register releated information that are needed for any request.
+ *
+ * @author tlenz
+ */
+ @AllArgsConstructor
+ @Getter
+ public static class RegisterOperationStatus implements Serializable {
+
+ private static final long serialVersionUID = -1037357883275379796L;
+
+ /**
+ * ZMR internal processId that is required for any further request in the same process.
+ */
+ private BigInteger zmrProcessId;
+
+
+ }
+
+
+ /**
+ * Response container for {@link RegisterSearchService} that holds a set of {@link RegisterResult}.
+ *
+ * @author tlenz
+ */
+ @Getter
+ @RequiredArgsConstructor
+ public static class RegisterStatusResults implements Serializable {
+
+ private static final long serialVersionUID = -2489125033838373511L;
+
+ /**
+ * Operation status for this result.
+ */
+ private final RegisterOperationStatus operationStatus;
+
+ /**
+ * Current ZMR search result.
+ */
+ private final List<RegisterResult> resultsZmr;
+
+ /**
+ * Current ERnP search result.
+ */
+ private final List<RegisterResult> resultsErnp;
+
+ /**
+ * Get sum of ZMR and ERnP results.
+ *
+ * @return number of results
+ */
+ public int getResultCount() {
+ return resultsZmr.size() + resultsErnp.size();
+ }
+
+ /**
+ * Verifies that there is only one match and returns the bpk.
+ *
+ * @return bpk bpk of the match
+ * @throws WorkflowException if multiple results have been found
+ */
+ public String getBpk() throws WorkflowException {
+ if (getResultCount() != 1) {
+ throw new WorkflowException("readRegisterResults", "getResultCount() != 1");
+
+ }
+ return getResult().getBpk();
+ }
+
+ /**
+ * Returns the results, if there is exactly one, throws exception otherwise.
+ *
+ * @return The result
+ * @throws WorkflowException Results does not contain exactly one result
+ */
+ public RegisterResult getResult() throws WorkflowException {
+ if (getResultCount() != 1) {
+ throw new WorkflowException("readRegisterResults", "getResultCount() != 1");
+ }
+ if (resultsZmr.size() == 1) {
+ return resultsZmr.get(0);
+
+ } else {
+ return resultsErnp.get(0);
+
+ }
+ }
+
+ static RegisterStatusResults fromZmr(ZmrRegisterResult result) {
+ return new RegisterStatusResults(new RegisterOperationStatus(result.getProcessId()),
+ result.getPersonResult(), Collections.emptyList());
+ }
+
+ static RegisterStatusResults fromZmrAndErnp(ZmrRegisterResult result, ErnpRegisterResult resultErnp) {
+ return new RegisterStatusResults(new RegisterOperationStatus(result.getProcessId()),
+ result.getPersonResult(), resultErnp.getPersonResult());
+ }
+
+ static RegisterStatusResults fromErnp(RegisterOperationStatus status, ErnpRegisterResult updateErnp) {
+ return new RegisterStatusResults(status, Collections.emptyList(), updateErnp.getPersonResult());
+ }
+
+ static RegisterStatusResults fromEmpty(RegisterOperationStatus status) {
+ return new RegisterStatusResults(status, Collections.emptyList(), Collections.emptyList());
+ }
+
+ }
+
+}
diff --git a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/szr/SzrClient.java b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/szr/SzrClient.java
deleted file mode 100644
index 11b1e589..00000000
--- a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/szr/SzrClient.java
+++ /dev/null
@@ -1,540 +0,0 @@
-/*
- * Copyright 2018 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.szr;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.net.URL;
-import java.security.KeyManagementException;
-import java.security.KeyStore;
-import java.security.KeyStoreException;
-import java.security.NoSuchAlgorithmException;
-import java.security.SecureRandom;
-import java.security.UnrecoverableKeyException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.annotation.PostConstruct;
-import javax.net.ssl.KeyManager;
-import javax.net.ssl.KeyManagerFactory;
-import javax.net.ssl.SSLContext;
-import javax.net.ssl.TrustManager;
-import javax.net.ssl.TrustManagerFactory;
-import javax.xml.XMLConstants;
-import javax.xml.bind.JAXBContext;
-import javax.xml.bind.Marshaller;
-import javax.xml.namespace.QName;
-import javax.xml.transform.Source;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerException;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.stream.StreamResult;
-import javax.xml.transform.stream.StreamSource;
-import javax.xml.ws.BindingProvider;
-import javax.xml.ws.Dispatch;
-import javax.xml.ws.handler.Handler;
-
-import org.apache.commons.lang3.StringUtils;
-import org.apache.cxf.configuration.jsse.TLSClientParameters;
-import org.apache.cxf.endpoint.Client;
-import org.apache.cxf.frontend.ClientProxy;
-import org.apache.cxf.jaxws.DispatchImpl;
-import org.apache.cxf.transport.http.HTTPConduit;
-import org.apache.cxf.transports.http.configuration.HTTPClientPolicy;
-import org.apache.xpath.XPathAPI;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.ObjectMapper;
-
-import at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants;
-import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.ErnbEidData;
-import at.asitplus.eidas.specific.modules.auth.eidas.v2.exception.SzrCommunicationException;
-import at.asitplus.eidas.specific.modules.auth.eidas.v2.utils.LoggingHandler;
-import at.gv.egiz.eaaf.core.api.data.PvpAttributeDefinitions;
-import at.gv.egiz.eaaf.core.api.data.XmlNamespaceConstants;
-import at.gv.egiz.eaaf.core.api.idp.IConfiguration;
-import at.gv.egiz.eaaf.core.impl.utils.DomUtils;
-import at.gv.egiz.eaaf.core.impl.utils.FileUtils;
-import at.gv.egiz.eaaf.core.impl.utils.KeyStoreUtils;
-import lombok.extern.slf4j.Slf4j;
-import szrservices.GetBPK;
-import szrservices.GetBPKResponse;
-import szrservices.GetIdentityLinkEidas;
-import szrservices.GetIdentityLinkEidasResponse;
-import szrservices.IdentityLinkType;
-import szrservices.JwsHeaderParam;
-import szrservices.ObjectFactory;
-import szrservices.PersonInfoType;
-import szrservices.SZR;
-import szrservices.SZRException_Exception;
-import szrservices.SignContent;
-import szrservices.SignContentEntry;
-import szrservices.SignContentResponseType;
-
-
-@Slf4j
-@Service("SZRClientForeIDAS")
-public class SzrClient {
-
- private static final String CLIENT_DEFAULT = "DefaultClient";
- private static final String CLIENT_RAW = "RawClient";
-
- private static final String ATTR_NAME_VSZ = "urn:eidgvat:attributes.vsz.value";
- private static final String ATTR_NAME_PUBKEYS = "urn:eidgvat:attributes.user.pubkeys";
- private static final String ATTR_NAME_STATUS = "urn:eidgvat:attributes.eid.status";
- private static final String KEY_BC_BIND = "bcBindReq";
- private static final String JOSE_HEADER_USERCERTPINNING_TYPE = "urn:at.gv.eid:bindtype";
- private static final String JOSE_HEADER_USERCERTPINNING_EIDASBIND = "urn:at.gv.eid:eidasBind";
- public static final String ATTR_NAME_MDS = "urn:eidgvat:mds";
-
- @Autowired
- private IConfiguration basicConfig;
-
- // client for anything, without identitylink
- private SZR szr = null;
-
- // RAW client is needed for identitylink
- private Dispatch<Source> dispatch = null;
-
- private SzrService szrService = null;
- private String szrUrl = null;
- private QName qname = null;
-
- final ObjectMapper mapper = new ObjectMapper();
-
- /**
- * Get IdentityLink of a person.
- *
- * @param personInfo Person identification information
- * @return IdentityLink
- * @throws SzrCommunicationException In case of a SZR error
- */
- public IdentityLinkType getIdentityLinkInRawMode(PersonInfoType personInfo)
- throws SzrCommunicationException {
- try {
- final GetIdentityLinkEidas getIdl = new GetIdentityLinkEidas();
- getIdl.setPersonInfo(personInfo);
-
- final JAXBContext jaxbContext = JAXBContext.newInstance(ObjectFactory.class);
- final Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
-
- final ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
- jaxbMarshaller.marshal(getIdl, outputStream);
- outputStream.flush();
-
- final Source source = new StreamSource(new ByteArrayInputStream(outputStream.toByteArray()));
- outputStream.close();
-
- log.trace("Requesting SZR ... ");
- final Source response = dispatch.invoke(source);
- log.trace("Receive RAW response from SZR");
-
- final byte[] szrResponse = sourceToByteArray(response);
- final GetIdentityLinkEidasResponse jaxbElement = (GetIdentityLinkEidasResponse) jaxbContext
- .createUnmarshaller().unmarshal(new ByteArrayInputStream(szrResponse));
-
- // build response
- log.trace(new String(szrResponse, "UTF-8"));
-
- // ok, we have success
- final Document doc = DomUtils.parseDocument(
- new ByteArrayInputStream(szrResponse),
- true,
- XmlNamespaceConstants.ALL_SCHEMA_LOCATIONS + " " + Constants.SZR_SCHEMA_LOCATIONS,
- null, null);
- final String xpathExpression = "//saml:Assertion";
- final Element nsNode = doc.createElementNS("urn:oasis:names:tc:SAML:1.0:assertion", "saml:NSNode");
-
- log.trace("Selecting signed doc " + xpathExpression);
- final Element documentNode = (Element) XPathAPI.selectSingleNode(doc,
- xpathExpression, nsNode);
- log.trace("Signed document: " + DomUtils.serializeNode(documentNode));
-
- final IdentityLinkType idl = new IdentityLinkType();
- idl.setAssertion(documentNode);
- idl.setPersonInfo(jaxbElement.getGetIdentityLinkReturn().getPersonInfo());
-
- return idl;
-
- } catch (final Exception e) {
- log.warn("SZR communication FAILED for operation: {} Reason: {}",
- "GetIdentityLinkEidas", e.getMessage(), e);
- throw new SzrCommunicationException("ernb.02", new Object[]{e.getMessage()}, e);
-
- }
-
- }
-
- /**
- * Get bPK of person.
- *
- * @param personInfo Person identification information
- * @param target requested bPK target
- * @param vkz Verfahrenskennzeichen
- * @return bPK for this person
- * @throws SzrCommunicationException In case of a SZR error
- */
- public List<String> getBpk(PersonInfoType personInfo, String target, String vkz)
- throws SzrCommunicationException {
- try {
- final GetBPK parameters = new GetBPK();
- parameters.setPersonInfo(personInfo);
- parameters.getBereichsKennung().add(target);
- parameters.setVKZ(vkz);
- final GetBPKResponse result = this.szr.getBPK(parameters);
-
- return result.getGetBPKReturn();
-
- } catch (final SZRException_Exception e) {
- log.warn("SZR communication FAILED for operation: {} Reason: {}",
- "GetBPK", e.getMessage(), e);
- throw new SzrCommunicationException("ernb.02", new Object[]{e.getMessage()}, e);
-
- }
-
- }
-
- /**
- * Request a encryped baseId from SRZ.
- *
- * @param personInfo Minimum dataset of person
- * @param insertErnp insertErnp flag on SZR request
- * @return encrypted baseId
- * @throws SzrCommunicationException In case of a SZR error
- */
- public String getEncryptedStammzahl(final PersonInfoType personInfo, boolean insertErnp)
- throws SzrCommunicationException {
- final String resp;
- try {
- resp = this.szr.getStammzahlEncrypted(personInfo, insertErnp);
-
- } catch (SZRException_Exception e) {
- log.warn("SZR communication FAILED for operation: {} Reason: {}",
- "getStammzahlEncrypted", e.getMessage(), e);
- throw new SzrCommunicationException("ernb.02", new Object[]{e.getMessage()}, e);
- }
-
- if (StringUtils.isEmpty(resp)) {
- throw new SzrCommunicationException("ernb.01", new Object[]{"Stammzahl response empty"}); // TODO error handling
-
- }
-
- return resp;
- }
-
- /**
- * Request a encrypted baseId from SRZ without insertErnp.
- *
- * @param personInfo Minimum dataset of person
- * @return encrypted baseId
- * @throws SzrCommunicationException In case of a SZR error
- */
- public String getEncryptedStammzahl(final PersonInfoType personInfo)
- throws SzrCommunicationException {
- return getEncryptedStammzahl(personInfo, false);
-
- }
-
- /**
- * Sign an eidasBind data-structure that combines vsz with user's pubKey and E-ID status.
- *
- * @param vsz encryped baseId
- * @param bindingPubKey binding PublikKey as PKCS1# (ASN.1) container
- * @param eidStatus Status of the E-ID
- * @param eidData eID information that was used for ERnP registration
- * @return bPK for this person
- * @throws SzrCommunicationException In case of a SZR error
- */
- public String getEidsaBind(final String vsz, final String bindingPubKey, final String eidStatus,
- ErnbEidData eidData)throws SzrCommunicationException {
-
- final Map<String, Object> eidsaBindMap = new HashMap<>();
- eidsaBindMap.put(ATTR_NAME_VSZ, vsz);
- eidsaBindMap.put(ATTR_NAME_STATUS, eidStatus);
- eidsaBindMap.put(ATTR_NAME_PUBKEYS, Arrays.asList(bindingPubKey));
- eidsaBindMap.put(PvpAttributeDefinitions.EID_ISSUING_NATION_NAME, eidData.getCitizenCountryCode());
- injectMdsIfAvailableAndActive(eidsaBindMap, eidData);
-
- try {
- final String serializedEidasBind = mapper.writeValueAsString(eidsaBindMap);
- final SignContent req = new SignContent();
- final SignContentEntry eidasBindInfo = new SignContentEntry();
- eidasBindInfo.setKey(KEY_BC_BIND);
- eidasBindInfo.setValue(serializedEidasBind);
- req.getIn().add(eidasBindInfo);
- req.setAppendCert(false);
- final JwsHeaderParam eidasBindJoseHeader = new JwsHeaderParam();
- eidasBindJoseHeader.setKey(JOSE_HEADER_USERCERTPINNING_TYPE);
- eidasBindJoseHeader.setValue(JOSE_HEADER_USERCERTPINNING_EIDASBIND);
- req.getJWSHeaderParam().add(eidasBindJoseHeader);
-
- log.trace("Requesting SZR to sign bcBind datastructure ... ");
- final SignContentResponseType resp = szr.signContent(req.isAppendCert(), req.getJWSHeaderParam(), req.getIn());
- log.trace("Receive SZR response on bcBind siging operation ");
-
- if (resp == null || resp.getOut() == null
- || resp.getOut().isEmpty()
- || StringUtils.isEmpty(resp.getOut().get(0).getValue())) {
- throw new SzrCommunicationException("ernb.01", new Object[]{"BcBind response empty"});
- }
-
- return resp.getOut().get(0).getValue();
-
- } catch (final JsonProcessingException | SZRException_Exception e) {
- log.warn("SZR communication FAILED for operation: {} Reason: {}",
- "SignContent", e.getMessage(), e);
- throw new SzrCommunicationException("ernb.02",
- new Object[]{e.getMessage()}, e);
- }
- }
-
- @PostConstruct
- private void initialize() {
- log.info("Starting SZR-Client initialization .... ");
- final URL url = SzrClient.class.getResource("/szr_client/SZR_v4.0.wsdl");
-
- final boolean useTestSzr = basicConfig.getBasicConfigurationBoolean(
- Constants.CONIG_PROPS_EIDAS_SZRCLIENT_USETESTSERVICE,
- true);
-
- if (useTestSzr) {
- log.debug("Initializing SZR test environment configuration.");
- qname = SzrService.SZRTestumgebung;
- szrService = new SzrService(url, new QName("urn:SZRServices", "SZRService"));
- szr = szrService.getSzrTestumgebung();
- szrUrl = basicConfig.getBasicConfiguration(Constants.CONIG_PROPS_EIDAS_SZRCLIENT_ENDPOINT_TEST);
-
- } else {
- log.debug("Initializing SZR productive configuration.");
- qname = SzrService.SZRProduktionsumgebung;
- szrService = new SzrService(url, new QName("urn:SZRServices", "SZRService"));
- szr = szrService.getSzrProduktionsumgebung();
- szrUrl = basicConfig.getBasicConfiguration(Constants.CONIG_PROPS_EIDAS_SZRCLIENT_ENDPOINT_PROD);
-
- }
-
- // create raw client;
- dispatch = szrService.createDispatch(qname, Source.class, javax.xml.ws.Service.Mode.PAYLOAD);
-
- if (StringUtils.isEmpty(szrUrl)) {
- log.error("No SZR service-URL found. SZR-Client initalisiation failed.");
- throw new RuntimeException("No SZR service URL found. SZR-Client initalisiation failed.");
-
- }
-
- // check if Clients can be initialized
- if (szr == null) {
- log.error("SZR " + CLIENT_DEFAULT + " is 'NULL'. Something goes wrong");
- throw new RuntimeException("SZR " + CLIENT_DEFAULT + " is 'NULL'. Something goes wrong");
-
- }
- if (dispatch == null) {
- log.error("SZR " + CLIENT_RAW + " is 'NULL'. Something goes wrong");
- throw new RuntimeException("SZR " + CLIENT_RAW + " is 'NULL'. Something goes wrong");
-
- }
-
- // inject handler
- log.info("Use SZR service-URL: " + szrUrl);
- injectBindingProvider((BindingProvider) szr, CLIENT_DEFAULT);
- injectBindingProvider(dispatch, CLIENT_RAW);
-
- // inject http parameters and SSL context
- log.debug("Inject HTTP client settings ... ");
- injectHttpClient(szr, CLIENT_DEFAULT);
- injectHttpClient(dispatch, CLIENT_RAW);
-
- log.info("SZR-Client initialization successfull");
- }
-
- private void injectHttpClient(Object raw, String clientType) {
- // extract client from implementation
- Client client = null;
- if (raw instanceof DispatchImpl<?>) {
- client = ((DispatchImpl<?>) raw).getClient();
- } else if (raw instanceof Client) {
- client = ClientProxy.getClient(raw);
- } else {
- throw new RuntimeException("SOAP Client for SZR connection is of UNSUPPORTED type: " + raw.getClass()
- .getName());
- }
-
- // set basic connection policies
- final HTTPConduit http = (HTTPConduit) client.getConduit();
-
- // set timeout policy
- final HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();
- httpClientPolicy.setConnectionTimeout(
- Integer.parseInt(basicConfig.getBasicConfiguration(
- Constants.CONIG_PROPS_EIDAS_SZRCLIENT_TIMEOUT_CONNECTION,
- Constants.HTTP_CLIENT_DEFAULT_TIMEOUT_CONNECTION)) * 1000);
- httpClientPolicy.setReceiveTimeout(
- Integer.parseInt(basicConfig.getBasicConfiguration(
- Constants.CONIG_PROPS_EIDAS_SZRCLIENT_TIMEOUT_RESPONSE,
- Constants.HTTP_CLIENT_DEFAULT_TIMEOUT_RESPONSE)) * 1000);
- http.setClient(httpClientPolicy);
-
- // inject SSL context in case of https
- if (szrUrl.toLowerCase().startsWith("https")) {
- log.debug("Adding SSLContext to client: " + clientType + " ... ");
- final TLSClientParameters tlsParams = new TLSClientParameters();
- tlsParams.setSSLSocketFactory(createSslContext(clientType).getSocketFactory());
- http.setTlsClientParameters(tlsParams);
- log.info("SSLContext initialized for client: " + clientType);
-
- }
-
- }
-
- private void injectBindingProvider(BindingProvider bindingProvider, String clientType) {
- final Map<String, Object> requestContext = bindingProvider.getRequestContext();
- requestContext.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, szrUrl);
-
- log.trace("Adding JAX-WS request/response trace handler to client: " + clientType);
- List<Handler> handlerList = bindingProvider.getBinding().getHandlerChain();
- if (handlerList == null) {
- handlerList = new ArrayList<>();
- bindingProvider.getBinding().setHandlerChain(handlerList);
-
- }
-
- // add logging handler to trace messages if required
- if (basicConfig.getBasicConfigurationBoolean(
- Constants.CONIG_PROPS_EIDAS_SZRCLIENT_DEBUG_TRACEMESSAGES,
- false)) {
- final LoggingHandler loggingHandler = new LoggingHandler();
- handlerList.add(loggingHandler);
-
- }
- bindingProvider.getBinding().setHandlerChain(handlerList);
- }
-
- private SSLContext createSslContext(String clientType) {
- try {
- final SSLContext context = SSLContext.getInstance("TLS");
-
- // initialize key-mangager for SSL client-authentication
- KeyManager[] keyManager = null;
- final String keyStorePath = basicConfig.getBasicConfiguration(
- Constants.CONIG_PROPS_EIDAS_SZRCLIENT_SSL_KEYSTORE_PATH);
- final String keyStorePassword = basicConfig.getBasicConfiguration(
- Constants.CONIG_PROPS_EIDAS_SZRCLIENT_SSL_KEYSTORE_PASSWORD);
- if (StringUtils.isNotEmpty(keyStorePath)) {
- log.trace("Find keyStore path: " + keyStorePath + " Injecting SSL client certificate ... ");
- try {
- final KeyStore keyStore = KeyStoreUtils.loadKeyStore(
- FileUtils.makeAbsoluteUrl(keyStorePath, basicConfig.getConfigurationRootDirectory()),
- keyStorePassword);
-
- final KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
- kmf.init(keyStore, keyStorePassword.toCharArray());
- keyManager = kmf.getKeyManagers();
- log.debug("SSL client certificate injected to client: " + clientType);
-
- } catch (KeyStoreException | IOException | UnrecoverableKeyException e) {
- log.error("Can NOT load SSL client certificate from path: " + keyStorePath);
- throw new RuntimeException("Can NOT load SSL client certificate from path: " + keyStorePath, e);
-
- }
- } else {
- log.debug(
- "No KeyStore for SSL Client Auth. found. Initializing SSLContext without authentication ... ");
-
- }
-
- // initialize SSL TrustStore
- TrustManager[] trustManager = null;
- final String trustStorePath = basicConfig.getBasicConfiguration(
- Constants.CONIG_PROPS_EIDAS_SZRCLIENT_SSL_TRUSTSTORE_PATH);
- final String trustStorePassword = basicConfig.getBasicConfiguration(
- Constants.CONIG_PROPS_EIDAS_SZRCLIENT_SSL_TRUSTSTORE_PASSWORD);
- if (StringUtils.isNotEmpty(trustStorePath)) {
- log.trace("Find trustStore path: " + trustStorePath + " Injecting SSL TrustStore ... ");
- try {
- final KeyStore trustStore = KeyStoreUtils.loadKeyStore(
- FileUtils.makeAbsoluteUrl(trustStorePath, basicConfig.getConfigurationRootDirectory()),
- trustStorePassword);
-
- final TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509");
- tmf.init(trustStore);
- trustManager = tmf.getTrustManagers();
- log.debug("SSL TrustStore injected to client: " + clientType);
-
- } catch (KeyStoreException | IOException e) {
- log.error("Can NOT open SSL TrustStore from path: " + trustStorePath);
- throw new RuntimeException("Can NOT open SSL TrustStore from path: " + trustStorePath, e);
-
- }
-
- } else {
- log.debug("No custom SSL TrustStore found. Initializing SSLContext with JVM default truststore ... ");
-
- }
-
- context.init(keyManager, trustManager, new SecureRandom());
- return context;
-
- } catch (NoSuchAlgorithmException | KeyManagementException e) {
- log.error("SSLContext initialization FAILED.", e);
- throw new RuntimeException("SSLContext initialization FAILED.", e);
-
- }
-
- }
-
- private void injectMdsIfAvailableAndActive(Map<String, Object> eidsaBindMap, ErnbEidData eidData) {
- if (basicConfig.getBasicConfigurationBoolean(
- Constants.CONIG_PROPS_EIDAS_SZRCLIENT_SET_MDS_TO_EIDASBIND, false)) {
- log.info("Injecting MDS into eidasBind ... ");
- final Map<String, Object> mds = new HashMap<>();
- mds.put(PvpAttributeDefinitions.PRINCIPAL_NAME_NAME, eidData.getFamilyName());
- mds.put(PvpAttributeDefinitions.GIVEN_NAME_NAME, eidData.getGivenName());
- mds.put(PvpAttributeDefinitions.BIRTHDATE_NAME, eidData.getFormatedDateOfBirth());
- eidsaBindMap.put(ATTR_NAME_MDS, mds);
-
- }
- }
-
- private byte[] sourceToByteArray(Source result) throws TransformerException {
- final TransformerFactory factory = TransformerFactory.newInstance();
- factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
- final Transformer transformer = factory.newTransformer();
- transformer.setOutputProperty("omit-xml-declaration", "yes");
- transformer.setOutputProperty("method", "xml");
- final ByteArrayOutputStream out = new ByteArrayOutputStream();
- final StreamResult streamResult = new StreamResult();
- streamResult.setOutputStream(out);
- transformer.transform(result, streamResult);
- return out.toByteArray();
- }
-
-}
diff --git a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/AlternativeSearchTask.java b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/AlternativeSearchTask.java
new file mode 100644
index 00000000..96aa9c51
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/AlternativeSearchTask.java
@@ -0,0 +1,246 @@
+/*
+ * 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.tasks;
+
+import static at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants.CONTEXT_FLAG_ADVANCED_MATCHING_FAILED;
+import static at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants.CONTEXT_FLAG_ADVANCED_MATCHING_FAILED_REASON;
+import static at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants.TRANSITION_TO_GENERATE_OTHER_LOGIN_METHOD_GUI_TASK;
+
+import java.util.Map;
+import java.util.Objects;
+
+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.SimpleEidasData;
+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.WorkflowException;
+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.RegisterOperationStatus;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.service.RegisterSearchService.RegisterStatusResults;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.utils.MatchingTaskUtils;
+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.modules.AbstractAuthServletTask;
+import eu.eidas.auth.commons.light.ILightResponse;
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * Searches registers (ERnP and ZMR) after alternative eIDAS authn, before adding person to SZR.
+ * Input:
+ * <ul>
+ * <li>{@link Constants#DATA_FULL_EIDAS_RESPONSE_ALTERNATIVE} data from the alternative eIDAS authn</li>
+ * <li>{@link Constants#DATA_SIMPLE_EIDAS} data from the initial eIDAS authn</li>
+ * </ul>
+ * Output:
+ * <ul>
+ * <li>{@link Constants#DATA_PERSON_MATCH_RESULT} results after second search in registers with MDS</li>
+ * </ul>
+ * Transitions:
+ * <ul>
+ * <li>{@link GenerateOtherLoginMethodGuiTask} if no results in registers were found for this user</li>
+ * <li>{@link CreateIdentityLinkTask} if search in register returned one match, user is uniquely identified</li>
+ * </ul>
+ *
+ * @author amarsalek
+ * @author ckollmann
+ * @author tlenz
+ */
+@Slf4j
+@Component("AlternativeSearchTask")
+@SuppressWarnings("PMD.TooManyStaticImports")
+public class AlternativeSearchTask extends AbstractAuthServletTask {
+
+ private static final String MSG_PROP_25 = "module.eidasauth.matching.25";
+
+ private final RegisterSearchService registerSearchService;
+ private final ICcSpecificEidProcessingService eidPostProcessor;
+
+ /**
+ * Constructor.
+ *
+ * @param registerSearchService Service for register search access
+ * @param eidPostProcessor Country-Specific post processing of attributes
+ */
+ public AlternativeSearchTask(RegisterSearchService registerSearchService,
+ ICcSpecificEidProcessingService eidPostProcessor) {
+ this.registerSearchService = registerSearchService;
+ this.eidPostProcessor = eidPostProcessor;
+ }
+
+ @Override
+ public void execute(ExecutionContext executionContext, HttpServletRequest request, HttpServletResponse response)
+ throws TaskExecutionException {
+ try {
+ final SimpleEidasData altEidasData = convertEidasAttrToSimpleData();
+ final SimpleEidasData initialEidasData = MatchingTaskUtils.getInitialEidasData(pendingReq);
+ final RegisterStatusResults intermediateMatchingState =
+ MatchingTaskUtils.getIntermediateMatchingResult(pendingReq);
+
+ //pre-validation of eIDAS data
+ preVerifyAlternativeEidasData(altEidasData, initialEidasData, intermediateMatchingState);
+
+ //perform register search operation based on alterantive eIDAS data
+ step11RegisterSearchWithPersonIdentifier(executionContext, altEidasData,
+ intermediateMatchingState, initialEidasData);
+
+ } catch (WorkflowException e) {
+ throw new TaskExecutionException(pendingReq, "Initial search failed", e);
+
+ } catch (final Exception e) {
+ log.error("Initial search failed", e);
+ throw new TaskExecutionException(pendingReq, "Initial search failed with a generic error", e);
+
+ }
+ }
+
+ /**
+ * Pre-validation of eIDAS information.
+ *
+ * <p>Check if country-code and MDS (givenName, familyName, dateOfBirth) matches.</p>
+ *
+ * @param altEidasData eIDAS data from alternative authentication
+ * @param initialEidasData eIDAS data from initial authentication
+ * @param intermediateMatchingState Intermediate matching result
+ * @throws WorkflowException In case of a validation error
+ */
+ private void preVerifyAlternativeEidasData(SimpleEidasData altEidasData, SimpleEidasData initialEidasData,
+ RegisterStatusResults intermediateMatchingState) throws WorkflowException {
+ if (initialEidasData == null) {
+ throw new WorkflowException("step11", "No initial eIDAS authn data", true);
+
+ }
+
+ if (intermediateMatchingState == null) {
+ throw new WorkflowException("step11", "No intermediate matching-state", true);
+
+ }
+
+ if (!Objects.equals(altEidasData.getCitizenCountryCode(), initialEidasData.getCitizenCountryCode())) {
+ throw new WorkflowException("step11", "Country Code of alternative eIDAS authn not matching", true);
+
+ }
+
+ if (!altEidasData.equalsMds(initialEidasData)) {
+ throw new WorkflowException("step11", "MDS of alternative eIDAS authn does not match initial authn", true);
+
+ }
+ }
+
+ private void step11RegisterSearchWithPersonIdentifier(
+ ExecutionContext executionContext, SimpleEidasData altEidasData,
+ RegisterStatusResults intermediateMatchingState, SimpleEidasData initialEidasData)
+ throws WorkflowException, EaafStorageException {
+ try {
+ log.trace("Starting step11RegisterSearchWithPersonIdentifier");
+ RegisterStatusResults altSearchResult = registerSearchService.searchWithPersonIdentifier(
+ intermediateMatchingState.getOperationStatus(), altEidasData);
+
+ int resultCount = altSearchResult.getResultCount();
+ if (resultCount == 0) {
+ step12CountrySpecificSearch(executionContext, intermediateMatchingState, initialEidasData,
+ altSearchResult.getOperationStatus(), altEidasData);
+
+ } else if (resultCount == 1) {
+ log.debug("step11RegisterSearchWithPersonIdentifier find single result. Starting KITT operation ... ");
+ RegisterStatusResults matchtedResult = registerSearchService.step7bKittProcess(
+ intermediateMatchingState, initialEidasData, altSearchResult, altEidasData);
+
+ log.debug("KITT operation finished. Finalize matching process ... ");
+ foundMatchFinalizeTask(matchtedResult, altEidasData);
+
+ } else {
+ throw new WorkflowException("step11RegisterSearchWithPersonIdentifier",
+ "More than one entry with unique personal-identifier", true);
+
+ }
+ } catch (WorkflowException e) {
+ log.warn("Workflow error during matching step: {}. Reason: {}", e.getProcessStepName(), e.getErrorReason());
+ throw e;
+
+ }
+ }
+
+ private void step12CountrySpecificSearch(ExecutionContext executionContext,
+ RegisterStatusResults intermediateMatchingState,
+ SimpleEidasData initialEidasData,
+ RegisterOperationStatus registerOperationStatus,
+ SimpleEidasData altEidasData)
+ throws EaafStorageException, WorkflowException {
+ log.trace("Starting 'step12CountrySpecificSearch' ... ");
+ RegisterStatusResults ccAltSearchResult = registerSearchService.searchWithCountrySpecifics(
+ registerOperationStatus, altEidasData);
+
+ if (ccAltSearchResult.getResultCount() == 0) {
+ log.trace("'step12CountrySpecificSearch' ends with no result. Forward to GUI based matching step ... ");
+ log.debug("Forward to GUI based matching steps ... ");
+ executionContext.put(TRANSITION_TO_GENERATE_OTHER_LOGIN_METHOD_GUI_TASK, true);
+ executionContext.put(CONTEXT_FLAG_ADVANCED_MATCHING_FAILED_REASON, MSG_PROP_25);
+ executionContext.put(CONTEXT_FLAG_ADVANCED_MATCHING_FAILED, true);
+
+ } else if (ccAltSearchResult.getResultCount() == 1) {
+ log.debug("'step12CountrySpecificSearch' find single result. Starting KITT operation ... ");
+ RegisterStatusResults matchtedResult = registerSearchService.step7bKittProcess(
+ intermediateMatchingState, initialEidasData, ccAltSearchResult, altEidasData);
+
+ log.debug("KITT operation finished. Finalize matching process ... ");
+ foundMatchFinalizeTask(matchtedResult, altEidasData);
+
+ } else {
+ throw new WorkflowException("step12CountrySpecificSearch",
+ "More than one entry with unique country-specific information", true);
+
+ }
+ }
+
+ private void foundMatchFinalizeTask(RegisterStatusResults searchResult, SimpleEidasData eidasData)
+ throws WorkflowException, EaafStorageException {
+ MatchedPersonResult result = MatchedPersonResult.generateFormMatchingResult(
+ searchResult.getResult(), eidasData.getCitizenCountryCode());
+ MatchingTaskUtils.storeFinalMatchingResult(pendingReq, result);
+
+ //remove intermediate matching-state
+ MatchingTaskUtils.storeIntermediateMatchingResult(pendingReq, null);
+
+ }
+
+ @NotNull
+ private SimpleEidasData convertEidasAttrToSimpleData()
+ throws EidasAttributeException, EidPostProcessingException {
+ final ILightResponse eidasResponse = MatchingTaskUtils.getAuthProcessDataWrapper(pendingReq)
+ .getGenericDataFromSession(Constants.DATA_FULL_EIDAS_RESPONSE_ALTERNATIVE, ILightResponse.class);
+ Map<String, Object> simpleMap = MatchingTaskUtils.convertEidasAttrToSimpleMap(
+ eidasResponse.getAttributes().getAttributeMap(), log);
+ return eidPostProcessor.postProcess(simpleMap);
+ }
+
+}
diff --git a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/CreateIdentityLinkTask.java b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/CreateIdentityLinkTask.java
index 58ab0c6a..6d315b0a 100644
--- a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/CreateIdentityLinkTask.java
+++ b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/CreateIdentityLinkTask.java
@@ -23,87 +23,78 @@
package at.asitplus.eidas.specific.modules.auth.eidas.v2.tasks;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.HashMap;
import java.util.List;
-import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
-import javax.xml.parsers.ParserConfigurationException;
-import org.apache.commons.lang3.StringUtils;
-import org.joda.time.DateTime;
+import org.jetbrains.annotations.Nullable;
+import org.jose4j.lang.JoseException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.xml.sax.SAXException;
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.ImmutableSet;
+import com.fasterxml.jackson.core.JsonProcessingException;
import at.asitplus.eidas.specific.core.MsConnectorEventCodes;
import at.asitplus.eidas.specific.core.MsEidasNodeConstants;
import at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants;
-import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.ErnbEidData;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.clients.szr.SzrClient;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.MatchedPersonResult;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.SimpleEidasData;
import at.asitplus.eidas.specific.modules.auth.eidas.v2.exception.EidasAttributeException;
import at.asitplus.eidas.specific.modules.auth.eidas.v2.exception.SzrCommunicationException;
import at.asitplus.eidas.specific.modules.auth.eidas.v2.service.AuthBlockSigningService;
-import at.asitplus.eidas.specific.modules.auth.eidas.v2.service.ICcSpecificEidProcessingService;
-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.asitplus.eidas.specific.modules.auth.eidas.v2.utils.MatchingTaskUtils;
import at.gv.egiz.eaaf.core.api.data.EaafConstants;
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.EaafStorageException;
import at.gv.egiz.eaaf.core.exceptions.TaskExecutionException;
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.idp.auth.data.AuthProcessDataWrapper;
import at.gv.egiz.eaaf.core.impl.idp.auth.data.SimpleIdentityLinkAssertionParser;
import at.gv.egiz.eaaf.core.impl.idp.auth.modules.AbstractAuthServletTask;
-import at.gv.egiz.eaaf.core.impl.utils.DomUtils;
-import at.gv.egiz.eaaf.core.impl.utils.XPathUtils;
-import eu.eidas.auth.commons.attribute.AttributeDefinition;
-import eu.eidas.auth.commons.attribute.AttributeValue;
-import eu.eidas.auth.commons.light.ILightResponse;
-import eu.eidas.auth.commons.protocol.eidas.impl.PostalAddress;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import szrservices.IdentityLinkType;
-import szrservices.PersonInfoType;
-import szrservices.TravelDocumentType;
/**
* Task that creates the IdentityLink for an eIDAS authenticated person.
- *
+ * Input:
+ * <ul>
+ * <li>{@link Constants#DATA_SIMPLE_EIDAS} initial login data from user</li>
+ * <li>{@link Constants#DATA_PERSON_MATCH_RESULT} the data of the matched entry in a register</li>
+ * </ul>
+ * Output:
+ * <ul>
+ * <li>{@link Constants#EIDAS_BIND} the binding block</li>
+ * <li>{@link Constants#SZR_AUTHBLOCK} the auth block</li>
+ * </ul>
+ * Transitions:
+ * <ul>
+ * <li>{@link at.gv.egiz.eaaf.core.impl.idp.controller.tasks.FinalizeAuthenticationTask}</li>
+ * </ul>
* @author tlenz
*/
@Slf4j
@Component("CreateIdentityLinkTask")
public class CreateIdentityLinkTask extends AbstractAuthServletTask {
+ @SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
@Autowired
private IConfiguration basicConfig;
@Autowired
private SzrClient szrClient;
@Autowired
- private ICcSpecificEidProcessingService eidPostProcessor;
-
- @Autowired
private AuthBlockSigningService authBlockSigner;
private static final String EID_STATUS = "urn:eidgvat:eid.status.eidas";
-
+
/*
* (non-Javadoc)
*
@@ -116,98 +107,32 @@ public class CreateIdentityLinkTask extends AbstractAuthServletTask {
public void execute(ExecutionContext executionContext, HttpServletRequest request, HttpServletResponse response)
throws TaskExecutionException {
try {
- final AuthProcessDataWrapper authProcessData = pendingReq.getSessionData(AuthProcessDataWrapper.class);
- final ILightResponse eidasResponse = authProcessData
- .getGenericDataFromSession(Constants.DATA_FULL_EIDAS_RESPONSE, ILightResponse.class);
- final Map<String, Object> simpleAttrMap = convertEidasAttrToSimpleMap(
- eidasResponse.getAttributes().getAttributeMap());
+ /*TODO: needs more re-factoring if we finalize CreateNewErnpEntryTask and we know how add entries into ERnP
+ * Maybe, we can fully replace eidData by matchedPersonData,
+ * because matchedPersonData holds the result after a successful matching process.
+ *
+ * Currently, we only add a work-around to operate without new ERnP implementation.
+ */
+ final SimpleEidasData eidData = MatchingTaskUtils.getInitialEidasData(pendingReq);
+ MatchedPersonResult matchedPersonData = MatchingTaskUtils.getFinalMatchingResult(pendingReq);
- // post-process eIDAS attributes
- final ErnbEidData eidData = eidPostProcessor.postProcess(simpleAttrMap);
-
- // write MDS into technical log and revision log
+ // write log information based on current configuration
writeMdsLogInformation(eidData);
- //build IdentityLink or VSZ and eidasBind
- if (basicConfig.getBasicConfigurationBoolean(Constants.CONIG_PROPS_EIDAS_SZRCLIENT_DEBUG_USEDUMMY, false)) {
- SzrResultHolder idlResult = createDummyIdentityLinkForTestDeployment(eidData);
- //inject personal-data into session
- authProcessData.setIdentityLink(idlResult.getIdentityLink());
-
- // set bPK and bPKType into auth session
- authProcessData.setGenericDataToSession(PvpAttributeDefinitions.BPK_NAME, extendBpkByPrefix(
- idlResult.getBpK(), pendingReq.getServiceProviderConfiguration().getAreaSpecificTargetIdentifier()));
- authProcessData.setGenericDataToSession(PvpAttributeDefinitions.EID_SECTOR_FOR_IDENTIFIER_NAME,
- pendingReq.getServiceProviderConfiguration()
- .getAreaSpecificTargetIdentifier());
-
+ //request SZR based on IDL or E-ID mode
+ if (pendingReq.getServiceProviderConfiguration()
+ .isConfigurationValue(MsEidasNodeConstants.PROP_CONFIG_SP_NEW_EID_MODE, false)) {
+ executeEidMode(eidData, matchedPersonData);
+
} else {
- //build SZR request from eIDAS data
- final PersonInfoType personInfo = generateSzrRequest(eidData);
-
- //request SZR based on IDL or E-ID mode
- if (pendingReq.getServiceProviderConfiguration()
- .isConfigurationValue(MsEidasNodeConstants.PROP_CONFIG_SP_NEW_EID_MODE, false)) {
-
- // get VSZ
- String vsz = getVszForPerson(personInfo);
-
- //write revision-Log entry and extended infos personal-identifier mapping
- revisionsLogger.logEvent(pendingReq, MsConnectorEventCodes.SZR_VSZ_RECEIVED);
- writeExtendedRevisionLogEntry(simpleAttrMap, eidData);
-
-
- // get eIDAS bind
- String signedEidasBind = szrClient.getEidsaBind(vsz,
- authBlockSigner.getBase64EncodedPublicKey(),
- EID_STATUS, eidData);
- revisionsLogger.logEvent(pendingReq, MsConnectorEventCodes.SZR_EIDASBIND_RECEIVED);
- authProcessData.setGenericDataToSession(MsEidasNodeConstants.AUTH_DATA_EIDAS_BIND, signedEidasBind);
-
- //get signed AuthBlock
- String jwsSignature = authBlockSigner.buildSignedAuthBlock(pendingReq);
- revisionsLogger.logEvent(pendingReq, MsConnectorEventCodes.TECH_AUCHBLOCK_CREATED);
- authProcessData.setGenericDataToSession(MsEidasNodeConstants.AUTH_DATA_SZR_AUTHBLOCK, jwsSignature);
-
- //inject personal-data into session
- authProcessData.setEidProcess(true);
-
- } else {
- //request SZR
- SzrResultHolder idlResult = requestSzrForIdentityLink(personInfo);
-
- //write revision-Log entry for personal-identifier mapping
- writeExtendedRevisionLogEntry(simpleAttrMap, eidData);
-
- //check result-data and write revision-log based on current state
- checkStateAndWriteRevisionLog(idlResult);
-
- //inject personal-data into session
- authProcessData.setIdentityLink(idlResult.getIdentityLink());
- authProcessData.setEidProcess(false);
-
- // set bPK and bPKType into auth session
- authProcessData.setGenericDataToSession(PvpAttributeDefinitions.BPK_NAME, extendBpkByPrefix(
- idlResult.getBpK(), pendingReq.getServiceProviderConfiguration().getAreaSpecificTargetIdentifier()));
- authProcessData.setGenericDataToSession(PvpAttributeDefinitions.EID_SECTOR_FOR_IDENTIFIER_NAME,
- pendingReq.getServiceProviderConfiguration()
- .getAreaSpecificTargetIdentifier());
-
- }
+ executeIdlMode(eidData, matchedPersonData);
+
}
-
- //add generic info's into session
- authProcessData.setForeigner(true);
- authProcessData.setGenericDataToSession(PvpAttributeDefinitions.EID_ISSUING_NATION_NAME, EidasResponseUtils
- .parseEidasPersonalIdentifier((String) simpleAttrMap.get(Constants.eIDAS_ATTR_PERSONALIDENTIFIER))
- .getFirst());
- authProcessData.setQaaLevel(eidasResponse.getLevelOfAssurance());
-
- // store pending-request
+
+ storeGenericInfoToSession(eidData);
requestStoreage.storePendingRequest(pendingReq);
-
-
+
} catch (final EidasAttributeException e) {
throw new TaskExecutionException(pendingReq, "Minimum required eIDAS attributeset not found.", e);
@@ -221,338 +146,176 @@ public class CreateIdentityLinkTask extends AbstractAuthServletTask {
}
}
+ private void storeGenericInfoToSession(SimpleEidasData eidData) throws EaafStorageException {
+ AuthProcessDataWrapper authProcessData = MatchingTaskUtils.getAuthProcessDataWrapper(pendingReq);
+ authProcessData.setForeigner(true);
+ authProcessData.setGenericDataToSession(PvpAttributeDefinitions.EID_ISSUING_NATION_NAME,
+ eidData.getCitizenCountryCode());
+ }
- private String getVszForPerson(PersonInfoType personInfo) throws SzrCommunicationException, EaafException {
- if (basicConfig.getBasicConfigurationBoolean(
- Constants.CONIG_PROPS_EIDAS_SZRCLIENT_WORKAROUND_IDA_VSZ_IDL, true)) {
- log.debug("IDA workaround is active. Requesting IDL to insert person into ERnP .... ");
-
- // work-around, because getEncryptedStammzahl does not support insertERnP for eIDAS entities
- SzrResultHolder idlResult = requestSzrForIdentityLink(personInfo);
-
- // get encrypted baseId
- return szrClient.getEncryptedStammzahl(buildGetEncryptedBaseIdReq(idlResult.identityLink));
-
-
- } else {
- return szrClient.getEncryptedStammzahl(personInfo, true);
-
- }
+ private void executeIdlMode(SimpleEidasData eidData, MatchedPersonResult matchedPersonData) throws EaafException {
+ //request SZR
+ SzrResultHolder idlResult = requestSzrForIdentityLink(eidData, matchedPersonData);
+
+ //write revision-Log entry for personal-identifier mapping
+ writeExtendedRevisionLogEntry(eidData, eidData.getPersonalIdentifier());
+ //check result-data and write revision-log based on current state
+ checkStateAndWriteRevisionLog(idlResult);
+
+ //inject personal-data into session
+ AuthProcessDataWrapper authProcessDataWrapper = MatchingTaskUtils.getAuthProcessDataWrapper(pendingReq);
+ authProcessDataWrapper.setIdentityLink(idlResult.getIdentityLink());
+ authProcessDataWrapper.setEidProcess(false);
+
+ // set bPK and bPKType into auth session
+ authProcessDataWrapper.setGenericDataToSession(PvpAttributeDefinitions.BPK_NAME, extendBpkByPrefix(
+ idlResult.getBpK(), pendingReq.getServiceProviderConfiguration().getAreaSpecificTargetIdentifier()));
+ authProcessDataWrapper.setGenericDataToSession(PvpAttributeDefinitions.EID_SECTOR_FOR_IDENTIFIER_NAME,
+ pendingReq.getServiceProviderConfiguration()
+ .getAreaSpecificTargetIdentifier());
}
- 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 executeEidMode(SimpleEidasData eidData, MatchedPersonResult matchedPersonData)
+ throws JsonProcessingException, EaafException, JoseException {
+ // get encrypted baseId
+ log.debug("Requesting encrypted baseId by already matched person information ... ");
+ String vsz = szrClient.getEncryptedStammzahl(matchedPersonData);
+
+ //write revision-Log entry and extended infos personal-identifier mapping
+ revisionsLogger.logEvent(pendingReq, MsConnectorEventCodes.SZR_VSZ_RECEIVED);
+ writeExtendedRevisionLogEntry(eidData, eidData.getPersonalIdentifier());
+
+ // get eIDAS bind
+ String signedEidasBind = szrClient
+ .getEidasBind(vsz, authBlockSigner.getBase64EncodedPublicKey(), EID_STATUS, eidData);
+ revisionsLogger.logEvent(pendingReq, MsConnectorEventCodes.SZR_EIDASBIND_RECEIVED);
+ AuthProcessDataWrapper authProcessDataWrapper = MatchingTaskUtils.getAuthProcessDataWrapper(pendingReq);
+ authProcessDataWrapper.setGenericDataToSession(MsEidasNodeConstants.AUTH_DATA_EIDAS_BIND, signedEidasBind);
+
+ //get signed AuthBlock
+ String jwsSignature = authBlockSigner.buildSignedAuthBlock(pendingReq);
+ revisionsLogger.logEvent(pendingReq, MsConnectorEventCodes.TECH_AUCHBLOCK_CREATED);
+ authProcessDataWrapper.setGenericDataToSession(MsEidasNodeConstants.AUTH_DATA_SZR_AUTHBLOCK, jwsSignature);
+
+ //inject personal-data into session
+ authProcessDataWrapper.setEidProcess(true);
}
- private void writeExtendedRevisionLogEntry(Map<String, Object> simpleAttrMap, ErnbEidData eidData) {
- // write ERnB input-data into revision-log
+ private void writeExtendedRevisionLogEntry(SimpleEidasData eidData, String personalIdentifier) {
+ // write ERnP input-data into revision-log
if (basicConfig.getBasicConfigurationBoolean(
Constants.CONIG_PROPS_EIDAS_SZRCLIENT_WORKAROUND_REVISIONLOGDATASTORE_ACTIVE, false)) {
- revisionsLogger.logEvent(pendingReq, MsConnectorEventCodes.SZR_ERNB_EIDAS_RAW_ID,
- (String) simpleAttrMap.get(Constants.eIDAS_ATTR_PERSONALIDENTIFIER));
+ revisionsLogger.logEvent(pendingReq, MsConnectorEventCodes.SZR_ERNB_EIDAS_RAW_ID, personalIdentifier);
revisionsLogger.logEvent(pendingReq, MsConnectorEventCodes.SZR_ERNB_EIDAS_ERNB_ID, eidData.getPseudonym());
}
}
-
- private PersonInfoType generateSzrRequest(ErnbEidData eidData) {
- log.debug("Starting connecting SZR Gateway");
- final PersonInfoType personInfo = new PersonInfoType();
- final PersonNameType personName = new PersonNameType();
- final PhysicalPersonType naturalPerson = new PhysicalPersonType();
- final TravelDocumentType eDocument = new TravelDocumentType();
-
- naturalPerson.setName(personName);
- personInfo.setPerson(naturalPerson);
- personInfo.setTravelDocument(eDocument);
-
- // person information
- personName.setFamilyName(eidData.getFamilyName());
- personName.setGivenName(eidData.getGivenName());
- naturalPerson.setDateOfBirth(eidData.getFormatedDateOfBirth());
- eDocument.setIssuingCountry(eidData.getCitizenCountryCode());
- eDocument.setDocumentNumber(eidData.getPseudonym());
-
- // eID document information
- eDocument.setDocumentType(basicConfig
- .getBasicConfiguration(Constants.CONIG_PROPS_EIDAS_SZRCLIENT_PARAMS_EDOCUMENTTYPE,
- Constants.SZR_CONSTANTS_DEFAULT_DOCUMENT_TYPE));
-
- // set PlaceOfBirth if available
- if (eidData.getPlaceOfBirth() != null) {
- log.trace("Find 'PlaceOfBirth' attribute: " + eidData.getPlaceOfBirth());
- if (basicConfig
- .getBasicConfigurationBoolean(Constants.CONIG_PROPS_EIDAS_SZRCLIENT_PARAMS_SETPLACEOFBIRTHIFAVAILABLE,
- true)) {
- naturalPerson.setPlaceOfBirth(eidData.getPlaceOfBirth());
- log.trace("Adding 'PlaceOfBirth' to ERnB request ... ");
-
- }
- }
-
- // set BirthName if available
- if (eidData.getBirthName() != null) {
- log.trace("Find 'BirthName' attribute: " + eidData.getBirthName());
- if (basicConfig
- .getBasicConfigurationBoolean(Constants.CONIG_PROPS_EIDAS_SZRCLIENT_PARAMS_SETBIRTHNAMEIFAVAILABLE,
- true)) {
- final AlternativeNameType alternativeName = new AlternativeNameType();
- naturalPerson.setAlternativeName(alternativeName);
- alternativeName.setFamilyName(eidData.getBirthName());
- log.trace("Adding 'BirthName' to ERnB request ... ");
-
- }
- }
-
- return personInfo;
-
- }
- private SzrResultHolder requestSzrForIdentityLink(PersonInfoType personInfo)
- throws SzrCommunicationException, EaafException {
+ private SzrResultHolder requestSzrForIdentityLink(SimpleEidasData eidData,
+ MatchedPersonResult matchedPersonData) throws EaafException {
//request IdentityLink from SZR
- final IdentityLinkType result = szrClient.getIdentityLinkInRawMode(personInfo);
-
+ log.debug("Requesting encrypted baseId by already matched person information ... ");
+ IdentityLinkType result = szrClient.getIdentityLinkInRawMode(matchedPersonData);
+
final Element idlFromSzr = (Element) result.getAssertion();
- IIdentityLink identityLink = new SimpleIdentityLinkAssertionParser(idlFromSzr).parseIdentityLink();
+ final IIdentityLink identityLink = new SimpleIdentityLinkAssertionParser(idlFromSzr).parseIdentityLink();
// get bPK from SZR
String bpk = null;
- if (basicConfig
- .getBasicConfigurationBoolean(Constants.CONIG_PROPS_EIDAS_SZRCLIENT_DEBUG_USESRZFORBPKGENERATION, true)) {
- List<String> bpkList = szrClient
- .getBpk(personInfo, pendingReq.getServiceProviderConfiguration().getAreaSpecificTargetIdentifier(),
- basicConfig
- .getBasicConfiguration(Constants.CONIG_PROPS_EIDAS_SZRCLIENT_PARAMS_VKZ, "no VKZ defined"));
+ String targetId = pendingReq.getServiceProviderConfiguration().getAreaSpecificTargetIdentifier();
+ boolean debugUseSzrForBpk = basicConfig
+ .getBasicConfigurationBoolean(Constants.CONIG_PROPS_EIDAS_SZRCLIENT_DEBUG_USESRZFORBPKGENERATION, true);
+ if (debugUseSzrForBpk) {
+ String vkz = basicConfig
+ .getBasicConfiguration(Constants.CONIG_PROPS_EIDAS_SZRCLIENT_PARAMS_VKZ, "no VKZ defined");
+ List<String> bpkList = szrClient.getBpk(eidData, targetId, vkz);
if (!bpkList.isEmpty()) {
bpk = bpkList.get(0);
-
}
-
-
} else {
log.debug("Calculating bPK from baseId ... ");
- final Pair<String, String> bpkCalc = BpkBuilder
- .generateAreaSpecificPersonIdentifier(identityLink.getIdentificationValue(),
- identityLink.getIdentificationType(),
- pendingReq.getServiceProviderConfiguration()
- .getAreaSpecificTargetIdentifier());
+ String idValue = identityLink.getIdentificationValue();
+ String idType = identityLink.getIdentificationType();
+ final Pair<String, String> bpkCalc = BpkBuilder.generateAreaSpecificPersonIdentifier(idValue, idType, targetId);
bpk = bpkCalc.getFirst();
-
+
}
-
+
return new SzrResultHolder(identityLink, bpk);
-
}
-
+
private void checkStateAndWriteRevisionLog(SzrResultHolder idlResult) throws SzrCommunicationException {
// write some infos into revision log
if (idlResult.getIdentityLink() == null) {
log.error("ERnB did not return an identity link.");
throw new SzrCommunicationException("ernb.00", null);
-
}
- revisionsLogger.logEvent(pendingReq,
- MsConnectorEventCodes.SZR_IDL_RECEIVED,
- idlResult.getIdentityLink().getSamlAssertion()
- .getAttribute(SimpleIdentityLinkAssertionParser.ASSERTIONID));
+
+ String assertionId = idlResult.getIdentityLink().getSamlAssertion()
+ .getAttribute(SimpleIdentityLinkAssertionParser.ASSERTIONID);
+ revisionsLogger.logEvent(pendingReq, MsConnectorEventCodes.SZR_IDL_RECEIVED, assertionId);
if (idlResult.getBpK() == null) {
log.error("ERnB did not return a bPK for target: " + pendingReq.getServiceProviderConfiguration()
- .getAreaSpecificTargetIdentifier());
+ .getAreaSpecificTargetIdentifier());
throw new SzrCommunicationException("ernb.01", null);
-
}
+
revisionsLogger.logEvent(pendingReq, MsConnectorEventCodes.SZR_BPK_RECEIVED);
log.debug("ERnB communication was successfull");
-
}
-
- private String extendBpkByPrefix(String bpk, String type) {
- String bpkType = null;
-
- if (type.startsWith(EaafConstants.URN_PREFIX_WBPK)) {
- bpkType = type.substring(EaafConstants.URN_PREFIX_WBPK.length());
- } else if (type.startsWith(EaafConstants.URN_PREFIX_CDID)) {
- bpkType = type.substring(EaafConstants.URN_PREFIX_CDID.length());
- } else if (type.startsWith(EaafConstants.URN_PREFIX_EIDAS)) {
- bpkType = type.substring(EaafConstants.URN_PREFIX_EIDAS.length());
- }
+ private String extendBpkByPrefix(String bpk, String type) {
+ String bpkType = getBpkType(type);
if (bpkType != null) {
log.trace("Authenticate user with bPK/wbPK " + bpk + " and Type=" + bpkType);
return bpkType + ":" + bpk;
-
} else {
log.warn("Service Provider Target with: " + type + " is NOT supported. Set bPK as it is ...");
return bpk;
-
}
-
}
- private Map<String, Object> convertEidasAttrToSimpleMap(
- ImmutableMap<AttributeDefinition<?>, ImmutableSet<? extends AttributeValue<?>>> attributeMap) {
- final Map<String, Object> result = new HashMap<>();
-
- for (final AttributeDefinition<?> el : attributeMap.keySet()) {
-
- final Class<?> parameterizedType = el.getParameterizedType();
- if (DateTime.class.equals(parameterizedType)) {
- final DateTime attribute = EidasResponseUtils.translateDateAttribute(el, attributeMap.get(el).asList());
- if (attribute != null) {
- result.put(el.getFriendlyName(), attribute);
- log.trace("Find attr '" + el.getFriendlyName() + "' with value: " + attribute.toString());
-
- } else {
- log.info("Ignore empty 'DateTime' attribute");
- }
-
- } else if (PostalAddress.class.equals(parameterizedType)) {
- final PostalAddress addressAttribute = EidasResponseUtils
- .translateAddressAttribute(el, attributeMap.get(el).asList());
- if (addressAttribute != null) {
- result.put(el.getFriendlyName(), addressAttribute);
- log.trace("Find attr '" + el.getFriendlyName() + "' with value: " + addressAttribute.toString());
-
- } else {
- log.info("Ignore empty 'PostalAddress' attribute");
- }
-
- } else {
- final List<String> natPersonIdObj = EidasResponseUtils
- .translateStringListAttribute(el, attributeMap.get(el));
- if (natPersonIdObj.isEmpty()) {
- log.info("Ignore attribute: {}, because no attributeValue was found",
- el.getNameUri());
-
- } else {
- final String stringAttr = natPersonIdObj.get(0);
- if (StringUtils.isNotEmpty(stringAttr)) {
- result.put(el.getFriendlyName(), stringAttr);
- log.trace("Find attr '" + el.getFriendlyName() + "' with value: " + stringAttr);
-
- } else {
- log.info("Ignore empty 'String' attributeValue for: {}",
- el.getNameUri());
-
- }
-
- }
- }
+ @Nullable
+ private String getBpkType(String type) {
+ if (type.startsWith(EaafConstants.URN_PREFIX_WBPK)) {
+ return type.substring(EaafConstants.URN_PREFIX_WBPK.length());
+ } else if (type.startsWith(EaafConstants.URN_PREFIX_CDID)) {
+ return type.substring(EaafConstants.URN_PREFIX_CDID.length());
+ } else if (type.startsWith(EaafConstants.URN_PREFIX_EIDAS)) {
+ return type.substring(EaafConstants.URN_PREFIX_EIDAS.length());
+ } else {
+ return null;
}
-
- log.debug("Receive #" + result.size() + " attributes with names: " + result.keySet().toString());
-
- return result;
}
- private void writeMdsLogInformation(ErnbEidData eidData) {
- // log MDS and country code into technical log
- if (basicConfig
- .getBasicConfigurationBoolean(MsEidasNodeConstants.PROP_CONFIG_TECHNICALLOG_WRITE_MDS_INTO_TECH_LOG, false)) {
+
+ /**
+ * write MDS into technical log and revision log.
+ */
+ private void writeMdsLogInformation(SimpleEidasData eidData) {
+ boolean writeMdsInTechLog = basicConfig
+ .getBasicConfigurationBoolean(MsEidasNodeConstants.PROP_CONFIG_TECHNICALLOG_WRITE_MDS_INTO_TECH_LOG, false);
+ if (writeMdsInTechLog) {
log.info("eIDAS Auth. for user: " + eidData.getGivenName() + " " + eidData.getFamilyName() + " " + eidData
- .getFormatedDateOfBirth() + " " + "from " + eidData.getCitizenCountryCode());
+ .getDateOfBirth() + " " + "from " + eidData.getCitizenCountryCode());
}
- // log MDS and country code into revision log
- if (basicConfig
+ boolean writeMdsInRevLog = basicConfig
.getBasicConfigurationBoolean(MsEidasNodeConstants.PROP_CONFIG_REVISIONLOG_WRITE_MDS_INTO_REVISION_LOG,
- false)) {
+ false);
+ if (writeMdsInRevLog) {
revisionsLogger.logEvent(pendingReq, MsConnectorEventCodes.RESPONSE_FROM_EIDAS_MDSDATA,
- "{" + eidData.getGivenName() + "," + eidData.getFamilyName() + "," + eidData
- .getFormatedDateOfBirth() + "," + eidData.getCitizenCountryCode() + "}");
+ "{" + eidData.getGivenName() + "," + eidData.getFamilyName() + "," + eidData
+ .getDateOfBirth() + "," + eidData.getCitizenCountryCode() + "}");
}
-
}
-
+
@Data
- private static class SzrResultHolder {
+ private static class SzrResultHolder {
final IIdentityLink identityLink;
final String bpK;
-
- }
-
- /**
- * Build a dummy IdentityLink and a dummy bPK based on eIDAS information.
- *
- * <br><br>
- * <b>FOR LOCAL TESTING ONLY!!!</b>
- *
- * @param eidData Information from eIDAS response
- * @return IdentityLink and bPK
- * @throws ParserConfigurationException In case of an IDL processing error
- * @throws SAXException In case of an IDL processing error
- * @throws IOException In case of an IDL processing error
- * @throws EaafException In case of a bPK generation error
- */
- private SzrResultHolder createDummyIdentityLinkForTestDeployment(ErnbEidData eidData)
- throws ParserConfigurationException, SAXException, IOException, EaafException {
- log.warn("SZR-Dummy IS ACTIVE! IdentityLink is NOT VALID!!!!");
- // create fake IdL
- // - fetch IdL template from resources
- final InputStream s = CreateIdentityLinkTask.class
- .getResourceAsStream("/resources/xmldata/fakeIdL_IdL_template.xml");
- final Element idlTemplate = DomUtils.parseXmlValidating(s);
-
- IIdentityLink identityLink = new SimpleIdentityLinkAssertionParser(idlTemplate).parseIdentityLink();
-
- // replace data
- final Element idlassertion = identityLink.getSamlAssertion();
-
- // - set fake baseID;
- final Node prIdentification = XPathUtils
- .selectSingleNode(idlassertion, SimpleIdentityLinkAssertionParser.PERSON_IDENT_VALUE_XPATH);
- prIdentification.getFirstChild().setNodeValue(eidData.getPseudonym());
-
- // - set last name
- final Node prFamilyName = XPathUtils
- .selectSingleNode(idlassertion, SimpleIdentityLinkAssertionParser.PERSON_FAMILY_NAME_XPATH);
- prFamilyName.getFirstChild().setNodeValue(eidData.getFamilyName());
-
- // - set first name
- final Node prGivenName = XPathUtils
- .selectSingleNode(idlassertion, SimpleIdentityLinkAssertionParser.PERSON_GIVEN_NAME_XPATH);
- prGivenName.getFirstChild().setNodeValue(eidData.getGivenName());
-
- // - set date of birth
- final Node prDateOfBirth = XPathUtils
- .selectSingleNode(idlassertion, SimpleIdentityLinkAssertionParser.PERSON_DATE_OF_BIRTH_XPATH);
-
- prDateOfBirth.getFirstChild().setNodeValue(eidData.getFormatedDateOfBirth());
-
- identityLink = new SimpleIdentityLinkAssertionParser(idlassertion).parseIdentityLink();
-
- final Pair<String, String> bpkCalc = BpkBuilder
- .generateAreaSpecificPersonIdentifier(identityLink.getIdentificationValue(),
- identityLink.getIdentificationType(),
- pendingReq.getServiceProviderConfiguration()
- .getAreaSpecificTargetIdentifier());
- return new SzrResultHolder(identityLink, bpkCalc.getFirst());
-
- }
+ }
}
diff --git a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/CreateNewErnpEntryTask.java b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/CreateNewErnpEntryTask.java
new file mode 100644
index 00000000..c7843be5
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/CreateNewErnpEntryTask.java
@@ -0,0 +1,105 @@
+/*
+ * Copyright 2021 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.tasks;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.clients.ernp.ErnpRestClient;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.clients.ernp.ErnpRestClient.ErnpRegisterResult;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.MatchedPersonResult;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.SimpleEidasData;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.exception.WorkflowException;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.utils.MatchingTaskUtils;
+import at.gv.egiz.eaaf.core.api.idp.process.ExecutionContext;
+import at.gv.egiz.eaaf.core.exceptions.TaskExecutionException;
+import at.gv.egiz.eaaf.core.impl.idp.auth.modules.AbstractAuthServletTask;
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * Task that searches ERnP and ZMR before adding person to SZR.
+ * This corresponds to Step 9 in the eIDAS Matching Concept.
+ * Input:
+ * <ul>
+ * <li>{@link Constants#DATA_SIMPLE_EIDAS}</li>
+ * </ul>
+ * Output:
+ * <ul>
+ * <li>TODO MDS, BPK of new entry</li>
+ * </ul>
+ *
+ * @author tlenz
+ * @author amarsalek
+ * @author ckollmann
+ */
+@Slf4j
+@Component("CreateNewErnbEntryTask")
+public class CreateNewErnpEntryTask extends AbstractAuthServletTask {
+
+ private final ErnpRestClient ernpClient;
+
+ /**
+ * Constructor.
+ * @param client SZR client for creating a new ERnP entry
+ */
+ public CreateNewErnpEntryTask(@Autowired ErnpRestClient client) {
+ this.ernpClient = client;
+ }
+
+ @Override
+ public void execute(ExecutionContext executionContext, HttpServletRequest request, HttpServletResponse response)
+ throws TaskExecutionException {
+ try {
+ SimpleEidasData simpleEidasData = MatchingTaskUtils.getInitialEidasData(pendingReq);
+ if (simpleEidasData == null) {
+ throw new WorkflowException("step09", "No initial eIDAS authn data", true);
+
+ }
+
+ //add person into ERnP
+ ErnpRegisterResult resp = ernpClient.add(simpleEidasData);
+ if (resp.getPersonResult().size() != 1) {
+ log.error("Receive {} from ERnP during 'add person' step",
+ resp.getPersonResult().isEmpty() ? "no result" : "more-than-one result");
+ throw new WorkflowException("step09", "Add person into ERnP failed", true);
+
+ }
+
+ // finish matching process, because new user-entry uniquly matches
+ log.info("User successfully registerred into ERnP and matching tasks are finished ");
+ MatchingTaskUtils.storeFinalMatchingResult(pendingReq,
+ MatchedPersonResult.generateFormMatchingResult(
+ resp.getPersonResult().get(0), simpleEidasData.getCitizenCountryCode()));
+
+ } catch (final Exception e) {
+ log.error("Initial search FAILED.", e);
+ throw new TaskExecutionException(pendingReq, "Initial search FAILED.", e);
+ }
+ }
+
+}
diff --git a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/GenerateAustrianResidenceGuiTask.java b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/GenerateAustrianResidenceGuiTask.java
new file mode 100644
index 00000000..dc57dd78
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/GenerateAustrianResidenceGuiTask.java
@@ -0,0 +1,105 @@
+/*
+ * Copyright 2021 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.tasks;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import at.asitplus.eidas.specific.core.MsEidasNodeConstants;
+import at.asitplus.eidas.specific.core.gui.StaticGuiBuilderConfiguration;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.utils.MatchingTaskUtils;
+import at.gv.egiz.eaaf.core.api.gui.ISpringMvcGuiFormBuilder;
+import at.gv.egiz.eaaf.core.api.idp.IConfiguration;
+import at.gv.egiz.eaaf.core.api.idp.process.ExecutionContext;
+import at.gv.egiz.eaaf.core.exceptions.TaskExecutionException;
+import at.gv.egiz.eaaf.core.impl.gui.AbstractGuiFormBuilderConfiguration;
+import at.gv.egiz.eaaf.core.impl.idp.controller.tasks.AbstractLocaleAuthServletTask;
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * Show GUI where user can provide an Austrian residence address, to provide further input to match the identity.
+ *
+ * @author ckollmann
+ */
+@Slf4j
+@Component("GenerateAustrianResidenceGuiTask")
+public class GenerateAustrianResidenceGuiTask extends AbstractLocaleAuthServletTask {
+
+ public static final String PARAM_FORMWIZARDPOINT = "wizardEndpoint";
+
+ @Autowired
+ private ISpringMvcGuiFormBuilder guiBuilder;
+ @Autowired
+ private IConfiguration basicConfig;
+
+ @Override
+ public void executeWithLocale(ExecutionContext executionContext,
+ HttpServletRequest request, HttpServletResponse response) throws TaskExecutionException {
+ try {
+ final StaticGuiBuilderConfiguration config = new StaticGuiBuilderConfiguration(
+ basicConfig,
+ pendingReq,
+ basicConfig.getBasicConfiguration(
+ MsEidasNodeConstants.PROP_CONFIG_WEBCONTENT_TEMPLATES_RESIDENCY,
+ MsEidasNodeConstants.TEMPLATE_HTML_RESIDENCY),
+ MsEidasNodeConstants.ENDPOINT_RESIDENCY_INPUT,
+ resourceLoader);
+
+ // inject REST end-point for wizard
+ config.putCustomParameterWithOutEscaption(null,
+ PARAM_FORMWIZARDPOINT,
+ pendingReq.getAuthUrl() + MsEidasNodeConstants.ENDPOINT_RESIDENCY_SEARCH);
+
+
+ // inject flag to indicate advanced matching error
+ if (MatchingTaskUtils.getExecutionContextFlag(
+ executionContext, Constants.CONTEXT_FLAG_ADVANCED_MATCHING_FAILED)) {
+ config.putCustomParameter(AbstractGuiFormBuilderConfiguration.PARAM_GROUP_UIOPTIONS,
+ Constants.HTML_FORM_ADVANCED_MATCHING_FAILED, String.valueOf(true));
+
+ //set detailed error-code
+ if (executionContext.get(Constants.CONTEXT_FLAG_ADVANCED_MATCHING_FAILED_REASON) != null) {
+ config.putCustomParameter(AbstractGuiFormBuilderConfiguration.PARAM_GROUP_UIOPTIONS,
+ Constants.HTML_FORM_ADVANCED_MATCHING_FAILED_REASON,
+ executionContext.get(Constants.CONTEXT_FLAG_ADVANCED_MATCHING_FAILED_REASON).toString());
+ }
+ }
+
+ // reset executionContext parameters
+ ReceiveOtherLoginMethodGuiResponseTask.ALL_EXECUTIONCONTEXT_PARAMETERS.forEach(
+ el -> executionContext.remove(el));
+
+ guiBuilder.build(request, response, config, "Query Austrian residency");
+
+ } catch (final Exception e) {
+ log.error("Initial search FAILED.", e);
+ throw new TaskExecutionException(pendingReq, "Gui creation FAILED.", e);
+ }
+ }
+
+}
diff --git a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/GenerateAuthnRequestTask.java b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/GenerateAuthnRequestTask.java
index 0f1b5432..849f8136 100644
--- a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/GenerateAuthnRequestTask.java
+++ b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/GenerateAuthnRequestTask.java
@@ -19,10 +19,11 @@
* 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.tasks;
+import java.io.IOException;
import java.util.UUID;
import javax.servlet.ServletException;
@@ -30,6 +31,7 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang3.StringUtils;
+import org.jetbrains.annotations.NotNull;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;
@@ -39,6 +41,7 @@ import at.asitplus.eidas.specific.core.MsConnectorEventCodes;
import at.asitplus.eidas.specific.core.MsEidasNodeConstants;
import at.asitplus.eidas.specific.core.gui.StaticGuiBuilderConfiguration;
import at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.exception.EidPostProcessingException;
import at.asitplus.eidas.specific.modules.auth.eidas.v2.exception.EidasSAuthenticationException;
import at.asitplus.eidas.specific.modules.auth.eidas.v2.service.ICcSpecificEidProcessingService;
import at.gv.egiz.eaaf.core.api.gui.ISpringMvcGuiFormBuilder;
@@ -47,6 +50,7 @@ import at.gv.egiz.eaaf.core.api.idp.process.ExecutionContext;
import at.gv.egiz.eaaf.core.api.storage.ITransactionStorage;
import at.gv.egiz.eaaf.core.exceptions.EaafConfigurationException;
import at.gv.egiz.eaaf.core.exceptions.EaafException;
+import at.gv.egiz.eaaf.core.exceptions.GuiBuildException;
import at.gv.egiz.eaaf.core.exceptions.TaskExecutionException;
import at.gv.egiz.eaaf.core.impl.idp.auth.modules.AbstractAuthServletTask;
import eu.eidas.auth.commons.EidasParameterKeys;
@@ -59,149 +63,168 @@ import eu.eidas.specificcommunication.exception.SpecificCommunicationException;
import eu.eidas.specificcommunication.protocol.SpecificCommunicationService;
import lombok.extern.slf4j.Slf4j;
+
/**
- * Authentication-process task that generates the Authn. Request to eIDAS Node.
- *
- * @author tlenz
+ * Generates the authn request to the eIDAS Node. This is the first task in the process.
+ * Input:
+ * <ul>
+ * <li>none</li>
+ * </ul>
+ * Output:
+ * <ul>
+ * <li>none</li>
+ * </ul>
+ * Transitions:
+ * <ul>
+ * <li>{@link at.asitplus.eidas.specific.modules.auth.eidas.v2.tasks.ReceiveAuthnResponseTask}
+ * to read the response from the eIDAS Node</li>
+ * </ul>
*
+ * @author tlenz
+ * @author ckollmann
*/
@Slf4j
-@Component("ConnecteIDASNodeTask")
+@Component("GenerateAuthnRequestTask")
public class GenerateAuthnRequestTask extends AbstractAuthServletTask {
+ @SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
@Autowired
IConfiguration basicConfig;
+
@Autowired
ApplicationContext context;
+
+ @SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
@Autowired
ITransactionStorage transactionStore;
+
+ @SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
@Autowired
ISpringMvcGuiFormBuilder guiBuilder;
+
@Autowired
ICcSpecificEidProcessingService ccSpecificProcessing;
@Override
- public void execute(ExecutionContext executionContext,
- HttpServletRequest request, HttpServletResponse response)
+ public void execute(ExecutionContext executionContext, HttpServletRequest request, HttpServletResponse response)
throws TaskExecutionException {
-
try {
- // get target, environment and validate citizen countryCode
- final String citizenCountryCode = (String) executionContext.get(
- MsEidasNodeConstants.REQ_PARAM_SELECTED_COUNTRY);
- final String environment = (String) executionContext.get(
- MsEidasNodeConstants.REQ_PARAM_SELECTED_ENVIRONMENT);
-
- if (StringUtils.isEmpty(citizenCountryCode)) {
- // illegal state; task should not have been executed without a selected country
- throw new EidasSAuthenticationException("eidas.03", new Object[] { "" });
-
- }
-
- // TODO: maybe add countryCode validation before request ref. impl. eIDAS node
- log.info("Request eIDAS auth. for citizen of country: " + citizenCountryCode);
- revisionsLogger.logEvent(pendingReq, MsConnectorEventCodes.COUNTRY_SELECTED, citizenCountryCode);
-
- // build eIDAS AuthnRequest
- final LightRequest.Builder authnRequestBuilder = LightRequest.builder();
- authnRequestBuilder.id(UUID.randomUUID().toString());
-
- // set nameIDFormat
- authnRequestBuilder.nameIdFormat(
- authConfig.getBasicConfiguration(Constants.CONFIG_PROP_EIDAS_NODE_NAMEIDFORMAT));
-
- // set citizen country code for foreign uses
- authnRequestBuilder.citizenCountryCode(citizenCountryCode);
-
- //set Issuer
- final String issur = basicConfig.getBasicConfiguration(Constants.CONIG_PROPS_EIDAS_NODE_ENTITYID);
- if (StringUtils.isEmpty(issur)) {
- log.error("Found NO 'eIDAS node issuer' in configuration. Authentication NOT possible!");
- throw new EaafConfigurationException("config.27",
- new Object[] { "Application config containts NO " + Constants.CONIG_PROPS_EIDAS_NODE_ENTITYID });
-
- }
- authnRequestBuilder.issuer(issur);
-
+ final String citizenCountryCode = extractCitizenCountryCode(executionContext);
+ final String environment = (String) executionContext.get(MsEidasNodeConstants.REQ_PARAM_SELECTED_ENVIRONMENT);
+ final String issuer = loadIssuerFromConfig();
+
+ // inject MS-Connector staging parameters
+ injectStagingWorkaroundForMsConnector();
- // Add country-specific informations into eIDAS request
- ccSpecificProcessing.preProcess(citizenCountryCode, pendingReq, authnRequestBuilder);
-
- // build request
- final LightRequest lightAuthnReq = authnRequestBuilder.build();
-
- // put request into shared cache
+ final LightRequest lightAuthnReq = buildEidasAuthnRequest(citizenCountryCode, issuer);
+
final BinaryLightToken token = putRequestInCommunicationCache(lightAuthnReq);
final String tokenBase64 = BinaryLightTokenHelper.encodeBinaryLightTokenBase64(token);
+ workaroundRelayState(lightAuthnReq);
+ final String forwardUrl = selectForwardUrl(environment);
- // Workaround for ms-connector staging
- injectStagingWorkaroundForMsConnector();
-
- // Workaround, because eIDAS node ref. impl. does not return relayState
- if (basicConfig.getBasicConfigurationBoolean(
- Constants.CONIG_PROPS_EIDAS_NODE_WORKAROUND_USEREQUESTIDASTRANSACTIONIDENTIFIER,
- false)) {
- log.trace("Put lightRequestId into transactionstore as session-handling backup");
- transactionStore.put(lightAuthnReq.getId(), pendingReq.getPendingRequestId(), -1);
-
- }
-
- // select forward URL regarding the selected environment
- String forwardUrl = basicConfig.getBasicConfiguration(Constants.CONIG_PROPS_EIDAS_NODE_FORWARD_URL);
- if (StringUtils.isNotEmpty(environment)) {
- forwardUrl = selectedForwardUrlForEnvironment(environment);
- }
-
- if (StringUtils.isEmpty(forwardUrl)) {
- log.warn("NO ForwardURL defined in configuration. Can NOT forward to eIDAS node! Process stops");
- throw new EaafConfigurationException("config.08", new Object[] {
- environment == null ? Constants.CONIG_PROPS_EIDAS_NODE_FORWARD_URL
- : Constants.CONIG_PROPS_EIDAS_NODE_FORWARD_URL + "." + environment
- });
-
- }
- log.debug("ForwardURL: " + forwardUrl + " selected to forward eIDAS request");
-
- if (basicConfig.getBasicConfiguration(
- Constants.CONIG_PROPS_EIDAS_NODE_FORWARD_METHOD,
- Constants.FORWARD_METHOD_GET).equals(Constants.FORWARD_METHOD_GET)) {
-
- log.debug("Use http-redirect for eIDAS node forwarding ... ");
- // send redirect
- final UriComponentsBuilder redirectUrl = UriComponentsBuilder.fromHttpUrl(forwardUrl);
- redirectUrl.queryParam(EidasParameterKeys.TOKEN.toString(), tokenBase64);
- response.sendRedirect(redirectUrl.build().encode().toString());
+ String configValue = basicConfig.getBasicConfiguration(
+ Constants.CONIG_PROPS_EIDAS_NODE_FORWARD_METHOD, Constants.FORWARD_METHOD_GET);
+ boolean useHttpRedirect = configValue.equals(Constants.FORWARD_METHOD_GET);
+ if (useHttpRedirect) {
+ sendRedirect(response, tokenBase64, forwardUrl);
} else {
- log.debug("Use http-post for eIDAS node forwarding ... ");
- final StaticGuiBuilderConfiguration config = new StaticGuiBuilderConfiguration(
- basicConfig,
- pendingReq,
- Constants.TEMPLATE_POST_FORWARD_NAME,
- null,
- resourceLoader);
-
- config.putCustomParameter(null, Constants.TEMPLATE_POST_FORWARD_ENDPOINT, forwardUrl);
- config.putCustomParameter(null, Constants.TEMPLATE_POST_FORWARD_TOKEN_NAME,
- EidasParameterKeys.TOKEN.toString());
- config.putCustomParameter(null, Constants.TEMPLATE_POST_FORWARD_TOKEN_VALUE,
- tokenBase64);
-
- guiBuilder.build(request, response, config, "Forward to eIDASNode form");
-
+ sendPost(request, response, tokenBase64, forwardUrl);
}
revisionsLogger.logEvent(pendingReq, MsConnectorEventCodes.EIDAS_NODE_CONNECTED, lightAuthnReq.getId());
-
} catch (final EidasSAuthenticationException e) {
throw new TaskExecutionException(pendingReq, "eIDAS AuthnRequest generation FAILED.", e);
-
} catch (final Exception e) {
log.warn("eIDAS AuthnRequest generation FAILED.", e);
throw new TaskExecutionException(pendingReq, e.getMessage(), e);
+ }
+ }
+ @NotNull
+ private String extractCitizenCountryCode(ExecutionContext executionContext) throws EidasSAuthenticationException {
+ final String result = (String) executionContext.get(MsEidasNodeConstants.REQ_PARAM_SELECTED_COUNTRY);
+ // illegal state; task should not have been executed without a selected country
+ if (StringUtils.isEmpty(result)) {
+ throw new EidasSAuthenticationException("eidas.03", new Object[]{""});
}
+ // TODO: maybe add countryCode validation before request ref. impl. eIDAS node
+ log.info("Request eIDAS auth. for citizen of country: {}", result);
+ revisionsLogger.logEvent(pendingReq, MsConnectorEventCodes.COUNTRY_SELECTED, result);
+ return result;
+ }
+
+ @NotNull
+ private String loadIssuerFromConfig() throws EaafConfigurationException {
+ final String result = basicConfig.getBasicConfiguration(Constants.CONIG_PROPS_EIDAS_NODE_ENTITYID);
+ if (StringUtils.isEmpty(result)) {
+ log.error("Found NO 'eIDAS node issuer' in configuration. Authentication NOT possible!");
+ throw new EaafConfigurationException("config.27",
+ new Object[]{"Application config containts NO " + Constants.CONIG_PROPS_EIDAS_NODE_ENTITYID});
+ }
+ return result;
+ }
+
+ @NotNull
+ private LightRequest buildEidasAuthnRequest(String citizenCountryCode, String issuer)
+ throws EidPostProcessingException {
+ final LightRequest.Builder builder = LightRequest.builder();
+ builder.id(UUID.randomUUID().toString());
+
+ // set nameIDFormat
+ builder.nameIdFormat(
+ authConfig.getBasicConfiguration(Constants.CONFIG_PROP_EIDAS_NODE_NAMEIDFORMAT));
+
+ builder.citizenCountryCode(citizenCountryCode);
+ builder.issuer(issuer);
+ // Add country-specific information into eIDAS request
+ ccSpecificProcessing.preProcess(citizenCountryCode, pendingReq, builder);
+ return builder.build();
+ }
+
+ private BinaryLightToken putRequestInCommunicationCache(ILightRequest lightRequest)
+ throws ServletException {
+ final BinaryLightToken binaryLightToken;
+ try {
+ String beanName = SpecificCommunicationDefinitionBeanNames.SPECIFIC_CONNECTOR_COMMUNICATION_SERVICE.toString();
+ final SpecificCommunicationService service = (SpecificCommunicationService) context.getBean(beanName);
+ binaryLightToken = service.putRequest(lightRequest);
+ } catch (final SpecificCommunicationException e) {
+ log.error("Unable to process specific request");
+ throw new ServletException(e);
+ }
+
+ return binaryLightToken;
+ }
+
+ /**
+ * Workaround, because eIDAS node ref. impl. does not return relayState
+ */
+ private void workaroundRelayState(LightRequest lightAuthnReq) throws EaafException {
+ if (basicConfig.getBasicConfigurationBoolean(
+ Constants.CONIG_PROPS_EIDAS_NODE_WORKAROUND_USEREQUESTIDASTRANSACTIONIDENTIFIER,
+ false)) {
+ log.trace("Put lightRequestId into transactionstore as session-handling backup");
+ transactionStore.put(lightAuthnReq.getId(), pendingReq.getPendingRequestId(), -1);
+ }
+ }
+ @NotNull
+ private String selectForwardUrl(String environment) throws EaafConfigurationException {
+ String result = basicConfig.getBasicConfiguration(Constants.CONIG_PROPS_EIDAS_NODE_FORWARD_URL);
+ if (StringUtils.isNotEmpty(environment)) {
+ result = selectedForwardUrlForEnvironment(environment);
+ }
+ if (StringUtils.isEmpty(result)) {
+ log.warn("NO ForwardURL defined in configuration. Can NOT forward to eIDAS node! Process stops");
+ throw new EaafConfigurationException("config.08", new Object[]{
+ environment == null ? Constants.CONIG_PROPS_EIDAS_NODE_FORWARD_URL
+ : Constants.CONIG_PROPS_EIDAS_NODE_FORWARD_URL + "." + environment
+ });
+ }
+ log.debug("ForwardURL: {} selected to forward eIDAS request", result);
+ return result;
}
@@ -224,51 +247,48 @@ public class GenerateAuthnRequestTask extends AbstractAuthServletTask {
* <br>
* <b>Info: </b> This method is needed, because eIDAS Ref. Impl only supports
* one countrycode on each instance. In consequence, more than one eIDAS Ref.
- * Impl nodes are required to support producation, testing, or QS stages for one
+ * Impl nodes are required to support production, testing, or QS stages for one
* country by using one ms-specific eIDAS connector
- *
+ *
* @param environment Environment selector from CountrySlection page
- * @return
+ * @return the URL from the configuration
*/
private String selectedForwardUrlForEnvironment(String environment) {
- log.trace("Starting endpoint selection process for environment: " + environment + " ... ");
+ log.trace("Starting endpoint selection process for environment: {} ... ", environment);
if (environment.equalsIgnoreCase(MsEidasNodeConstants.REQ_PARAM_SELECTED_ENVIRONMENT_VALUE_PRODUCTION)) {
return basicConfig.getBasicConfiguration(Constants.CONIG_PROPS_EIDAS_NODE_FORWARD_URL);
} else if (environment.equalsIgnoreCase(MsEidasNodeConstants.REQ_PARAM_SELECTED_ENVIRONMENT_VALUE_QS)) {
return basicConfig.getBasicConfiguration(Constants.CONIG_PROPS_EIDAS_NODE_FORWARD_URL
+ "." + MsEidasNodeConstants.REQ_PARAM_SELECTED_ENVIRONMENT_VALUE_QS);
- } else if (environment.equalsIgnoreCase(
- MsEidasNodeConstants.REQ_PARAM_SELECTED_ENVIRONMENT_VALUE_TESTING)) {
+ } else if (environment.equalsIgnoreCase(MsEidasNodeConstants.REQ_PARAM_SELECTED_ENVIRONMENT_VALUE_TESTING)) {
return basicConfig.getBasicConfiguration(Constants.CONIG_PROPS_EIDAS_NODE_FORWARD_URL
+ "." + MsEidasNodeConstants.REQ_PARAM_SELECTED_ENVIRONMENT_VALUE_TESTING);
- } else if (environment.equalsIgnoreCase(
- MsEidasNodeConstants.REQ_PARAM_SELECTED_ENVIRONMENT_VALUE_DEVELOPMENT)) {
+ } else if (environment.equalsIgnoreCase(MsEidasNodeConstants.REQ_PARAM_SELECTED_ENVIRONMENT_VALUE_DEVELOPMENT)) {
return basicConfig.getBasicConfiguration(Constants.CONIG_PROPS_EIDAS_NODE_FORWARD_URL
+ "." + MsEidasNodeConstants.REQ_PARAM_SELECTED_ENVIRONMENT_VALUE_DEVELOPMENT);
}
-
- log.info("Environment selector: " + environment + " is not supported");
+ log.info("Environment selector: {} is not supported", environment);
return null;
-
}
- private BinaryLightToken putRequestInCommunicationCache(ILightRequest lightRequest)
- throws ServletException {
- final BinaryLightToken binaryLightToken;
- try {
- final SpecificCommunicationService springManagedSpecificConnectorCommunicationService =
- (SpecificCommunicationService) context.getBean(
- SpecificCommunicationDefinitionBeanNames.SPECIFIC_CONNECTOR_COMMUNICATION_SERVICE.toString());
-
- binaryLightToken = springManagedSpecificConnectorCommunicationService.putRequest(lightRequest);
-
- } catch (final SpecificCommunicationException e) {
- log.error("Unable to process specific request");
- throw new ServletException(e);
-
- }
+ private void sendRedirect(HttpServletResponse response, String tokenBase64, String forwardUrl) throws IOException {
+ log.debug("Use http-redirect for eIDAS node forwarding ... ");
+ final UriComponentsBuilder redirectUrl = UriComponentsBuilder.fromHttpUrl(forwardUrl);
+ redirectUrl.queryParam(EidasParameterKeys.TOKEN.toString(), tokenBase64);
+ response.sendRedirect(redirectUrl.build().encode().toString());
+
+ }
- return binaryLightToken;
+ private void sendPost(HttpServletRequest request, HttpServletResponse response, String tokenBase64, String forwardUrl)
+ throws GuiBuildException {
+ log.debug("Use http-post for eIDAS node forwarding ... ");
+ final StaticGuiBuilderConfiguration config = new StaticGuiBuilderConfiguration(
+ basicConfig, pendingReq, Constants.TEMPLATE_POST_FORWARD_NAME, null, resourceLoader);
+ config.putCustomParameter(null, Constants.TEMPLATE_POST_FORWARD_ENDPOINT, forwardUrl);
+ String token = EidasParameterKeys.TOKEN.toString();
+ config.putCustomParameter(null, Constants.TEMPLATE_POST_FORWARD_TOKEN_NAME, token);
+ config.putCustomParameter(null, Constants.TEMPLATE_POST_FORWARD_TOKEN_VALUE, tokenBase64);
+ guiBuilder.build(request, response, config, "Forward to eIDASNode form");
}
}
diff --git a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/GenerateMobilePhoneSignatureRequestTask.java b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/GenerateMobilePhoneSignatureRequestTask.java
new file mode 100644
index 00000000..26282d5c
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/GenerateMobilePhoneSignatureRequestTask.java
@@ -0,0 +1,145 @@
+/*
+ * Copyright 2021 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.tasks;
+
+import java.text.MessageFormat;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.lang3.StringUtils;
+import org.jetbrains.annotations.NotNull;
+import org.opensaml.saml.saml2.metadata.EntityDescriptor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.idaustriaclient.IdAustriaClientAuthConstants;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.idaustriaclient.IdAustriaClientAuthRequestBuilderConfiguration;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.idaustriaclient.provider.IdAustriaClientAuthCredentialProvider;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.idaustriaclient.provider.IdAustriaClientAuthMetadataProvider;
+import at.gv.egiz.eaaf.core.api.idp.IConfiguration;
+import at.gv.egiz.eaaf.core.api.idp.process.ExecutionContext;
+import at.gv.egiz.eaaf.core.api.storage.ITransactionStorage;
+import at.gv.egiz.eaaf.core.exceptions.EaafConfigurationException;
+import at.gv.egiz.eaaf.core.exceptions.EaafException;
+import at.gv.egiz.eaaf.core.exceptions.TaskExecutionException;
+import at.gv.egiz.eaaf.core.impl.idp.auth.modules.AbstractAuthServletTask;
+import at.gv.egiz.eaaf.core.impl.utils.Random;
+import at.gv.egiz.eaaf.modules.pvp2.exception.CredentialsNotAvailableException;
+import at.gv.egiz.eaaf.modules.pvp2.sp.impl.PvpAuthnRequestBuilder;
+import lombok.extern.slf4j.Slf4j;
+import net.shibboleth.utilities.java.support.resolver.ResolverException;
+import net.shibboleth.utilities.java.support.security.impl.SecureRandomIdentifierGenerationStrategy;
+
+/**
+ * Generate a SAML2 AuthnRequest to authenticate the user at ID Austria system.
+ * This corresponds to Step 15A in the eIDAS Matching Concept.
+ *
+ * @author tlenz
+ */
+@Slf4j
+@Component("GenerateMobilePhoneSignatureRequestTask")
+public class GenerateMobilePhoneSignatureRequestTask extends AbstractAuthServletTask {
+
+ private static final String ERROR_MSG_1 =
+ "Requested 'ms-specific eIDAS node' {0} has no valid metadata or metadata is not found";
+
+ @Autowired
+ PvpAuthnRequestBuilder authnReqBuilder;
+ @Autowired
+ IdAustriaClientAuthCredentialProvider credential;
+ @Autowired
+ IdAustriaClientAuthMetadataProvider metadataService;
+ @Autowired
+ private IConfiguration basicConfig;
+ @Autowired
+ protected ITransactionStorage transactionStorage;
+
+ @Override
+ public void execute(ExecutionContext executionContext, HttpServletRequest request, HttpServletResponse response)
+ throws TaskExecutionException {
+ try {
+ log.trace("Starting GenerateMobilePhoneSignatureRequestTask");
+ final String entityId = loadEntityId();
+ final EntityDescriptor entityDesc = loadEntityDescriptor(entityId);
+ final IdAustriaClientAuthRequestBuilderConfiguration authnReqConfig = buildAuthnRequestConfig(entityDesc);
+ final String relayState = buildRelayState();
+ authnReqBuilder.buildAuthnRequest(pendingReq, authnReqConfig, relayState, response); // also transmits!
+ } catch (final Exception e) {
+ throw new TaskExecutionException(pendingReq, "Generation of SAML2 AuthnRequest to ID Austria System FAILED", e);
+ }
+ }
+
+ @NotNull
+ private String loadEntityId() throws EaafConfigurationException {
+ final String msNodeEntityID = basicConfig.getBasicConfiguration(
+ IdAustriaClientAuthConstants.CONFIG_PROPS_ID_AUSTRIA_ENTITYID);
+ if (StringUtils.isEmpty(msNodeEntityID)) {
+ log.warn("ID Austria authentication not possible -> NO EntityID for ID Austria System FOUND!");
+ throw new EaafConfigurationException(Constants.ERRORCODE_00,
+ new Object[]{IdAustriaClientAuthConstants.CONFIG_PROPS_ID_AUSTRIA_ENTITYID});
+ }
+ return msNodeEntityID;
+ }
+
+ /**
+ * Build relayState for session synchronization, because SAML2 only allows RelayState with 80 characters
+ * but encrypted PendingRequestId is much longer.
+ */
+ @NotNull
+ private String buildRelayState() throws EaafException {
+ String relayState = Random.nextProcessReferenceValue();
+ transactionStorage.put(relayState, pendingReq.getPendingRequestId(), -1);
+ return relayState;
+ }
+
+ @NotNull
+ private EntityDescriptor loadEntityDescriptor(String msNodeEntityID)
+ throws ResolverException, EaafConfigurationException {
+ final EntityDescriptor entityDesc = metadataService.getEntityDescriptor(msNodeEntityID);
+ if (entityDesc == null) {
+ throw new EaafConfigurationException(IdAustriaClientAuthConstants.ERRORCODE_02,
+ new Object[]{MessageFormat.format(ERROR_MSG_1, msNodeEntityID)});
+
+ }
+ return entityDesc;
+ }
+
+ @NotNull
+ private IdAustriaClientAuthRequestBuilderConfiguration buildAuthnRequestConfig(EntityDescriptor entityDesc)
+ throws CredentialsNotAvailableException {
+ final IdAustriaClientAuthRequestBuilderConfiguration authnReqConfig =
+ new IdAustriaClientAuthRequestBuilderConfiguration();
+ final SecureRandomIdentifierGenerationStrategy gen = new SecureRandomIdentifierGenerationStrategy();
+ authnReqConfig.setRequestId(gen.generateIdentifier());
+ authnReqConfig.setIdpEntity(entityDesc);
+ authnReqConfig.setPassive(false);
+ authnReqConfig.setSignCred(credential.getMessageSigningCredential());
+ authnReqConfig.setSpEntityID(
+ pendingReq.getAuthUrlWithOutSlash() + IdAustriaClientAuthConstants.ENDPOINT_METADATA);
+ return authnReqConfig;
+
+ }
+}
diff --git a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/GenerateOtherLoginMethodGuiTask.java b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/GenerateOtherLoginMethodGuiTask.java
new file mode 100644
index 00000000..a90c5929
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/GenerateOtherLoginMethodGuiTask.java
@@ -0,0 +1,112 @@
+/*
+ * Copyright 2021 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.tasks;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import at.asitplus.eidas.specific.core.MsEidasNodeConstants;
+import at.asitplus.eidas.specific.core.gui.StaticGuiBuilderConfiguration;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.utils.MatchingTaskUtils;
+import at.gv.egiz.eaaf.core.api.gui.ISpringMvcGuiFormBuilder;
+import at.gv.egiz.eaaf.core.api.idp.IConfiguration;
+import at.gv.egiz.eaaf.core.api.idp.process.ExecutionContext;
+import at.gv.egiz.eaaf.core.exceptions.TaskExecutionException;
+import at.gv.egiz.eaaf.core.impl.gui.AbstractGuiFormBuilderConfiguration;
+import at.gv.egiz.eaaf.core.impl.idp.controller.tasks.AbstractLocaleAuthServletTask;
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * Task that provides GUI for user to select an alternative login method.
+ * This page is shown when the matching of the eIDAS data to ZMR/ERnP data is ambiguous.
+ * This corresponds to Steps 10, 14, 16 in the eIDAS Matching Concept.
+ * The response is handled in {@link ReceiveOtherLoginMethodGuiResponseTask}
+ *
+ * @author amarsalek
+ * @author ckollmann
+ */
+@Slf4j
+@Component("GenerateOtherLoginMethodGuiTask")
+public class GenerateOtherLoginMethodGuiTask extends AbstractLocaleAuthServletTask {
+
+ @Autowired
+ private ISpringMvcGuiFormBuilder guiBuilder;
+
+ @Autowired
+ private IConfiguration basicConfig;
+
+ @Override
+ public void executeWithLocale(ExecutionContext executionContext,
+ HttpServletRequest request, HttpServletResponse response) throws TaskExecutionException {
+ try {
+ final StaticGuiBuilderConfiguration config = new StaticGuiBuilderConfiguration(
+ basicConfig,
+ pendingReq,
+ basicConfig.getBasicConfiguration(
+ MsEidasNodeConstants.PROP_CONFIG_WEBCONTENT_TEMPLATES_OTHER_LOGIN_METHOD_SELECTION,
+ MsEidasNodeConstants.TEMPLATE_HTML_OTHERLOGINMETHODS),
+ MsEidasNodeConstants.ENDPOINT_OTHER_LOGIN_METHOD_SELECTION,
+ resourceLoader);
+
+ // inject flag to indicate advanced matching error
+ if (MatchingTaskUtils.getExecutionContextFlag(
+ executionContext, Constants.CONTEXT_FLAG_ADVANCED_MATCHING_FAILED)) {
+ config.putCustomParameter(AbstractGuiFormBuilderConfiguration.PARAM_GROUP_UIOPTIONS,
+ Constants.HTML_FORM_ADVANCED_MATCHING_FAILED, String.valueOf(true));
+
+ //set detailed error-code
+ if (executionContext.get(Constants.CONTEXT_FLAG_ADVANCED_MATCHING_FAILED_REASON) != null) {
+ config.putCustomParameter(AbstractGuiFormBuilderConfiguration.PARAM_GROUP_UIOPTIONS,
+ Constants.HTML_FORM_ADVANCED_MATCHING_FAILED_REASON,
+ executionContext.get(Constants.CONTEXT_FLAG_ADVANCED_MATCHING_FAILED_REASON).toString());
+ }
+ }
+
+ // inject request to create a new ERnP entry
+ config.putCustomParameter(AbstractGuiFormBuilderConfiguration.PARAM_GROUP_UIOPTIONS,
+ Constants.HTML_FORM_CREATE_NEW_ERNP_ENTRY,
+ String.valueOf(
+ MatchingTaskUtils.getExecutionContextFlag(
+ executionContext,Constants.TRANSITION_TO_REQUESTING_NEW_ERNP_ENTRY_TASK)));
+
+ // reset executionContext parameters
+ ReceiveOtherLoginMethodGuiResponseTask.ALL_EXECUTIONCONTEXT_PARAMETERS.forEach(
+ el -> executionContext.remove(el));
+
+ // store pending request before next step
+ requestStoreage.storePendingRequest(pendingReq);
+
+ guiBuilder.build(request, response, config, "Other login methods selection form");
+
+ } catch (final Exception e) {
+ log.error("Initial search FAILED.", e);
+ throw new TaskExecutionException(pendingReq, "Gui creation FAILED.", e);
+ }
+ }
+
+}
diff --git a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/InitialSearchTask.java b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/InitialSearchTask.java
new file mode 100644
index 00000000..3a775837
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/InitialSearchTask.java
@@ -0,0 +1,211 @@
+/*
+ * 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.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;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.SimpleEidasData;
+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.WorkflowException;
+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.RegisterOperationStatus;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.service.RegisterSearchService.RegisterStatusResults;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.utils.MatchingTaskUtils;
+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.modules.AbstractAuthServletTask;
+import eu.eidas.auth.commons.light.ILightResponse;
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * Searches registers (ERnP and ZMR) after initial user auth, before adding person to SZR.
+ * Input:
+ * <ul>
+ * <li>{@link Constants#DATA_FULL_EIDAS_RESPONSE}</li>
+ * </ul>
+ * Output:
+ * <ul>
+ * <li>{@link Constants#DATA_SIMPLE_EIDAS} converted from Full eIDAS Response</li>
+ * <li>{@link Constants#DATA_INTERMEDIATE_RESULT} results from first search in registers with
+ * PersonIdentifier</li>
+ * <li>{@link Constants#DATA_PERSON_MATCH_RESULT} results after second search in registers with MDS</li>
+ * </ul>
+ * Transitions:
+ * <ul>
+ * <li>{@link CreateNewErnpEntryTask} if no results in registers where found for this user</li>
+ * <li>{@link GenerateOtherLoginMethodGuiTask} if search with MDS returns more than one match, user may provide
+ * alternative login methods to get an unique match</li>
+ * <li>{@link CreateIdentityLinkTask} if search in register returned one match, user is uniquely identified</li>
+ * </ul>
+ *
+ * @author amarsalek
+ * @author ckollmann
+ * @author tlenz
+ */
+@Slf4j
+@Component("InitialSearchTask")
+@SuppressWarnings("PMD.TooManyStaticImports")
+public class InitialSearchTask extends AbstractAuthServletTask {
+
+ private final RegisterSearchService registerSearchService;
+ private final ICcSpecificEidProcessingService eidPostProcessor;
+
+ /**
+ * Constructor.
+ *
+ * @param registerSearchService Service for register search access
+ * @param eidPostProcessor Country-Specific post processing of attributes
+ */
+ public InitialSearchTask(RegisterSearchService registerSearchService,
+ ICcSpecificEidProcessingService eidPostProcessor) {
+ this.registerSearchService = registerSearchService;
+ this.eidPostProcessor = eidPostProcessor;
+ }
+
+ @Override
+ public void execute(ExecutionContext executionContext, HttpServletRequest request, HttpServletResponse response)
+ throws TaskExecutionException {
+ try {
+ final SimpleEidasData eidasData = convertEidasAttrToSimpleData();
+ MatchingTaskUtils.storeInitialEidasData(pendingReq, eidasData);
+ step2RegisterSearchWithPersonIdentifier(executionContext, eidasData);
+ } catch (WorkflowException e) {
+ throw new TaskExecutionException(pendingReq, "Initial search failed", e);
+ } catch (final Exception e) {
+ log.error("Initial search failed", e);
+ throw new TaskExecutionException(pendingReq, "Initial search failed with a generic error", e);
+ }
+ }
+
+ private void step2RegisterSearchWithPersonIdentifier(
+ ExecutionContext executionContext, SimpleEidasData eidasData) throws WorkflowException, EaafStorageException {
+ try {
+ log.trace("Starting step2RegisterSearchWithPersonIdentifier");
+ RegisterStatusResults searchResult = registerSearchService.searchWithPersonIdentifier(eidasData);
+ int resultCount = searchResult.getResultCount();
+ if (resultCount == 0) {
+ step6CountrySpecificSearch(executionContext, searchResult.getOperationStatus(), eidasData);
+
+ } else if (resultCount == 1) {
+ RegisterResult updatedResult = step3CheckRegisterUpdateNecessary(searchResult, eidasData);
+ foundMatchFinalizeTask(updatedResult, 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??
+ log.warn("Workflow error during matching step: {}. Reason: {}", e.getProcessStepName(), e.getErrorReason());
+ throw e;
+ }
+ }
+
+ private void step6CountrySpecificSearch(
+ ExecutionContext executionContext, RegisterOperationStatus registerOperationStatus, SimpleEidasData eidasData)
+ throws EaafStorageException, WorkflowException {
+ log.trace("Starting 'step6CountrySpecificSearch' ... ");
+ RegisterStatusResults searchResult = registerSearchService.searchWithCountrySpecifics(
+ registerOperationStatus, eidasData);
+ if (searchResult.getResultCount() == 0) {
+ log.trace("'step6CountrySpecificSearch' ends with no result. Forward to next matching step ... ");
+ step8RegisterSearchWithMds(executionContext, searchResult.getOperationStatus(), eidasData);
+
+ } else if (searchResult.getResultCount() == 1) {
+ log.trace("'step6CountrySpecificSearch' finds a person. Forward to 'step7aKittProcess' step ... ");
+ RegisterStatusResults updatedResult = registerSearchService.step7aKittProcess(searchResult, eidasData);
+ foundMatchFinalizeTask(updatedResult.getResult(), eidasData);
+
+ } else {
+ throw new WorkflowException("step6CountrySpecificSearch",
+ "More than one entry with unique country-specific information", true);
+ }
+ }
+
+ private void step8RegisterSearchWithMds(ExecutionContext executionContext,
+ RegisterOperationStatus registerOperationStatus, SimpleEidasData eidasData)
+ throws EaafStorageException, WorkflowException {
+ log.trace("Starting step8RegisterSearchWithMds");
+ RegisterStatusResults registerData = registerSearchService.searchWithMds(registerOperationStatus, eidasData);
+ if (registerData.getResultCount() == 0) {
+ log.debug("Matching step: 'step8RegisterSearchWithMds' has no result. Forward to create new ERnP entry ... ");
+ executionContext.put(TRANSITION_TO_CREATE_NEW_ERNP_ENTRY_TASK, true);
+
+ } else {
+ log.debug("Matching step: 'step8RegisterSearchWithMds' has #{} results. "
+ + "Forward to GUI based matching steps ... ", registerData.getResultCount());
+ MatchingTaskUtils.storeIntermediateMatchingResult(pendingReq, registerData);
+ executionContext.put(TRANSITION_TO_GENERATE_OTHER_LOGIN_METHOD_GUI_TASK, true);
+
+ }
+ }
+
+ private RegisterResult step3CheckRegisterUpdateNecessary(
+ RegisterStatusResults searchResult, SimpleEidasData eidasData) throws WorkflowException {
+ log.trace("Starting step3CheckRegisterUpdateNecessary");
+ if (!eidasData.equalsRegisterData(searchResult.getResult())) {
+ log.debug("PersonalIdentifier match but MDS or other information changed. Starting update process ... ");
+ return registerSearchService.step7aKittProcess(searchResult, eidasData).getResult();
+
+ } else {
+ log.debug("Register information match to eIDAS information. No update required");
+ return searchResult.getResult();
+ }
+ }
+
+ private void foundMatchFinalizeTask(RegisterResult updatedResult, SimpleEidasData eidasData)
+ throws WorkflowException, EaafStorageException {
+ MatchedPersonResult result =
+ MatchedPersonResult.generateFormMatchingResult(updatedResult, eidasData.getCitizenCountryCode());
+ MatchingTaskUtils.storeFinalMatchingResult(pendingReq, result);
+
+ }
+
+ @NotNull
+ private SimpleEidasData convertEidasAttrToSimpleData()
+ throws EidasAttributeException, EidPostProcessingException {
+ final ILightResponse eidasResponse = MatchingTaskUtils.getAuthProcessDataWrapper(pendingReq)
+ .getGenericDataFromSession(Constants.DATA_FULL_EIDAS_RESPONSE, ILightResponse.class);
+ Map<String, Object> simpleMap = MatchingTaskUtils.convertEidasAttrToSimpleMap(
+ eidasResponse.getAttributes().getAttributeMap(), log);
+ return eidPostProcessor.postProcess(simpleMap);
+ }
+
+}
diff --git a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/ReceiveAustrianResidenceGuiResponseTask.java b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/ReceiveAustrianResidenceGuiResponseTask.java
new file mode 100644
index 00000000..f335bc2a
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/ReceiveAustrianResidenceGuiResponseTask.java
@@ -0,0 +1,236 @@
+/*
+ * Copyright 2021 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.tasks;
+
+import static at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants.CONTEXT_FLAG_ADVANCED_MATCHING_FAILED;
+import static at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants.CONTEXT_FLAG_ADVANCED_MATCHING_FAILED_REASON;
+import static at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants.TRANSITION_TO_GENERATE_GUI_QUERY_AUSTRIAN_RESIDENCE_TASK;
+import static at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants.TRANSITION_TO_REQUESTING_NEW_ERNP_ENTRY_TASK;
+
+import java.util.Enumeration;
+import java.util.Set;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.lang.StringEscapeUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.jetbrains.annotations.NotNull;
+import org.springframework.stereotype.Component;
+
+import com.google.common.collect.Sets;
+
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.controller.AdresssucheController;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.controller.AdresssucheController.AdresssucheOutput;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.controller.AdresssucheController.AdresssucheOutput.AdresssucheOutputBuilder;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.MatchedPersonResult;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.SimpleEidasData;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.exception.ManualFixNecessaryException;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.exception.WorkflowException;
+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.utils.MatchingTaskUtils;
+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.controller.tasks.AbstractLocaleAuthServletTask;
+import lombok.extern.slf4j.Slf4j;
+
+
+/**
+ * Task receives the response of {@link GenerateAustrianResidenceGuiTask} and handles it.
+ * This corresponds to Steps 17B, 18, 19 in the eIDAS Matching Concept.
+ * Input:
+ * <ul>
+ * <li>{@link Constants#DATA_SIMPLE_EIDAS} initial login data from user</li>
+ * <li>{@link Constants#DATA_INTERMEDIATE_RESULT} results from search in registers with personIdentifier</li>
+ * </ul>
+ * Output:
+ * <ul>
+ * <li>{@link Constants#DATA_PERSON_MATCH_RESULT} if one register result found</li>
+ * </ul>
+ * Transitions:
+ * <ul>
+ * <li>{@link GenerateOtherLoginMethodGuiTask} if no results from search with residency data in registers</li>
+ * <li>{@link CreateIdentityLinkTask} if one exact match between initial register search (with MDS) and results
+ * from search with residency data in registers exists</li>
+ * <li>{@link GenerateOtherLoginMethodGuiTask} if a user input error has happened</li>
+ * </ul>
+ *
+ * @author amarsalek
+ * @author ckollmann
+ * @author tlenz
+ */
+@Slf4j
+@Component("ReceiveAustrianResidenceGuiResponseTask")
+public class ReceiveAustrianResidenceGuiResponseTask extends AbstractLocaleAuthServletTask {
+
+ private static final String MSG_PROP_21 = "module.eidasauth.matching.21";
+ private static final String MSG_PROP_22 = "module.eidasauth.matching.22";
+
+ public static final String HTTP_PARAM_NO_RESIDENCE = "noResidence";
+ public static final Set<String> ALL_EXECUTIONCONTEXT_PARAMETERS = Sets.newHashSet(
+ CONTEXT_FLAG_ADVANCED_MATCHING_FAILED,
+ CONTEXT_FLAG_ADVANCED_MATCHING_FAILED_REASON,
+ TRANSITION_TO_REQUESTING_NEW_ERNP_ENTRY_TASK,
+ TRANSITION_TO_GENERATE_GUI_QUERY_AUSTRIAN_RESIDENCE_TASK);
+
+ private final RegisterSearchService registerSearchService;
+
+
+ public ReceiveAustrianResidenceGuiResponseTask(RegisterSearchService registerSearchService) {
+ this.registerSearchService = registerSearchService;
+
+ }
+
+ @Override
+ protected void executeWithLocale(ExecutionContext executionContext, HttpServletRequest request,
+ HttpServletResponse response) throws TaskExecutionException {
+ log.trace("Starting ReceiveAustrianResidenceGuiResponseTask");
+
+ try {
+ //return to AuswahlScreen if HTTP_PARAM_NO_RESIDENCE was selected
+ final boolean forwardWithOutMandate = parseFlagFromHttpRequest(request, HTTP_PARAM_NO_RESIDENCE, false);
+ if (forwardWithOutMandate) {
+ log.debug("User selects 'no residence' button. Switch back to 'insert-into-ERnP' selection ... ");
+ executionContext.put(TRANSITION_TO_REQUESTING_NEW_ERNP_ENTRY_TASK, true);
+ executionContext.put(TRANSITION_TO_GENERATE_GUI_QUERY_AUSTRIAN_RESIDENCE_TASK, false);
+ return;
+
+ } else {
+ executionContext.put(TRANSITION_TO_REQUESTING_NEW_ERNP_ENTRY_TASK, false);
+
+ }
+
+ //load search parameters from HTML form
+ AdresssucheOutput input = parseHtmlInput(request);
+ if (validateHtmlInput(input)) {
+ // HTML form should ensure that mandatory fields are set => this should never happen
+ log.warn("HTML form contains no residence information. Switch back to 'input residence inputs' ... ");
+ executionContext.put(TRANSITION_TO_GENERATE_GUI_QUERY_AUSTRIAN_RESIDENCE_TASK, true);
+
+ executionContext.put(CONTEXT_FLAG_ADVANCED_MATCHING_FAILED_REASON, MSG_PROP_21);
+ executionContext.put(CONTEXT_FLAG_ADVANCED_MATCHING_FAILED, true);
+ return;
+
+ }
+
+ // get pre-processed information
+ SimpleEidasData eidasData = MatchingTaskUtils.getInitialEidasData(pendingReq);
+ RegisterStatusResults initialSearchResult = MatchingTaskUtils.getIntermediateMatchingResult(pendingReq);
+
+ // search in register
+ RegisterStatusResults residencyResult =
+ registerSearchService.searchWithResidence(initialSearchResult.getOperationStatus(), eidasData, input);
+
+ // validate matching response from registers
+ if (residencyResult.getResultCount() != 1) {
+ log.info("Find {} match by using residence information. Forward user to 'input residence infos' ... ",
+ residencyResult.getResultCount() == 0 ? "no" : "more-than-one");
+ executionContext.put(TRANSITION_TO_GENERATE_GUI_QUERY_AUSTRIAN_RESIDENCE_TASK, true);
+
+ executionContext.put(CONTEXT_FLAG_ADVANCED_MATCHING_FAILED_REASON, MSG_PROP_22);
+ executionContext.put(CONTEXT_FLAG_ADVANCED_MATCHING_FAILED, true);
+
+ } else {
+ log.debug("Find single match by using residence information. Starting data validation ... ");
+ compareSearchResultWithInitialData(residencyResult, eidasData);
+
+ }
+
+ } catch (WorkflowException e) {
+ throw new TaskExecutionException(pendingReq, "Search with residency data failed", e);
+
+ } catch (EaafStorageException e) {
+ log.error("Search with residency data failed", e);
+ throw new TaskExecutionException(pendingReq, "Search with residency data failed", e);
+
+ }
+ }
+
+ private boolean validateHtmlInput(AdresssucheOutput input) {
+ return StringUtils.isEmpty(input.getMunicipality())
+ && StringUtils.isEmpty(input.getNumber())
+ && StringUtils.isEmpty(input.getPostleitzahl())
+ && StringUtils.isEmpty(input.getStreet())
+ && StringUtils.isEmpty(input.getVillage());
+ }
+
+ private void compareSearchResultWithInitialData(RegisterStatusResults residencyResult, SimpleEidasData eidasData)
+ throws TaskExecutionException, EaafStorageException {
+ try {
+ if (!eidasData.equalsRegisterData(residencyResult.getResult())) {
+ // update register information
+ RegisterStatusResults updateResult = registerSearchService.step7aKittProcess(residencyResult, eidasData);
+
+ // store updated result to re-used in CreateIdentityLink step, because there we need bPK and MDS
+ MatchingTaskUtils.storeFinalMatchingResult(pendingReq,
+ MatchedPersonResult.generateFormMatchingResult(
+ updateResult.getResult(), eidasData.getCitizenCountryCode()));
+
+ } else {
+ log.warn("Suspect state FOUND. Matching by residence was neccessary but NO register-update are required!");
+ // no update required. Data can be used as it is.
+ MatchingTaskUtils.storeFinalMatchingResult(pendingReq,
+ MatchedPersonResult.generateFormMatchingResult(
+ residencyResult.getResult(), eidasData.getCitizenCountryCode()));
+
+ }
+
+ } catch (WorkflowException e) {
+ log.warn("Kitt operation after successful residence matching FAILED.", e);
+ throw new TaskExecutionException(pendingReq, "Search failed", new ManualFixNecessaryException(eidasData));
+
+ }
+ }
+
+ private @NotNull AdresssucheOutput parseHtmlInput(HttpServletRequest request) {
+ Enumeration<String> reqParamNames = request.getParameterNames();
+ AdresssucheOutputBuilder resultBuilder = AdresssucheOutput.builder();
+ while (reqParamNames.hasMoreElements()) {
+ final String paramName = reqParamNames.nextElement();
+ String escaped = StringEscapeUtils.escapeHtml(request.getParameter(paramName));
+ if (AdresssucheController.PARAM_MUNIPICALITY.equalsIgnoreCase(paramName)) {
+ resultBuilder.municipality(escaped);
+
+ } else if (AdresssucheController.PARAM_NUMBER.equalsIgnoreCase(paramName)) {
+ resultBuilder.number(escaped);
+
+ } else if (AdresssucheController.PARAM_POSTLEITZAHL.equalsIgnoreCase(paramName)) {
+ resultBuilder.postleitzahl(escaped);
+
+ } else if (AdresssucheController.PARAM_STREET.equalsIgnoreCase(paramName)) {
+ resultBuilder.street(escaped);
+
+ } else if (AdresssucheController.PARAM_VILLAGE.equalsIgnoreCase(paramName)) {
+ resultBuilder.village(escaped);
+
+ }
+ }
+
+ return resultBuilder.build();
+ }
+
+}
diff --git a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/ReceiveAuthnResponseAlternativeTask.java b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/ReceiveAuthnResponseAlternativeTask.java
new file mode 100644
index 00000000..d2bd0128
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/ReceiveAuthnResponseAlternativeTask.java
@@ -0,0 +1,195 @@
+/*
+ * Copyright 2018 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.tasks;
+
+import java.io.IOException;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.lang3.StringUtils;
+import org.jetbrains.annotations.NotNull;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.ApplicationContext;
+import org.springframework.stereotype.Component;
+import org.springframework.web.util.UriComponentsBuilder;
+
+import at.asitplus.eidas.specific.core.MsEidasNodeConstants;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.exception.EidasSAuthenticationException;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.exception.EidasValidationException;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.service.EidasAttributeRegistry;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.validator.EidasResponseValidator;
+import at.gv.egiz.eaaf.core.api.idp.IConfiguration;
+import at.gv.egiz.eaaf.core.api.idp.process.ExecutionContext;
+import at.gv.egiz.eaaf.core.exceptions.EaafException;
+import at.gv.egiz.eaaf.core.exceptions.TaskExecutionException;
+import at.gv.egiz.eaaf.core.impl.idp.auth.data.EidAuthProcessDataWrapper;
+import at.gv.egiz.eaaf.core.impl.idp.auth.modules.AbstractAuthServletTask;
+import eu.eidas.auth.commons.EidasParameterKeys;
+import eu.eidas.auth.commons.light.ILightResponse;
+import eu.eidas.auth.commons.light.impl.LightResponse;
+import eu.eidas.auth.commons.tx.BinaryLightToken;
+import eu.eidas.specificcommunication.BinaryLightTokenHelper;
+import eu.eidas.specificcommunication.SpecificCommunicationDefinitionBeanNames;
+import eu.eidas.specificcommunication.exception.SpecificCommunicationException;
+import eu.eidas.specificcommunication.protocol.SpecificCommunicationService;
+import lombok.extern.slf4j.Slf4j;
+
+
+/**
+ * Receives the authn response from the eIDAS Node, containing the (alternative) eIDAS authentication.
+ * Input:
+ * <ul>
+ * <li>none</li>
+ * </ul>
+ * Output:
+ * <ul>
+ * <li>{@link Constants#DATA_FULL_EIDAS_RESPONSE_ALTERNATIVE} the full response details</li>
+ * </ul>
+ * Transitions:
+ * <ul>
+ * <li>{@link InitialSearchTask} to perform search in registers</li>
+ * </ul>
+ *
+ * @author tlenz
+ * @author ckollmann
+ */
+@Slf4j
+@Component("ReceiveAuthnResponseTask")
+public class ReceiveAuthnResponseAlternativeTask extends AbstractAuthServletTask {
+
+ @SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
+
+ @Autowired
+ ApplicationContext context;
+
+ @Autowired
+ private IConfiguration basicConfig;
+
+ @Autowired
+ private EidasAttributeRegistry attrRegistry;
+
+ @Override
+ public void execute(ExecutionContext executionContext, HttpServletRequest request,
+ HttpServletResponse response) throws TaskExecutionException {
+ try {
+ final ILightResponse eidasResponse = extractEidasResponse(request);
+
+ String stagingEndpoint = pendingReq.getRawData(
+ MsEidasNodeConstants.EXECCONTEXT_PARAM_MSCONNECTOR_STAGING, String.class);
+ if (StringUtils.isNotEmpty(stagingEndpoint)) {
+ log.info("Find ms-connector staging to: {}. Forwarding to that endpoint ... ", stagingEndpoint);
+ forwardToOtherStage(response, executionContext, eidasResponse, stagingEndpoint);
+
+ } else {
+ checkStatusCode(eidasResponse);
+ validateMsSpecificResponse(executionContext, eidasResponse);
+ storeInSession(eidasResponse);
+
+ }
+
+ } catch (final EidasSAuthenticationException e) {
+ log.warn("eIDAS Response processing FAILED.", e);
+ throw new TaskExecutionException(pendingReq, e.getMessage(), e);
+
+ } catch (final Exception e) {
+ log.warn("eIDAS Response processing FAILED.", e);
+ throw new TaskExecutionException(pendingReq, e.getMessage(),
+ new EidasSAuthenticationException("eidas.05", new Object[]{e.getMessage()}, e));
+ }
+ }
+
+ @NotNull
+ private ILightResponse extractEidasResponse(HttpServletRequest request) throws EidasSAuthenticationException {
+ final ILightResponse eidasResponse = (ILightResponse) request.getAttribute(Constants.DATA_FULL_EIDAS_RESPONSE);
+ if (eidasResponse == null) {
+ log.warn("NO eIDAS response-message found.");
+ throw new EidasSAuthenticationException("eidas.01", null);
+ }
+ log.debug("Receive eIDAS response with RespId: {} for ReqId: {}",
+ eidasResponse.getId(), eidasResponse.getInResponseToId());
+ log.trace("Full eIDAS-Resp: {}", eidasResponse);
+ return eidasResponse;
+ }
+
+ private void checkStatusCode(ILightResponse eidasResponse) throws EidasSAuthenticationException {
+ if (!eidasResponse.getStatus().getStatusCode().equals(Constants.SUCCESS_URI)) {
+ log.info("Receive eIDAS Response with StatusCode: {} Subcode: {} Msg: {}",
+ eidasResponse.getStatus().getStatusCode(),
+ eidasResponse.getStatus().getSubStatusCode(),
+ eidasResponse.getStatus().getStatusMessage());
+ throw new EidasSAuthenticationException("eidas.02", new Object[]{eidasResponse.getStatus()
+ .getStatusCode(), eidasResponse.getStatus().getStatusMessage()});
+ }
+ }
+
+ private void validateMsSpecificResponse(ExecutionContext executionContext, ILightResponse eidasResponse)
+ throws EidasValidationException {
+ final String spCountry = basicConfig.getBasicConfiguration(Constants.CONIG_PROPS_EIDAS_NODE_COUNTRYCODE, "AT");
+ final String citizenCountryCode = (String) executionContext.get(MsEidasNodeConstants.REQ_PARAM_SELECTED_COUNTRY);
+ EidasResponseValidator.validateResponse(pendingReq, eidasResponse, spCountry, citizenCountryCode, attrRegistry);
+ }
+
+ private void storeInSession(ILightResponse eidasResponse) throws EaafException {
+ log.debug("Store eIDAS response information into pending-request.");
+ final EidAuthProcessDataWrapper authProcessData = pendingReq.getSessionData(EidAuthProcessDataWrapper.class);
+ authProcessData.setQaaLevel(eidasResponse.getLevelOfAssurance());
+ authProcessData.setGenericDataToSession(Constants.DATA_FULL_EIDAS_RESPONSE_ALTERNATIVE, eidasResponse);
+
+ //inject set flag to inject
+ authProcessData.setTestIdentity(
+ basicConfig.getBasicConfigurationBoolean(Constants.CONIG_PROPS_EIDAS_IS_TEST_IDENTITY, false));
+
+ requestStoreage.storePendingRequest(pendingReq);
+
+ }
+
+ private void forwardToOtherStage(HttpServletResponse response, ExecutionContext executionContext,
+ ILightResponse eidasResponse, String stagingEndpoint)
+ throws SpecificCommunicationException, IOException, EaafException {
+ executionContext.put(MsEidasNodeConstants.EXECCONTEXT_PARAM_MSCONNECTOR_STAGING, true);
+
+ //remove staging information because it's still in use
+ pendingReq.setRawDataToTransaction(MsEidasNodeConstants.EXECCONTEXT_PARAM_MSCONNECTOR_STAGING, null);
+
+ final SpecificCommunicationService specificConnectorCommunicationService =
+ (SpecificCommunicationService) context.getBean(
+ SpecificCommunicationDefinitionBeanNames.SPECIFIC_CONNECTOR_COMMUNICATION_SERVICE.toString());
+ BinaryLightToken token = specificConnectorCommunicationService.putResponse(
+ LightResponse.builder(eidasResponse).relayState(pendingReq.getPendingRequestId()).build());
+ final String tokenBase64 = BinaryLightTokenHelper.encodeBinaryLightTokenBase64(token);
+
+ final UriComponentsBuilder redirectUrl = UriComponentsBuilder.fromHttpUrl(stagingEndpoint);
+ redirectUrl.queryParam(EidasParameterKeys.TOKEN.toString(), tokenBase64);
+
+ // store pendingRequest
+ requestStoreage.storePendingRequest(pendingReq);
+
+ log.debug("Forward to other stage .... ");
+ response.sendRedirect(redirectUrl.build().encode().toString());
+
+ }
+
+}
diff --git a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/ReceiveAuthnResponseTask.java b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/ReceiveAuthnResponseTask.java
index 35cb6015..5e4075de 100644
--- a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/ReceiveAuthnResponseTask.java
+++ b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/ReceiveAuthnResponseTask.java
@@ -19,7 +19,7 @@
* 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.tasks;
@@ -29,6 +29,7 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang3.StringUtils;
+import org.jetbrains.annotations.NotNull;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;
@@ -38,6 +39,7 @@ import at.asitplus.eidas.specific.core.MsConnectorEventCodes;
import at.asitplus.eidas.specific.core.MsEidasNodeConstants;
import at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants;
import at.asitplus.eidas.specific.modules.auth.eidas.v2.exception.EidasSAuthenticationException;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.exception.EidasValidationException;
import at.asitplus.eidas.specific.modules.auth.eidas.v2.service.EidasAttributeRegistry;
import at.asitplus.eidas.specific.modules.auth.eidas.v2.validator.EidasResponseValidator;
import at.gv.egiz.eaaf.core.api.idp.IConfiguration;
@@ -56,30 +58,45 @@ import eu.eidas.specificcommunication.exception.SpecificCommunicationException;
import eu.eidas.specificcommunication.protocol.SpecificCommunicationService;
import lombok.extern.slf4j.Slf4j;
+
+/**
+ * Receives the authn response from the eIDAS Node, containing the (initial) eIDAS authentication.
+ * Input:
+ * <ul>
+ * <li>none</li>
+ * </ul>
+ * Output:
+ * <ul>
+ * <li>{@link Constants#DATA_FULL_EIDAS_RESPONSE} the full response details</li>
+ * </ul>
+ * Transitions:
+ * <ul>
+ * <li>{@link InitialSearchTask} to perform search in registers</li>
+ * </ul>
+ *
+ * @author tlenz
+ * @author ckollmann
+ */
@Slf4j
-@Component("ReceiveResponseFromeIDASNodeTask")
+@Component("ReceiveAuthnResponseTask")
public class ReceiveAuthnResponseTask extends AbstractAuthServletTask {
+ @SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
+
@Autowired
ApplicationContext context;
@Autowired
private IConfiguration basicConfig;
+
@Autowired
private EidasAttributeRegistry attrRegistry;
@Override
public void execute(ExecutionContext executionContext, HttpServletRequest request,
- HttpServletResponse response) throws TaskExecutionException {
+ HttpServletResponse response) throws TaskExecutionException {
try {
- final ILightResponse eidasResponse = (ILightResponse) request.getAttribute(
- Constants.DATA_FULL_EIDAS_RESPONSE);
- if (eidasResponse == null) {
- log.warn("NO eIDAS response-message found.");
- throw new EidasSAuthenticationException("eidas.01", null);
-
- }
-
+ final ILightResponse eidasResponse = extractEidasResponse(request);
String stagingEndpoint = pendingReq.getRawData(
MsEidasNodeConstants.EXECCONTEXT_PARAM_MSCONNECTOR_STAGING, String.class);
if (StringUtils.isNotEmpty(stagingEndpoint)) {
@@ -88,20 +105,20 @@ public class ReceiveAuthnResponseTask extends AbstractAuthServletTask {
} else {
executionContext.put(MsEidasNodeConstants.EXECCONTEXT_PARAM_MSCONNECTOR_STAGING, false);
- processResponseOnThatStage(executionContext, eidasResponse);
-
+ checkStatusCode(eidasResponse);
+ validateMsSpecificResponse(executionContext, eidasResponse);
+ storeInSession(eidasResponse);
}
+ revisionsLogger.logEvent(pendingReq, MsConnectorEventCodes.RESPONSE_FROM_EIDAS_NODE_VALID);
} catch (final EaafException e) {
revisionsLogger.logEvent(pendingReq, MsConnectorEventCodes.RESPONSE_FROM_EIDAS_NODE_NOT_VALID);
throw new TaskExecutionException(pendingReq, "eIDAS Response processing FAILED.", e);
-
} catch (final Exception e) {
log.warn("eIDAS Response processing FAILED.", e);
revisionsLogger.logEvent(pendingReq, MsConnectorEventCodes.RESPONSE_FROM_EIDAS_NODE_NOT_VALID);
throw new TaskExecutionException(pendingReq, e.getMessage(),
- new EidasSAuthenticationException("eidas.05", new Object[] { e.getMessage() }, e));
-
+ new EidasSAuthenticationException("eidas.05", new Object[]{e.getMessage()}, e));
}
}
@@ -130,56 +147,51 @@ public class ReceiveAuthnResponseTask extends AbstractAuthServletTask {
response.sendRedirect(redirectUrl.build().encode().toString());
}
+
+ @NotNull
+ private ILightResponse extractEidasResponse(HttpServletRequest request) throws EidasSAuthenticationException {
+ final ILightResponse eidasResponse = (ILightResponse) request.getAttribute(Constants.DATA_FULL_EIDAS_RESPONSE);
+ if (eidasResponse == null) {
+ log.warn("NO eIDAS response-message found.");
+ throw new EidasSAuthenticationException("eidas.01", null);
+ }
+ log.debug("Receive eIDAS response with RespId: {} for ReqId: {}",
+ eidasResponse.getId(), eidasResponse.getInResponseToId());
+ log.trace("Full eIDAS-Resp: {}", eidasResponse);
+ revisionsLogger.logEvent(pendingReq, MsConnectorEventCodes.RESPONSE_FROM_EIDAS_NODE, eidasResponse.getId());
+ return eidasResponse;
+ }
- private void processResponseOnThatStage(ExecutionContext executionContext, ILightResponse eidasResponse)
- throws EaafException {
- log.debug("Receive eIDAS response with RespId:" + eidasResponse.getId() + " for ReqId:" + eidasResponse
- .getInResponseToId());
- log.trace("Full eIDAS-Resp: " + eidasResponse.toString());
- revisionsLogger.logEvent(pendingReq, MsConnectorEventCodes.RESPONSE_FROM_EIDAS_NODE, eidasResponse
- .getId());
-
- // check response StatusCode
+ private void checkStatusCode(ILightResponse eidasResponse) throws EidasSAuthenticationException {
if (!eidasResponse.getStatus().getStatusCode().equals(Constants.SUCCESS_URI)) {
- log.info("Receice eIDAS Response with StatusCode:" + eidasResponse.getStatus().getStatusCode()
- + " Subcode:" + eidasResponse.getStatus().getSubStatusCode() + " Msg:" + eidasResponse.getStatus()
- .getStatusMessage());
- throw new EidasSAuthenticationException("eidas.02", new Object[] { eidasResponse.getStatus()
- .getStatusCode(), eidasResponse.getStatus().getStatusMessage() });
-
+ log.info("Receive eIDAS Response with StatusCode: {} Subcode: {} Msg: {}",
+ eidasResponse.getStatus().getStatusCode(),
+ eidasResponse.getStatus().getSubStatusCode(),
+ eidasResponse.getStatus().getStatusMessage());
+ throw new EidasSAuthenticationException("eidas.02", new Object[]{eidasResponse.getStatus()
+ .getStatusCode(), eidasResponse.getStatus().getStatusMessage()});
}
+ }
- // extract all Attributes from response
-
- // **********************************************************
- // ******* MS-specificresponse validation **********
- // **********************************************************
- final String spCountry = basicConfig.getBasicConfiguration(Constants.CONIG_PROPS_EIDAS_NODE_COUNTRYCODE,
- "AT");
- final String citizenCountryCode = (String) executionContext.get(
- MsEidasNodeConstants.REQ_PARAM_SELECTED_COUNTRY);
- EidasResponseValidator.validateResponse(pendingReq, eidasResponse, spCountry, citizenCountryCode,
- attrRegistry);
-
- // **********************************************************
- // ******* Store resonse infos into session object **********
- // **********************************************************
+ private void validateMsSpecificResponse(ExecutionContext executionContext, ILightResponse eidasResponse)
+ throws EidasValidationException {
+ final String spCountry = basicConfig.getBasicConfiguration(Constants.CONIG_PROPS_EIDAS_NODE_COUNTRYCODE, "AT");
+ final String citizenCountryCode = (String) executionContext.get(MsEidasNodeConstants.REQ_PARAM_SELECTED_COUNTRY);
+ EidasResponseValidator.validateResponse(pendingReq, eidasResponse, spCountry, citizenCountryCode, attrRegistry);
+ }
- // update MOA-Session data with received information
+ private void storeInSession(ILightResponse eidasResponse) throws EaafException {
log.debug("Store eIDAS response information into pending-request.");
final EidAuthProcessDataWrapper authProcessData = pendingReq.getSessionData(EidAuthProcessDataWrapper.class);
authProcessData.setQaaLevel(eidasResponse.getLevelOfAssurance());
- authProcessData.setGenericDataToSession(Constants.DATA_FULL_EIDAS_RESPONSE, eidasResponse);
-
//inject set flag to inject
authProcessData.setTestIdentity(
basicConfig.getBasicConfigurationBoolean(Constants.CONIG_PROPS_EIDAS_IS_TEST_IDENTITY, false));
-
- // store MOA-session to database
- requestStoreage.storePendingRequest(pendingReq);
- revisionsLogger.logEvent(pendingReq, MsConnectorEventCodes.RESPONSE_FROM_EIDAS_NODE_VALID);
+
+ authProcessData.setGenericDataToSession(Constants.DATA_FULL_EIDAS_RESPONSE, eidasResponse);
+ requestStoreage.storePendingRequest(pendingReq);
}
diff --git a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/ReceiveMobilePhoneSignatureResponseTask.java b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/ReceiveMobilePhoneSignatureResponseTask.java
new file mode 100644
index 00000000..b212d133
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/ReceiveMobilePhoneSignatureResponseTask.java
@@ -0,0 +1,403 @@
+/*
+ * Copyright 2021 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.tasks;
+
+import static at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants.CONTEXT_FLAG_ADVANCED_MATCHING_FAILED;
+import static at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants.CONTEXT_FLAG_ADVANCED_MATCHING_FAILED_REASON;
+import static at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants.TRANSITION_TO_GENERATE_OTHER_LOGIN_METHOD_GUI_TASK;
+import static at.asitplus.eidas.specific.modules.auth.eidas.v2.idaustriaclient.IdAustriaClientAuthConstants.MODULE_NAME_FOR_LOGGING;
+
+import java.io.IOException;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.xml.transform.TransformerException;
+
+import org.apache.commons.lang3.StringUtils;
+import org.jetbrains.annotations.NotNull;
+import org.opensaml.core.xml.io.MarshallingException;
+import org.opensaml.messaging.decoder.MessageDecodingException;
+import org.opensaml.saml.saml2.core.Response;
+import org.opensaml.saml.saml2.core.StatusCode;
+import org.opensaml.saml.saml2.metadata.IDPSSODescriptor;
+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;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.SimpleEidasData;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.SimpleMobileSignatureData;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.exception.WorkflowException;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.idaustriaclient.IdAustriaClientAuthConstants;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.idaustriaclient.IdAustriaClientAuthEventConstants;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.idaustriaclient.provider.IdAustriaClientAuthCredentialProvider;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.idaustriaclient.provider.IdAustriaClientAuthMetadataProvider;
+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.utils.MatchingTaskUtils;
+import at.gv.egiz.eaaf.core.api.data.PvpAttributeDefinitions;
+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.TaskExecutionException;
+import at.gv.egiz.eaaf.core.impl.data.Pair;
+import at.gv.egiz.eaaf.core.impl.idp.auth.modules.AbstractAuthServletTask;
+import at.gv.egiz.eaaf.modules.pvp2.api.binding.IDecoder;
+import at.gv.egiz.eaaf.modules.pvp2.exception.CredentialsNotAvailableException;
+import at.gv.egiz.eaaf.modules.pvp2.exception.SamlAssertionValidationExeption;
+import at.gv.egiz.eaaf.modules.pvp2.exception.SamlSigningException;
+import at.gv.egiz.eaaf.modules.pvp2.impl.binding.PostBinding;
+import at.gv.egiz.eaaf.modules.pvp2.impl.binding.RedirectBinding;
+import at.gv.egiz.eaaf.modules.pvp2.impl.message.InboundMessage;
+import at.gv.egiz.eaaf.modules.pvp2.impl.message.PvpSProfileResponse;
+import at.gv.egiz.eaaf.modules.pvp2.impl.utils.Saml2Utils;
+import at.gv.egiz.eaaf.modules.pvp2.impl.validation.EaafUriCompare;
+import at.gv.egiz.eaaf.modules.pvp2.impl.validation.TrustEngineFactory;
+import at.gv.egiz.eaaf.modules.pvp2.impl.verification.SamlVerificationEngine;
+import at.gv.egiz.eaaf.modules.pvp2.sp.exception.AssertionValidationExeption;
+import at.gv.egiz.eaaf.modules.pvp2.sp.exception.AuthnResponseValidationException;
+import at.gv.egiz.eaaf.modules.pvp2.sp.impl.utils.AssertionAttributeExtractor;
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * Task that receives the SAML2 response from ID Austria system.
+ * This corresponds to Step 15 in the eIDAS Matching Concept.
+ * Input:
+ * <ul>
+ * <li>{@link Constants#DATA_SIMPLE_EIDAS} initial login data from user</li>
+ * <li>{@link Constants#DATA_INTERMEDIATE_RESULT} results from search in registers with personIdentifier</li>
+ * </ul>
+ * Output:
+ * <ul>
+ * <li>{@link Constants#DATA_PERSON_MATCH_RESULT} if one register result found</li>
+ * </ul>
+ * Transitions:
+ * <ul>
+ * <li>{@link GenerateAustrianResidenceGuiTask} if no results in registers were found</li>
+ * <li>{@link CreateIdentityLinkTask} if one exact match between initial register search (with MDS) data and
+ * register search with MPS data exists</li>
+ * <li>{@link GenerateOtherLoginMethodGuiTask} if a user input error has happened</li>
+ * </ul>
+ *
+ * @author tlenz
+ * @author ckollmann
+ */
+@Slf4j
+@Component("ReceiveMobilePhoneSignatureResponseTask")
+public class ReceiveMobilePhoneSignatureResponseTask extends AbstractAuthServletTask {
+
+ private final SamlVerificationEngine samlVerificationEngine;
+ private final RegisterSearchService registerSearchService;
+ private final IdAustriaClientAuthCredentialProvider credentialProvider;
+ private final IdAustriaClientAuthMetadataProvider metadataProvider;
+
+ private static final String ERROR_PVP_03 = "sp.pvp2.03";
+ private static final String ERROR_PVP_05 = "sp.pvp2.05";
+ private static final String ERROR_PVP_06 = "sp.pvp2.06";
+ private static final String ERROR_PVP_08 = "sp.pvp2.08";
+ private static final String ERROR_PVP_10 = "sp.pvp2.10";
+ private static final String ERROR_PVP_11 = "sp.pvp2.11";
+ private static final String ERROR_PVP_12 = "sp.pvp2.12";
+
+ private static final String ERROR_MSG_00 = "Receive INVALID PVP Response from ID Austria system";
+ private static final String ERROR_MSG_01 = "Processing PVP response from 'ID Austria system' FAILED.";
+ private static final String ERROR_MSG_02 = "PVP response decryption FAILED. No credential found.";
+ private static final String ERROR_MSG_03 = "PVP response validation FAILED.";
+ private static final String ERROR_GENERIC = "Matching failed, because response from ID Austria was "
+ + "invalid or contains an error. Detail: {}";
+
+ private static final String MSG_PROP_23 = "module.eidasauth.matching.23";
+ private static final String MSG_PROP_24 = "module.eidasauth.matching.24";
+
+ /**
+ * Creates the new task, with autowired dependencies from Spring.
+ */
+ @SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
+ public ReceiveMobilePhoneSignatureResponseTask(SamlVerificationEngine samlVerificationEngine,
+ RegisterSearchService registerSearchService,
+ IdAustriaClientAuthCredentialProvider credentialProvider,
+ IdAustriaClientAuthMetadataProvider metadataProvider) {
+ this.samlVerificationEngine = samlVerificationEngine;
+ this.registerSearchService = registerSearchService;
+ this.credentialProvider = credentialProvider;
+ this.metadataProvider = metadataProvider;
+ }
+
+ @Override
+ public void execute(ExecutionContext executionContext, HttpServletRequest request, HttpServletResponse response)
+ throws TaskExecutionException {
+ try {
+ log.trace("Starting ReceiveMobilePhoneSignatureResponseTask");
+ IDecoder decoder = loadDecoder(request);
+ EaafUriCompare comparator = loadComparator(request);
+ InboundMessage inboundMessage = decodeAndVerifyMessage(request, response, decoder, comparator);
+ Pair<PvpSProfileResponse, Boolean> processedMsg = validateAssertion((PvpSProfileResponse) inboundMessage);
+ if (processedMsg.getSecond()) {
+ log.info("Matching failed, because ID Austria login was stopped by user.");
+ // forward to next matching step in case of ID Autria authentication was stopped by user
+ executionContext.put(TRANSITION_TO_GENERATE_OTHER_LOGIN_METHOD_GUI_TASK, true);
+ executionContext.put(CONTEXT_FLAG_ADVANCED_MATCHING_FAILED_REASON, MSG_PROP_23);
+ executionContext.put(CONTEXT_FLAG_ADVANCED_MATCHING_FAILED, true);
+ return;
+
+ }
+
+ // validate SAML2 response
+ validateEntityId(inboundMessage);
+ log.info("Receive a valid assertion from IDP " + inboundMessage.getEntityID());
+
+ // load already existing information from session
+ SimpleEidasData eidasData = MatchingTaskUtils.getInitialEidasData(pendingReq);
+ RegisterStatusResults initialSearchResult = MatchingTaskUtils.getIntermediateMatchingResult(pendingReq);
+
+ // extract user information from ID Austria authentication
+ AssertionAttributeExtractor extractor = new AssertionAttributeExtractor(processedMsg.getFirst().getResponse());
+ SimpleMobileSignatureData simpleMobileSignatureData = getAuthDataFromInterfederation(extractor);
+
+ // check if MDS from ID Austria authentication matchs to eIDAS authentication
+ if (!simpleMobileSignatureData.equalsSimpleEidasData(eidasData)) {
+ log.info("Matching failed, because MDS from ID-Austria login does not match to MDS from initial eIDAS");
+ executionContext.put(TRANSITION_TO_GENERATE_OTHER_LOGIN_METHOD_GUI_TASK, true);
+ executionContext.put(CONTEXT_FLAG_ADVANCED_MATCHING_FAILED_REASON, MSG_PROP_24);
+ executionContext.put(CONTEXT_FLAG_ADVANCED_MATCHING_FAILED, true);
+ return;
+
+ }
+
+ // search entry in initial search result from steps before and build new RegisterSearchResult
+ RegisterStatusResults registerResult = new RegisterStatusResults(initialSearchResult.getOperationStatus(),
+ extractEntriesByBpk(initialSearchResult.getResultsZmr().stream(), simpleMobileSignatureData.getBpk()),
+ extractEntriesByBpk(initialSearchResult.getResultsErnp().stream(), simpleMobileSignatureData.getBpk()));
+
+ if (registerResult.getResultCount() != 1) {
+ throw new WorkflowException("matchWithIDAustriaAuthentication",
+ "Suspect state detected. MDS matches to eIDAS authentication "
+ + "but register search-result with MDS contains #" + registerResult.getResultCount()
+ + " entry with bPK from ID Austria authentication", false);
+
+ } else {
+ // perform kit operation
+ registerSearchService.step7aKittProcess(registerResult, eidasData);
+
+ // store search result to re-used in CreateIdentityLink step, because there we need bPK and MDS
+ MatchingTaskUtils.storeFinalMatchingResult(pendingReq,
+ MatchedPersonResult.generateFormMatchingResult(registerResult.getResult(),
+ eidasData.getCitizenCountryCode()));
+
+ }
+
+ } catch (final AuthnResponseValidationException e) {
+ log.info(ERROR_GENERIC, e.getMessage());
+ throw new TaskExecutionException(pendingReq, ERROR_MSG_03, e);
+
+ } catch (MessageDecodingException | SecurityException | SamlSigningException e) {
+ log.info(ERROR_GENERIC, e.getMessage());
+ throw new TaskExecutionException(pendingReq, ERROR_MSG_00,
+ new AuthnResponseValidationException(ERROR_PVP_11, new Object[]{MODULE_NAME_FOR_LOGGING}, e));
+
+ } catch (IOException | MarshallingException | TransformerException e) {
+ log.info("Processing PVP response from 'ms-specific eIDAS node' FAILED.", e);
+ throw new TaskExecutionException(pendingReq, ERROR_MSG_01,
+ new AuthnResponseValidationException(ERROR_PVP_12, new Object[]{MODULE_NAME_FOR_LOGGING, e.getMessage()}, e));
+
+ } catch (final CredentialsNotAvailableException e) {
+ log.info("PVP response decryption FAILED. No credential found.", e);
+ throw new TaskExecutionException(pendingReq, ERROR_MSG_02,
+ new AuthnResponseValidationException(ERROR_PVP_10, new Object[]{MODULE_NAME_FOR_LOGGING}, e));
+
+ } catch (final Exception e) {
+ // todo catch ManualFixNecessaryException in any other way?
+ log.info("PVP response validation FAILED. Msg: {}",e.getMessage(), e);
+ throw new TaskExecutionException(pendingReq, ERROR_MSG_03,
+ new AuthnResponseValidationException(ERROR_PVP_12, new Object[]{MODULE_NAME_FOR_LOGGING, e.getMessage()}, e));
+
+ }
+ }
+
+ private List<RegisterResult> extractEntriesByBpk(Stream<RegisterResult> stream, String bpk) {
+ return stream.filter(el -> bpk.equals(el.getBpk())).collect(Collectors.toList());
+
+ }
+
+ @NotNull
+ private InboundMessage decodeAndVerifyMessage(HttpServletRequest request, HttpServletResponse response,
+ IDecoder decoder, EaafUriCompare comparator) throws Exception {
+ InboundMessage inboundMessage = (InboundMessage) decoder.decode(request, response, metadataProvider,
+ IDPSSODescriptor.DEFAULT_ELEMENT_NAME, comparator);
+ if (!inboundMessage.isVerified()) {
+ samlVerificationEngine.verify(inboundMessage, TrustEngineFactory.getSignatureKnownKeysTrustEngine(
+ metadataProvider));
+ inboundMessage.setVerified(true);
+ }
+ return inboundMessage;
+ }
+
+ private void validateEntityId(InboundMessage inboundMessage) throws AuthnResponseValidationException {
+ final String msNodeEntityID = authConfig
+ .getBasicConfiguration(IdAustriaClientAuthConstants.CONFIG_PROPS_ID_AUSTRIA_ENTITYID);
+ final String respEntityId = inboundMessage.getEntityID();
+ if (!msNodeEntityID.equals(respEntityId)) {
+ log.warn("Response Issuer is not from valid 'ID Austria IDP'. Stopping ID Austria authentication ...");
+ throw new AuthnResponseValidationException(ERROR_PVP_08,
+ new Object[]{MODULE_NAME_FOR_LOGGING,
+ inboundMessage.getEntityID()});
+ }
+ }
+
+ @NotNull
+ private EaafUriCompare loadComparator(HttpServletRequest request) throws AuthnResponseValidationException {
+ if (request.getMethod().equalsIgnoreCase("POST")) {
+ log.trace("Receive PVP Response from 'ID Austria system', by using POST-Binding.");
+ return new EaafUriCompare(pendingReq.getAuthUrl() + IdAustriaClientAuthConstants.ENDPOINT_POST);
+ } else if (request.getMethod().equalsIgnoreCase("GET")) {
+ log.trace("Receive PVP Response from 'ID Austria system', by using Redirect-Binding.");
+ return new EaafUriCompare(pendingReq.getAuthUrl() + IdAustriaClientAuthConstants.ENDPOINT_REDIRECT);
+ } else {
+ log.warn("Receive PVP Response from 'ID Austria system', but Binding {} is not supported.", request.getMethod());
+ throw new AuthnResponseValidationException(ERROR_PVP_03, new Object[]{MODULE_NAME_FOR_LOGGING});
+ }
+ }
+
+ @NotNull
+ private IDecoder loadDecoder(HttpServletRequest request) throws AuthnResponseValidationException {
+ if (request.getMethod().equalsIgnoreCase("POST")) {
+ log.trace("Receive PVP Response from 'ID Austria system', by using POST-Binding.");
+ return new PostBinding();
+ } else if (request.getMethod().equalsIgnoreCase("GET")) {
+ log.trace("Receive PVP Response from 'ID Austria system', by using Redirect-Binding.");
+ return new RedirectBinding();
+ } else {
+ log.warn("Receive PVP Response from 'ID Austria system', but Binding {} is not supported.", request.getMethod());
+ throw new AuthnResponseValidationException(ERROR_PVP_03, new Object[]{MODULE_NAME_FOR_LOGGING});
+ }
+ }
+
+ private Pair<PvpSProfileResponse, Boolean> validateAssertion(PvpSProfileResponse msg)
+ throws IOException, MarshallingException, TransformerException,
+ CredentialsNotAvailableException, AuthnResponseValidationException, SamlAssertionValidationExeption {
+ log.debug("Start PVP21 assertion processing... ");
+ final Response response = (Response) msg.getResponse();
+ if (response.getStatus().getStatusCode().getValue().equals(StatusCode.SUCCESS)) {
+ samlVerificationEngine.validateAssertion(response,
+ credentialProvider.getMessageEncryptionCredential(),
+ pendingReq.getAuthUrl() + IdAustriaClientAuthConstants.ENDPOINT_METADATA,
+ MODULE_NAME_FOR_LOGGING);
+ msg.setSamlMessage(Saml2Utils.asDomDocument(response).getDocumentElement());
+ revisionsLogger.logEvent(pendingReq,
+ IdAustriaClientAuthEventConstants.AUTHPROCESS_ID_AUSTRIA_RESPONSE_RECEIVED,
+ response.getID());
+ return Pair.newInstance(msg, false);
+
+ } else {
+ log.info("Receive StatusCode {} from 'ms-specific eIDAS node'.", response.getStatus().getStatusCode().getValue());
+ StatusCode subStatusCode = getSubStatusCode(response);
+ if (subStatusCode != null
+ && IdAustriaClientAuthConstants.SAML2_STATUSCODE_USERSTOP.equals(subStatusCode.getValue())) {
+ log.info("Find 'User-Stop operation' in SAML2 response. Stopping authentication process ... ");
+ return Pair.newInstance(msg, true);
+
+ }
+
+ revisionsLogger.logEvent(pendingReq,
+ IdAustriaClientAuthEventConstants.AUTHPROCESS_ID_AUSTRIA_RESPONSE_RECEIVED_ERROR);
+ throw new AuthnResponseValidationException(ERROR_PVP_05,
+ new Object[]{MODULE_NAME_FOR_LOGGING,
+ response.getIssuer().getValue(),
+ response.getStatus().getStatusCode().getValue(),
+ response.getStatus().getStatusMessage().getValue()});
+ }
+ }
+
+ /**
+ * Get SAML2 Sub-StatusCode if not <code>null</code>.
+ *
+ * @param samlResp SAML2 response
+ * @return Sub-StatusCode or <code>null</code> if it's not set
+ */
+ private StatusCode getSubStatusCode(Response samlResp) {
+ if (samlResp.getStatus().getStatusCode().getStatusCode() != null
+ && StringUtils.isNotEmpty(samlResp.getStatus().getStatusCode().getStatusCode().getValue())) {
+ return samlResp.getStatus().getStatusCode().getStatusCode();
+ }
+ return null;
+ }
+
+ private SimpleMobileSignatureData getAuthDataFromInterfederation(AssertionAttributeExtractor extractor)
+ throws EaafBuilderException {
+ List<String> requiredAttributes = IdAustriaClientAuthConstants.DEFAULT_REQUIRED_PVP_ATTRIBUTE_NAMES;
+ SimpleMobileSignatureData.SimpleMobileSignatureDataBuilder builder = SimpleMobileSignatureData.builder();
+ if (!extractor.containsAllRequiredAttributes(requiredAttributes)) {
+ log.warn("PVP Response from 'ID Austria node' contains not all requested attributes.");
+ AssertionValidationExeption e = new AssertionValidationExeption(ERROR_PVP_06,
+ new Object[]{MODULE_NAME_FOR_LOGGING});
+ throw new EaafBuilderException(ERROR_PVP_06, null, e.getMessage(), e);
+ }
+ final Set<String> includedAttrNames = extractor.getAllIncludeAttributeNames();
+ for (final String attrName : includedAttrNames) {
+ if (PvpAttributeDefinitions.BPK_NAME.equals(attrName)) {
+ builder.bpk(removeTargetPrefixFromBpk(extractor.getSingleAttributeValue(attrName)));
+ }
+ if (PvpAttributeDefinitions.GIVEN_NAME_NAME.equals(attrName)) {
+ builder.givenName(extractor.getSingleAttributeValue(attrName));
+ }
+ if (PvpAttributeDefinitions.PRINCIPAL_NAME_NAME.equals(attrName)) {
+ builder.familyName(extractor.getSingleAttributeValue(attrName));
+ }
+ if (PvpAttributeDefinitions.BIRTHDATE_NAME.equals(attrName)) {
+ builder.dateOfBirth(extractor.getSingleAttributeValue(attrName));
+ }
+ if (PvpAttributeDefinitions.EID_CITIZEN_EIDAS_QAA_LEVEL_NAME.equals(attrName)) {
+ MatchingTaskUtils.getAuthProcessDataWrapper(pendingReq).setQaaLevel(
+ extractor.getSingleAttributeValue(attrName));
+ }
+ }
+ MatchingTaskUtils.getAuthProcessDataWrapper(pendingReq).setIssueInstant(extractor.getAssertionIssuingDate());
+ return builder.build();
+
+ }
+
+ private String removeTargetPrefixFromBpk(String bpkWithPrefix) {
+ if (StringUtils.isNotEmpty(bpkWithPrefix)) {
+ final String[] spitted = bpkWithPrefix.split(":");
+ if (spitted.length == 2) {
+ log.debug("Find PVP-Attr: {}", PvpAttributeDefinitions.BPK_FRIENDLY_NAME);
+ return spitted[1];
+
+ } else {
+ log.info("Find PVP-Attr: {} without prefix. Use it as it is", PvpAttributeDefinitions.BPK_FRIENDLY_NAME);
+ return spitted[0];
+
+ }
+ } else {
+ log.warn("Receive no bPK in response from ID Austria System. There is something wrong on IDA side!!!");
+ return null;
+
+ }
+ }
+
+
+}
diff --git a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/ReceiveOtherLoginMethodGuiResponseTask.java b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/ReceiveOtherLoginMethodGuiResponseTask.java
new file mode 100644
index 00000000..184ad499
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/ReceiveOtherLoginMethodGuiResponseTask.java
@@ -0,0 +1,128 @@
+/*
+ * Copyright 2021 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.tasks;
+
+import java.util.Enumeration;
+import java.util.Set;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.lang.StringEscapeUtils;
+import org.springframework.stereotype.Component;
+
+import com.google.common.collect.Sets;
+
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.SelectedLoginMethod;
+import at.gv.egiz.eaaf.core.api.idp.process.ExecutionContext;
+import at.gv.egiz.eaaf.core.impl.idp.controller.tasks.AbstractLocaleAuthServletTask;
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * Handles user's selection from {@link GenerateOtherLoginMethodGuiTask}.
+ * This corresponds to Steps 10, 14, 16 in the eIDAS Matching Concept.
+ * Input:
+ * <ul>
+ * <li>{@link Constants#DATA_SIMPLE_EIDAS} initial login data from user</li>
+ * <li>{@link Constants#DATA_INTERMEDIATE_RESULT} results from search in registers with personIdentifier</li>
+ * </ul>
+ * Transitions:
+ * <ul>
+ * <li>{@link GenerateMobilePhoneSignatureRequestTask} if selected by user</li>
+ * <li>{@link GenerateAustrianResidenceGuiTask} if selected by user</li>
+ * <li>{@link GenerateAuthnRequestTask} if selected by user</li>
+ * <li>{@link GenerateOtherLoginMethodGuiTask} if a user input error has happened</li>
+ * </ul>
+ *
+ * @author amarsalek
+ * @author ckollmann
+ */
+@Slf4j
+@Component("ReceiveOtherLoginMethodGuiResponseTask")
+public class ReceiveOtherLoginMethodGuiResponseTask extends AbstractLocaleAuthServletTask {
+
+ public static final Set<String> ALL_EXECUTIONCONTEXT_PARAMETERS = Sets.newHashSet(
+ Constants.REQ_SELECTED_LOGIN_METHOD_PARAMETER,
+ Constants.TRANSITION_TO_GENERATE_OTHER_LOGIN_METHOD_GUI_TASK,
+ Constants.TRANSITION_TO_GENERATE_EIDAS_LOGIN,
+ Constants.TRANSITION_TO_GENERATE_MOBILE_PHONE_SIGNATURE_REQUEST_TASK,
+ Constants.TRANSITION_TO_GENERATE_GUI_QUERY_AUSTRIAN_RESIDENCE_TASK,
+ Constants.TRANSITION_TO_CREATE_NEW_ERNP_ENTRY_TASK);
+
+ @Override
+ public void executeWithLocale(ExecutionContext executionContext, HttpServletRequest request,
+ HttpServletResponse response) {
+ try {
+ SelectedLoginMethod selection = SelectedLoginMethod.valueOf(extractUserSelection(request));
+ executionContext.put(Constants.TRANSITION_TO_GENERATE_OTHER_LOGIN_METHOD_GUI_TASK, false);
+ executionContext.put(Constants.REQ_SELECTED_LOGIN_METHOD_PARAMETER, selection.name());
+ executionContext.remove(Constants.CONTEXT_FLAG_ADVANCED_MATCHING_FAILED);
+ executionContext.remove(Constants.CONTEXT_FLAG_ADVANCED_MATCHING_FAILED_REASON);
+ transitionToNextTask(executionContext, selection);
+
+ } catch (final Exception e) {
+ log.error("Parsing selected login method FAILED.", e);
+ executionContext.put(Constants.CONTEXT_FLAG_ADVANCED_MATCHING_FAILED, true);
+ executionContext.put(Constants.TRANSITION_TO_GENERATE_OTHER_LOGIN_METHOD_GUI_TASK, true);
+ }
+ }
+
+ private String extractUserSelection(HttpServletRequest request) {
+ Enumeration<String> paramNames = request.getParameterNames();
+ while (paramNames.hasMoreElements()) {
+ String paramName = paramNames.nextElement();
+ if (Constants.REQ_SELECTED_LOGIN_METHOD_PARAMETER.equalsIgnoreCase(paramName)) {
+ return StringEscapeUtils.escapeHtml(request.getParameter(paramName));
+ }
+ }
+ return null;
+ }
+
+ private void transitionToNextTask(ExecutionContext executionContext, SelectedLoginMethod selection) {
+ switch (selection) {
+ case EIDAS_LOGIN:
+ executionContext.put(Constants.TRANSITION_TO_GENERATE_EIDAS_LOGIN, true);
+ return;
+
+ case MOBILE_PHONE_SIGNATURE_LOGIN:
+ executionContext.put(Constants.TRANSITION_TO_GENERATE_MOBILE_PHONE_SIGNATURE_REQUEST_TASK, true);
+ return;
+
+ case NO_OTHER_LOGIN:
+ executionContext.put(Constants.TRANSITION_TO_GENERATE_GUI_QUERY_AUSTRIAN_RESIDENCE_TASK, true);
+ return;
+
+ case ADD_ME_AS_NEW:
+ executionContext.put(Constants.TRANSITION_TO_CREATE_NEW_ERNP_ENTRY_TASK, true);
+ return;
+
+ default:
+ executionContext.put(Constants.CONTEXT_FLAG_ADVANCED_MATCHING_FAILED, true);
+ executionContext.put(Constants.TRANSITION_TO_GENERATE_OTHER_LOGIN_METHOD_GUI_TASK, true);
+ return;
+ }
+ }
+
+}
diff --git a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/utils/EidasResponseUtils.java b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/utils/EidasResponseUtils.java
index ced6ffe6..2853d8ab 100644
--- a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/utils/EidasResponseUtils.java
+++ b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/utils/EidasResponseUtils.java
@@ -19,10 +19,12 @@
* 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.utils;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
@@ -37,6 +39,8 @@ import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.exception.EidasAttributeException;
+import at.gv.e_government.reference.namespace.persondata._20020228.PostalAddressType;
import at.gv.egiz.eaaf.core.impl.data.Triple;
import eu.eidas.auth.commons.attribute.AttributeDefinition;
import eu.eidas.auth.commons.attribute.AttributeValue;
@@ -44,6 +48,7 @@ import eu.eidas.auth.commons.attribute.AttributeValueMarshaller;
import eu.eidas.auth.commons.attribute.AttributeValueMarshallingException;
import eu.eidas.auth.commons.attribute.AttributeValueTransliterator;
import eu.eidas.auth.commons.protocol.eidas.impl.PostalAddress;
+import lombok.NonNull;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@@ -53,7 +58,7 @@ public class EidasResponseUtils {
/**
* Validate a eIDAS PersonalIdentifier attribute value This validation is done
* according to eIDAS SAML Attribute Profile - Section 2.2.3 Unique Identifier
- *
+ *
* @param uniqueID eIDAS attribute value of a unique identifier
* @return true if the uniqueID matches to eIDAS to Unique Identifier
* specification, otherwise false
@@ -69,9 +74,9 @@ public class EidasResponseUtils {
* Parse an eIDAS PersonalIdentifier attribute value into it components. This
* processing is done according to eIDAS SAML Attribute Profile - Section 2.2.3
* Unique Identifier
- *
+ *
* @param uniqueID eIDAS attribute value of a unique identifier
- * @return {@link Trible} that contains: <br>
+ * @return {@link Triple} that contains: <br>
* First : citizen country <br>
* Second: destination country <br>
* Third : unique identifier <br>
@@ -79,25 +84,26 @@ public class EidasResponseUtils {
*/
public static Triple<String, String, String> parseEidasPersonalIdentifier(String uniqueID) {
if (!validateEidasPersonalIdentifier(uniqueID)) {
- log.error("eIDAS attribute value for {} looks wrong formated. Value: {}",
+ log.error("eIDAS attribute value for {} looks wrong formated. Value: {}",
Constants.eIDAS_ATTR_PERSONALIDENTIFIER, uniqueID);
return null;
}
return Triple.newInstance(uniqueID.substring(0, 2), uniqueID.substring(3, 5), uniqueID.substring(6));
-
}
/**
- * Get eIDAS attribute-values from eIDAS Node attributes.
- *
+ * Get eIDAS attribute-values from eIDAS Node attributes.
+ *
* @param attributeDefinition eIDAS attribute definition
- * @param attributeValues Attributes from eIDAS response
- * @return Set of attribute values. If more then one value than the first value contains the 'Latin' value.
+ * @param attributeValues Attributes from eIDAS response
+ * @return Set of attribute values. If more then one value than the first value
+ * contains the 'Latin' value.
*/
// TODO: check possible problem with nonLatinCharacters
+ @NonNull
public static List<String> translateStringListAttribute(AttributeDefinition<?> attributeDefinition,
- ImmutableSet<? extends AttributeValue<?>> attributeValues) {
+ @Nullable ImmutableSet<? extends AttributeValue<?>> attributeValues) {
final List<String> stringListAttribute = new ArrayList<>();
if (attributeValues != null && !attributeValues.isEmpty()) {
final AttributeValueMarshaller<?> attributeValueMarshaller = attributeDefinition
@@ -109,7 +115,7 @@ public class EidasResponseUtils {
log.trace("Find attr: {} with value: {} nonLatinFlag: {} needTransliteration: {}",
attributeDefinition.getFriendlyName(), attributeValue.toString(),
- attributeValue.isNonLatinScriptAlternateVersion(),
+ attributeValue.isNonLatinScriptAlternateVersion(),
AttributeValueTransliterator.needsTransliteration(valueString));
// if (attributeValue.isNonLatinScriptAlternateVersion()) {
@@ -120,12 +126,26 @@ public class EidasResponseUtils {
log.trace("Find 'needsTransliteration' flag. Setting this value at last list element ... ");
stringListAttribute.add(valueString);
- }
+ log.trace("Find attr: {} with value: {} nonLatinFlag: {} needTransliteration: {}",
+ attributeDefinition.getFriendlyName(), attributeValue.toString(),
+ attributeValue.isNonLatinScriptAlternateVersion(),
+ AttributeValueTransliterator.needsTransliteration(valueString));
+
+ // if (attributeValue.isNonLatinScriptAlternateVersion()) {
+ if (!AttributeValueTransliterator.needsTransliteration(valueString)) {
+ stringListAttribute.add(0, valueString);
+ } else {
+ log.trace("Find 'needsTransliteration' flag. Setting this value at last list element ... ");
+ stringListAttribute.add(valueString);
+
+ }
+ }
} catch (final AttributeValueMarshallingException e) {
throw new IllegalStateException(e);
}
+
}
log.trace("Extract values: {} for attr: {}",
StringUtils.join(stringListAttribute, ","), attributeDefinition.getFriendlyName());
@@ -140,16 +160,17 @@ public class EidasResponseUtils {
}
+
/**
- * Convert eIDAS DateTime attribute to Java Object.
- *
+ * Convert eIDAS DateTime attribute to Java Object.
+ *
* @param attributeDefinition eIDAS attribute definition.
- * @param attributeValues eIDAS attribute value
+ * @param attributeValues eIDAS attribute value
* @return
*/
@Nullable
public static DateTime translateDateAttribute(AttributeDefinition<?> attributeDefinition,
- ImmutableList<? extends AttributeValue<?>> attributeValues) {
+ ImmutableList<? extends AttributeValue<?>> attributeValues) {
if (attributeValues.size() != 0) {
final AttributeValue<?> firstAttributeValue = attributeValues.get(0);
return (DateTime) firstAttributeValue.getValue();
@@ -161,17 +182,216 @@ public class EidasResponseUtils {
/**
* Concert eIDAS Address attribute to Java object.
- *
+ *
* @param attributeDefinition eIDAS attribute definition
- * @param attributeValues eIDAS attribute value
+ * @param attributeValues eIDAS attribute value
* @return
*/
@Nullable
public static PostalAddress translateAddressAttribute(AttributeDefinition<?> attributeDefinition,
- ImmutableList<? extends AttributeValue<?>> attributeValues) {
+ ImmutableList<? extends AttributeValue<?>> attributeValues) {
final AttributeValue<?> firstAttributeValue = attributeValues.get(0);
return (PostalAddress) firstAttributeValue.getValue();
+ }
+
+ /**
+ * Post-Process the eIDAS CurrentAddress attribute.
+ *
+ * @param currentAddressObj eIDAS current address information
+ * @return current address or null if no attribute is available
+ * @throws EidasAttributeException if eIDAS attribute is of a wrong type
+ */
+ public static PostalAddressType processAddress(Object currentAddressObj) throws EidasAttributeException {
+ if (currentAddressObj != null) {
+ if (currentAddressObj instanceof PostalAddress) {
+ final PostalAddressType result = new PostalAddressType();
+ result.setPostalCode(((PostalAddress) currentAddressObj).getPostCode());
+ result.setMunicipality(((PostalAddress) currentAddressObj).getPostName());
+ // TODO: add more mappings
+ return result;
+ } else {
+ log.warn("eIDAS attr: " + Constants.eIDAS_ATTR_CURRENTADDRESS + " is of WRONG type");
+ throw new EidasAttributeException(Constants.eIDAS_ATTR_CURRENTADDRESS);
+ }
+ } else {
+ log.debug("NO '" + Constants.eIDAS_ATTR_CURRENTADDRESS + "' attribute. Post-Processing skipped ... ");
+ }
+ return null;
+ }
+
+ /**
+ * Post-Process the eIDAS BirthName attribute.
+ *
+ * @param birthNameObj eIDAS birthname information
+ * @return birthName or null if no attribute is available
+ * @throws EidasAttributeException if eIDAS attribute is of a wrong type
+ */
+ public static String processBirthName(Object birthNameObj) throws EidasAttributeException {
+ if (birthNameObj != null) {
+ if (birthNameObj instanceof String) {
+ return (String) birthNameObj;
+ } else {
+ log.warn("eIDAS attr: " + Constants.eIDAS_ATTR_BIRTHNAME + " is of WRONG type");
+ throw new EidasAttributeException(Constants.eIDAS_ATTR_BIRTHNAME);
+ }
+ } else {
+ log.debug("NO '" + Constants.eIDAS_ATTR_BIRTHNAME + "' attribute. Post-Processing skipped ... ");
+ }
+ return null;
+ }
+ /**
+ * Post-Process the eIDAS PlaceOfBirth attribute.
+ *
+ * @param placeOfBirthObj eIDAS Place-of-Birth information
+ * @return place of Birth or null if no attribute is available
+ * @throws EidasAttributeException if eIDAS attribute is of a wrong type
+ */
+ public static String processPlaceOfBirth(Object placeOfBirthObj) throws EidasAttributeException {
+ if (placeOfBirthObj != null) {
+ if (placeOfBirthObj instanceof String) {
+ return (String) placeOfBirthObj;
+
+ } else {
+ log.warn("eIDAS attr: " + Constants.eIDAS_ATTR_PLACEOFBIRTH + " is of WRONG type");
+ throw new EidasAttributeException(Constants.eIDAS_ATTR_PLACEOFBIRTH);
+
+ }
+
+ } else {
+ log.debug("NO '" + Constants.eIDAS_ATTR_PLACEOFBIRTH + "' attribute. Post-Processing skipped ... ");
+ }
+ return null;
+ }
+
+ /**
+ * Post-Process the eIDAS DateOfBirth attribute.
+ *
+ * @param dateOfBirthObj eIDAS date-of-birth attribute information
+ * @return formated user's date-of-birth
+ * @throws EidasAttributeException if NO attribute is available
+ */
+ public static DateTime processDateOfBirth(Object dateOfBirthObj) throws EidasAttributeException {
+ if (!(dateOfBirthObj instanceof DateTime)) {
+ throw new EidasAttributeException(Constants.eIDAS_ATTR_DATEOFBIRTH);
+ }
+ return (DateTime) dateOfBirthObj;
}
-}
+ /**
+ * Post-Process the eIDAS DateOfBirth attribute to a string.
+ *
+ * @param dateOfBirthObj eIDAS date-of-birth attribute information
+ * @return formated user's date-of-birth as string
+ * @throws EidasAttributeException if NO attribute is available
+ */
+ public static String processDateOfBirthToString(Object dateOfBirthObj) throws EidasAttributeException {
+ if (dateOfBirthObj instanceof String) {
+ try {
+ new SimpleDateFormat("yyyy-MM-dd").parse((String) dateOfBirthObj);
+ return (String) dateOfBirthObj;
+ } catch (ParseException e) {
+ throw new EidasAttributeException(Constants.eIDAS_ATTR_DATEOFBIRTH);
+ }
+ }
+ if (!(dateOfBirthObj instanceof DateTime)) {
+ throw new EidasAttributeException(Constants.eIDAS_ATTR_DATEOFBIRTH);
+ }
+ return new SimpleDateFormat("yyyy-MM-dd").format(((DateTime) dateOfBirthObj).toDate());
+ }
+
+ /**
+ * Post-Process the eIDAS GivenName attribute.
+ *
+ * @param givenNameObj eIDAS givenName attribute information
+ * @return formated user's givenname
+ * @throws EidasAttributeException if NO attribute is available
+ */
+ public static String processGivenName(Object givenNameObj) throws EidasAttributeException {
+ if (!(givenNameObj instanceof String)) {
+ throw new EidasAttributeException(Constants.eIDAS_ATTR_CURRENTGIVENNAME);
+ }
+ return (String) givenNameObj;
+ }
+
+ /**
+ * Post-Process the eIDAS FamilyName attribute.
+ *
+ * @param familyNameObj eIDAS familyName attribute information
+ * @return formated user's familyname
+ * @throws EidasAttributeException if NO attribute is available
+ */
+ public static String processFamilyName(Object familyNameObj) throws EidasAttributeException {
+ if (!(familyNameObj instanceof String)) {
+ throw new EidasAttributeException(Constants.eIDAS_ATTR_CURRENTFAMILYNAME);
+ }
+ return (String) familyNameObj;
+ }
+
+ /**
+ * Post-Process the eIDAS personal identifier attribute.
+ *
+ * @param personalIdentifierObj eIDAS personal identifier attribute-information
+ * @return formated user's full personal identifier
+ * @throws EidasAttributeException if NO attribute is available
+ */
+ public static String processPersonalIdentifier(Object personalIdentifierObj) throws EidasAttributeException {
+ if (!(personalIdentifierObj instanceof String)) {
+ throw new EidasAttributeException(Constants.eIDAS_ATTR_PERSONALIDENTIFIER);
+ }
+ return (String) personalIdentifierObj;
+ }
+
+
+ /**
+ * Post-Process the eIDAS pseudonym to ERnB unique identifier.
+ *
+ * @param personalIdObj eIDAS PersonalIdentifierAttribute
+ * @return Unique personal identifier without country-code information
+ * @throws EidasAttributeException if NO attribute is available
+ */
+ public static String processPseudonym(Object personalIdObj) throws EidasAttributeException {
+ if (!(personalIdObj instanceof String)) {
+ throw new EidasAttributeException(Constants.eIDAS_ATTR_PERSONALIDENTIFIER);
+ }
+ final Triple<String, String, String> eIdentifier =
+ EidasResponseUtils.parseEidasPersonalIdentifier((String) personalIdObj);
+ if (eIdentifier == null || eIdentifier.getThird() == null) {
+ throw new EidasAttributeException("Error processing eIdentifier");
+ }
+ return eIdentifier.getThird();
+ }
+
+ /**
+ * Post-Process the eIDAS pseudonym to citizen country code.
+ *
+ * @param personalIdObj eIDAS PersonalIdentifierAttribute
+ * @return Citizen Country Code
+ * @throws EidasAttributeException if NO attribute is available
+ */
+ public static String processCountryCode(Object personalIdObj) throws EidasAttributeException {
+ if (!(personalIdObj instanceof String)) {
+ throw new EidasAttributeException(Constants.eIDAS_ATTR_PERSONALIDENTIFIER);
+ }
+ final Triple<String, String, String> eIdentifier =
+ EidasResponseUtils.parseEidasPersonalIdentifier((String) personalIdObj);
+ if (eIdentifier == null || eIdentifier.getFirst() == null) {
+ throw new EidasAttributeException("Error processing eIdentifier");
+ }
+ return eIdentifier.getFirst();
+ }
+
+ /**
+ * Post-Process the eIDAS TaxReference attribute.
+ *
+ * @param taxReferenceObj eIDAS TaxReference attribute information
+ * @return formated user's TaxReference
+ * @throws EidasAttributeException if NO attribute is available
+ */
+ public static String processTaxReference(Object taxReferenceObj) throws EidasAttributeException {
+ if (!(taxReferenceObj instanceof String)) {
+ throw new EidasAttributeException(Constants.eIDAS_ATTR_TAXREFERENCE);
+ }
+ return (String) taxReferenceObj;
+ }
+} \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/utils/LoggingHandler.java b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/utils/LoggingHandler.java
index 70290cd3..10acf3ad 100644
--- a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/utils/LoggingHandler.java
+++ b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/utils/LoggingHandler.java
@@ -41,17 +41,23 @@ public class LoggingHandler implements SOAPHandler<SOAPMessageContext> {
@Override
public boolean handleMessage(SOAPMessageContext context) {
- final SOAPMessage msg = context.getMessage();
- final ByteArrayOutputStream bos = new ByteArrayOutputStream();
+ // only perform operations if logging is on trace level
+ if (log.isTraceEnabled()) {
+ final SOAPMessage msg = context.getMessage();
+ final ByteArrayOutputStream bos = new ByteArrayOutputStream();
+ final boolean request = ((Boolean) context
+ .get(SOAPMessageContext.MESSAGE_OUTBOUND_PROPERTY)).booleanValue();
+ try {
+ msg.writeTo(bos);
+ log.trace("{} Web-Service with content: {}",
+ request ? "Requesting to" : "Response from", bos.toString("UTF-8"));
- try {
- msg.writeTo(bos);
- log.trace(bos.toString("UTF-8"));
- log.trace(new String(bos.toByteArray(), "UTF-8"));
-
- } catch (final Exception e) {
- log.trace(e.getMessage(), e);
+ } catch (final Exception e) {
+ log.trace(e.getMessage(), e);
+
+ }
}
+
return true;
}
diff --git a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/utils/MatchingTaskUtils.java b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/utils/MatchingTaskUtils.java
new file mode 100644
index 00000000..c8a1f190
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/utils/MatchingTaskUtils.java
@@ -0,0 +1,192 @@
+package at.asitplus.eidas.specific.modules.auth.eidas.v2.utils;
+
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.annotation.Nullable;
+
+import org.apache.commons.lang3.StringUtils;
+import org.joda.time.DateTime;
+import org.slf4j.Logger;
+import org.springframework.lang.NonNull;
+
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
+
+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.SimpleEidasData;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.service.ICcSpecificEidProcessingService;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.service.RegisterSearchService.RegisterStatusResults;
+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.impl.idp.auth.data.AuthProcessDataWrapper;
+import eu.eidas.auth.commons.attribute.AttributeDefinition;
+import eu.eidas.auth.commons.attribute.AttributeValue;
+import eu.eidas.auth.commons.protocol.eidas.impl.PostalAddress;
+
+public class MatchingTaskUtils {
+
+ /**
+ * Get eIDAS log-in information from session.
+ *
+ * @param pendingReq Current pendingRequest
+ * @return eIDAS infos or <code>null</code> if not exist
+ */
+ @Nullable
+ public static SimpleEidasData getInitialEidasData(IRequest pendingReq) {
+ return getAuthProcessDataWrapper(pendingReq).getGenericDataFromSession(
+ Constants.DATA_SIMPLE_EIDAS, SimpleEidasData.class);
+
+ }
+
+ /**
+ * Set eIDAS log-in information to session.
+ *
+ * @param pendingReq Current pendingRequest
+ * @param eidasData infos from eIDAS Proxy-Service
+ * @throws EaafStorageException In case of data can not be add into session
+ */
+ @Nullable
+ public static void storeInitialEidasData(IRequest pendingReq, SimpleEidasData eidasData)
+ throws EaafStorageException {
+ getAuthProcessDataWrapper(pendingReq).setGenericDataToSession(Constants.DATA_SIMPLE_EIDAS, eidasData);
+
+ }
+
+ /**
+ * Get intermediate matching result from session.
+ *
+ * @param pendingReq Current pendingRequest
+ * @return Intermediate matching result or <code>null</code> if not exist
+ */
+ @Nullable
+ public static RegisterStatusResults getIntermediateMatchingResult(IRequest pendingReq) {
+ return getAuthProcessDataWrapper(pendingReq).getGenericDataFromSession(Constants.DATA_INTERMEDIATE_RESULT,
+ RegisterStatusResults.class);
+
+ }
+
+ /**
+ * Store intermediate matching result into session.
+ *
+ * @param pendingReq Current pendingRequest
+ * @param registerData Intermediate matching result information
+ * @throws EaafStorageException In case of data can not be add into session
+ */
+ @Nullable
+ public static void storeIntermediateMatchingResult(IRequest pendingReq, RegisterStatusResults registerData)
+ throws EaafStorageException {
+ getAuthProcessDataWrapper(pendingReq).setGenericDataToSession(
+ Constants.DATA_INTERMEDIATE_RESULT, registerData);
+
+ }
+
+ /**
+ * Get intermediate matching result from session.
+ *
+ * @param pendingReq Current pendingRequest
+ * @return Intermediate matching result or <code>null</code> if not exist
+ */
+ @Nullable
+ public static MatchedPersonResult getFinalMatchingResult(IRequest pendingReq) {
+ return getAuthProcessDataWrapper(pendingReq).getGenericDataFromSession(Constants.DATA_PERSON_MATCH_RESULT,
+ MatchedPersonResult.class);
+
+ }
+
+ /**
+ * Store intermediate matching result into session.
+ *
+ * @param pendingReq Current pendingRequest
+ * @param personInfos Person information after a successful match
+ * @throws EaafStorageException In case of data can not be add into session
+ */
+ @Nullable
+ public static void storeFinalMatchingResult(IRequest pendingReq, MatchedPersonResult personInfos)
+ throws EaafStorageException {
+ getAuthProcessDataWrapper(pendingReq).setGenericDataToSession(
+ Constants.DATA_PERSON_MATCH_RESULT, personInfos);
+
+ }
+
+ /**
+ * Get holder for authentication information for the current process.
+ *
+ * @param pendingReq Current pendingRequest
+ * @return {@link AuthProcessDataWrapper}
+ */
+ @NonNull
+ public static AuthProcessDataWrapper getAuthProcessDataWrapper(IRequest pendingReq) {
+ return pendingReq.getSessionData(AuthProcessDataWrapper.class);
+
+ }
+
+
+ /**
+ * Evaluate a flag on Execution context.
+ *
+ * @param executionContext Current execution context.
+ * @param key Parameter name
+ * @return <code>true</code> if the parameter exists and evaluates to <code>true</code>, otherwise <code>false</code>
+ */
+ public static boolean getExecutionContextFlag(ExecutionContext executionContext, String key) {
+ Serializable value = executionContext.get(key);
+ return value instanceof Boolean && (boolean)value
+ || value instanceof String && Boolean.parseBoolean((String) value);
+
+ }
+
+ /**
+ * Convert attributes from eIDAS Authn Response into a simple map, to be used from
+ * {@link ICcSpecificEidProcessingService#postProcess(Map)}.
+ */
+ public static Map<String, Object> convertEidasAttrToSimpleMap(
+ ImmutableMap<AttributeDefinition<?>, ImmutableSet<? extends AttributeValue<?>>> attributeMap, Logger log) {
+ final Map<String, Object> result = new HashMap<>();
+ for (final AttributeDefinition<?> el : attributeMap.keySet()) {
+ final Class<?> parameterizedType = el.getParameterizedType();
+ if (DateTime.class.equals(parameterizedType)) {
+ final DateTime attribute = EidasResponseUtils.translateDateAttribute(el, attributeMap.get(el).asList());
+ if (attribute != null) {
+ result.put(el.getFriendlyName(), attribute);
+ log.trace("Find attr '{}' with value: {}", el.getFriendlyName(), attribute);
+ } else {
+ log.info("Ignore empty 'DateTime' attribute: {}", el.getNameUri());
+ }
+ } else if (PostalAddress.class.equals(parameterizedType)) {
+ final PostalAddress addressAttribute = EidasResponseUtils
+ .translateAddressAttribute(el, attributeMap.get(el).asList());
+ if (addressAttribute != null) {
+ result.put(el.getFriendlyName(), addressAttribute);
+ log.trace("Find attr '{}' with value: {}", el.getFriendlyName(), addressAttribute);
+ } else {
+ log.info("Ignore empty 'PostalAddress' attribute: {}", el.getNameUri());
+ }
+ } else {
+ final List<String> natPersonIdObj = EidasResponseUtils.translateStringListAttribute(el, attributeMap.get(el));
+ if (natPersonIdObj.isEmpty() || StringUtils.isEmpty(natPersonIdObj.get(0))) {
+ log.info("Ignore empty 'String' attribute: {}", el.getNameUri());
+
+ } else {
+ result.put(el.getFriendlyName(), natPersonIdObj.get(0));
+ log.trace("Find attr '{}' with value: {}", el.getFriendlyName(), natPersonIdObj.get(0));
+
+ }
+ }
+ }
+
+ log.debug("Receive #{} attributes with names: {}", result.size(), result.keySet());
+ return result;
+
+ }
+
+ private MatchingTaskUtils() {
+ //hide constructor in case of class contains only static methods
+
+ }
+
+}
diff --git a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/utils/VersionHolder.java b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/utils/VersionHolder.java
new file mode 100644
index 00000000..dbe88d33
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/utils/VersionHolder.java
@@ -0,0 +1,40 @@
+package at.asitplus.eidas.specific.modules.auth.eidas.v2.utils;
+
+import java.util.Optional;
+
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.ApplicationContext;
+
+/**
+ * SpringBoot based implementation of an application-version holder.
+ *
+ * @author tlenz
+ *
+ */
+public class VersionHolder {
+
+ private final String version;
+
+ /**
+ * Build up a holder that contains the current version of this application.
+ *
+ * @param context SprintBoot context
+ */
+ public VersionHolder(ApplicationContext context) {
+ version = context.getBeansWithAnnotation(SpringBootApplication.class).entrySet().stream()
+ .findFirst()
+ .flatMap(es -> Optional.ofNullable(es.getValue().getClass().getPackage().getImplementationVersion()))
+ .orElse("unknown");
+
+ }
+
+ /**
+ * Get version of this application.
+ *
+ * @return version
+ */
+ public String getVersion() {
+ return version;
+
+ }
+}
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/eIDAS.Authentication.process.xml b/modules/authmodule-eIDAS-v2/src/main/resources/eIDAS.Authentication.process.xml
index 5b81c6b1..dfa8622c 100644
--- a/modules/authmodule-eIDAS-v2/src/main/resources/eIDAS.Authentication.process.xml
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/eIDAS.Authentication.process.xml
@@ -3,24 +3,81 @@
xmlns:pd="http://reference.e-government.gv.at/namespace/moa/process/definition/v1">
- <pd:Task id="createAuthnRequest" class="ConnecteIDASNodeTask" />
- <pd:Task id="receiveAuthnResponse"
- class="ReceiveResponseFromeIDASNodeTask" async="true" />
- <pd:Task id="finalizeAuthentication"
- class="FinalizeAuthenticationTask" />
- <pd:Task id="generateIdentityLink"
- class="CreateIdentityLinkTask" />
+ <pd:Task id="generateAuthnRequest" class="GenerateAuthnRequestTask" />
+ <pd:Task id="receiveAuthnResponse" class="ReceiveAuthnResponseTask" async="true" />
+ <pd:Task id="finalizeAuthentication" class="FinalizeAuthenticationTask" />
+ <pd:Task id="generateIdentityLink" class="CreateIdentityLinkTask" />
+
+ <pd:Task id="initialRegisterSearch" class="InitialSearchTask" />
+
+ <pd:Task id="createNewErnpEntryTask" class="CreateNewErnpEntryTask" />
+ <pd:Task id="generateOtherLoginMethodGuiTask" class="GenerateOtherLoginMethodGuiTask" />
+ <pd:Task id="generateMobilePhoneSignatureRequestTask" class="GenerateMobilePhoneSignatureRequestTask" />
+ <pd:Task id="receiveOtherLoginMethodGuiResponseTask" class="ReceiveOtherLoginMethodGuiResponseTask" async="true" />
+ <pd:Task id="receiveMobilePhoneSignatureResponseTask" class="ReceiveMobilePhoneSignatureResponseTask" async="true"/>
+ <pd:Task id="generateAustrianResidenceGuiTask" class="GenerateAustrianResidenceGuiTask" />
+ <pd:Task id="receiveAustrianResidenceGuiResponseTask" class="ReceiveAustrianResidenceGuiResponseTask" async="true"/>
+ <pd:Task id="generateAlternativeEidasAuthnRequest" class="GenerateAuthnRequestTask" />
+ <pd:Task id="receiveAlternativeEidasAuthnRequest" class="ReceiveAuthnResponseAlternativeTask" async="true" />
+ <pd:Task id="alternativeRegisterSearch" class="AlternativeSearchTask" />
<pd:StartEvent id="start" />
-
- <pd:Transition from="start" to="createAuthnRequest" />
- <pd:Transition from="createAuthnRequest" to="receiveAuthnResponse" />
+
+ <pd:Transition from="start" to="generateAuthnRequest" />
+ <pd:Transition from="generateAuthnRequest" to="receiveAuthnResponse" />
+ <pd:Transition conditionExpression="ctx['msConnectorStaging']"
+ from="receiveAuthnResponse" to="receiveAuthnResponse" />
+ <pd:Transition from="receiveAuthnResponse" to="initialRegisterSearch" />
+
+ <pd:Transition conditionExpression="ctx['TASK_CreateNewErnpEntryTask']"
+ from="initialRegisterSearch" to="createNewErnpEntryTask" />
+ <pd:Transition conditionExpression="ctx['TASK_GenerateOtherLoginMethodGuiTask']"
+ from="initialRegisterSearch" to="generateOtherLoginMethodGuiTask"/>
+ <pd:Transition from="initialRegisterSearch" to="generateIdentityLink" />
+
+ <!-- alternative matching modes -->
+ <pd:Transition from="generateOtherLoginMethodGuiTask" to="receiveOtherLoginMethodGuiResponseTask" />
+ <pd:Transition conditionExpression="ctx['changeLanguage'] or ctx['TASK_GenerateOtherLoginMethodGuiTask']"
+ from="receiveOtherLoginMethodGuiResponseTask" to="generateOtherLoginMethodGuiTask" />
+ <pd:Transition conditionExpression="ctx['TASK_GenerateAlternativeEidasAuthn']"
+ from="receiveOtherLoginMethodGuiResponseTask" to="generateAlternativeEidasAuthnRequest" />
+ <pd:Transition conditionExpression="ctx['TASK_GenerateMobilePhoneSignatureRequestTask']"
+ from="receiveOtherLoginMethodGuiResponseTask" to="generateMobilePhoneSignatureRequestTask" />
+ <pd:Transition conditionExpression="ctx['TASK_GenerateAustrianResidenceGuiTask']"
+ from="receiveOtherLoginMethodGuiResponseTask" to="generateAustrianResidenceGuiTask" />
+ <pd:Transition conditionExpression="ctx['TASK_CreateNewErnpEntryTask']"
+ from="receiveOtherLoginMethodGuiResponseTask" to="createNewErnpEntryTask" />
+
+ <!-- alternative eIDAS authentication -->
+ <pd:Transition from="generateAlternativeEidasAuthnRequest" to="receiveAlternativeEidasAuthnRequest" />
<pd:Transition conditionExpression="ctx['msConnectorStaging']"
- from="receiveAuthnResponse" to="receiveAuthnResponse" />
- <pd:Transition from="receiveAuthnResponse" to="generateIdentityLink" />
- <pd:Transition from="generateIdentityLink" to="finalizeAuthentication" />
- <pd:Transition from="finalizeAuthentication" to="end" />
-
+ from="receiveAlternativeEidasAuthnRequest" to="receiveAlternativeEidasAuthnRequest" />
+ <pd:Transition from="receiveAlternativeEidasAuthnRequest" to="alternativeRegisterSearch" />
+ <pd:Transition conditionExpression="ctx['TASK_GenerateOtherLoginMethodGuiTask']"
+ from="alternativeRegisterSearch" to="generateOtherLoginMethodGuiTask" />
+ <pd:Transition from="alternativeRegisterSearch" to="generateIdentityLink" />
+
+
+ <!-- ID Austria authentication -->
+ <pd:Transition from="generateMobilePhoneSignatureRequestTask" to="receiveMobilePhoneSignatureResponseTask" />
+ <pd:Transition conditionExpression="ctx['TASK_GenerateOtherLoginMethodGuiTask']"
+ from="receiveMobilePhoneSignatureResponseTask" to="generateOtherLoginMethodGuiTask" />
+ <pd:Transition from="receiveMobilePhoneSignatureResponseTask" to="generateIdentityLink" />
+
+
+ <!-- address searching -->
+ <pd:Transition from="generateAustrianResidenceGuiTask" to="receiveAustrianResidenceGuiResponseTask" />
+ <pd:Transition conditionExpression="ctx['changeLanguage'] or ctx['TASK_GenerateAustrianResidenceGuiTask']"
+ from="receiveAustrianResidenceGuiResponseTask" to="generateAustrianResidenceGuiTask" />
+ <pd:Transition conditionExpression="ctx['TASK_RequestingNewErnpEntryTask']"
+ from="receiveAustrianResidenceGuiResponseTask" to="generateOtherLoginMethodGuiTask" />
+ <pd:Transition from="receiveAustrianResidenceGuiResponseTask" to="generateIdentityLink" />
+
+ <pd:Transition from="createNewErnpEntryTask" to="generateIdentityLink" />
+
+ <pd:Transition from="generateIdentityLink" to="finalizeAuthentication" />
+ <pd:Transition from="finalizeAuthentication" to="end" />
+
<pd:EndEvent id="end" />
</pd:ProcessDefinition>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/eidas_v2_auth.beans.xml b/modules/authmodule-eIDAS-v2/src/main/resources/eidas_v2_auth.beans.xml
index 3b0cee54..193513b0 100644
--- a/modules/authmodule-eIDAS-v2/src/main/resources/eidas_v2_auth.beans.xml
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/eidas_v2_auth.beans.xml
@@ -11,33 +11,23 @@
<context:annotation-config />
- <import
- resource="classpath:specificCommunicationDefinitionApplicationContext.xml" />
+ <bean id="appVersionHolder"
+ class="at.asitplus.eidas.specific.modules.auth.eidas.v2.utils.VersionHolder" />
- <bean id="SZRClientForeIDAS"
- class="at.asitplus.eidas.specific.modules.auth.eidas.v2.szr.SzrClient" />
-
- <bean id="specificConnectorAttributesFile"
- class="java.lang.String">
- <constructor-arg value="eidas-attributes.xml" />
- </bean>
+ <bean id="eidasConnectorMessageSource"
+ class="at.asitplus.eidas.specific.modules.auth.eidas.v2.config.EidasConnectorMessageSource"/>
- <bean id="specificAdditionalAttributesFile"
- class="java.lang.String">
- <constructor-arg value="additional-attributes.xml" />
- </bean>
+ <bean id="SZRClientForeIDAS"
+ class="at.asitplus.eidas.specific.modules.auth.eidas.v2.clients.szr.SzrClient" />
- <bean id="specificConnectorAttributesFileWithPath"
- class="java.lang.String">
- <constructor-arg
- value="#{specificConnectorConfigRepository}#{specificConnectorAttributesFile}" />
- </bean>
+ <bean id="zmrClient"
+ class="at.asitplus.eidas.specific.modules.auth.eidas.v2.clients.zmr.ZmrSoapClient" />
+
+ <bean id="zmrAddressClient"
+ class="at.asitplus.eidas.specific.modules.auth.eidas.v2.clients.zmr.ZmrAddressSoapClient" />
- <bean id="specificConnectorAdditionalAttributesFileWithPath"
- class="java.lang.String">
- <constructor-arg
- value="#{specificConnectorConfigRepository}#{specificAdditionalAttributesFile}" />
- </bean>
+ <bean id="ernpClient"
+ class="at.asitplus.eidas.specific.modules.auth.eidas.v2.clients.ernp.ErnpRestClient" />
<bean id="eIDASAuthModule"
class="at.asitplus.eidas.specific.modules.auth.eidas.v2.EidasAuthenticationModulImpl">
@@ -55,7 +45,7 @@
ref="specificConnectorAdditionalAttributesFileWithPath" />
</bean>
- <!-- <bean id="eIDASDataStore" class="at.asitplus.eidas.specific.modules.auth.eidas.v2.service.eIDASDataStore"
+ <!-- <bean id="eIDASDataStore" class="at.asitplus.eidas.specific.modules.auth.eidas.v2.service.eIDASDataStore"
/> -->
<bean id="authBlockSigningService"
@@ -79,17 +69,89 @@
<property name="priority" value="0" />
</bean>
+ <bean id="deSpecificDetailSearchProcessor"
+ class="at.asitplus.eidas.specific.modules.auth.eidas.v2.handler.DeSpecificDetailSearchProcessor">
+ </bean>
+
+ <bean id="itSpecificDetailSearchProcessor"
+ class="at.asitplus.eidas.specific.modules.auth.eidas.v2.handler.ItSpecificDetailSearchProcessor">
+ </bean>
+
+ <bean id="registerSearchService"
+ class="at.asitplus.eidas.specific.modules.auth.eidas.v2.service.RegisterSearchService" />
+
+ <!-- ID Austria client specific services -->
+ <bean id="idAustriaClientAuthCredentialProvider"
+ class="at.asitplus.eidas.specific.modules.auth.eidas.v2.idaustriaclient.provider.IdAustriaClientAuthCredentialProvider" />
+
+ <bean id="idAustriaClientAuthMetadataProvider"
+ class="at.asitplus.eidas.specific.modules.auth.eidas.v2.idaustriaclient.provider.IdAustriaClientAuthMetadataProvider" />
+
+ <bean id="idAustriaClientMetadataHealthCheck"
+ class="at.asitplus.eidas.specific.modules.auth.eidas.v2.idaustriaclient.provider.IdAustriaClientAuthHealthCheck" />
+
+ <bean id="idAustriaClientAuthMetadataController"
+ class="at.asitplus.eidas.specific.modules.auth.eidas.v2.idaustriaclient.controller.IdAustriaClientAuthMetadataController" />
+
+ <bean id="idAustriaClientAuthSignalController"
+ class="at.asitplus.eidas.specific.modules.auth.eidas.v2.idaustriaclient.controller.IdAustriaClientAuthSignalController" />
+
+ <bean id="addressWizardController"
+ class="at.asitplus.eidas.specific.modules.auth.eidas.v2.controller.AdresssucheController" />
+
+
<!-- Authentication Process Tasks -->
- <bean id="ConnecteIDASNodeTask"
+ <bean id="GenerateAuthnRequestTask"
class="at.asitplus.eidas.specific.modules.auth.eidas.v2.tasks.GenerateAuthnRequestTask"
scope="prototype" />
- <bean id="ReceiveResponseFromeIDASNodeTask"
- class="at.asitplus.eidas.specific.modules.auth.eidas.v2.tasks.ReceiveAuthnResponseTask"
- scope="prototype" />
+ <bean id="ReceiveAuthnResponseTask"
+ class="at.asitplus.eidas.specific.modules.auth.eidas.v2.tasks.ReceiveAuthnResponseTask"
+ scope="prototype" />
+
+ <bean id="ReceiveAuthnResponseAlternativeTask"
+ class="at.asitplus.eidas.specific.modules.auth.eidas.v2.tasks.ReceiveAuthnResponseAlternativeTask"
+ scope="prototype" />
<bean id="CreateIdentityLinkTask"
class="at.asitplus.eidas.specific.modules.auth.eidas.v2.tasks.CreateIdentityLinkTask"
scope="prototype" />
+ <bean id="InitialSearchTask"
+ class="at.asitplus.eidas.specific.modules.auth.eidas.v2.tasks.InitialSearchTask"
+ scope="prototype" />
+
+ <bean id="AlternativeSearchTask"
+ class="at.asitplus.eidas.specific.modules.auth.eidas.v2.tasks.AlternativeSearchTask"
+ scope="prototype" />
+
+ <bean id="CreateNewErnpEntryTask"
+ class="at.asitplus.eidas.specific.modules.auth.eidas.v2.tasks.CreateNewErnpEntryTask"
+ scope="prototype" />
+
+ <bean id="GenerateOtherLoginMethodGuiTask"
+ class="at.asitplus.eidas.specific.modules.auth.eidas.v2.tasks.GenerateOtherLoginMethodGuiTask"
+ scope="prototype" />
+
+ <bean id="GenerateMobilePhoneSignatureRequestTask"
+ class="at.asitplus.eidas.specific.modules.auth.eidas.v2.tasks.GenerateMobilePhoneSignatureRequestTask"
+ scope="prototype" />
+
+ <bean id="ReceiveOtherLoginMethodGuiResponseTask"
+ class="at.asitplus.eidas.specific.modules.auth.eidas.v2.tasks.ReceiveOtherLoginMethodGuiResponseTask"
+ scope="prototype" />
+
+ <bean id="ReceiveMobilePhoneSignatureResponseTask"
+ class="at.asitplus.eidas.specific.modules.auth.eidas.v2.tasks.ReceiveMobilePhoneSignatureResponseTask"
+ scope="prototype" />
+
+ <bean id="GenerateAustrianResidenceGuiTask"
+ class="at.asitplus.eidas.specific.modules.auth.eidas.v2.tasks.GenerateAustrianResidenceGuiTask"
+ scope="prototype" />
+
+ <bean id="ReceiveAustrianResidenceGuiResponseTask"
+ class="at.asitplus.eidas.specific.modules.auth.eidas.v2.tasks.ReceiveAustrianResidenceGuiResponseTask"
+ scope="prototype" />
+
+
</beans> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/eidas_v2_auth_ref_impl_config.beans.xml b/modules/authmodule-eIDAS-v2/src/main/resources/eidas_v2_auth_ref_impl_config.beans.xml
new file mode 100644
index 00000000..cde9687e
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/eidas_v2_auth_ref_impl_config.beans.xml
@@ -0,0 +1,39 @@
+<?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"
+ 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">
+
+ <context:annotation-config />
+
+ <import
+ resource="classpath:specificCommunicationDefinitionApplicationContext.xml" />
+
+ <bean id="specificConnectorAttributesFile"
+ class="java.lang.String">
+ <constructor-arg value="eidas-attributes.xml" />
+ </bean>
+
+ <bean id="specificAdditionalAttributesFile"
+ class="java.lang.String">
+ <constructor-arg value="additional-attributes.xml" />
+ </bean>
+
+ <bean id="specificConnectorAttributesFileWithPath"
+ class="java.lang.String">
+ <constructor-arg
+ value="#{specificConnectorConfigRepository}#{specificConnectorAttributesFile}" />
+ </bean>
+
+ <bean id="specificConnectorAdditionalAttributesFileWithPath"
+ class="java.lang.String">
+ <constructor-arg
+ value="#{specificConnectorConfigRepository}#{specificAdditionalAttributesFile}" />
+ </bean>
+
+</beans> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/messages/eidas_connector_message.properties b/modules/authmodule-eIDAS-v2/src/main/resources/messages/eidas_connector_message.properties
new file mode 100644
index 00000000..bd05fef2
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/messages/eidas_connector_message.properties
@@ -0,0 +1,33 @@
+module.eidasauth.00=Wrong configuration. Missing property: {0}
+
+module.eidasauth.idaustria.02=eIDAS module has an error in configuration. Reason: {0}
+module.eidasauth.idaustria.05=eIDAS module can not initialize SAML2 metadata provider for entityId: {0}. Reason: {1}
+
+
+module.eidasauth.01=eIDAS module has an error in configuration: {0}. Reason: {1}
+
+module.eidasauth.03=eIDAS module has a general error during request pre-processing. Reason: {0}
+module.eidasauth.04=eIDAS module has a general error during response post-processing.
+module.eidasauth.06=eIDAS module was selected, but eIDAS is NOT enabled for SP: {0}
+
+
+module.eidasauth.98=eIDAS module has an internal error. Reason: {0}
+module.eidasauth.99=eIDAS module has an generic internal error.
+
+module.eidasauth.matching.00=Matching failed, because find more than one ZMR entries with one eIDAS personal-identifier
+module.eidasauth.matching.01=Matching failed, because of an ZMR communication error. Reason: {0}
+module.eidasauth.matching.02=Matching failed, because ZMR response contains historic information which is not supported.
+module.eidasauth.matching.03=Matching failed in workflow step: {0} with error: {1}
+module.eidasauth.matching.04=An error occurred while loading your data from official registers. Please contact the support.
+
+module.eidasauth.matching.11=Matching failed, because of an ERnP communication error. Reason: {0}
+module.eidasauth.matching.12=Matching failed, because ERnP response contains historic information which is not supported.
+
+module.eidasauth.matching.21=Matching be using residence information failed by missing input information. Use another method for matching or create a new Austrian identity.
+module.eidasauth.matching.22=Can not find an unique match by using residence information. Provide more or other data, use another method for matching, or create a new Austrian identity.
+module.eidasauth.matching.23=Matching be using Austrian Identity was canceled. Use another method for matching or create a new Austrian identity.
+module.eidasauth.matching.24=Matching be using Austrian Identity not possible. Use another method for matching or create a new Austrian identity.
+module.eidasauth.matching.25=Matching be using alternative eIDAS authentication not possible. Provide more or other data, use another method for matching, or create a new Austrian identity.
+
+module.eidasauth.matching.99=Matching failed, because of an unexpected processing error. Reason: {0}
+
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/templates/eidas_node_forward.html b/modules/authmodule-eIDAS-v2/src/main/resources/templates/eidas_node_forward.html
index 186937d7..640c1f75 100644
--- a/modules/authmodule-eIDAS-v2/src/main/resources/templates/eidas_node_forward.html
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/templates/eidas_node_forward.html
@@ -4,7 +4,7 @@
layout:decorator="fragments/base"
th:with="lang=${#locale.language}" th:lang="${lang}">
<head>
- <script src="$contextPath/autocommit.js"
+ <script src="/autocommit.js"
th:attr="src=@{/autocommit.js}"></script>
</head>
<body>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/Muster/WienBezirkRequest.xml b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/Muster/WienBezirkRequest.xml
new file mode 100644
index 00000000..fae66796
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/Muster/WienBezirkRequest.xml
@@ -0,0 +1,58 @@
+<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
+ <soapenv:Header>
+ <ns9:Security xmlns:ns9="http://schemas.xmlsoap.org/ws/2002/04/secext" xmlns="http://bmi.gv.at/namespace/zmr-su/base/20040201#" xmlns:ns6="http://bmi.gv.at/namespace/zmr-su/ernp/20050901#" xmlns:ns5="http://www.w3.org/2000/09/xmldsig#" xmlns:ns8="http://egov.gv.at/pvp1.xsd" xmlns:ns7="http://bmi.gv.at/namespace/zmr-su/gis/20070725#" xmlns:ns2="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" xmlns:ns4="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#" xmlns:ns3="http://bmi.gv.at/namespace/zmr-su/lmr/20050401#">
+ <ns8:pvpToken version="1.8">
+ <ns8:authenticate>
+ <ns8:participantId>AT:B:xxx</ns8:participantId>
+ <ns8:userPrincipal>
+ <ns8:userId>userid</ns8:userId>
+ <ns8:cn>full name</ns8:cn>
+ <ns8:gvOuId>AT:B:xxx</ns8:gvOuId>
+ <ns8:ou>Organisation</ns8:ou>
+ <ns8:gvSecClass>3</ns8:gvSecClass>
+ <ns8:gvGid>AT:B:112:PID:71923</ns8:gvGid>
+ <ns8:mail>e@mail</ns8:mail>
+ </ns8:userPrincipal>
+ </ns8:authenticate>
+ <ns8:authorize>
+ <ns8:role value="ZMR-Anfrage"></ns8:role>
+ </ns8:authorize>
+ <ns8:accounting></ns8:accounting>
+ </ns8:pvpToken>
+ </ns9:Security>
+ </soapenv:Header>
+ <soapenv:Body>
+ <Request xmlns="http://bmi.gv.at/namespace/zmr-su/base/20040201#" xmlns:ns6="http://bmi.gv.at/namespace/zmr-su/ernp/20050901#" xmlns:ns5="http://www.w3.org/2000/09/xmldsig#" xmlns:ns8="http://egov.gv.at/pvp1.xsd" xmlns:ns7="http://bmi.gv.at/namespace/zmr-su/gis/20070725#" xmlns:ns9="http://schemas.xmlsoap.org/ws/2002/04/secext" xmlns:ns2="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" xmlns:ns4="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#" xmlns:ns3="http://bmi.gv.at/namespace/zmr-su/lmr/20050401#">
+ <WorkflowInfoClient>
+ <ProzessName>GP_Abfragen</ProzessName>
+ <ProzessInstanzID>786700000003030</ProzessInstanzID>
+ <SequenzID>0</SequenzID>
+ <VorgangName>ZMR_VO_Adresssuche_im_GWR__6</VorgangName>
+ </WorkflowInfoClient>
+ <ClientInfo>
+ <Organisation>
+ <GemeindeNr>09999</GemeindeNr>
+ </Organisation>
+ <Client>ZMR3-GUI 1.2.36.2-</Client>
+ </ClientInfo>
+ <ns4:AdresssucheRequest>
+ <ns4:AdresssucheInfo>
+ <ns4:Suchart>ADRESSSUCHE</ns4:Suchart>
+ </ns4:AdresssucheInfo>
+ <ns4:Adressdaten>
+ <ns2:PostAdresse>
+ <ns2:Gemeinde>Wien</ns2:Gemeinde>
+ <ns2:Gemeindekennziffer>90001</ns2:Gemeindekennziffer>
+ <ns2:Ortschaft>Wien,Favoriten</ns2:Ortschaft>
+ <ns2:Zustelladresse>
+ <ns2:AdressRegisterEintrag></ns2:AdressRegisterEintrag>
+ </ns2:Zustelladresse>
+ </ns2:PostAdresse>
+ <Adressschluessel>
+ <OKZ>17232</OKZ>
+ </Adressschluessel>
+ </ns4:Adressdaten>
+ </ns4:AdresssucheRequest>
+ </Request>
+ </soapenv:Body>
+</soapenv:Envelope>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/Muster/WienBezirkResponse.xml b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/Muster/WienBezirkResponse.xml
new file mode 100644
index 00000000..20151698
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/Muster/WienBezirkResponse.xml
@@ -0,0 +1,12422 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 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:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#" xmlns="http://reference.e-government.gv.at/namespace/persondata/de/20040201#">
+ <soapenv:Body>
+ <base:Response xmlns:ns10="http://bmi.gv.at/namespace/zmr-su/gis/20070725#" xmlns:ns11="http://egov.gv.at/pvp1.xsd" xmlns:ns12="http://schemas.xmlsoap.org/ws/2002/04/secext" xmlns:ns7="http://bmi.gv.at/namespace/zmr-su/lmr/20050401#" xmlns:ns8="http://www.w3.org/2000/09/xmldsig#" xmlns:ns9="http://bmi.gv.at/namespace/zmr-su/ernp/20050901#">
+ <base:WorkflowInfoServer>
+ <base:ProzessName>GP_Mindestsicherung</base:ProzessName>
+ <base:ProzessAnzeigeName>Mindestsicherung</base:ProzessAnzeigeName>
+ <base:ProzessInstanzID>786700000003031</base:ProzessInstanzID>
+ <base:SequenzID>0</base:SequenzID>
+ </base:WorkflowInfoServer>
+ <base:ServerInfo>
+ <base:GeneriertVon>ZMR-Server Version: 0.0</base:GeneriertVon>
+ <base:GeneriertAm>2021-05-27T10:58:13.555</base:GeneriertAm>
+ <base:ServerTransaktionNr>8581910000014155</base:ServerTransaktionNr>
+ </base:ServerInfo>
+ <zmr:AdresssucheResponse>
+ <zmr:AdresssucheAnfrage>
+ <zmr:AdresssucheInfo>
+ <zmr:Suchart>ADRESSSUCHE</zmr:Suchart>
+ </zmr:AdresssucheInfo>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ </zmr:AdresssucheAnfrage>
+ <base:Message>
+ <base:Number>30115</base:Number>
+ <base:Text>Adresssuche durchgefhrt, mehrere Treffer zur Auswahl.</base:Text>
+ </base:Message>
+ <zmr:Adresssuchergebnis>
+ <zmr:Detailgrad>Strassenname</zmr:Detailgrad>
+ <base:GefundeneSaetze>589</base:GefundeneSaetze>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Absbergbrcke</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>910326</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Absberggasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>900007</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Ada-Christen-Gasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>905509</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Adolf-Kirchl-Gasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>900025</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Adolf-Unger-Gasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>905520</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Ahornhof</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>914201</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Alaudagasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>905508</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Alfred-Adler-Strae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>906627</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Alfred-Stix-Platz</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>900066</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Alma-Ros-Gasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>905519</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Alpengasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>900085</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Altdorferstrae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>900092</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Alte Laaer Strae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>900094</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Alxingergasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>900106</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Am Belvedere</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>912045</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Am Hauptbahnhof</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>901314</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Am Johannesberg</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>909120</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Am Laaer Berg</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>914005</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Amalienbad</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>922002</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Amarantgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>900110</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Ampferergasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>900149</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>An der Hlle</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>900175</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>An der Kuhtrift</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>909729</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>An der Ostbahn</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>900180</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Angeligasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>900198</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Anna-Boschek-Hof</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>914348</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Anningerweg</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>909142</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Anny-Angel-Katan-Weg</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>906981</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Anton-Balzer-Weg</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>912511</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Anton-Hlzl-Hof</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>914252</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Antonie-Alt-Gasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>906624</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Antonsplatz</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>900229</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Arnold-Holm-Gasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>905521</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Arsenalstrae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>900260</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Arthaberplatz</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>900263</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Artholdgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>906724</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Aspangbahn</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>990713</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>August-Forel-Gasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>900299</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>August-Kronberger-Gasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>900303</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>August-Motz-Rettungsstation</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>918434</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>August-Sigl-Strae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>906124</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Bahnhof Matzleinsdorfer Platz</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>990534</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Bahnlnde</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>900342</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Baron-Karl-Gasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>906085</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Battiggasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>900371</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Beichlgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>909318</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Belgradplatz</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>900403</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Benischkegasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>909155</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Bergtaidingweg</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>905510</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Berlepschgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>900434</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Bernadottegasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>900435</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Bernhardtstalgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>900439</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Berthold-Viertel-Gasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>900444</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Biererlgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>900468</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Bildungscampus Sonnwendviertel</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>921151</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Birkenhof</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>914203</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Birnbaumgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>900480</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Bischofgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>900486</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Bischofplatz</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>900487</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Bitterlichstraenbrcke</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>910452</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Bitterlichstrae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>900488</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Blaschkagasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>909124</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Bleichsteinerstrae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>900498</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Bleigasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>900499</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Bloch-Bauer-Promenade</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>912685</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Braheplatz</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>900552</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Brantinggasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>900561</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Braunspergengasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>900568</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Brigitte-Neumeister-Platz</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>906747</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Brunngraberhof</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>914020</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Brunnweg</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>900626</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Brcke Ferdinand-Lwe-Strae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>910300</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Buchengasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>900630</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Bullgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>900650</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Burgenlandgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>900654</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Brgergasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>900641</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Canettistrae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>906628</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Carl-Appel-Strae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>906526</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Carl-Prohaska-Platz</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>900678</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Ceralegasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>900688</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Chiarigasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>900694</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Clemens-Holzmeister-Strae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>906529</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Collmanngasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>909153</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Columbusgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>900724</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Columbusplatz</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>900725</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Computerstrae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>905998</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Czeikestrae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>905930</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Dampfgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>900769</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Daumegasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>909736</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Davidgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>900786</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Dieselgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>900826</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Doerenkampgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>909159</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Domaniggasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>905947</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Donabaumgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>900889</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Dr.-Eberle-Gasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>909145</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Dr.-Franz-Pauer-Hof</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>914206</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Durchlass Volksparkteich</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>910449</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Eckertgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>900963</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Eckhelgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>909139</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Economogasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>900966</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Eddagasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>900967</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Eibesbrunnergasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>901002</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Eichenstrae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>901009</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Eisenmengergasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>901025</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Eisenstadtplatz</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>901026</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Ellen-Key-Gasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>901040</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Emil-Fucik-Gasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>906513</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Emil-Fucik-Hof</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>914309</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Emil-Hertzka-Platz</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>901050</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Emil-Ottenthal-Gasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>901052</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Emilie-Flge-Weg</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>912763</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Endlichergasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>901056</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Enge Lucken</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>905538</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Erlachgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>901086</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Erlachplatz</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>901087</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Ernst-Kirchweger-Hof</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>914282</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Ernst-Ludwig-Gasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>901095</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Eschenallee</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>901100</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Eschenkogelgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>901102</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Ettenreichgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>901113</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Eugenie-Fink-Gasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>905524</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Eva-Zilcher-Gasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>906721</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Adresszeile>Favoriten</Adresszeile>
+ <Strassenname>Evangelischer Friedhof</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>919048</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>true</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Fatinitzaweg</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>901145</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Favoritenstrae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>901147</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Favoritner Gewerbering</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>909900</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Felix-Grafe-Gasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>905533</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Ferdinand-Lwe-Strae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>901173</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Fernkorngasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>901177</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Feuchterslebengasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>901183</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Felergasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>901181</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Filmstadttreppenbrcke</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>910444</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Filmteichstrae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>901204</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Fingergasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>901195</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Fischhofgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>909135</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Adresszeile>Favoriten</Adresszeile>
+ <Strassenname>Fliederhof</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>905672</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>true</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Fliederhof</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>914204</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Florian-Geyer-Gasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>901224</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Fontanastrae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>905936</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Franz-Jachym-Platz</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>906268</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Franz-Koci-Strae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>905535</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Franz-Mika-Weg</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>912560</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Franz-Schreker-Gasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>901278</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Franz-Schuh-Gasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>901281</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Franz-von-Sales-Steg</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>910440</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Franzosenweg</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>901272</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Adresszeile>Favoriten</Adresszeile>
+ <Strassenname>Friedhofstrae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>901312</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>true</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Friedrich-Adler-Weg</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>906120</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Friedrich-Knauer-Gasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>901321</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Friedrich-Teller-Gasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>901327</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Friesenplatz</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>901330</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Fritz-Hahn-Gasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>906719</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Fritz-Pregl-Gasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>901335</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Frdenplatz</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>901338</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Fugehersteg ber die A3</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>910448</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Frstenhoferstrae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>905933</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Gaimayrgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>901383</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Adresszeile>Favoriten</Adresszeile>
+ <Strassenname>Gartengasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>905709</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>true</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Gartenschaugasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>909156</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Gartensteg</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>910381</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Gasparoneweg</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>901405</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Geifugasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>901428</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Gellertgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>901432</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Gellertplatz</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>901433</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Georg-Prentl-Gasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>901448</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Georg-Wiesmayer-Gasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>901451</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Georg-Wilhelm-Pabst-Gasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>905531</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>George-Washington-Hof</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>914200</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Gerhard-Bronner-Strae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>906629</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Gertrude-Frhlich-Sandner-Strae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>906626</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Gimniggasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>901496</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Gombrichgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>906701</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Graffgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>901570</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Grenzackerstrae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>901595</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Grohnergasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>906125</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Grundckergasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>901650</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Gudrunstrae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>901660</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Gutheil-Schoder-Gasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>901690</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Guriegelstrae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>901682</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Gdelgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>912783</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Gteborggasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>901535</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Gtzgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>901538</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Gterzentrum Wien Sd</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>919100</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Hackergasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>906699</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Hantzenbergergasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>901798</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Hardtmuthgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>901802</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Harry-Glck-Platz</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>906780</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Hasengasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>901818</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Hasenhrlstrae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>901821</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Hauptwegbrcke</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>910443</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Hausergasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>901844</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Hebbelgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>901857</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Hebbelplatz</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>901858</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Hederichgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>901862</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Heimkehrergasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>901880</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Heinrich-Zeder-Weg</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>912577</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Helmut-Zilk-Park</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>920314</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Hentzigasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>901915</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Hermann-Mark-Gasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>906683</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Hermann-Schne-Platz</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>901930</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Hermine-Fiala-Hof</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>914259</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Herndlgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>901937</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Herogasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>901939</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Herschelgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>901942</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Hertha-Firnberg-Strae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>906253</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Herzgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>901948</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Heuberggstttenstrae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>901959</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Himberger Brcke</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>910075</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Himberger Strae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>901972</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Hintere Liesingbachstrae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>901980</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Hintschiggasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>906123</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Hlawkagasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>906722</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Hofherrgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>902033</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Holbeingasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>902054</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Holeyplatz</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>902056</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Hollitzergasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>902061</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Holzknechtstrae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>902069</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Horrplatz</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>900376</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Hubert-Gsur-Gasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>905526</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Hueberhof</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>914084</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Hugo-Meisl-Weg</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>912447</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Humboldtgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>902101</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Humboldtplatz</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>902102</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Huppgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>902106</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Hmmerlegasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>901719</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Ignaz-Pleyel-Gasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>902122</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Indigoweg</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>902143</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Innovationsstrae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>906582</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Inzersdorfer Strae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>902154</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Jagdgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>902171</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Jean-Jaures-Hof</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>914086</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Jenny-Lind-Gasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>902198</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Johann-Friedl-Gasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>902221</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Johann-Friedl-Steg</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>910079</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Johann-Plzer-Gasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>905545</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Johannitergasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>902225</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Josef-Enslein-Platz</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>902241</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Jungbauerweg</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>912451</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Jura-Soyfer-Gasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>905544</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>KLG Am Lindkogl</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>916411</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>KLG Amarantgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>916518</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>KLG An der Rosiwalgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>916701</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>KLG Anningerblick</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>916362</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>KLG Arbeiter Schrebergarten Verein Favoriten</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>916363</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>KLG Aus eigener Kraft</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>916034</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>KLG Bitterlichstrae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>916583</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>KLG Blumental Alt</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>916039</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>KLG Blumental Neu</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>916354</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>KLG Boschberg</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>916040</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>KLG Eremit</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>916429</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>KLG Eschenkogel</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>916412</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>KLG Ettenreich</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>916067</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>KLG Favoriten</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>916069</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>KLG Fischeralm</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>916071</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>KLG Frohsinn</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>916076</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>KLG Garten-und Tierfreunde</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>916087</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>KLG Grenzacker</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>916085</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>KLG Hentzigasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>916437</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>KLG Heuberggsttten</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>916428</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>KLG Karl-Frstenhofer</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>916419</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>KLG Kriegsinvalide sterreich</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>916434</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>KLG Laaerwald Gruppe Ferstl</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>916519</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>KLG Laxenburger Allee</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>916410</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>KLG Liesingbach</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>916451</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>KLG Lwygrube</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>916361</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>KLG Mhlbach</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>916427</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>KLG Rasenstadt</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>916413</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>KLG Reifental</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>916194</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>KLG Rudolfshhe</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>916210</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>KLG Rudolfshgel</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>916211</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>KLG SDL Laaerwald</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>916516</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>KLG Sdhang</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>916498</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>KLG Unterer Gaisberg</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>916244</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>KLG Unterm Sender</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>916517</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>KLG Weichselgarten</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>916259</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>KLG Weichseltal</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>916463</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>KLG Wienerberg</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>916477</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>KLG Wienerfeld</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>916414</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>KLG Wilhelmshhe</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>916261</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>KLG Zum Acker</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>916702</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>KLG Zwillingsee</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>916356</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>KLG BB Maxing Schwimmschulteich</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>916526</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>KLG BB Wien-Sd 2054</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>916435</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>KLG BB Zweigverein 2066</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>916525</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Kaistrae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>902323</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Karl-Diener-Gasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>902364</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Karl-Popper-Strae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>906622</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Karl-Wrba-Hof</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>914224</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Karmarschgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>902392</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Karplusgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>902397</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Katharinengasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>902404</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Keldorfergasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>902421</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Kempelengasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>902425</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Kennergasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>902428</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Keplergasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>902430</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Keplerplatz</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>902431</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Kerschbaumgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>906381</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Kiesewettergasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>902451</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Adresszeile>Favoriten</Adresszeile>
+ <Strassenname>Kirchengasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>902463</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>true</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Kirsteweg</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>905810</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Kittelsengasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>902473</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Kiurinagasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>902474</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Klasterskygasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>909143</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Klausenburger Strae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>902484</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Klederinger Brcke</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>910081</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Klederinger Strae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>902489</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Klemens-Dorn-Gasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>902506</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Knllgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>902535</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Koliskogasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>902572</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Kolowratgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>909157</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Kornauthgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>909972</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Kossmatplatz</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>902618</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Adresszeile>Favoriten</Adresszeile>
+ <Strassenname>Kreuzgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>902654</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>true</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Kreuzsteg</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>910078</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Kronawettergasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>902667</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Kudlichgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>902683</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Kundratstrae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>902708</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Kur-und Erholungspark Laaer Berg</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>920103</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Kurbadstrae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>902758</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Kurt-Tichy-Gasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>909138</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Kstenbaumgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>902304</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Kstenbaumtunnel</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>910771</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Kthe-Odwody-Gasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>912608</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Kglergasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>902546</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Laaer Berg</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>918154</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Laaer Wald</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>905673</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Laaer-Berg-Strae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>902724</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Laaer-Wald-Strae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>902725</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Laaerbergbad</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>922018</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Laimckergasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>902741</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Landgutgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>902754</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Langsulzgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>902771</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Laubeplatz</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>902789</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Laxenburger Brcke</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>910293</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Laxenburger Strae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>902802</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Lecherweg</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>902812</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Leebgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>902817</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Lehmgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>902822</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Leibnizgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>902828</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Leopoldsdorfer Brcke</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>910076</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Leopoldsdorfer Strae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>902856</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Libussagasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>902879</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Liesingbachstrae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>902899</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Lindkogelgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>902913</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Lippmanngasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>902926</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Ludwig-von-Hhnel-Gasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>902992</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Lundgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>903000</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Lwyweg</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>906101</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Macholdastrae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>906214</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Maiklgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>903025</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Maillygasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>903027</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Malborghetgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>903032</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Malmgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>903036</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Mannhartgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>903044</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Mannschildgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>903046</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Marconiweg</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>903060</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Margareta-Heinrich-Weg</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>905931</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Margarete-Hilferding-Hof</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>914338</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Margaretengrtel</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>903065</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Maria-Kuhn-Gasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>906527</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Maria-Lassnig-Strae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>906720</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Maria-Rekker-Gasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>905920</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Maria-und-Rudolf-Fischer-Hof</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>914113</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Marianne-Pollak-Gasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>906723</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Marizaweg</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>909943</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Matzleinsdorf Frachtenbahnhof</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>990507</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Max-Fleischer-Gasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>905561</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Max-Mauermann-Gasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>903137</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Medeagasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>903150</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Migerkastrae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>903208</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Mithlingerhof</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>914120</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Moritz-Seeler-Gasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>905528</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Moselgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>909152</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Muhrengasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>903315</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Munchgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>903318</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Munchplatz</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>903319</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Mundygasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>903320</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Munthegasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>903321</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Murbangasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>906167</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Mnnertreugasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>903017</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Mhlgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>903296</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Mhlstrae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>903303</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Naderstrae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>903338</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Neilreichgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>903355</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Neuburgergasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>905503</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Neugrabenstrae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>903381</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Neusetzgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>903391</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Nielrosenweg</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>905704</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Ober-Laa Frachtenbahnhof</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>990508</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Ober-Laaer Friedhof</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>919030</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Ober-Laaer Platz</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>903466</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Obere Grenzgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>905588</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Oberlaaer Steg</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>910077</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Oberlaaer Strae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>903467</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Olaus-Petri-Gasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>903498</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Olof-Palme-Hof</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>914278</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Oppenheimgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>903510</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Oppenheimweg</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>905609</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Ordengasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>903514</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Otto-Geiler-Platz</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>906390</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Otto-Probst-Platz</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>906211</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Otto-Probst-Strae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>906062</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Otto-Willmann-Gasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>905816</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Ottokar-Fischer-Gasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>906766</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Palisagasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>903550</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Paltramplatz</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>903556</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Passage Gudrunstrae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>910311</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Passage Triester Strae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>910320</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Passinigasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>903584</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Patrubangasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>903589</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Per-Albin-Hansson-Strae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>903617</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Pernerstorfergasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>903623</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Pernerstorferhof</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>914126</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Pernerstorfersteg</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>910382</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Peutlmhlensteg</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>910049</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Pichelmayergasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>903676</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Pickgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>906274</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Pirchangasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>903693</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Planetengasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>903700</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Popovweg</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>903729</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Puchsbaumgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>903789</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Puchsbaumplatz</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>903790</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Plzerhof</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>914130</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Quaringasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>903807</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Quarinhof</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>914135</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Quellenplatz</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>903809</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Quellenstrae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>903810</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>R.-Platzer-Hof</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>914194</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Raaber-Bahn-Gasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>903815</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Radnitzkygasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>903830</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Ramsaygasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>903845</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Randhartingergasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>903848</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Ranzonigasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>903853</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Raxstrae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>903875</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Rechberggasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>903878</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Reichenbachgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>903892</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Reisingergasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>903912</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Remystrae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>903921</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Restaurantbrcke</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>910442</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Reumannplatz</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>903933</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Ricarda-Huch-Weg</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>905815</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Rickard-Lindstrm-Gasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>903943</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Rieplstrae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>903953</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Rissaweggasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>903963</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Rosiwalgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>904037</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Rotdornallee</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>904043</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Rotenhofgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>904046</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Rothneusiedler Gasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>904058</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Rothneusiedl</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>918350</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Roubiczekgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>909140</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Rudolf-Friemel-Gasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>906580</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Rudolf-Kalab-Gasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>909929</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Rudolf-Skodak-Gasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>901402</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Rustenfeldgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>905587</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Rdda-Barnen-Platz</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>903828</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>SMZ-Sd Kaiser-Franz-Josef-Spital</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>921005</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>SP-Favoritner-Athletik-Club</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>922224</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>SP-Haus des Sportes</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>922223</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>SP-Laaerberg</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>922225</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>SP-Rapid Oberlaa</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>922222</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>SP-Stadt Wien</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>922226</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>SP-WSTW-Verkehrsbetriebe</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>922227</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>SP-Wienerberg</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>922228</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Sahulkastrae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>904112</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Saligergasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>904119</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Salvatorianerplatz</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>904128</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Sanzingasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>904164</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Sapphogasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>904166</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Samanngasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>904169</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Schautagasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>904206</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Scheugasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>904232</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Scheunenstrae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>904233</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Schleiergasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>904272</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Schrackbrcke</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>910450</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Schrankenberggasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>904348</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Schrdingerhof</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>914147</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Schrttergasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>904361</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Schwarzgrubergasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>904415</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Schnygasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>906050</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Sebastianbrcke</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>910080</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Sedlacekweg</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>912448</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Segnerstrae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>904459</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Selma-Lagerlf-Gasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>904476</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Senefeldergasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>904482</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Senfgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>904483</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Servaesgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>904487</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Sibeliusstrae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>904497</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Siccardsburggasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>904498</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Sickingengasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>904500</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Sindelargasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>904543</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Sindinggasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>904544</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Sissy-Lwinger-Weg</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>906727</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Soesergasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>904562</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Sonderadresse 10. Bezirk</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>918910</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Sonnleithnergasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>904586</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Sonnwendgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>904587</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Starkegasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>904661</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Staudiglgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>904665</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Stefan-Fadinger-Platz</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>904710</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Steg Absberggasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>910375</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Steg an der Kaistrae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>910074</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Steineichengasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>904690</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Steinschtelgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>904703</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Stella-Kadmon-Weg</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>909937</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Steudelgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>904717</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Stinygasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>904728</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Stockholmer Platz</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>904731</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Suchenwirtplatz</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>904803</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Susi-Nicoletti-Weg</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>909137</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Sdtiroler Platz</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>904807</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Tegnrgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>904843</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Adresszeile>Favoriten</Adresszeile>
+ <Strassenname>Teichgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>904845</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>true</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Tesarekplatz</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>906212</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Tessingasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>904859</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Theodor-Sickel-Gasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>904875</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Thermalbad Oberlaa</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>922007</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Thomas-Mnzer-Gasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>904885</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Trambauerstrae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>904929</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Triester Strae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>904954</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Troststrae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>904962</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Twin Tower</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>918483</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Tyrnauer Gasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>904989</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>U-Bahn Station Alaudagasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>990134</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>U-Bahn Station Altes Landgut</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>990133</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>U-Bahn Station Keplerplatz</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>990041</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>U-Bahn Station Neulaa</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>990135</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>U-Bahn Station Oberlaa</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>990136</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>U-Bahn Station Reumannplatz</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>990027</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>U-Bahn Station Troststrae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>990132</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Uetzgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>904995</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Uhlandgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>904996</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Uhligstrae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>904997</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Undsetgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>905008</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Unter-Laaer Strae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>905027</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Unter-Meidlinger Strae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>905028</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Untere Bahnlnde</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>906292</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Untere Kaistrae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>906293</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Unterfahrung Laaer-Berg-Strae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>910313</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Unterfhrung Laaer Wald</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>910447</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Unterfhrung Neilreichgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>910123</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Unterlaaer Platz</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>906159</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Unterlaa</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>918298</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Upsalagasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>905030</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Urselbrunnengasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>905036</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Vally-Weigl-Gasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>906700</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Van-der-Nll-Gasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>905040</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Vettersgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>905072</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Victor-Gruen-Gasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>906047</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Viktor-Adler-Hof</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>914169</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Viktor-Adler-Markt</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>917024</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Viktor-Adler-Platz</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>905075</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Vitalygasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>906716</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Vivaldigasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>909971</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Vogentalgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>905102</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Volkmargasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>905109</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Volkspark-Laaerberge</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>920047</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Vollnhoferplatz</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>906611</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Vondrakplatz</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>906369</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Waldgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>905140</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Waldmllerpark</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>920091</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Waltenhofengasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>905164</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Walter-Lindenbaum-Gasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>905573</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Watzlawickweg</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>912762</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Weichselbaumgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>905199</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Weidelstrae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>905202</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Weigandhof</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>905698</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Weitmosergasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>905239</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Weizengasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>905241</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Weldengasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>905243</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Wendstattgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>905574</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Wiedner Grtel</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>905278</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Wielandgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>905281</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Wielandplatz</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>905282</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Wienerbergerplatz</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>907013</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Wienerbergstrae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>905284</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Wienerfeldgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>905285</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Wiesenthalgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>906048</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Wilczekgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>905310</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Wilhelm-Pinka-Platz</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>906257</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Windtenstrae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>905343</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Wirerstrae</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>905354</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Whlergasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>905367</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Zelda-Kaplan-Weg</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>912782</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Zentralverschiebebahnhof</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>990547</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Zohmanngasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>905474</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Zur Spinnerin</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>905487</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Zwlfpfenniggasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>905502</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Zlowgasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>905572</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Zrcher Hof</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>914180</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ </zmr:Adresssuchergebnis>
+ </zmr:AdresssucheResponse>
+ </base:Response>
+ </soapenv:Body>
+</soapenv:Envelope>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/Muster/WienBezirkStrasseRequest.xml b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/Muster/WienBezirkStrasseRequest.xml
new file mode 100644
index 00000000..5e10d725
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/Muster/WienBezirkStrasseRequest.xml
@@ -0,0 +1,59 @@
+<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
+ <soapenv:Header>
+ <ns9:Security xmlns:ns9="http://schemas.xmlsoap.org/ws/2002/04/secext" xmlns="http://bmi.gv.at/namespace/zmr-su/base/20040201#" xmlns:ns6="http://bmi.gv.at/namespace/zmr-su/ernp/20050901#" xmlns:ns5="http://www.w3.org/2000/09/xmldsig#" xmlns:ns8="http://egov.gv.at/pvp1.xsd" xmlns:ns7="http://bmi.gv.at/namespace/zmr-su/gis/20070725#" xmlns:ns2="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" xmlns:ns4="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#" xmlns:ns3="http://bmi.gv.at/namespace/zmr-su/lmr/20050401#">
+ <ns8:pvpToken version="1.8">
+ <ns8:authenticate>
+ <ns8:participantId>AT:B:xxx</ns8:participantId>
+ <ns8:userPrincipal>
+ <ns8:userId>userid</ns8:userId>
+ <ns8:cn>full name</ns8:cn>
+ <ns8:gvOuId>AT:B:xxx</ns8:gvOuId>
+ <ns8:ou>Organisation</ns8:ou>
+ <ns8:gvSecClass>3</ns8:gvSecClass>
+ <ns8:gvGid>AT:B:112:PID:71923</ns8:gvGid>
+ <ns8:mail>e@mail</ns8:mail>
+ </ns8:userPrincipal>
+ </ns8:authenticate>
+ <ns8:authorize>
+ <ns8:role value="ZMR-Anfrage"></ns8:role>
+ </ns8:authorize>
+ <ns8:accounting></ns8:accounting>
+ </ns8:pvpToken>
+ </ns9:Security>
+ </soapenv:Header>
+ <soapenv:Body>
+ <Request xmlns="http://bmi.gv.at/namespace/zmr-su/base/20040201#" xmlns:ns6="http://bmi.gv.at/namespace/zmr-su/ernp/20050901#" xmlns:ns5="http://www.w3.org/2000/09/xmldsig#" xmlns:ns8="http://egov.gv.at/pvp1.xsd" xmlns:ns7="http://bmi.gv.at/namespace/zmr-su/gis/20070725#" xmlns:ns9="http://schemas.xmlsoap.org/ws/2002/04/secext" xmlns:ns2="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" xmlns:ns4="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#" xmlns:ns3="http://bmi.gv.at/namespace/zmr-su/lmr/20050401#">
+ <WorkflowInfoClient>
+ <ProzessName>GP_Abfragen</ProzessName>
+ <ProzessInstanzID>786700000003031</ProzessInstanzID>
+ <SequenzID>0</SequenzID>
+ <VorgangName>ZMR_VO_Adresssuche_im_GWR__6</VorgangName>
+ </WorkflowInfoClient>
+ <ClientInfo>
+ <Organisation>
+ <GemeindeNr>09999</GemeindeNr>
+ </Organisation>
+ <Client>ZMR3-GUI 1.2.36.2-</Client>
+ </ClientInfo>
+ <ns4:AdresssucheRequest>
+ <ns4:AdresssucheInfo>
+ <ns4:Suchart>ADRESSSUCHE</ns4:Suchart>
+ </ns4:AdresssucheInfo>
+ <ns4:Adressdaten>
+ <ns2:PostAdresse>
+ <ns2:Gemeinde>Wien</ns2:Gemeinde>
+ <ns2:Gemeindekennziffer>90001</ns2:Gemeindekennziffer>
+ <ns2:Ortschaft>Wien,Favoriten</ns2:Ortschaft>
+ <ns2:Zustelladresse>
+ <ns2:Strassenname>Pal*</ns2:Strassenname>
+ <ns2:AdressRegisterEintrag></ns2:AdressRegisterEintrag>
+ </ns2:Zustelladresse>
+ </ns2:PostAdresse>
+ <Adressschluessel>
+ <OKZ>17232</OKZ>
+ </Adressschluessel>
+ </ns4:Adressdaten>
+ </ns4:AdresssucheRequest>
+ </Request>
+ </soapenv:Body>
+</soapenv:Envelope>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/Muster/WienBezirkStrasseResponse.xml b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/Muster/WienBezirkStrasseResponse.xml
new file mode 100644
index 00000000..f7f3a7c6
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/Muster/WienBezirkStrasseResponse.xml
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 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:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#" xmlns="http://reference.e-government.gv.at/namespace/persondata/de/20040201#">
+ <soapenv:Body>
+ <base:Response xmlns:ns10="http://bmi.gv.at/namespace/zmr-su/gis/20070725#" xmlns:ns11="http://egov.gv.at/pvp1.xsd" xmlns:ns12="http://schemas.xmlsoap.org/ws/2002/04/secext" xmlns:ns7="http://bmi.gv.at/namespace/zmr-su/lmr/20050401#" xmlns:ns8="http://www.w3.org/2000/09/xmldsig#" xmlns:ns9="http://bmi.gv.at/namespace/zmr-su/ernp/20050901#">
+ <base:WorkflowInfoServer>
+ <base:ProzessName>GP_Mindestsicherung</base:ProzessName>
+ <base:ProzessAnzeigeName>Mindestsicherung</base:ProzessAnzeigeName>
+ <base:ProzessInstanzID>786700000003032</base:ProzessInstanzID>
+ <base:SequenzID>0</base:SequenzID>
+ </base:WorkflowInfoServer>
+ <base:ServerInfo>
+ <base:GeneriertVon>ZMR-Server Version: 0.0</base:GeneriertVon>
+ <base:GeneriertAm>2021-05-27T10:58:33.454</base:GeneriertAm>
+ <base:ServerTransaktionNr>8581910000014159</base:ServerTransaktionNr>
+ </base:ServerInfo>
+ <zmr:AdresssucheResponse>
+ <zmr:AdresssucheAnfrage>
+ <zmr:AdresssucheInfo>
+ <zmr:Suchart>ADRESSSUCHE</zmr:Suchart>
+ </zmr:AdresssucheInfo>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Pal*</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ </zmr:AdresssucheAnfrage>
+ <base:Message>
+ <base:Number>30115</base:Number>
+ <base:Text>Adresssuche durchgefhrt, mehrere Treffer zur Auswahl.</base:Text>
+ </base:Message>
+ <zmr:Adresssuchergebnis>
+ <zmr:Detailgrad>Strassenname</zmr:Detailgrad>
+ <base:GefundeneSaetze>2</base:GefundeneSaetze>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Palisagasse</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>903550</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Paltramplatz</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>903556</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ </zmr:Adresssuchergebnis>
+ </zmr:AdresssucheResponse>
+ </base:Response>
+ </soapenv:Body>
+</soapenv:Envelope>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/Muster/WienRequest.xml b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/Muster/WienRequest.xml
new file mode 100644
index 00000000..aa32c91c
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/Muster/WienRequest.xml
@@ -0,0 +1,52 @@
+<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
+ <soapenv:Header>
+ <ns9:Security xmlns:ns9="http://schemas.xmlsoap.org/ws/2002/04/secext" xmlns="http://bmi.gv.at/namespace/zmr-su/base/20040201#" xmlns:ns6="http://bmi.gv.at/namespace/zmr-su/ernp/20050901#" xmlns:ns5="http://www.w3.org/2000/09/xmldsig#" xmlns:ns8="http://egov.gv.at/pvp1.xsd" xmlns:ns7="http://bmi.gv.at/namespace/zmr-su/gis/20070725#" xmlns:ns2="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" xmlns:ns4="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#" xmlns:ns3="http://bmi.gv.at/namespace/zmr-su/lmr/20050401#">
+ <ns8:pvpToken version="1.8">
+ <ns8:authenticate>
+ <ns8:participantId>AT:B:xxx</ns8:participantId>
+ <ns8:userPrincipal>
+ <ns8:userId>userid</ns8:userId>
+ <ns8:cn>full name</ns8:cn>
+ <ns8:gvOuId>AT:B:xxx</ns8:gvOuId>
+ <ns8:ou>Organisation</ns8:ou>
+ <ns8:gvSecClass>3</ns8:gvSecClass>
+ <ns8:gvGid>AT:B:112:PID:71923</ns8:gvGid>
+ <ns8:mail>e@mail</ns8:mail>
+ </ns8:userPrincipal>
+ </ns8:authenticate>
+ <ns8:authorize>
+ <ns8:role value="ZMR-Anfrage"></ns8:role>
+ </ns8:authorize>
+ <ns8:accounting></ns8:accounting>
+ </ns8:pvpToken>
+ </ns9:Security>
+ </soapenv:Header>
+ <soapenv:Body>
+ <Request xmlns="http://bmi.gv.at/namespace/zmr-su/base/20040201#" xmlns:ns6="http://bmi.gv.at/namespace/zmr-su/ernp/20050901#" xmlns:ns5="http://www.w3.org/2000/09/xmldsig#" xmlns:ns8="http://egov.gv.at/pvp1.xsd" xmlns:ns7="http://bmi.gv.at/namespace/zmr-su/gis/20070725#" xmlns:ns9="http://schemas.xmlsoap.org/ws/2002/04/secext" xmlns:ns2="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" xmlns:ns4="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#" xmlns:ns3="http://bmi.gv.at/namespace/zmr-su/lmr/20050401#">
+ <WorkflowInfoClient>
+ <ProzessName>GP_Abfragen</ProzessName>
+ <VorgangName>ZMR_VO_Adresssuche_im_GWR__6</VorgangName>
+ </WorkflowInfoClient>
+ <ClientInfo>
+ <Organisation>
+ <GemeindeNr>09999</GemeindeNr>
+ </Organisation>
+ <Client>ZMR3-GUI 1.2.36.2-</Client>
+ </ClientInfo>
+ <ns4:AdresssucheRequest>
+ <ns4:AdresssucheInfo>
+ <ns4:Suchart>ADRESSSUCHE</ns4:Suchart>
+ </ns4:AdresssucheInfo>
+ <ns4:Adressdaten>
+ <ns2:PostAdresse>
+ <ns2:Gemeinde>wien</ns2:Gemeinde>
+ <ns2:Zustelladresse>
+ <ns2:AdressRegisterEintrag></ns2:AdressRegisterEintrag>
+ </ns2:Zustelladresse>
+ </ns2:PostAdresse>
+ <Adressschluessel></Adressschluessel>
+ </ns4:Adressdaten>
+ </ns4:AdresssucheRequest>
+ </Request>
+ </soapenv:Body>
+</soapenv:Envelope>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/Muster/WienResponse.xml b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/Muster/WienResponse.xml
new file mode 100644
index 00000000..8a246423
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/Muster/WienResponse.xml
@@ -0,0 +1,478 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 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:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#" xmlns="http://reference.e-government.gv.at/namespace/persondata/de/20040201#">
+ <soapenv:Body>
+ <base:Response xmlns:ns10="http://bmi.gv.at/namespace/zmr-su/gis/20070725#" xmlns:ns11="http://egov.gv.at/pvp1.xsd" xmlns:ns12="http://schemas.xmlsoap.org/ws/2002/04/secext" xmlns:ns7="http://bmi.gv.at/namespace/zmr-su/lmr/20050401#" xmlns:ns8="http://www.w3.org/2000/09/xmldsig#" xmlns:ns9="http://bmi.gv.at/namespace/zmr-su/ernp/20050901#">
+ <base:WorkflowInfoServer>
+ <base:ProzessName>GP_Mindestsicherung</base:ProzessName>
+ <base:ProzessAnzeigeName>Mindestsicherung</base:ProzessAnzeigeName>
+ <base:ProzessInstanzID>786700000003030</base:ProzessInstanzID>
+ <base:SequenzID>0</base:SequenzID>
+ </base:WorkflowInfoServer>
+ <base:ServerInfo>
+ <base:GeneriertVon>ZMR-Server Version: 0.0</base:GeneriertVon>
+ <base:GeneriertAm>2021-05-27T10:53:35.703</base:GeneriertAm>
+ <base:ServerTransaktionNr>8581910000014151</base:ServerTransaktionNr>
+ </base:ServerInfo>
+ <zmr:AdresssucheResponse>
+ <zmr:AdresssucheAnfrage>
+ <zmr:AdresssucheInfo>
+ <zmr:Suchart>ADRESSSUCHE</zmr:Suchart>
+ </zmr:AdresssucheInfo>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Gemeinde>wien</Gemeinde>
+ </PostAdresse>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ </zmr:AdresssucheAnfrage>
+ <base:Message>
+ <base:Number>30115</base:Number>
+ <base:Text>Adresssuche durchgefhrt, mehrere Treffer zur Auswahl.</base:Text>
+ </base:Message>
+ <zmr:Adresssuchergebnis>
+ <zmr:Detailgrad>Ortschaft</zmr:Detailgrad>
+ <base:GefundeneSaetze>23</base:GefundeneSaetze>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Alsergrund</Ortschaft>
+ <Zustelladresse>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17231</base:OKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Brigittenau</Ortschaft>
+ <Zustelladresse>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17242</base:OKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Donaustadt</Ortschaft>
+ <Zustelladresse>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17244</base:OKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Dbling</Ortschaft>
+ <Zustelladresse>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17241</base:OKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Floridsdorf</Ortschaft>
+ <Zustelladresse>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17243</base:OKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Hernals</Ortschaft>
+ <Zustelladresse>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17239</base:OKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Hietzing</Ortschaft>
+ <Zustelladresse>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17235</base:OKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Innere Stadt</Ortschaft>
+ <Zustelladresse>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17223</base:OKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Josefstadt</Ortschaft>
+ <Zustelladresse>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17230</base:OKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Landstrae</Ortschaft>
+ <Zustelladresse>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17225</base:OKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Leopoldstadt</Ortschaft>
+ <Zustelladresse>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17224</base:OKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Liesing</Ortschaft>
+ <Zustelladresse>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17245</base:OKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Margareten</Ortschaft>
+ <Zustelladresse>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17227</base:OKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Mariahilf</Ortschaft>
+ <Zustelladresse>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17228</base:OKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Meidling</Ortschaft>
+ <Zustelladresse>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17234</base:OKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Neubau</Ortschaft>
+ <Zustelladresse>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17229</base:OKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Ottakring</Ortschaft>
+ <Zustelladresse>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17238</base:OKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Penzing</Ortschaft>
+ <Zustelladresse>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17236</base:OKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Rudolfsheim-Fnfhaus</Ortschaft>
+ <Zustelladresse>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17237</base:OKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Simmering</Ortschaft>
+ <Zustelladresse>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17233</base:OKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Wieden</Ortschaft>
+ <Zustelladresse>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17226</base:OKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Whring</Ortschaft>
+ <Zustelladresse>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag/>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17240</base:OKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ </zmr:Adresssuchergebnis>
+ </zmr:AdresssucheResponse>
+ </base:Response>
+ </soapenv:Body>
+</soapenv:Envelope>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/Muster/WienStrasseAuswahlRequest.xml b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/Muster/WienStrasseAuswahlRequest.xml
new file mode 100644
index 00000000..f00859b6
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/Muster/WienStrasseAuswahlRequest.xml
@@ -0,0 +1,60 @@
+<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
+ <soapenv:Header>
+ <ns9:Security xmlns:ns9="http://schemas.xmlsoap.org/ws/2002/04/secext" xmlns="http://bmi.gv.at/namespace/zmr-su/base/20040201#" xmlns:ns6="http://bmi.gv.at/namespace/zmr-su/ernp/20050901#" xmlns:ns5="http://www.w3.org/2000/09/xmldsig#" xmlns:ns8="http://egov.gv.at/pvp1.xsd" xmlns:ns7="http://bmi.gv.at/namespace/zmr-su/gis/20070725#" xmlns:ns2="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" xmlns:ns4="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#" xmlns:ns3="http://bmi.gv.at/namespace/zmr-su/lmr/20050401#">
+ <ns8:pvpToken version="1.8">
+ <ns8:authenticate>
+ <ns8:participantId>AT:B:xxx</ns8:participantId>
+ <ns8:userPrincipal>
+ <ns8:userId>userid</ns8:userId>
+ <ns8:cn>full name</ns8:cn>
+ <ns8:gvOuId>AT:B:xxx</ns8:gvOuId>
+ <ns8:ou>Organisation</ns8:ou>
+ <ns8:gvSecClass>3</ns8:gvSecClass>
+ <ns8:gvGid>AT:B:112:PID:71923</ns8:gvGid>
+ <ns8:mail>e@mail</ns8:mail>
+ </ns8:userPrincipal>
+ </ns8:authenticate>
+ <ns8:authorize>
+ <ns8:role value="ZMR-Anfrage"></ns8:role>
+ </ns8:authorize>
+ <ns8:accounting></ns8:accounting>
+ </ns8:pvpToken>
+ </ns9:Security>
+ </soapenv:Header>
+ <soapenv:Body>
+ <Request xmlns="http://bmi.gv.at/namespace/zmr-su/base/20040201#" xmlns:ns6="http://bmi.gv.at/namespace/zmr-su/ernp/20050901#" xmlns:ns5="http://www.w3.org/2000/09/xmldsig#" xmlns:ns8="http://egov.gv.at/pvp1.xsd" xmlns:ns7="http://bmi.gv.at/namespace/zmr-su/gis/20070725#" xmlns:ns9="http://schemas.xmlsoap.org/ws/2002/04/secext" xmlns:ns2="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" xmlns:ns4="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#" xmlns:ns3="http://bmi.gv.at/namespace/zmr-su/lmr/20050401#">
+ <WorkflowInfoClient>
+ <ProzessName>GP_Abfragen</ProzessName>
+ <ProzessInstanzID>786700000003032</ProzessInstanzID>
+ <SequenzID>0</SequenzID>
+ <VorgangName>ZMR_VO_Adresssuche_im_GWR__6</VorgangName>
+ </WorkflowInfoClient>
+ <ClientInfo>
+ <Organisation>
+ <GemeindeNr>09999</GemeindeNr>
+ </Organisation>
+ <Client>ZMR3-GUI 1.2.36.2-</Client>
+ </ClientInfo>
+ <ns4:AdresssucheRequest>
+ <ns4:AdresssucheInfo>
+ <ns4:Suchart>ADRESSSUCHE</ns4:Suchart>
+ </ns4:AdresssucheInfo>
+ <ns4:Adressdaten>
+ <ns2:PostAdresse>
+ <ns2:Gemeinde>Wien</ns2:Gemeinde>
+ <ns2:Gemeindekennziffer>90001</ns2:Gemeindekennziffer>
+ <ns2:Ortschaft>Wien,Favoriten</ns2:Ortschaft>
+ <ns2:Zustelladresse>
+ <ns2:Strassenname>Paltramplatz</ns2:Strassenname>
+ <ns2:AdressRegisterEintrag></ns2:AdressRegisterEintrag>
+ </ns2:Zustelladresse>
+ </ns2:PostAdresse>
+ <Adressschluessel>
+ <OKZ>17232</OKZ>
+ <SKZ>903556</SKZ>
+ </Adressschluessel>
+ </ns4:Adressdaten>
+ </ns4:AdresssucheRequest>
+ </Request>
+ </soapenv:Body>
+</soapenv:Envelope>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/Muster/WienStrasseAuswahlResponse.xml b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/Muster/WienStrasseAuswahlResponse.xml
new file mode 100644
index 00000000..359b6cbb
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/Muster/WienStrasseAuswahlResponse.xml
@@ -0,0 +1,311 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 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:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#" xmlns="http://reference.e-government.gv.at/namespace/persondata/de/20040201#">
+ <soapenv:Body>
+ <base:Response xmlns:ns10="http://bmi.gv.at/namespace/zmr-su/gis/20070725#" xmlns:ns11="http://egov.gv.at/pvp1.xsd" xmlns:ns12="http://schemas.xmlsoap.org/ws/2002/04/secext" xmlns:ns7="http://bmi.gv.at/namespace/zmr-su/lmr/20050401#" xmlns:ns8="http://www.w3.org/2000/09/xmldsig#" xmlns:ns9="http://bmi.gv.at/namespace/zmr-su/ernp/20050901#">
+ <base:WorkflowInfoServer>
+ <base:ProzessName>GP_Mindestsicherung</base:ProzessName>
+ <base:ProzessAnzeigeName>Mindestsicherung</base:ProzessAnzeigeName>
+ <base:ProzessInstanzID>786700000003033</base:ProzessInstanzID>
+ <base:SequenzID>0</base:SequenzID>
+ </base:WorkflowInfoServer>
+ <base:ServerInfo>
+ <base:GeneriertVon>ZMR-Server Version: 0.0</base:GeneriertVon>
+ <base:GeneriertAm>2021-05-27T11:10:51.129</base:GeneriertAm>
+ <base:ServerTransaktionNr>8581910000014163</base:ServerTransaktionNr>
+ </base:ServerInfo>
+ <zmr:AdresssucheResponse>
+ <zmr:AdresssucheAnfrage>
+ <zmr:AdresssucheInfo>
+ <zmr:Suchart>ADRESSSUCHE</zmr:Suchart>
+ </zmr:AdresssucheInfo>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Paltramplatz</Strassenname>
+ <Abgabestelle>false</Abgabestelle>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>903556</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>false</base:GBDUntteil>
+ </zmr:Adressdaten>
+ </zmr:AdresssucheAnfrage>
+ <base:Message>
+ <base:Number>30115</base:Number>
+ <base:Text>Adresssuche durchgefhrt, mehrere Treffer zur Auswahl.</base:Text>
+ </base:Message>
+ <zmr:Adresssuchergebnis>
+ <zmr:Detailgrad>Orientierungsnummer</zmr:Detailgrad>
+ <base:GefundeneSaetze>10</base:GefundeneSaetze>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Postleitzahl>1100</Postleitzahl>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Paltramplatz</Strassenname>
+ <Orientierungsnummer>1</Orientierungsnummer>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag>
+ <Adresscode>6823056</Adresscode>
+ </AdressRegisterEintrag>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressstatus>HXX1XXWXX</base:Adressstatus>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>903556</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>true</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Postleitzahl>1100</Postleitzahl>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Paltramplatz</Strassenname>
+ <Orientierungsnummer>2</Orientierungsnummer>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag>
+ <Adresscode>6823057</Adresscode>
+ </AdressRegisterEintrag>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressstatus>HXX1XXWXX</base:Adressstatus>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>903556</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>true</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Postleitzahl>1100</Postleitzahl>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Paltramplatz</Strassenname>
+ <Orientierungsnummer>3</Orientierungsnummer>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag>
+ <Adresscode>6823058</Adresscode>
+ </AdressRegisterEintrag>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressstatus>HXX1XXWXX</base:Adressstatus>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>903556</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>true</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Postleitzahl>1100</Postleitzahl>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Paltramplatz</Strassenname>
+ <Orientierungsnummer>4</Orientierungsnummer>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag>
+ <Adresscode>6823059</Adresscode>
+ </AdressRegisterEintrag>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressstatus>HXX1XXWXX</base:Adressstatus>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>903556</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>true</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Postleitzahl>1100</Postleitzahl>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Paltramplatz</Strassenname>
+ <Orientierungsnummer>5-6</Orientierungsnummer>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag>
+ <Adresscode>6823060</Adresscode>
+ </AdressRegisterEintrag>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressstatus>HXX1XXWXX</base:Adressstatus>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>903556</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>true</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Postleitzahl>1100</Postleitzahl>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Paltramplatz</Strassenname>
+ <Orientierungsnummer>7</Orientierungsnummer>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag>
+ <Adresscode>6823061</Adresscode>
+ </AdressRegisterEintrag>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressstatus>HXX1XXWXX</base:Adressstatus>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>903556</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>I</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>true</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Postleitzahl>1100</Postleitzahl>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Paltramplatz</Strassenname>
+ <Orientierungsnummer>8</Orientierungsnummer>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag>
+ <Adresscode>6823062</Adresscode>
+ </AdressRegisterEintrag>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressstatus>HXX1XXWXX</base:Adressstatus>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>903556</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>true</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Postleitzahl>1100</Postleitzahl>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Paltramplatz</Strassenname>
+ <Orientierungsnummer>9</Orientierungsnummer>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag>
+ <Adresscode>6823063</Adresscode>
+ </AdressRegisterEintrag>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressstatus>HXX1XXWXX</base:Adressstatus>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>903556</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>I</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>true</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Postleitzahl>1100</Postleitzahl>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Paltramplatz</Strassenname>
+ <Orientierungsnummer>10</Orientierungsnummer>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag>
+ <Adresscode>6823064</Adresscode>
+ </AdressRegisterEintrag>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressstatus>HXX1XXWXX</base:Adressstatus>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>903556</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>H</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>true</base:GBDUntteil>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Staatscode>AUT</Staatscode>
+ <Staatsname>sterreich</Staatsname>
+ <Postleitzahl>1100</Postleitzahl>
+ <Gemeinde>Wien</Gemeinde>
+ <Gemeindekennziffer>90001</Gemeindekennziffer>
+ <Ortschaft>Wien,Favoriten</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Paltramplatz</Strassenname>
+ <Orientierungsnummer>11</Orientierungsnummer>
+ <Abgabestelle>false</Abgabestelle>
+ <AdressRegisterEintrag>
+ <Adresscode>6823065</Adresscode>
+ </AdressRegisterEintrag>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:Adressstatus>HXX1XXWXX</base:Adressstatus>
+ <base:Adressschluessel>
+ <base:OKZ>17232</base:OKZ>
+ <base:SKZ>903556</base:SKZ>
+ </base:Adressschluessel>
+ <base:HauptIdent>I</base:HauptIdent>
+ <base:NameZuteil>false</base:NameZuteil>
+ <base:GBDUntteil>true</base:GBDUntteil>
+ </zmr:Adressdaten>
+ </zmr:Adresssuchergebnis>
+ </zmr:AdresssucheResponse>
+ </base:Response>
+ </soapenv:Body>
+</soapenv:Envelope>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/wsdl/Messages.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/wsdl/Messages.xsd
new file mode 100644
index 00000000..03b711f1
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/wsdl/Messages.xsd
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: Messages.xsd
+Zweck: Definiert die Message-Datentypen fuer Services Request und Response (siehe Service.wsdl)
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2010-09-29 teo: Schnittstellen-Liste aktualisiert
+2005-05-24 tsch: BPKPruefung hinzugefuegt
+2005-02-02 tsch: QKZBearbeiten, QKZAuswertung hinzugefuegt
+2005-01-14 tsch: Aviso aktivieren entfernt, Gleichstzungtabelle Warten hinzugefuegt
+2004-11-26 tsch: Adoption, Steuerfahndung, Aviso freischalten/aktivieren hinzugefuegt
+2004-11-22 tsch: Gerichtskommissaerabfrage hinzugefuegt
+2004-09-28 tsch: Wehrfplichtigenanfrage, ablaufende Auskunfssperren-Suche hinzugefuegt
+2004-09-27 tsch: Storno/Korrektur hinzugefuegt
+2004-09-09 tsch: SZR-Vorgaenge sowie Person trennen/zusammenfuehren hinzugefuegt
+2004-07-30 tsch: Erstellung
+-->
+
+<xsd:schema targetNamespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:zmr="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#" schemaLocation="../xsd/zmr/ZMRProxy.xsd"/>
+
+
+ <xsd:complexType name="RequestType">
+ <xsd:sequence>
+ <xsd:element ref="base:WorkflowInfoClient"/>
+ <xsd:element ref="base:ClientInfo"/>
+ <xsd:choice>
+ <xsd:element ref="zmr:AdresssucheRequest"/>
+ </xsd:choice>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="ResponseType">
+ <xsd:sequence>
+ <xsd:element ref="base:WorkflowInfoServer"/>
+ <xsd:element ref="base:ServerInfo"/>
+ <xsd:choice>
+ <xsd:element ref="zmr:AdresssucheResponse"/>
+ </xsd:choice>
+ </xsd:sequence>
+ </xsd:complexType>
+
+</xsd:schema>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/wsdl/Service.wsdl b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/wsdl/Service.wsdl
new file mode 100644
index 00000000..3dbeabc7
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/wsdl/Service.wsdl
@@ -0,0 +1,62 @@
+<definitions xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:wsse="http://schemas.xmlsoap.org/ws/2002/04/secext"
+ xmlns="http://schemas.xmlsoap.org/wsdl/"
+ targetNamespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" name="Service">
+ <types>
+ <xsd:schema xmlns="http://bmi.gv.at/namespace/zmr-su/base/20040201#" targetNamespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#">
+ <xsd:import namespace="http://schemas.xmlsoap.org/ws/2002/04/secext" schemaLocation="secext.xsd"/>
+ <xsd:include schemaLocation="Messages.xsd"/>
+ <xsd:element name="Request" type="RequestType"/>
+ <xsd:element name="Response" type="ResponseType"/>
+ <xsd:element name="ServiceFault">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="ErrorCode"/>
+ <xsd:element ref="ErrorMessage"/>
+ <xsd:element ref="ServerTransaktionNr"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:schema>
+ </types>
+ <message name="ServiceRequest">
+ <part name="in" element="base:Request"/>
+ <part name="WSSEHeader" element="wsse:Security"/>
+ </message>
+ <message name="ServiceResponse">
+ <part name="out" element="base:Response"/>
+ </message>
+ <message name="ServiceFault">
+ <part name="servicefault" element="base:ServiceFault"/>
+ </message>
+ <portType name="ServicePort">
+ <operation name="service">
+ <input message="base:ServiceRequest"/>
+ <output message="base:ServiceResponse"/>
+ <fault name="servicefault" message="base:ServiceFault"/>
+ </operation>
+ </portType>
+ <binding name="ServiceBinding" type="base:ServicePort">
+ <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
+ <operation name="service">
+ <soap:operation style="document"/>
+ <input>
+ <soap:header message="base:ServiceRequest" part="WSSEHeader" use="literal"/>
+ <soap:body use="literal" parts="in"/>
+ </input>
+ <output>
+ <soap:body use="literal"/>
+ </output>
+ <fault name="servicefault">
+ <soap:fault name="servicefault" use="literal"/>
+ </fault>
+ </operation>
+ </binding>
+ <service name="Service">
+ <port name="Service" binding="base:ServiceBinding">
+ <soap:address location="https://pvawp.bmi.gv.at/bmi.gv.at/soap/zmr/soap/ZMRService"/>
+ </port>
+ </service>
+</definitions>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/wsdl/secext.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/wsdl/secext.xsd
new file mode 100644
index 00000000..1005b12a
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/wsdl/secext.xsd
@@ -0,0 +1,150 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Legal Disclaimer
+
+The presentation, distribution or other dissemination of the information
+contained in this specification is not a license, either expressly or impliedly,
+to any intellectual property owned or controlled by IBM or Microsoft and\or any other
+third party. IBM and Microsoft and\or any other third party may have patents, patent
+applications, trademarks, copyrights, or other intellectual property rights
+covering subject matter in this document. The furnishing of this document
+does not give you any license to IBM's and Microsoft's or any other third party's patents,
+trademarks, copyrights, or other intellectual property.
+
+This specification and the information contained herein is provided on an "AS IS"
+ basis and to the maximum extent permitted by applicable law, IBM and Microsoft provides
+the document AS IS AND WITH ALL FAULTS, and hereby disclaims all other warranties
+and conditions, either express, implied or statutory, including, but not limited
+to, any (if any) implied warranties, duties or conditions of merchantability, of
+fitness for a particular purpose, of accuracy or completeness of responses, of
+results, of workmanlike effort, of lack of viruses, and of lack of negligence,
+all with regard to the document. ALSO, THERE IS NO WARRANTY OR CONDITION OF
+TITLE, QUIET ENJOYMENT, QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR
+NON-INFRINGEMENT OF ANY INTELLECTUAL PROPERTY RIGHTS WITH REGARD TO THE DOCUMENT.
+
+IN NO EVENT WILL IBM or MICROSOFT BE LIABLE TO ANY OTHER PARTY FOR THE COST OF PROCURING
+SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS OF USE, LOSS OF DATA, OR ANY
+INCIDENTAL, CONSEQUENTIAL, DIRECT, INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER
+CONTRACT, TORT, WARRANTY, OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY
+OTHER AGREEMENT RELATING TO THIS DOCUMENT, WHETHER OR NOT SUCH PARTY HAD ADVANCE
+NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+
+Copyright Notice
+
+Copyright 2001, 2002 IBM Corporation and Microsoft Corporation. All rights reserved.
+-->
+<xsd:schema targetNamespace="http://schemas.xmlsoap.org/ws/2002/04/secext" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsse="http://schemas.xmlsoap.org/ws/2002/04/secext" xmlns="http://schemas.xmlsoap.org/ws/2002/04/secext" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" elementFormDefault="qualified" attributeFormDefault="unqualified" version="0.2">
+ <xsd:element name="Security">
+ <xsd:annotation>
+ <xsd:documentation>
+ This element defines header block to use for security-relevant data directed at a specific SOAP actor.
+ </xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:any processContents="lax" minOccurs="0" maxOccurs="unbounded">
+ <xsd:annotation>
+ <xsd:documentation>
+ The use of "any" is to allow extensibility and different forms of security data.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:any>
+ </xsd:sequence>
+ <xsd:anyAttribute processContents="lax"/>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="UsernameToken">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="Username"/>
+ <xsd:element ref="Password" minOccurs="0"/>
+ </xsd:sequence>
+ <xsd:attribute name="Id" type="xsd:ID"/>
+ <xsd:anyAttribute namespace="##other"/>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="Username">
+ <xsd:complexType>
+ <xsd:simpleContent>
+ <xsd:extension base="xsd:string">
+ <xsd:anyAttribute namespace="##other"/>
+ </xsd:extension>
+ </xsd:simpleContent>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="Password">
+ <xsd:complexType>
+ <xsd:simpleContent>
+ <xsd:extension base="xsd:string">
+ <xsd:attribute name="Type" type="xsd:QName"/>
+ <xsd:anyAttribute namespace="##other"/>
+ </xsd:extension>
+ </xsd:simpleContent>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="BinarySecurityToken">
+ <xsd:annotation>
+ <xsd:documentation>A security token that is encoded in binary</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:simpleContent>
+ <xsd:extension base="xsd:string">
+ <xsd:attribute name="Id" type="xsd:ID"/>
+ <xsd:attribute name="ValueType" type="xsd:QName"/>
+ <xsd:attribute name="EncodingType" type="xsd:QName"/>
+ <xsd:anyAttribute namespace="##other" processContents="strict"/>
+ </xsd:extension>
+ </xsd:simpleContent>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="SecurityTokenReference">
+ <xsd:annotation>
+ <xsd:documentation>
+ This element is used reference a security token.
+ </xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:choice minOccurs="0" maxOccurs="unbounded">
+ <xsd:element ref="Reference"/>
+ <xsd:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:choice>
+ <xsd:attribute name="Id" type="xsd:ID"/>
+ <xsd:anyAttribute namespace="##other" processContents="lax"/>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="Reference">
+ <xsd:complexType>
+ <xsd:attribute name="URI" type="xsd:anyURI"/>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:simpleType name="PasswordTypeEnum">
+ <xsd:restriction base="xsd:QName">
+ <xsd:enumeration value="wsse:PasswordText"/>
+ <xsd:enumeration value="wsse:PasswordDigest"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="ValueTypeEnum">
+ <xsd:restriction base="xsd:QName">
+ <xsd:enumeration value="wsse:X509v3"/>
+ <xsd:enumeration value="wsse:Kerberosv5TGT"/>
+ <xsd:enumeration value="wsse:Kerberosv5ST"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="EncodingTypeEnum">
+ <xsd:restriction base="xsd:QName">
+ <xsd:enumeration value="wsse:Base64Binary"/>
+ <xsd:enumeration value="wsse:HexBinary"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="FaultcodeEnum">
+ <xsd:restriction base="xsd:QName">
+ <xsd:enumeration value="wsse:UnsupportedSecurityToken"/>
+ <xsd:enumeration value="wsse:UnsupportedAlgorithm"/>
+ <xsd:enumeration value="wsse:InvalidSecurity"/>
+ <xsd:enumeration value="wsse:InvalidSecurityToken"/>
+ <xsd:enumeration value="wsse:FailedAuthentication"/>
+ <xsd:enumeration value="wsse:FailedCheck"/>
+ <xsd:enumeration value="wsse:SecurityTokenUnavailable"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/wsdl/secext_pvp.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/wsdl/secext_pvp.xsd
new file mode 100644
index 00000000..24896b99
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/wsdl/secext_pvp.xsd
@@ -0,0 +1,152 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Legal Disclaimer
+
+The presentation, distribution or other dissemination of the information
+contained in this specification is not a license, either expressly or impliedly,
+to any intellectual property owned or controlled by IBM or Microsoft and\or any other
+third party. IBM and Microsoft and\or any other third party may have patents, patent
+applications, trademarks, copyrights, or other intellectual property rights
+covering subject matter in this document. The furnishing of this document
+does not give you any license to IBM's and Microsoft's or any other third party's patents,
+trademarks, copyrights, or other intellectual property.
+
+This specification and the information contained herein is provided on an "AS IS"
+ basis and to the maximum extent permitted by applicable law, IBM and Microsoft provides
+the document AS IS AND WITH ALL FAULTS, and hereby disclaims all other warranties
+and conditions, either express, implied or statutory, including, but not limited
+to, any (if any) implied warranties, duties or conditions of merchantability, of
+fitness for a particular purpose, of accuracy or completeness of responses, of
+results, of workmanlike effort, of lack of viruses, and of lack of negligence,
+all with regard to the document. ALSO, THERE IS NO WARRANTY OR CONDITION OF
+TITLE, QUIET ENJOYMENT, QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR
+NON-INFRINGEMENT OF ANY INTELLECTUAL PROPERTY RIGHTS WITH REGARD TO THE DOCUMENT.
+
+IN NO EVENT WILL IBM or MICROSOFT BE LIABLE TO ANY OTHER PARTY FOR THE COST OF PROCURING
+SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS OF USE, LOSS OF DATA, OR ANY
+INCIDENTAL, CONSEQUENTIAL, DIRECT, INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER
+CONTRACT, TORT, WARRANTY, OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY
+OTHER AGREEMENT RELATING TO THIS DOCUMENT, WHETHER OR NOT SUCH PARTY HAD ADVANCE
+NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+
+Copyright Notice
+
+Copyright 2001, 2002 IBM Corporation and Microsoft Corporation. All rights reserved.
+-->
+<xsd:schema targetNamespace="http://schemas.xmlsoap.org/ws/2002/04/secext" xmlns:pvp="http://egov.gv.at/pvp1.xsd" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsse="http://schemas.xmlsoap.org/ws/2002/04/secext" xmlns="http://schemas.xmlsoap.org/ws/2002/04/secext" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" elementFormDefault="qualified" attributeFormDefault="unqualified" version="0.2">
+ <xsd:import namespace="http://egov.gv.at/pvp1.xsd" schemaLocation="../xsd/eingebunden/pvp1.xsd"/>
+ <xsd:element name="Security">
+ <xsd:annotation>
+ <xsd:documentation>
+ This element defines header block to use for security-relevant data directed at a specific SOAP actor.
+ </xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="pvp:pvpToken" minOccurs="0"/>
+ <xsd:any processContents="lax" minOccurs="0" maxOccurs="unbounded">
+ <xsd:annotation>
+ <xsd:documentation>
+ The use of "any" is to allow extensibility and different forms of security data.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:any>
+ </xsd:sequence>
+ <xsd:anyAttribute processContents="lax"/>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="UsernameToken">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="Username"/>
+ <xsd:element ref="Password" minOccurs="0"/>
+ </xsd:sequence>
+ <xsd:attribute name="Id" type="xsd:ID"/>
+ <xsd:anyAttribute namespace="##other"/>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="Username">
+ <xsd:complexType>
+ <xsd:simpleContent>
+ <xsd:extension base="xsd:string">
+ <xsd:anyAttribute namespace="##other"/>
+ </xsd:extension>
+ </xsd:simpleContent>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="Password">
+ <xsd:complexType>
+ <xsd:simpleContent>
+ <xsd:extension base="xsd:string">
+ <xsd:attribute name="Type" type="xsd:QName"/>
+ <xsd:anyAttribute namespace="##other"/>
+ </xsd:extension>
+ </xsd:simpleContent>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="BinarySecurityToken">
+ <xsd:annotation>
+ <xsd:documentation>A security token that is encoded in binary</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:simpleContent>
+ <xsd:extension base="xsd:string">
+ <xsd:attribute name="Id" type="xsd:ID"/>
+ <xsd:attribute name="ValueType" type="xsd:QName"/>
+ <xsd:attribute name="EncodingType" type="xsd:QName"/>
+ <xsd:anyAttribute namespace="##other" processContents="strict"/>
+ </xsd:extension>
+ </xsd:simpleContent>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="SecurityTokenReference">
+ <xsd:annotation>
+ <xsd:documentation>
+ This element is used reference a security token.
+ </xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:choice minOccurs="0" maxOccurs="unbounded">
+ <xsd:element ref="Reference"/>
+ <xsd:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:choice>
+ <xsd:attribute name="Id" type="xsd:ID"/>
+ <xsd:anyAttribute namespace="##other" processContents="lax"/>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="Reference">
+ <xsd:complexType>
+ <xsd:attribute name="URI" type="xsd:anyURI"/>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:simpleType name="PasswordTypeEnum">
+ <xsd:restriction base="xsd:QName">
+ <xsd:enumeration value="wsse:PasswordText"/>
+ <xsd:enumeration value="wsse:PasswordDigest"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="ValueTypeEnum">
+ <xsd:restriction base="xsd:QName">
+ <xsd:enumeration value="wsse:X509v3"/>
+ <xsd:enumeration value="wsse:Kerberosv5TGT"/>
+ <xsd:enumeration value="wsse:Kerberosv5ST"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="EncodingTypeEnum">
+ <xsd:restriction base="xsd:QName">
+ <xsd:enumeration value="wsse:Base64Binary"/>
+ <xsd:enumeration value="wsse:HexBinary"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="FaultcodeEnum">
+ <xsd:restriction base="xsd:QName">
+ <xsd:enumeration value="wsse:UnsupportedSecurityToken"/>
+ <xsd:enumeration value="wsse:UnsupportedAlgorithm"/>
+ <xsd:enumeration value="wsse:InvalidSecurity"/>
+ <xsd:enumeration value="wsse:InvalidSecurityToken"/>
+ <xsd:enumeration value="wsse:FailedAuthentication"/>
+ <xsd:enumeration value="wsse:FailedCheck"/>
+ <xsd:enumeration value="wsse:SecurityTokenUnavailable"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/xsd/allgemein/Messages.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/xsd/allgemein/Messages.xsd
new file mode 100644
index 00000000..47dcda53
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/xsd/allgemein/Messages.xsd
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: Messages.xsd
+Zweck: Definiert die Message-Datentypen fuer Services Request und Response (siehe Service.wsdl)
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2012-08-09 xfu: +BasTabelleAbfrage.xsd
+2004-02-18 tsch: Erstellung
+-->
+
+<xsd:schema targetNamespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:include schemaLocation="../eingebunden/InfoTechnisch.xsd"/>
+ <xsd:include schemaLocation="../eingebunden/Workflow.xsd"/>
+ <xsd:include schemaLocation="Benutzereinstellungen.xsd"/>
+ <xsd:include schemaLocation="Organisationseinstellungen.xsd"/>
+ <xsd:include schemaLocation="GeschaeftsprozesseAuflisten.xsd"/>
+ <xsd:include schemaLocation="Auswertungen.xsd"/>
+ <xsd:include schemaLocation="BasTabelleAbfrage.xsd"/>
+
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/xsd/allgemein/Service.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/xsd/allgemein/Service.xsd
new file mode 100644
index 00000000..81cd3e80
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/xsd/allgemein/Service.xsd
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Name: Service.xsd
+Zweck: Definiert die Serviceroot - Elemente base:Request und base:Response global
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2008-07-25 teo: +PDFResponse (optional! ZMR setzt dieses Feld bisher nicht!)
+2004-08-19 tsch: Erstellung
+-->
+
+<xsd:schema xmlns="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:include schemaLocation="Messages.xsd"/>
+ <xsd:include schemaLocation="../eingebunden/EingebundenProxy.xsd"/>
+
+ <xsd:element name="Request">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="WorkflowInfoClient"/>
+ <xsd:element ref="ClientInfo"/>
+ <xsd:any processContents="lax"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="Response">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="WorkflowInfoServer"/>
+ <xsd:element name="PDFResponse" type="xsd:base64Binary" minOccurs="0"/>
+ <xsd:element ref="ServerInfo"/>
+ <xsd:any processContents="lax"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/xsd/eingebunden/AbfrageMuster.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/xsd/eingebunden/AbfrageMuster.xsd
new file mode 100644
index 00000000..9430ade8
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/xsd/eingebunden/AbfrageMuster.xsd
@@ -0,0 +1,140 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: AbfrageParameter.xsd
+Zweck: Definiert Datentypen für generische Suchabfragen mit simplen Operatoren
+Author(s): Tschurtschenthaler Thomas (basierend auf suchmuster.xsd von DI Heinz Töfferl - Comm-Unity Software Development GmbH & Co KG)
+Aenderungshistorie:
+2005-03-30 tsch: Erstellung
+-->
+<xsd:schema xmlns="http://bmi.gv.at/namespace/zmr-su/base/20040201#" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+ <xsd:element name="AbfrageMuster">
+ <xsd:annotation>
+ <xsd:documentation>Daten zu einem Suchmuster (Ausdruck)</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:choice>
+ <xsd:sequence>
+ <xsd:element ref="FeldAbfrage"/>
+ <xsd:element ref="SubFeldAbfrage" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:sequence>
+ <xsd:annotation>
+ <xsd:documentation>
+ Dient zur Klammerung von Suchmuster-Ausdrücken.
+ Muss erst dann unterstützt werden, wenn eine Klammerung nötig wird.
+ </xsd:documentation>
+ </xsd:annotation>
+ <xsd:element ref="AbfrageMuster"/>
+ <xsd:element ref="SubAbfrageMuster" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:choice>
+ <xsd:attribute name="AbfrageName" type="xsd:string" use="optional"/>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="FeldAbfrage">
+ <xsd:annotation>
+ <xsd:documentation>Eine Sucheinschränkung (= Einschränkung für ein Feld)</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="Feld" type="xsd:string"/>
+ <xsd:element ref="Relation"/>
+ <xsd:element name="Wert" type="xsd:string"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="Operation" block="restriction" default="UND">
+ <xsd:annotation>
+ <xsd:documentation>Verknüpfung mit der nächsten Zeile (Default: AND)</xsd:documentation>
+ </xsd:annotation>
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:NMTOKEN">
+ <xsd:enumeration value="UND"/>
+ <xsd:enumeration value="ODER"/>
+ <xsd:enumeration value="ODER_SELF"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="Relation">
+ <xsd:annotation>
+ <xsd:documentation>Mögliche Vergleichsoperatoren.</xsd:documentation>
+ </xsd:annotation>
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="IST"/>
+ <xsd:enumeration value="IST NICHT"/>
+ <xsd:enumeration value="BEGINNT MIT"/>
+ <xsd:enumeration value="BEGINNT NICHT MIT"/>
+ <xsd:enumeration value="ENDET MIT"/>
+ <xsd:enumeration value="ENDET NICHT MIT"/>
+ <xsd:enumeration value="GRÖSSER ALS"/>
+ <xsd:enumeration value="GRÖSSER GLEICH"/>
+ <xsd:enumeration value="KLEINER ALS"/>
+ <xsd:enumeration value="KLEINER GLEICH"/>
+ <xsd:enumeration value="ENTHÄLT"/>
+ <xsd:enumeration value="ENTHÄLT NICHT"/>
+ <xsd:enumeration value="IST LEER"/>
+ <xsd:enumeration value="IST NICHT LEER"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="AbfrageSortierung">
+ <xsd:annotation>
+ <xsd:documentation>Daten zur Sortierung einer Abfrage</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="SortSchluessel" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="SortSchluessel">
+ <xsd:annotation>
+ <xsd:documentation>Sortierungsschluessel einer Abfrage</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="Feld" type="xsd:string"/>
+ <xsd:element name="Absteigend" type="xsd:boolean"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="SubFeldAbfrage">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="Operation"/>
+ <xsd:element ref="FeldAbfrage"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="SubAbfrageMuster">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="Operation"/>
+ <xsd:element ref="AbfrageMuster"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="AbfrageParameter">
+ <xsd:annotation>
+ <xsd:documentation>Daten zur Parametrisierung einer Abfrage</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="Parameter" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="Parameter">
+ <xsd:annotation>
+ <xsd:documentation>Ein einzelner Abfrageparameter</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="Name" type="xsd:string"/>
+ <xsd:element name="Wert" type="xsd:string"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+</xsd:schema>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/xsd/eingebunden/AkademischerGradFelder.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/xsd/eingebunden/AkademischerGradFelder.xsd
new file mode 100644
index 00000000..fc910841
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/xsd/eingebunden/AkademischerGradFelder.xsd
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: AkademischerGradFelder.xsd
+Zweck: Definiert allgemein nutzbare Felder für akademische Grade
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2004-12-15 tsch: AkadGradReihung - Wertebereich erweitert
+2004-06-20 tsch: Erstellung
+-->
+
+<xsd:schema xmlns="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ targetNamespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:include schemaLocation="SimpleTypes.xsd"/>
+
+ <xsd:element name="AkadGradStellung">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="VOR"/>
+ <xsd:enumeration value="NACH"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="AkadGradReihung">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="0"/>
+ <xsd:enumeration value="1"/>
+ <xsd:enumeration value="2"/>
+ <xsd:enumeration value="2/3"/>
+ <xsd:enumeration value="3"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="AkadGradLang">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="90"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="AkadGradKurz">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="30"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="AkadGradKey" type="IDType"/>
+</xsd:schema>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/xsd/eingebunden/Blaettern.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/xsd/eingebunden/Blaettern.xsd
new file mode 100644
index 00000000..5b556802
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/xsd/eingebunden/Blaettern.xsd
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: Blaettern.xsd
+Zweck: Definiert Request-Typen für das allgemeine Blättern; Die Response hängt vom Workflow-Vorgang ab (Personensuchergebnis, Avisosuchergebnis, ...)
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2006-04-19 toef: Richtungswerte 'Anfang' und 'Ende' hinzugefügt
+2005-09-20 tsch: Richtungswert 'Aktualisieren' hinzugefügt
+2004-06-14 tsch: Organisation nach ClientInfo verschoben
+2004-04-07 tsch: Erstellung
+-->
+
+<xsd:schema xmlns="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ targetNamespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+ <xsd:include schemaLocation="InfoFachlich.xsd"/>
+
+ <xsd:element name="BlaetternRequest">
+ <xsd:annotation>
+ <xsd:documentation>
+ Für Suchvorgänge, in deren Ergebnisliste geblättert werden kann, stellt dieser Request
+ eine generische Schnittstelle zum Blättern dar. Er wird mit demselben Vorgang-Namen in der
+ Workflowschnittstelle geschickt, wie der ursprüngliche Suche-Request. Als Ergebnis wird
+ das Suchergebnis des ensprechenden Suchvorgangs analog zur rsprünglichen Suche-Response geliefert.
+ </xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="BlaetternInfo"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="BlaetternInfo">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="ErgebnislisteName" type="xsd:string" minOccurs="0"/>
+ <xsd:element name="Richtung">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="Vor"/>
+ <xsd:enumeration value="Zurueck"/>
+ <xsd:enumeration value="Aktualisieren"/>
+ <xsd:enumeration value="Anfang"/>
+ <xsd:enumeration value="Ende"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element ref="AnzahlSaetze"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+</xsd:schema>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/xsd/eingebunden/DokumentFelder.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/xsd/eingebunden/DokumentFelder.xsd
new file mode 100644
index 00000000..270cb52a
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/xsd/eingebunden/DokumentFelder.xsd
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: DokumentFelder.xsd
+Zweck: Definiert allgemein nutzbare Felder für Dokumente/Reisedokumente
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2005-09-26 tsch: DokumentName hinzugefügt
+2004-09-29 tsch: Felder für Standard-Dokumente hinzugefügt
+2004-06-24 tsch: AusstellDatum: Timestamp wird xsd:date
+2004-01-22 tsch: Erstellung
+-->
+
+<xsd:schema xmlns="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ targetNamespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:include schemaLocation="SimpleTypes.xsd"/>
+
+ <xsd:element name="DokumentArt">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="55"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="DokumentNummer">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="256"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="EintragungsNummer">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="45"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="DokumentName">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="54"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="AusstellDatum" type="xsd:date"/>
+ <xsd:element name="AblaufDatum" type="xsd:date"/>
+ <xsd:element name="SterbeDatum" type="xsd:date"/>
+ <xsd:element name="SterbeUhrzeit" type="xsd:time"/>
+ <xsd:element name="AusstellBehoerde">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="90"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="Ausstellungsstaat" type="StaatenNameType"/>
+ <xsd:element name="DokumentGiltBis" type="TimestampType"/>
+
+</xsd:schema>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/xsd/eingebunden/EingebundenProxy.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/xsd/eingebunden/EingebundenProxy.xsd
new file mode 100644
index 00000000..450fad59
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/xsd/eingebunden/EingebundenProxy.xsd
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Name: EingebundenProxy.xsd
+Zweck: Fasst XSD-Files zusammen, die oft eingebunden werden
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2009-07-07 teo: +PersonExport
+2003-12-10 tsch: Erstellung
+-->
+
+<xsd:schema xmlns="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:include schemaLocation="InfoFachlich.xsd"/>
+ <xsd:include schemaLocation="InfoTechnisch.xsd"/>
+ <xsd:include schemaLocation="MeldungFelder.xsd"/>
+ <xsd:include schemaLocation="PersonFelder.xsd"/>
+ <xsd:include schemaLocation="DokumentFelder.xsd"/>
+ <xsd:include schemaLocation="Workflow.xsd"/>
+ <xsd:include schemaLocation="Blaettern.xsd"/>
+ <xsd:include schemaLocation="AkademischerGradFelder.xsd"/>
+ <xsd:include schemaLocation="AbfrageMuster.xsd"/>
+ <xsd:include schemaLocation="PersonExport.xsd"/>
+</xsd:schema>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/xsd/eingebunden/Entity.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/xsd/eingebunden/Entity.xsd
new file mode 100644
index 00000000..4ed61a4f
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/xsd/eingebunden/Entity.xsd
@@ -0,0 +1,135 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: Entity.xsd
+Zweck: Definiert allgemeine Datentypen für Entities (Person, Meldung, ...) der Register
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2012-08-09 xfu: Beginncode und -text ist optional
+2004-10-27 tsch: Behoerdenschluessel hinzugefügt
+2004-09-28 tsch: OrgBezeichnung hinzugefügt
+2004-06-21 tsch: EntityReferenz ohne LetzteAenderung
+2004-06-18 tsch: BeginnText hinzugefügt
+2004-01-22 tsch: EntityErgebnisReferenz statt Entity abstract
+2003-11-16 tsch: Erstellung
+-->
+<xsd:schema xmlns="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ targetNamespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:include schemaLocation="SimpleTypes.xsd"/>
+
+ <xsd:element name="EntityErgebnisReferenz" type="EntityErgebnisReferenzType"/>
+ <xsd:complexType name="EntityErgebnisReferenzType">
+ <xsd:annotation>
+ <xsd:documentation>Referenziert eine Entity in der Datenbank für Suchergebnisse</xsd:documentation>
+ </xsd:annotation>
+
+ <xsd:sequence>
+ <xsd:sequence>
+ <xsd:element ref="Technisch"/>
+ <xsd:group ref="ErgebnisFachlichGroup"/>
+ </xsd:sequence>
+ </xsd:sequence>
+
+ </xsd:complexType>
+
+ <xsd:element name="EntityReferenz" type="EntityReferenzType"/>
+ <xsd:complexType name="EntityReferenzType">
+ <xsd:annotation>
+ <xsd:documentation>Referenziert eine Entity in der Datenbank für Aenderungen (immer die aktuellste, das heisst jüngstes 'Von')</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="EntityID"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="Technisch">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="EntityID"/>
+ <xsd:element ref="LetzteAenderung"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:group name="ErgebnisFachlichGroup">
+ <xsd:sequence>
+ <xsd:element ref="Von"/>
+ <xsd:element ref="BeginnCode" minOccurs="0"/> <!-- Einträge in BAS.STAAT und BAS.AKADGRAD haben keinen Beginncode (werden aber in BasTabelleAbfrage.xsd abgerufen) -->
+ <xsd:element ref="BeginnText" minOccurs="0"/>
+ <xsd:element ref="BeginnFreitext" minOccurs="0"/>
+ <xsd:element ref="Bis" minOccurs="0"/>
+ <xsd:element ref="DurchgefuehrtVon"/>
+ </xsd:sequence>
+ </xsd:group>
+
+ <xsd:element name="Von" type="TimestampType"/>
+ <xsd:element name="Bis" type="TimestampType"/>
+ <xsd:element name="BeginnCode" type="GrundCodeType"/>
+ <xsd:element name="BeginnText" type="GrundTextType"/>
+ <xsd:element name="BeginnFreitext" type="GrundFreitextType"/>
+ <xsd:element name="EntityID" type="ENTITYIDType"/>
+ <xsd:element name="LetzteAenderung" type="TimestampType"/>
+ <xsd:element name="DurchgefuehrtVon" type="DurchgefuehrtVonType"/>
+ <xsd:complexType name="DurchgefuehrtVonType">
+ <xsd:sequence>
+ <xsd:element ref="Organisation"/>
+ <xsd:element ref="Benutzer" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="Organisation">
+ <xsd:complexType>
+ <xsd:annotation>
+ <xsd:documentation>
+ Die derzeit bekannten Organisationen sind strikt definiert (BehoerdenNr, GemeindeNr, KundenNr);
+ neue, noch nicht definierte Organiationen, können mittels eines (Orgtyp, OrgCode)-Paares übermittelt werden.
+ </xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:choice>
+ <xsd:choice>
+ <xsd:element ref="BehoerdenNr"/>
+ <xsd:element ref="GemeindeNr"/>
+ <xsd:element ref="KundenNr"/>
+ <xsd:element ref="Behoerdenschluessel"/>
+ </xsd:choice>
+ <xsd:sequence>
+ <xsd:element ref="OrgTyp"/>
+ <xsd:element ref="OrgCode"/>
+ </xsd:sequence>
+ </xsd:choice>
+ <xsd:element ref="OrgBezeichnung" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="BehoerdenNr" type="BehoerdenNrType"/>
+ <xsd:element name="Behoerdenschluessel" type="BehoerdenschluesselType"/>
+ <xsd:element name="GemeindeNr" type="GemeindeNrType"/>
+ <xsd:element name="KundenNr" type="KundenNrType"/>
+ <xsd:element name="OrgTyp" type="OrgTypType"/>
+ <xsd:element name="OrgCode" type="OrgCodeType"/>
+ <xsd:element name="Benutzer" type="BenutzerType"/>
+ <xsd:element name="OrgBezeichnung">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="80"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="BehoerdenBezeichnung">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="80"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+</xsd:schema>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/xsd/eingebunden/InfoFachlich.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/xsd/eingebunden/InfoFachlich.xsd
new file mode 100644
index 00000000..9bf8ceb0
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/xsd/eingebunden/InfoFachlich.xsd
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: InfoFachlich.xsd
+Zweck: Definiert Typen für allgemeine fachliche Informationen der Usecases
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2006-08-08 tsch: Feld EingeschraenkteHistorie hinzugefügt
+2004-09-09 tsch: Register hinzugefügt
+2004-07-07 tsch: InfoFachlichType.Von optional, InfoFachlichType.GrundCode Mussfeld
+2004-06-22 tsch: SaetzeVon, SaetzeBis hinzugefügt
+2004-06-18 tsch: ErgebnissatzInfo, Beendigung hinzugefügt
+2004-04-17 tsch: Organisation entfernt
+2004-04-13 tsch: InfoFachlichType - GrundCode optional
+2003-11-16 tsch: Erstellung
+-->
+
+<xsd:schema xmlns="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ targetNamespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:cio="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+ <xsd:include schemaLocation="SimpleTypes.xsd"/>
+ <xsd:include schemaLocation="Entity.xsd"/>
+ <xsd:import namespace="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" schemaLocation="PersonDataZMR.xsd"/>
+
+ <xsd:element name="ErgebnissatzInfo" type ="ErgebnissatzInfoType"/>
+ <xsd:complexType name="ErgebnissatzInfoType">
+ <xsd:sequence>
+ <xsd:annotation>
+ <xsd:documentation>
+ Letze-Änderung-Timestamp des Gesamt-Satzes (Jüngster Timestamp aller Entities im Satz),
+ Muss bei einem Änderungsvorgang als Letzte-Änderung-Timestamp geschickt werden.
+ </xsd:documentation>
+ </xsd:annotation>
+ <xsd:element ref="LetzteAenderung"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="Message">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="Number"/>
+ <xsd:element ref="Text"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="Number" type="IntegerType"/>
+ <xsd:element name="Text">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="250"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:complexType name="InfoFachlichType" abstract="true">
+ <xsd:annotation>
+ <xsd:documentation>allgemeine fachliche Informationen</xsd:documentation>
+ </xsd:annotation>
+
+ <xsd:sequence>
+ <xsd:element ref="Von" minOccurs="0"/>
+ <xsd:element name="GrundCode" type="GrundCodeType"/>
+ <xsd:element ref="GrundFreitext" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="BPKPersonInfo" type="BPKPersonInfoType"/>
+ <xsd:complexType name="BPKPersonInfoType">
+ <xsd:annotation>
+ <xsd:documentation>Bereichspezifische Bürgerkarten-Information einer Person</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="cio:NatuerlichePerson"/>
+ <xsd:element ref="Bereichskennung"/>
+ <xsd:element ref="BPK"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="Beendigung" type="xsd:boolean"/>
+ <xsd:element name="Bezugsfeld" type="BezugsfeldType"/>
+
+ <xsd:element name="Stichtag" type="TimestampType"/>
+ <xsd:element name="InclusivHistorie" type="xsd:boolean"/>
+ <xsd:element name="EingeschraenkteHistorie" type="xsd:boolean"/>
+ <xsd:element name="Formalisiert" type="xsd:boolean"/>
+ <xsd:element name="ErstellePDF" type="xsd:boolean"/>
+ <xsd:element name="InclusivAusgeblendeteSaetze" type="xsd:boolean"/>
+ <xsd:element name="InclusivNameVorErsterEhe" type="xsd:boolean"/>
+ <xsd:element name="GefundeneSaetze" type="IntegerType"/>
+ <xsd:element name="AnzahlSaetze" type="IntegerType"/>
+ <xsd:element name="SaetzeVon" type="IntegerType"/>
+ <xsd:element name="SaetzeBis" type="IntegerType"/>
+ <xsd:element name="GrundFreitext" type="GrundFreitextType"/>
+ <xsd:element name="Bereichskennung" type="xsd:string"/>
+ <xsd:element name="BPK" type="xsd:string"/>
+ <xsd:element name="Register" type="RegisterType"/>
+
+</xsd:schema>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/xsd/eingebunden/InfoTechnisch.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/xsd/eingebunden/InfoTechnisch.xsd
new file mode 100644
index 00000000..567a91f0
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/xsd/eingebunden/InfoTechnisch.xsd
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: InfoTechnisch.xsd
+Zweck: Definiert Typen für allgemeine technische Informationen der Usecases
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2004-09-09 tsch: ErrorCode, ErrorMessage hinzugefügt
+2004-06-24 tsch: UserInfo als Message definiert
+2004-05-17 tsch: Organisation, Client dazugefügt; Softwarehaus, ClientVersion entfernt
+2003-11-16 tsch: Erstellung
+-->
+
+<xsd:schema targetNamespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+ <xsd:include schemaLocation="InfoFachlich.xsd"/>
+
+ <xsd:element name="ClientInfo" type="ClientInfoType"/>
+
+ <xsd:complexType name="ClientInfoType">
+ <xsd:annotation>
+ <xsd:documentation>Technische Client-Informationen</xsd:documentation>
+ </xsd:annotation>
+
+ <xsd:sequence>
+ <xsd:element ref="Organisation"/>
+ <xsd:element ref="Client">
+ <xsd:annotation>
+ <xsd:documentation>Herstellername der Client-Software inklusive Version (Bsp.: ZMRHTMLClient V3.0)</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="Client">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="18"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+
+ <xsd:element name="ServerInfo" type="ServerInfoType"/>
+
+ <xsd:complexType name="ServerInfoType">
+ <xsd:annotation>
+ <xsd:documentation>Technische Server-Informationen</xsd:documentation>
+ </xsd:annotation>
+
+ <xsd:sequence>
+ <xsd:element ref="GeneriertVon">
+ <xsd:annotation>
+ <xsd:documentation>Applikationsname und -version</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element ref="GeneriertAm">
+ <xsd:annotation>
+ <xsd:documentation>Generierung Timestamp</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element ref="ServerTransaktionNr">
+ <xsd:annotation>
+ <xsd:documentation>Transaktionsnummer des Servers</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element ref="UserInfo" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ Enthält neue User-Information (wie z.B. Information über Wartungarbeiten am ZMR)
+ Diese Info kann dem User am Bildschirm angezeigt werden.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="GeneriertVon">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="50"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="GeneriertAm" type="TimestampType"/>
+ <xsd:element name="ErrorCode" type="xsd:string"/>
+ <xsd:element name="ErrorMessage" type="xsd:string"/>
+ <xsd:element name="ServerTransaktionNr" type="IDType"/>
+ <xsd:element name="UserInfo">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="Message"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+</xsd:schema>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/xsd/eingebunden/MeldungFelder.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/xsd/eingebunden/MeldungFelder.xsd
new file mode 100644
index 00000000..7a9feda1
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/xsd/eingebunden/MeldungFelder.xsd
@@ -0,0 +1,283 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: MeldungFelder.xsd
+Zweck: Definiert allgemein nutzbare Felder für Meldedaten
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2010-11-24 mp: +Infotext (ZMR-1513)
+2009-11-20 mp: Gebäudeeigenschaft und Nutzungsart hinzugefügt
+2006-06-26 tsch: OrientierungsnummerBis hinzugefügt
+2005-12-06 tsch: Detailfelder für GWR-Tueren hinzugefügt
+2004-12-09 tsch: OKZ und SKZ alphanumerisch
+2004-08-16 tsch: Bezirkskennung, DruckZusatztext hinzugefügt
+2004-08-02 tsch: PeriodeCode, PeriodeText, PeriodeFreitext hinzugefügt
+2004-07-30 tsch: HauptIdentadresse->HauptIdent; AdressZusatz enfernt; +OKZ; +SKZ; +Adressschluessel; +InfoMeldewesen
+2004-06-24 tsch: GBRRefkey, Postleitzahlgebiet hinzugefügt
+2004-01-27 tsch: Erstellung
+-->
+
+<xsd:schema xmlns="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ targetNamespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+ <xsd:include schemaLocation="SimpleTypes.xsd"/>
+
+
+ <xsd:element name="GemeldetVon" type="TimestampType"/>
+ <xsd:element name="GemeldetBis" type="TimestampType"/>
+
+ <xsd:element name="PeriodeCode" type="GrundCodeType"/>
+ <xsd:element name="PeriodeText" type="GrundTextType"/>
+ <xsd:element name="PeriodeFreitext" type="GrundFreitextType"/>
+
+ <xsd:element name="Unterkunftgeber">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="250"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="ADRRefkey">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="12"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="GBRRefkey">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="12"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="HauptIdent">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="H"/>
+ <xsd:enumeration value="I"/>
+ <xsd:enumeration value="B"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="OKZ">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:pattern value="[0-9;A-Z]{5}"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="SKZ">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:pattern value="[0-9;A-Z]{6}"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="Adressstatus">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="9"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="Hofname">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="50"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="StrasseZweisprachig">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="108"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="Gebaeudeunterscheidung">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="60"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="Postleitzahlgebiet">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="54"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="InfoMeldewesen">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="100"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="GBDUntteil" type="xsd:boolean"/>
+
+ <xsd:element name="NameZuteil" type="xsd:boolean"/>
+
+ <xsd:element name="Adressschluessel">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="OKZ" minOccurs="0"/>
+ <xsd:element ref="SKZ" minOccurs="0"/>
+ <xsd:element ref="ADRRefkey" minOccurs="0"/>
+ <xsd:element ref="GBRRefkey" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="Bezirkskennung">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:pattern value="[0-9]{3}"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="DruckZusatztext">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="230"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="Infotext">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="230"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="TuerNr">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="25"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="TopNr">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="25"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="Lagebeschreibung">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="25"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="NtzLage">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="1"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="NtzStock">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="3"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="NtzAdrart">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="1"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="OrientierungsnummerBis">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="32"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="GbdEigenschaft">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="2"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="NtzArt">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="2"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+</xsd:schema>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/xsd/eingebunden/PersonDataZMR.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/xsd/eingebunden/PersonDataZMR.xsd
new file mode 100644
index 00000000..8a05c612
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/xsd/eingebunden/PersonDataZMR.xsd
@@ -0,0 +1,741 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: PersonDataZMR.xsd
+Zweck: Striktere Redefinition des Generischen Schemas zum Speichern und Austauschen von Personendaten des Chief Information Office Austria, Stabsstelle IKT-Strategie des Bundes, BMÖLS
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2012-04-12 ee : element "Adresse" entfernt, substitutionGroups darauf entfernt
+ -> mit wsdl2java wieder kompilierbar, sonst "Adresse is referenced but not defined." error
+2010-07-09 rp : LMR-783: +GueltigVon, GueltigBis bei Staatsangehoerigkeit
+2009-11-25 teo : ZMR-1296 Anpassungen aufgrund Bundesgesetz über die eingetragene Partnerschaft (EPG)
+2006-04-18 woeg: Familienstand
+2005-09-26 tsch: Internetadresse, Telefonadresse übernommen, Postleitzahl alphanumerisch
+2004-01-31 tsch: maximale Feldlänge für Geburtsbundesland auf 72 erhöht, minimale auf 0.
+2004-12-09 tsch: Adresscode und Objektnummer alphanumerisch, Postleitzahl mit führender Null
+2004-11-02 tsch: Elemenent Affix in PersonenNameTyp Unbounded
+2004-08-24 tsch: Element PersonenDaten übernommen
+2004-07-30 tsch: Anpassungen von Personrecord-Feldern: +Adresszeile; Gebaeudeteil->Gebaeude; Nutzungseinheitnummer->Nutzungseinheit; NTZLNR->Nutzungseinheitlaufnummer; +Postfach; AdressRegEintrag->AdressRegisterEintrag;Gemeindekennzahl->Gemeindekennziffer
+2004-07-20 tsch: Staatsangehörigkeit-Felder optional
+2004-07-08 tsch: Region (Postleitzahlgebiet) hinzugefügt
+2004-06-24 tsch: StaatsCode, StaatsName in Postadresse übernommen
+2004-01-28 tsch: Adaptionen an neuen CIO-PersonDataDE Record
+2004-01-27 tsch: ZMRAdresse wird PostAdresse
+2004-01-15 tsch: Erstellung
+-->
+
+<xsd:schema targetNamespace="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" xmlns="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+ <xsd:import namespace="http://www.w3.org/2000/09/xmldsig#" schemaLocation="W3C-XMLDSig.xsd"/>
+ <xsd:annotation>
+ <xsd:documentation>This version of person deploys only global elements. All types derived from abstract types have been replaced by substitution groups</xsd:documentation>
+ </xsd:annotation>
+
+ <xsd:element name="Identification" type="IdentificationType">
+ <xsd:annotation>
+ <xsd:documentation>unique identification entities</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:complexType name="IdentificationType">
+ <xsd:annotation>
+ <xsd:documentation>unique identifier</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element name="Value" type="xsd:string">
+ <xsd:annotation>
+ <xsd:documentation>actual value of the identifier.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element name="Type" type="xsd:anyURI">
+ <xsd:annotation>
+ <xsd:documentation>type of value (eg 'ZMR', 'SV-Nummer', 'Martrikelnummer', database identification, ...)</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded">
+ <xsd:annotation>
+ <xsd:documentation>zusätzliche felder</xsd:documentation>
+ </xsd:annotation>
+ </xsd:any>
+ </xsd:sequence>
+ </xsd:complexType>
+
+
+ <xsd:element name="PersonenDaten" type="PersonenDatenTyp">
+ <xsd:annotation>
+ <xsd:documentation>Personendatenstruktur</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:complexType name="PersonenDatenTyp">
+ <xsd:sequence>
+ <xsd:element ref="NatuerlichePerson"/>
+ <xsd:element ref="PostAdresse" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+
+ <xsd:element name="NatuerlichePerson" type="NatuerlichePersonTyp" substitutionGroup="Person">
+ <xsd:annotation>
+ <xsd:documentation>element of physical person type</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element name="Person" type="AbstractPersonType">
+ <xsd:annotation>
+ <xsd:documentation>element of person type</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:complexType name="AbstractPersonType" abstract="true">
+ <xsd:annotation>
+ <xsd:documentation>main structure of person data</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence minOccurs="0">
+ <xsd:element name="Identification" type="IdentificationType" minOccurs="0" maxOccurs="unbounded">
+ <xsd:annotation>
+ <xsd:documentation>unique identification entities</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ </xsd:sequence>
+ <xsd:attribute name="Id" type="xsd:ID" use="optional"/>
+ <xsd:anyAttribute namespace="##other"/>
+ </xsd:complexType>
+
+ <xsd:complexType name="NatuerlichePersonTyp">
+ <xsd:annotation>
+ <xsd:documentation>physical person</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexContent>
+ <xsd:extension base="AbstractPersonType">
+ <xsd:sequence minOccurs="0">
+ <xsd:element ref="PersonenName" minOccurs="0"/>
+ <xsd:element ref="AlternativName" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element ref="Familienstand" minOccurs="0"/>
+ <xsd:element ref="Geschlecht" minOccurs="0"/>
+ <xsd:element ref="Geburtsdatum" minOccurs="0"/>
+ <xsd:element ref="Geburtsort" minOccurs="0"/>
+ <xsd:element ref="Geburtsbundesland" minOccurs="0"/>
+ <xsd:element ref="Geburtsstaat" minOccurs="0"/>
+ <xsd:element ref="Sterbedatum" minOccurs="0"/>
+ <xsd:element ref="Staatsangehoerigkeit" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded">
+ <xsd:annotation>
+ <xsd:documentation>any additional properties</xsd:documentation>
+ </xsd:annotation>
+ </xsd:any>
+ </xsd:sequence>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="AlternativName">
+ <xsd:annotation>
+ <xsd:documentation>Former name, Artist name, changes of Given name ... type of name is given as attribute - choose from list or define new type</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="Familienname">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="108"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ </xsd:sequence>
+ <xsd:attribute name="Type" type="DefinierterAlternativNamensTypTyp" use="required"/>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:simpleType name="DefinierterAlternativNamensTypTyp">
+ <xsd:annotation>
+ <xsd:documentation>known types of alternative names</xsd:documentation>
+ </xsd:annotation>
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="Kuenstlername"/>
+ <xsd:enumeration value="Spitzname"/>
+ <xsd:enumeration value="FruehererName"/>
+ <xsd:enumeration value="Alias"/>
+ <xsd:enumeration value="NameVorErsterEhe"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+
+ <xsd:element name="PersonenName" type="PersonenNameTyp"/>
+
+ <xsd:complexType name="PersonenNameTyp">
+ <xsd:sequence>
+ <xsd:element ref="Vorname" minOccurs="0"/>
+ <xsd:element ref="Familienname" minOccurs="0"/>
+ <xsd:element ref="Affix" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+
+ <xsd:element name="Familienname">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="108"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="Vorname" nillable="true">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="108"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="Affix">
+ <xsd:complexType>
+ <xsd:simpleContent>
+ <xsd:extension base="xsd:string">
+ <xsd:attribute name="typ" use="required">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="akademischerGrad"/>
+ <xsd:enumeration value="Adelstitel"/>
+ <xsd:enumeration value="FamiliennamenSuffix"/>
+ <xsd:enumeration value="Anrede"/>
+ <xsd:enumeration value="Generation"/>
+ <xsd:enumeration value="Qualifikation"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:attribute>
+ <xsd:attribute name="position" use="required">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="prefix"/>
+ <xsd:enumeration value="suffix"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:attribute>
+ </xsd:extension>
+ </xsd:simpleContent>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="Sterbedatum">
+ <xsd:simpleType>
+ <xsd:annotation>
+ <xsd:documentation>simple type for dates (union), which may omit day and/or month</xsd:documentation>
+ </xsd:annotation>
+ <xsd:union memberTypes="xsd:date xsd:gYearMonth xsd:gYear"/>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="Geburtsdatum">
+ <xsd:simpleType>
+ <xsd:annotation>
+ <xsd:documentation>simple type for dates (union), which may omit day and/or month</xsd:documentation>
+ </xsd:annotation>
+ <xsd:union memberTypes="xsd:date xsd:gYearMonth xsd:gYear"/>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="Familienstand">
+ <xsd:simpleType>
+ <xsd:annotation>
+ <xsd:documentation>simple type for marital status of a person</xsd:documentation>
+ </xsd:annotation>
+ <xsd:restriction base="xsd:token">
+ <xsd:enumeration value="ledig"/>
+ <xsd:enumeration value="verheiratet"/>
+ <xsd:enumeration value="in eingetragener Partnerschaft lebend"/>
+ <xsd:enumeration value="geschieden"/>
+ <xsd:enumeration value="eingetragene Partnerschaft aufgelöst oder für nichtig erklärt"/>
+<!-- <xsd:enumeration value="aufgelöste eingetragene Partnerschaft"/> -->
+ <xsd:enumeration value="verwitwet"/>
+ <xsd:enumeration value="hinterbliebener eingetragener Partner"/>
+ <xsd:enumeration value="Ehe aufgehoben oder für nichtig erklärt"/>
+ <xsd:enumeration value="unbekannt"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="Geschlecht">
+ <xsd:simpleType>
+ <xsd:annotation>
+ <xsd:documentation>simple type for sex (gender) of person</xsd:documentation>
+ </xsd:annotation>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="50"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="Geburtsort">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="54"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="Geburtsstaat">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="54"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="Geburtsbundesland">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="72"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="Staatsangehoerigkeit">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="ISOCode3" minOccurs="0"/>
+ <xsd:element ref="StaatsnameDE" minOccurs="0"/>
+ <xsd:element ref="StaatsnameEN" minOccurs="0"/>
+ <xsd:element ref="StaatsnameFR" minOccurs="0"/>
+ <xsd:element name="GueltigVon" type="xsd:date" minOccurs="0"/>
+ <xsd:element name="GueltigBis" type="xsd:date" minOccurs="0"/>
+ <xsd:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded">
+ <xsd:annotation>
+ <xsd:documentation>any additional properties</xsd:documentation>
+ </xsd:annotation>
+ </xsd:any>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="StaatsnameDE">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="54"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="StaatsnameEN">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="54"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="StaatsnameFR">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="54"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="PostAdresse" type="PostAdresseTyp" >
+ <xsd:annotation>
+ <xsd:documentation>Post oder ZMR Adresse, entspricht PostalAddress</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:complexType name="AbstractAddressType" abstract="true">
+ <xsd:annotation>
+ <xsd:documentation>main structure of address data</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence minOccurs="0">
+ <xsd:element name="Identification" type="IdentificationType" minOccurs="0" maxOccurs="unbounded">
+ <xsd:annotation>
+ <xsd:documentation>unique identification entities</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ </xsd:sequence>
+ <xsd:attribute name="Id" type="xsd:ID" use="optional"/>
+ <xsd:anyAttribute namespace="##other"/>
+ </xsd:complexType>
+ <xsd:complexType name="PostAdresseTyp">
+ <xsd:annotation>
+ <xsd:documentation>postal address</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexContent>
+ <xsd:extension base="AbstractAddressType">
+ <xsd:sequence>
+ <xsd:element ref="Staatscode" minOccurs="0"/>
+ <xsd:element ref="Staatsname" minOccurs="0"/>
+
+ <xsd:element ref="Postleitzahl" minOccurs="0"/>
+ <xsd:element ref="Region" minOccurs="0"/>
+ <xsd:element ref="Bundesland" minOccurs="0"/>
+ <xsd:element ref="Gemeinde" minOccurs="0"/>
+ <xsd:element ref="Gemeindekennziffer" minOccurs="0"/>
+ <xsd:element ref="Ortschaft" minOccurs="0"/>
+ <xsd:element ref="OrtschaftZweisprachig" minOccurs="0"/>
+ <xsd:element name="Zustelladresse" type="ZustelladresseTyp" minOccurs="0"/>
+
+ <xsd:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded">
+ <xsd:annotation>
+ <xsd:documentation>any additional properties</xsd:documentation>
+ </xsd:annotation>
+ </xsd:any>
+ </xsd:sequence>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:complexType name="ZustelladresseTyp">
+ <xsd:sequence>
+ <xsd:element ref="Adresszeile" minOccurs="0"/>
+ <xsd:element ref="Strassenname" minOccurs="0"/>
+ <xsd:element ref="Orientierungsnummer" minOccurs="0"/>
+ <xsd:element ref="Gebaeude" minOccurs="0"/>
+ <xsd:element ref="Nutzungseinheit" minOccurs="0"/>
+ <xsd:element ref="Postfach" minOccurs="0"/>
+ <xsd:element ref="Wohnsitzqualitaet" minOccurs="0"/>
+ <xsd:element ref="Abgabestelle" minOccurs="0"/>
+ <xsd:element ref="Nutzungseinheitlaufnummer" minOccurs="0"/>
+ <xsd:element name="AdressRegisterEintrag" minOccurs="0">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="Adresscode" minOccurs="0"/>
+ <xsd:element ref="Subcode" minOccurs="0"/>
+ <xsd:element ref="Objektnummer" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="InternetAdresse" type="InternetAdresseTyp" >
+ <xsd:annotation>
+ <xsd:documentation>Entspricht InternetAddress</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element name="TelefonAdresse" type="TelefonAdresseTyp" >
+ <xsd:annotation>
+ <xsd:documentation>Container für Telefonnummern, entspricht TelephoneAddress</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:complexType name="InternetAdresseTyp">
+ <xsd:annotation>
+ <xsd:documentation>internet based communication</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexContent>
+ <xsd:extension base="AbstractAddressType">
+ <xsd:sequence minOccurs="0">
+ <xsd:element ref="dsig:KeyInfo" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>certificate for secure communication</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element name="Adresse">
+ <xsd:annotation>
+ <xsd:documentation>eURI: mail-Adresse, Web, FTP, LDAP, ..., entspricht Address</xsd:documentation>
+ </xsd:annotation>
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:anyURI">
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="60"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded">
+ <xsd:annotation>
+ <xsd:documentation>any additional properties</xsd:documentation>
+ </xsd:annotation>
+ </xsd:any>
+ </xsd:sequence>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:complexType name="TelefonAdresseTyp">
+ <xsd:annotation>
+ <xsd:documentation>phone numbers</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexContent>
+ <xsd:extension base="AbstractAddressType">
+ <xsd:sequence>
+ <xsd:element name="Typ">
+ <xsd:annotation>
+ <xsd:documentation>type of phononumber - category (eg 'Festnetz', 'Mobile', 'fax', ...)</xsd:documentation>
+ </xsd:annotation>
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="Festnetz"/>
+ <xsd:enumeration value="Mobil"/>
+ <xsd:enumeration value="Fax"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="Nummer" type="TelekomNummerTyp">
+ <xsd:annotation>
+ <xsd:documentation>phonenumber</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded">
+ <xsd:annotation>
+ <xsd:documentation>any additional properties</xsd:documentation>
+ </xsd:annotation>
+ </xsd:any>
+ </xsd:sequence>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:complexType name="TelekomNummerTyp">
+ <xsd:choice>
+ <xsd:element ref="FormatierteNummer"/>
+ <xsd:group ref="TelekomNummernGruppe"/>
+ </xsd:choice>
+ </xsd:complexType>
+
+ <xsd:group name="TelekomNummernGruppe">
+ <xsd:sequence>
+ <xsd:element ref="InternationalerLaendercode" minOccurs="0"/>
+ <xsd:element ref="NationalNummer" minOccurs="0"/>
+ <xsd:element ref="Vorwahl" minOccurs="0"/>
+ <xsd:element ref="Anschlussnummer"/>
+ <xsd:element ref="Klappe" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:group>
+
+ <xsd:element name="InternationalerLaendercode" type="xsd:string">
+ <xsd:annotation>
+ <xsd:documentation>entspricht InternationalCountryCode</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element name="NationalNummer" type="xsd:string">
+ <xsd:annotation>
+ <xsd:documentation>entspricht NationalNumber</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element name="Vorwahl" type="xsd:string">
+ <xsd:annotation>
+ <xsd:documentation>entspricht AreaCityCode</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element name="Anschlussnummer" type="xsd:string">
+ <xsd:annotation>
+ <xsd:documentation>entspricht SubscriberNumber</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element name="FormatierteNummer">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="25"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="Klappe" type="xsd:string">
+ <xsd:annotation>
+ <xsd:documentation>entspricht Extension</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+
+ <xsd:element name="Abgabestelle" type="xsd:boolean"/>
+
+ <xsd:element name="Wohnsitzqualitaet">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="H"/>
+ <xsd:enumeration value="N"/>
+ <xsd:enumeration value="O"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="ISOCode3">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:pattern value="[A-Z]{3}"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="Staatscode">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:pattern value="[A-Z]{3}"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="Staatsname">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="54"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="Postleitzahl">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="10"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="Region">
+ <xsd:annotation>
+ <xsd:documentation>entspricht Region</xsd:documentation>
+ </xsd:annotation>
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="54"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="Bundesland">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="Wien"/>
+ <xsd:enumeration value="Niederösterreich"/>
+ <xsd:enumeration value="Burgenland"/>
+ <xsd:enumeration value="Oberösterreich"/>
+ <xsd:enumeration value="Steiermark"/>
+ <xsd:enumeration value="Salzburg"/>
+ <xsd:enumeration value="Kärnten"/>
+ <xsd:enumeration value="Tirol"/>
+ <xsd:enumeration value="Vorarlberg"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="Gemeinde">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="54"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="Gemeindekennziffer">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:pattern value="[0-9]{5}"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="Ortschaft">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="54"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="OrtschaftZweisprachig">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="45"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="Adresscode">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:pattern value="[0-9;A-Z]{7}"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="Subcode">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:pattern value="[0-9]{3}"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="Nutzungseinheitlaufnummer">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:pattern value="[0-9]{4}"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="Objektnummer">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:pattern value="[0-9;A-Z]{7}"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="Strassenname">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="54"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="Orientierungsnummer">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="32"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="Gebaeude">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="75"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="Nutzungseinheit">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="40"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="Adresszeile">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="54"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="Postfach">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="20"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+</xsd:schema>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/xsd/eingebunden/PersonExport.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/xsd/eingebunden/PersonExport.xsd
new file mode 100644
index 00000000..ae0b5712
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/xsd/eingebunden/PersonExport.xsd
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Name: PersonExport.xsd
+ Zweck: Definiert allgemein nutzbare Export-Schnittstelle um eine Liste von Personen abzubilden.
+ Author(s): Ehrenmüller Oliver, ZMR-SU
+
+ Aenderungshistorie:
+ 2009-07-20 teo: Überarbeitung PersonExportElementType
+ 2009-07-08 teo: erstellt
+-->
+
+<xsd:schema xmlns="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ targetNamespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+ <xsd:annotation>
+ <xsd:documentation>Definiert allgemein nutzbare Export-Schnittstelle um eine Liste von Personen abzubilden.</xsd:documentation>
+ </xsd:annotation>
+ <xsd:include schemaLocation="InfoFachlich.xsd"/>
+
+ <xsd:element name="PersonExport" type="PersonExportType">
+ <xsd:annotation>
+ <xsd:documentation>Root-Element des Personenexports.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:complexType name="PersonExportType">
+ <xsd:annotation>
+ <xsd:documentation>Root-Element des Personenexports.</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="Message"/>
+ <xsd:element ref="Stichtag"/>
+ <xsd:element name="Database">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="20"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="Person" type="PersonExportElementType" minOccurs="0" maxOccurs="unbounded">
+ <xsd:annotation>
+ <xsd:documentation>
+ Gruppiert nach Personen werden alle Elemente in dieser
+ Liste abgebildet.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="PersonExportElementType">
+ <xsd:annotation>
+ <xsd:documentation>Dieser Type beinhaltet alle Elemente die zu einer Person gehören.</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element name="ID" type="ENTITYIDType"/>
+ <xsd:element name="Typ" type="xsd:string"/>
+ <xsd:element name="Satz" type="PersonExportSatzType" minOccurs="0" maxOccurs="unbounded">
+ <xsd:annotation>
+ <xsd:documentation>
+ Diese Liste beinhaltet alle Sätze die zu einer
+ Person gehören. Unabhängig von der Tabelle oder
+ Strang-Historie.
+ Fehlt die Liste, ist die Entity zu löschen.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="PersonExportSatzType">
+ <xsd:annotation>
+ <xsd:documentation>
+ Dieser Type beinhaltet alle Elemente die sich auf einen Eintrag
+ in einer beliebigen Tabelle beziehen.
+ </xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element name="Tabelle">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="20"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element ref="EntityID"/>
+ <xsd:element name="RecID" type="ENTITYIDType"/>
+ <xsd:element name="Created" type="TimestampType"/>
+ <xsd:element name="Feld" type="PersonExportFeldType" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="PersonExportFeldType">
+ <xsd:annotation>
+ <xsd:documentation>Generiersche Name/Wert-Paare für Export</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element name="Name" type="xsd:string"/>
+ <xsd:element name="Wert" type="xsd:string"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+</xsd:schema>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/xsd/eingebunden/PersonFelder.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/xsd/eingebunden/PersonFelder.xsd
new file mode 100644
index 00000000..0a80e0de
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/xsd/eingebunden/PersonFelder.xsd
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: PersonFelder.xsd
+Zweck: Definiert allgemein nutzbare Felder für Personendaten
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2006-06-26 tsch: GeburtsdatumBis hinzugefügt
+2005-08-30 tsch: OrdnungsZahlType hinzugefügt
+2004-01-15 tsch: SVNummer hinzugefügt
+2004-06-24 tsch: OrdnungsZahl, Titel hinzugefügt
+2004-01-27 tsch: Erstellung
+-->
+
+<xsd:schema xmlns="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ targetNamespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+ <xsd:include schemaLocation="SimpleTypes.xsd"/>
+
+ <xsd:annotation>
+ <xsd:documentation>Personendaten-Felder</xsd:documentation>
+ </xsd:annotation>
+ <xsd:element name="ZMRZahl" type="ZMRZahlType"/>
+
+ <xsd:simpleType name="ZMRZahlType">
+ <xsd:restriction base="xsd:string">
+ <xsd:pattern value="[0-9]{12}"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+
+ <xsd:element name="OrdnungsZahl" type="OrdnungsZahlType"/>
+
+ <xsd:simpleType name="OrdnungsZahlType">
+ <xsd:restriction base="xsd:string">
+ <xsd:pattern value="[0-9]{12}"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+
+ <xsd:element name="SVNummer">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:pattern value="[0-9]{10}"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="Titel">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="45"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="StaatZugezogen" type="StaatenNameType"/>
+ <xsd:element name="StaatVerzogen" type="StaatenNameType"/>
+
+ <xsd:element name="GeburtsdatumBis">
+ <xsd:simpleType>
+ <xsd:annotation>
+ <xsd:documentation>simple type for dates (union), which may omit day and/or month</xsd:documentation>
+ </xsd:annotation>
+ <xsd:union memberTypes="xsd:date xsd:gYearMonth xsd:gYear"/>
+ </xsd:simpleType>
+ </xsd:element>
+</xsd:schema>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/xsd/eingebunden/SimpleTypes.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/xsd/eingebunden/SimpleTypes.xsd
new file mode 100644
index 00000000..fb02488d
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/xsd/eingebunden/SimpleTypes.xsd
@@ -0,0 +1,173 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: SimpleTypes.xsd
+Zweck: Definiert allgemein nutzbare simple Datentypen
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+2010-08-25 teo: ZMR-339: ID 343 - USERID DB-Feld erweitern
+2006-05-03 tsch: KGNummerType hinzugefügt
+2004-10-27 tsch: BehoerdenschluesselType hinzugefügt
+2004-09-09 tsch: RegisterType hinzugefügt
+2004-09-08 tsch: BenutzerNameType hinzugefügt
+2004-08-17 tsch: GemeindeNrType hinzugefügt
+2004-06-18 tsch: GrundTextType hinzugefügt
+-->
+
+<xsd:schema xmlns="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ targetNamespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:simpleType name="IntegerType">
+ <xsd:annotation>
+ <xsd:documentation>IntegerType: nicht negativer Integer mit Maximalwert 2^31-1 (Beschränkung durch Datenbank)</xsd:documentation>
+ </xsd:annotation>
+ <xsd:restriction base="xsd:nonNegativeInteger">
+ <xsd:maxExclusive value="2147483648"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+
+ <xsd:simpleType name="DatumType">
+ <xsd:annotation>
+ <xsd:documentation>DatumType: Format richtet sich nach xsd:date, '00' bei Monat und Tag erlaubt</xsd:documentation>
+ </xsd:annotation>
+ <xsd:restriction base="xsd:string">
+ <xsd:pattern value="[0-9]{4}[\-][0-9]{2}[\-][0-9]{2}"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+
+
+ <xsd:simpleType name="TimestampType">
+ <xsd:annotation>
+ <xsd:documentation>TimestampType: Format richtet sich nach xsd:dateTime, Angabe der Millisekunden ist Pflicht, Zeitzone nicht erlaubt</xsd:documentation>
+ </xsd:annotation>
+ <xsd:restriction base="xsd:dateTime">
+ <xsd:pattern value="[0-9]{4}[\-][0-9]{2}[\-][0-9]{2}[T][0-9]{2}[:][0-9]{2}[:][0-9]{2}[.][0-9]{3}"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+
+ <xsd:simpleType name="IDType">
+ <xsd:annotation>
+ <xsd:documentation>IDs</xsd:documentation>
+ </xsd:annotation>
+ <xsd:restriction base="xsd:unsignedLong">
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="ENTITYIDType">
+ <xsd:annotation>
+ <xsd:documentation>Entity-IDs (können auch alphanumerisch sein, z.B. alte edvzahlen)</xsd:documentation>
+ </xsd:annotation>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="64"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+
+ <xsd:simpleType name="StaatenNameType">
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="45"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+
+ <xsd:simpleType name="GrundCodeType">
+ <xsd:restriction base="xsd:string" >
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="20"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="GrundTextType">
+ <xsd:restriction base="xsd:string">
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="50"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="GrundFreitextType">
+ <xsd:restriction base="xsd:string">
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="228"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+
+ <xsd:simpleType name="BehoerdenNrType">
+ <xsd:restriction base="xsd:string">
+ <xsd:pattern value="[0-9]{6}"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="BehoerdenschluesselType">
+ <xsd:restriction base="xsd:string">
+ <xsd:pattern value="[0-9]{6}|C[0-9]{5}"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="GemeindeNrType">
+ <xsd:restriction base="xsd:string">
+ <xsd:pattern value="[0-9]{5}"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="KGNummerType">
+ <xsd:restriction base="xsd:string">
+ <xsd:minLength value="5"/>
+ <xsd:maxLength value="5"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="GemeindenameType">
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="54"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="KundenNrType">
+ <xsd:restriction base="xsd:string">
+ <xsd:pattern value="[0-9]{5,6}"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="OrgTypType">
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="20"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="OrgCodeType">
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="20"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="BezugsfeldType">
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="50"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="BenutzerType">
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="100"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="BenutzerNameType">
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="45"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="RegisterType">
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="ZMR"/>
+ <xsd:enumeration value="EGR"/>
+ <xsd:enumeration value="LMR"/>
+ <xsd:enumeration value="ZPR"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+
+</xsd:schema>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/xsd/eingebunden/W3C-XMLDSig.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/xsd/eingebunden/W3C-XMLDSig.xsd
new file mode 100644
index 00000000..3745c774
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/xsd/eingebunden/W3C-XMLDSig.xsd
@@ -0,0 +1,274 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- PUBLIC "-//W3C//DTD XMLSchema 200102//EN" "http://www.w3.org/2001/XMLSchema.dtd"
+ -->
+<!--<!DOCTYPE schema
+ [
+ <!ATTLIST schema
+ xmlns:ds CDATA #FIXED "http://www.w3.org/2000/09/xmldsig#"
+>
+ <!ENTITY dsig 'http://www.w3.org/2000/09/xmldsig#'>
+ <!ENTITY % p ''>
+ <!ENTITY % s ''>
+]> -->
+<!-- Schema for XML Signatures
+ http://www.w3.org/2000/09/xmldsig#
+ $Revision: 1.1 $ on $Date: 2002/11/11 16:24:27 $ by $Author: Linauer $
+
+ Copyright 2001 The Internet Society and W3C (Massachusetts Institute
+ of Technology, Institut National de Recherche en Informatique et en
+ Automatique, Keio University). All Rights Reserved.
+ http://www.w3.org/Consortium/Legal/
+
+ This document is governed by the W3C Software License [1] as described
+ in the FAQ [2].
+
+ [1] http://www.w3.org/Consortium/Legal/copyright-software-19980720
+ [2] http://www.w3.org/Consortium/Legal/IPR-FAQ-20000620.html#DTD
+-->
+<schema targetNamespace="http://www.w3.org/2000/09/xmldsig#" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" version="0.1">
+ <!-- Basic Types Defined for Signatures -->
+ <!-- modified to ensure that whiteSpace is preserved
+<simpleType name="CryptoBinary">
+ <restriction base="base64Binary">
+ </restriction>
+</simpleType>
+ -->
+ <simpleType name="CryptoBinary">
+ <restriction base="string">
+ <whiteSpace value="preserve"/>
+ <pattern value="[A-Za-z0-9\+/=\n\r\t ]*"/>
+ </restriction>
+ </simpleType>
+ <!-- Start Signature -->
+ <element name="Signature" type="ds:SignatureType"/>
+ <complexType name="SignatureType">
+ <sequence>
+ <element ref="ds:SignedInfo"/>
+ <element ref="ds:SignatureValue"/>
+ <element ref="ds:KeyInfo" minOccurs="0"/>
+ <element ref="ds:Object" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="Id" type="ID" use="optional"/>
+ </complexType>
+ <element name="SignatureValue" type="ds:SignatureValueType"/>
+ <complexType name="SignatureValueType">
+ <simpleContent>
+ <extension base="ds:CryptoBinary">
+ <attribute name="Id" type="ID" use="optional"/>
+ </extension>
+ </simpleContent>
+ </complexType>
+ <!-- Start SignedInfo -->
+ <element name="SignedInfo" type="ds:SignedInfoType"/>
+ <complexType name="SignedInfoType">
+ <sequence>
+ <element ref="ds:CanonicalizationMethod"/>
+ <element ref="ds:SignatureMethod"/>
+ <element ref="ds:Reference" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="Id" type="ID" use="optional"/>
+ </complexType>
+ <element name="CanonicalizationMethod" type="ds:CanonicalizationMethodType"/>
+ <complexType name="CanonicalizationMethodType" mixed="true">
+ <sequence>
+ <any namespace="##any" minOccurs="0" maxOccurs="unbounded"/>
+ <!-- (0,unbounded) elements from (1,1) namespace -->
+ </sequence>
+ <attribute name="Algorithm" type="anyURI" use="required"/>
+ </complexType>
+ <element name="SignatureMethod" type="ds:SignatureMethodType"/>
+ <complexType name="SignatureMethodType" mixed="true">
+ <sequence>
+ <element name="HMACOutputLength" type="ds:HMACOutputLengthType" minOccurs="0"/>
+ <any namespace="##other" minOccurs="0" maxOccurs="unbounded"/>
+ <!-- (0,unbounded) elements from (1,1) external namespace -->
+ </sequence>
+ <attribute name="Algorithm" type="anyURI" use="required"/>
+ </complexType>
+ <!-- Start Reference -->
+ <element name="Reference" type="ds:ReferenceType"/>
+ <complexType name="ReferenceType">
+ <sequence>
+ <element ref="ds:Transforms" minOccurs="0"/>
+ <element ref="ds:DigestMethod"/>
+ <element ref="ds:DigestValue"/>
+ </sequence>
+ <attribute name="Id" type="ID" use="optional"/>
+ <attribute name="URI" type="anyURI" use="optional"/>
+ <attribute name="Type" type="anyURI" use="optional"/>
+ </complexType>
+ <element name="Transforms" type="ds:TransformsType"/>
+ <complexType name="TransformsType">
+ <sequence>
+ <element ref="ds:Transform" maxOccurs="unbounded"/>
+ </sequence>
+ </complexType>
+ <element name="Transform" type="ds:TransformType"/>
+ <complexType name="TransformType" mixed="true">
+ <choice minOccurs="0" maxOccurs="unbounded">
+ <any namespace="##other" processContents="lax"/>
+ <element name="XPath" type="string"/>
+ <!-- (1,1) elements from (0,unbounded) namespaces -->
+ </choice>
+ <attribute name="Algorithm" type="anyURI" use="required"/>
+ </complexType>
+ <!-- End Reference -->
+ <element name="DigestMethod" type="ds:DigestMethodType"/>
+ <complexType name="DigestMethodType" mixed="true">
+ <sequence>
+ <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="Algorithm" type="anyURI" use="required"/>
+ </complexType>
+ <element name="DigestValue" type="ds:DigestValueType"/>
+ <simpleType name="DigestValueType">
+ <restriction base="ds:CryptoBinary"/>
+ </simpleType>
+ <!-- End SignedInfo -->
+ <!-- Start KeyInfo -->
+ <element name="KeyInfo" type="ds:KeyInfoType"/>
+ <complexType name="KeyInfoType" mixed="true">
+ <choice maxOccurs="unbounded">
+ <element ref="ds:KeyName"/>
+ <element ref="ds:KeyValue"/>
+ <element ref="ds:RetrievalMethod"/>
+ <element ref="ds:X509Data"/>
+ <element ref="ds:PGPData"/>
+ <element ref="ds:SPKIData"/>
+ <element ref="ds:MgmtData"/>
+ <any namespace="##other" processContents="lax"/>
+ <!-- (1,1) elements from (0,unbounded) namespaces -->
+ </choice>
+ <attribute name="Id" type="ID" use="optional"/>
+ </complexType>
+ <element name="KeyName" type="string"/>
+ <element name="MgmtData" type="string"/>
+ <element name="KeyValue" type="ds:KeyValueType"/>
+ <complexType name="KeyValueType" mixed="true">
+ <choice>
+ <element ref="ds:DSAKeyValue"/>
+ <element ref="ds:RSAKeyValue"/>
+ <any namespace="##other" processContents="lax"/>
+ </choice>
+ </complexType>
+ <element name="RetrievalMethod" type="ds:RetrievalMethodType"/>
+ <complexType name="RetrievalMethodType">
+ <sequence>
+ <element name="Transforms" type="ds:TransformsType" minOccurs="0"/>
+ </sequence>
+ <attribute name="URI" type="anyURI"/>
+ <attribute name="Type" type="anyURI" use="optional"/>
+ </complexType>
+ <!-- Start X509Data -->
+ <element name="X509Data" type="ds:X509DataType"/>
+ <complexType name="X509DataType">
+ <sequence maxOccurs="unbounded">
+ <choice>
+ <element name="X509IssuerSerial" type="ds:X509IssuerSerialType"/>
+ <element name="X509SKI" type="ds:CryptoBinary"/>
+ <element name="X509SubjectName" type="string"/>
+ <element name="X509Certificate" type="ds:CryptoBinary"/>
+ <element name="X509CRL" type="ds:CryptoBinary"/>
+ <any namespace="##other" processContents="lax"/>
+ </choice>
+ </sequence>
+ </complexType>
+ <complexType name="X509IssuerSerialType">
+ <sequence>
+ <element name="X509IssuerName" type="string"/>
+ <element name="X509SerialNumber" type="integer"/>
+ </sequence>
+ </complexType>
+ <!-- End X509Data -->
+ <!-- Begin PGPData -->
+ <element name="PGPData" type="ds:PGPDataType"/>
+ <complexType name="PGPDataType">
+ <choice>
+ <sequence>
+ <element name="PGPKeyID" type="ds:CryptoBinary"/>
+ <element name="PGPKeyPacket" type="ds:CryptoBinary" minOccurs="0"/>
+ <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <sequence>
+ <element name="PGPKeyPacket" type="ds:CryptoBinary"/>
+ <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ </choice>
+ </complexType>
+ <!-- End PGPData -->
+ <!-- Begin SPKIData -->
+ <element name="SPKIData" type="ds:SPKIDataType"/>
+ <complexType name="SPKIDataType">
+ <sequence maxOccurs="unbounded">
+ <element name="SPKISexp" type="ds:CryptoBinary"/>
+ <any namespace="##other" processContents="lax" minOccurs="0"/>
+ </sequence>
+ </complexType>
+ <!-- End SPKIData -->
+ <!-- End KeyInfo -->
+ <!-- Start Object (Manifest, SignatureProperty) -->
+ <element name="Object" type="ds:ObjectType"/>
+ <complexType name="ObjectType" mixed="true">
+ <sequence minOccurs="0" maxOccurs="unbounded">
+ <any namespace="##any" processContents="lax"/>
+ </sequence>
+ <attribute name="Id" type="ID" use="optional"/>
+ <attribute name="MimeType" type="string" use="optional"/>
+ <attribute name="Encoding" type="anyURI" use="optional"/>
+ <!-- add a grep facet -->
+ </complexType>
+ <element name="Manifest" type="ds:ManifestType"/>
+ <complexType name="ManifestType">
+ <sequence>
+ <element ref="ds:Reference" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="Id" type="ID" use="optional"/>
+ </complexType>
+ <element name="SignatureProperties" type="ds:SignaturePropertiesType"/>
+ <complexType name="SignaturePropertiesType">
+ <sequence>
+ <element ref="ds:SignatureProperty" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="Id" type="ID" use="optional"/>
+ </complexType>
+ <element name="SignatureProperty" type="ds:SignaturePropertyType"/>
+ <complexType name="SignaturePropertyType" mixed="true">
+ <choice maxOccurs="unbounded">
+ <any namespace="##other" processContents="lax"/>
+ <!-- (1,1) elements from (1,unbounded) namespaces -->
+ </choice>
+ <attribute name="Target" type="anyURI" use="required"/>
+ <attribute name="Id" type="ID" use="optional"/>
+ </complexType>
+ <!-- End Object (Manifest, SignatureProperty) -->
+ <!-- Start Algorithm Parameters -->
+ <simpleType name="HMACOutputLengthType">
+ <restriction base="integer"/>
+ </simpleType>
+ <!-- Start KeyValue Element-types -->
+ <element name="DSAKeyValue" type="ds:DSAKeyValueType"/>
+ <complexType name="DSAKeyValueType">
+ <sequence>
+ <sequence minOccurs="0">
+ <element name="P" type="ds:CryptoBinary"/>
+ <element name="Q" type="ds:CryptoBinary"/>
+ </sequence>
+ <element name="J" type="ds:CryptoBinary" minOccurs="0"/>
+ <element name="G" type="ds:CryptoBinary" minOccurs="0"/>
+ <element name="Y" type="ds:CryptoBinary"/>
+ <sequence minOccurs="0">
+ <element name="Seed" type="ds:CryptoBinary"/>
+ <element name="PgenCounter" type="ds:CryptoBinary"/>
+ </sequence>
+ </sequence>
+ </complexType>
+ <element name="RSAKeyValue" type="ds:RSAKeyValueType"/>
+ <complexType name="RSAKeyValueType">
+ <sequence>
+ <element name="Modulus" type="ds:CryptoBinary"/>
+ <element name="Exponent" type="ds:CryptoBinary"/>
+ </sequence>
+ </complexType>
+ <!-- End KeyValue Element-types -->
+ <!-- End Signature -->
+</schema>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/xsd/eingebunden/Workflow.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/xsd/eingebunden/Workflow.xsd
new file mode 100644
index 00000000..ce300b0e
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/xsd/eingebunden/Workflow.xsd
@@ -0,0 +1,200 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: Workflow.xsd
+Zweck: Definiert Datentypen für die Geschäftsprozesssteuerung der Usecases
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2004-08-02 tsch: Vorgang WorkflowsAuflisten hinzugefügt
+2004-06-29 tsch: Subprozess Struktur vereinfacht
+2004-06-14 tsch: ProzessAnzeigeenamen hinzugefügt
+2004-06-14 tsch: Optionale VerlassenerProzessInstanzID hinzugefügt
+2004-05-19 tsch: SequenceID hinzugefügt, Umbenennung Process->Prozess
+2004-05-17 tsch: Umbenennungen: Activity nach Vorgang, Workflowitems nach Subprozesse
+2004-05-04 tsch: ProcessID->ProcessName, ActivityID->ActivityName
+2003-12-12 tsch: Erstellung
+-->
+
+<xsd:schema targetNamespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:include schemaLocation="SimpleTypes.xsd"/>
+
+
+ <xsd:element name="WorkflowInfoClient">
+ <xsd:annotation>
+ <xsd:documentation>Workflowinformationen des Clients</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="ProzessName"/>
+ <xsd:sequence minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ Wenn der Geschäftsprozess aus mehreren Vorgängen besteht,
+ müssen die ProzessinstanzID und SequenzID aus der letzten
+ Server-Response vom Client geschickt werden.
+ Beim ersten Vorgang eines neuen Geschäftsprozesses dürfen die beiden
+ Felder nicht geschickt werden.
+ Bei Beginn einen neuen Geschäftsprozesses SOLLTE die InstanzID des letztzen
+ Prozesses als VerlassenerProzessInstanzID mitgeschickt werden
+ </xsd:documentation>
+ </xsd:annotation>
+ <xsd:element ref="ProzessInstanzID"/>
+ <xsd:element ref="VerlassenerProzessInstanzID" minOccurs="0"/>
+ <xsd:element ref="SequenzID"/>
+ </xsd:sequence>
+ <xsd:element ref="VorgangName"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="WorkflowInfoServer">
+ <xsd:annotation>
+ <xsd:documentation>Workflowinformationen des Servers</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:annotation>
+ <xsd:documentation>
+ Der Prozessname dient zur technischen Identifikation des Prozesses, der ProzessAnzeigeName
+ kann zur Anzeige auf der Benutzeroberfläche verwendet werden.
+ </xsd:documentation>
+ </xsd:annotation>
+ <xsd:element ref="ProzessName"/>
+ <xsd:element ref="ProzessAnzeigeName" minOccurs="0"/>
+ <xsd:element ref="ProzessInstanzID"/>
+ <xsd:element ref="ProzessStatus"/>
+ <xsd:element ref="SequenzID"/>
+ <xsd:element ref="Subprozess" minOccurs="1" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:complexType name="SubprozessType">
+ <xsd:sequence>
+ <xsd:annotation>
+ <xsd:documentation>
+ Der VorgangName dient zur technischen Identifikation des Vorgangs, der VorgangAnzeigeName
+ kann zur Anzeige auf der Benutzeroberfläche verwendet werden.
+ Die Elemente VorgangRestriction und VorgangConditions werden in näherer Zukunft nicht implementiert
+ und können ignoriert werden (werden nicht befüllt).
+ </xsd:documentation>
+ </xsd:annotation>
+ <xsd:element ref="VorgangName"/>
+ <xsd:element ref="VorgangAnzeigeName" minOccurs="0"/>
+ <xsd:element ref="VorgangStatus"/>
+ <xsd:element ref="VorgangRestriction" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element ref="VorgangConditions" minOccurs="0"/>
+ <xsd:element name="Required" type="xsd:boolean"/>
+ <xsd:element name="Visible" type="xsd:boolean"/>
+ <xsd:element ref="Subprozess" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="Subprozess" type="SubprozessType"/>
+
+ <xsd:element name="ProzessInstanzID" type="IDType"/>
+ <xsd:element name="VerlassenerProzessInstanzID" type="IDType"/>
+ <xsd:element name="SequenzID" type="IDType"/>
+
+ <xsd:element name="ProzessName">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="90"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="ProzessAnzeigeName">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="90"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="ProzessStatus">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="O"/>
+ <xsd:enumeration value="A"/>
+ <xsd:enumeration value="C"/>
+ <xsd:enumeration value="E"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="VorgangName">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="90"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="VorgangAnzeigeName">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="90"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="VorgangStatus">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="O"/>
+ <xsd:enumeration value="A"/>
+ <xsd:enumeration value="C"/>
+ <xsd:enumeration value="E"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="VorgangRestriction">
+ <xsd:annotation>
+ <xsd:documentation>regionale Restriktion, die fuer den Vorgang gilt (z.B. Gemeindenummer, fuer die Personen angemeldet werden duerfen.</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="RestrictionType" type="xsd:string"/>
+ <xsd:element name="RestrictionValue" type="xsd:string"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+
+ <xsd:element name="VorgangConditions">
+ <xsd:annotation>
+ <xsd:documentation>Liste von Bedingungen, unter denen das Item aktiv wird.</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="SelectedItems" minOccurs="1" maxOccurs="unbounded">
+ <xsd:annotation>
+ <xsd:documentation>Liste von alternativen Voraussetzungen (ODER) für die Anwählbarkeit der Activity. Ein Eintrag repräsentiert eine Reihe von Objekten, die im Suchergebnis ausgewählt sein müssen (UND).</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="SelectedItem" type="xsd:string" minOccurs="1" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+</xsd:schema>
+
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/xsd/zmr/Adresssuche.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/xsd/zmr/Adresssuche.xsd
new file mode 100644
index 00000000..4952ff44
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/xsd/zmr/Adresssuche.xsd
@@ -0,0 +1,128 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: Adresssuche.xsd
+Zweck: Definiert Datentypen für die Suche nach offiziellen STATA-Adressen im ZMR
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2009-11-20 mp: +Gebäudeeigenschaft, +Nutzungsart
+2005-06-15 pwag: CQ1370: Suchart ADRESSPRUEFUNG hinzugefügt
+2004-11-15 tsch: Detailgrad Gemeinde hinzugefügt
+2004-07-30 tsch: HauptIdentadresse->HauptIdent; Felder hinzu: Adressstatus, Adressschlüssel, HauptIdent, Hofname, Gebaeudeunterscheidung, GBDUntteil, InfoMeldewesen
+2004-07-08 tsch: Felder Adresszusatz, HauptIdentadresse hinzugefügt
+2004-06-24 tsch: GBRRefkey hinzugefügt
+2004-05-17 tsch: Organisation entfernt
+2004-01-27 tsch: Erstellung
+-->
+
+<xsd:schema targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:cio="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../eingebunden/EingebundenProxy.xsd"/>
+ <xsd:import namespace="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" schemaLocation="../eingebunden/PersonDataZMR.xsd"/>
+
+ <xsd:element name="AdresssucheRequest">
+ <xsd:annotation>
+ <xsd:documentation>Suchdaten für die STATA - Adresssuche im ZMR</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="AdresssucheInfo"/>
+ <xsd:element ref="Adressdaten"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="AdresssucheResponse">
+ <xsd:annotation>
+ <xsd:documentation>Anfragedaten, sowie Suchergebnis oder Text-Meldung (falls nichts gefunden)</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="AdresssucheAnfrage"/>
+ <xsd:element ref="base:Message"/>
+ <!-- gibt an, ob Klaerungsadressen erlaubt sind oder nicht -->
+ <xsd:element name="inclKlaerungsadressen" type="xsd:boolean" minOccurs="0"/>
+ <xsd:element ref="Adresssuchergebnis"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="AdresssucheAnfrage">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="AdresssucheInfo"/>
+ <xsd:element ref="Adressdaten"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="AdresssucheInfo" type="AdresssucheInfoType"/>
+ <xsd:complexType name="AdresssucheInfoType">
+ <xsd:annotation>
+ <xsd:documentation>Fachliche Informationen zur Adresssuche</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element name="Suchart">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="ADRESSSUCHE"/>
+ <xsd:enumeration value="IDENTEADRESSENSUCHE"/>
+ <xsd:enumeration value="ADRESSPRUEFUNG"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="Adresssuchergebnis" type="AdresssuchergebnisType"/>
+ <xsd:complexType name="AdresssuchergebnisType">
+ <xsd:sequence>
+ <xsd:element name="Detailgrad">
+ <xsd:annotation>
+ <xsd:documentation>Gibt der Detailgrad der Adressen im Suchergebnis an</xsd:documentation>
+ </xsd:annotation>
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="Gemeinde"/>
+ <xsd:enumeration value="Ortschaft"/>
+ <xsd:enumeration value="Strassenname"/>
+ <xsd:enumeration value="Orientierungsnummer"/>
+ <xsd:enumeration value="Gebaeudeteil"/>
+ <xsd:enumeration value="Tuer"/>
+ <xsd:enumeration value="Gesamtadresse"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element ref="base:GefundeneSaetze">
+ <xsd:annotation>
+ <xsd:documentation>Gesamtanzahl der gefundenen Sätze</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element ref="Adressdaten" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="Adressdaten">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="cio:PostAdresse" minOccurs="0"/>
+ <xsd:element ref="base:Adressstatus" minOccurs="0"/>
+ <xsd:element ref="base:Adressschluessel" minOccurs="0"/>
+ <xsd:element ref="base:HauptIdent" minOccurs="0"/>
+ <xsd:element ref="base:NameZuteil" minOccurs="0"/>
+ <xsd:element ref="base:Hofname" minOccurs="0"/>
+ <xsd:element ref="base:Gebaeudeunterscheidung" minOccurs="0"/>
+ <xsd:element ref="base:GBDUntteil" minOccurs="0"/>
+ <xsd:element ref="base:InfoMeldewesen" minOccurs="0"/>
+ <xsd:element ref="base:GbdEigenschaft" minOccurs="0"/>
+ <xsd:element ref="base:NtzArt" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+</xsd:schema>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/xsd/zmr/ZMRProxy.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/xsd/zmr/ZMRProxy.xsd
new file mode 100644
index 00000000..a29b2b92
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/addresssearching_client/xsd/zmr/ZMRProxy.xsd
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Name: ZMRProxy.xsd
+Zweck: Fasst alle ZMR-Vorgangs XSD-Files zusammen
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2011-09-05 teo: Änderungsdienst ZWR (PN126)
+2010-03-08 teo: Historische Meldungskorrektur
+2010-02-01 teo: MeldebestätigungenAnforderung hinzugefügt
+2009-08-24 mp: TechnischeAnsicht hinzugefügt
+2009-08-06 teo: Auskunftssperre ändern hinzugefügt
+2009-05-07 teo: Ummeldeserviceabfrage hinzugefügt
+2009-01-23 teo: GISSuche hinzugefügt
+2006-11-06 tsch: ORFGISAnforderung hinzugefügt
+2006-03-21 tsch: SZRSammelabfrage hinzugefügt
+2005-01-14 tsch: Aviso aktivieren entfernt, Gleichstzungtabelle Warten hinzugefügt
+2004-11-22 tsch: Gerichtskommissaerabfrage hinzugefügt
+2004-09-28 tsch: Wehrfplichtigenanfrage, ablaufende Auskunfssperren-Suche hinzugefügt
+2004-09-27 tsch: Storno/Korrektur hinzugefügt
+2004-09-09 tsch: SZR-Vorgänge sowie Person trennen/zusammenführen hinzugefügt
+2004-08-24 tsch: GISAdressabfrage hinzugefügt
+2004-08-17 tsch: Erstellung
+-->
+
+<xsd:schema xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:include schemaLocation="../zmr/Adresssuche.xsd"/>
+</xsd:schema>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/ernp_client/openapi.json b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/ernp_client/openapi.json
new file mode 100644
index 00000000..9e09240f
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/ernp_client/openapi.json
@@ -0,0 +1,1940 @@
+{
+ "openapi" : "3.0.1",
+ "info" : {
+ "title" : "ERNP",
+ "version" : "1.0.0"
+ },
+ "servers" : [ {
+ "url" : "https://stportal.bmi.intra.gv.at/at.gv.bmi.erpsrv-p/srv/rest/",
+ "description" : "Produktion",
+ "variables" : { }
+ }, {
+ "url" : "https://stportal.bmi.intra.gv.at/at.gv.bmi.erpsrv-e/srv/rest/",
+ "description" : "Entwicklung",
+ "variables" : { }
+ }, {
+ "url" : "https://stportal.bmi.intra.gv.at/at.gv.bmi.erpsrv-t/srv/rest/",
+ "description" : "Interne Test",
+ "variables" : { }
+ }, {
+ "url" : "https://stportal.bmi.intra.gv.at/at.gv.bmi.erpsrv-a/srv/rest/",
+ "description" : "Externe Test",
+ "variables" : { }
+ }, {
+ "url" : "https://stportal.bmi.intra.gv.at/at.gv.bmi.erpsrv-b/srv/rest/",
+ "description" : "Businespartner Test",
+ "variables" : { }
+ }, {
+ "url" : "http://localhost:29200/at.gv.bmi.erpv01-d/srv/rest/",
+ "description" : "Lokal",
+ "variables" : { }
+ }, {
+ "url" : "http://localhost:29200/at.gv.bmi.erpv01-e/srv/rest/",
+ "description" : "Entwicklung (kein Portal)",
+ "variables" : { }
+ }, {
+ "url" : "http://localhost:29200/at.gv.bmi.erpv01-t/srv/rest/",
+ "description" : "Interne Test (kein Portal)",
+ "variables" : { }
+ }, {
+ "url" : "http://localhost:29200/at.gv.bmi.erpv01-a/srv/rest/",
+ "description" : "Externe Test (kein Portal)",
+ "variables" : { }
+ }, {
+ "url" : "http://localhost:29200/at.gv.bmi.erpv11-a/srv/rest/",
+ "description" : "Businespartner Test (kein Portal)",
+ "variables" : { }
+ } ],
+ "paths" : {
+ "/eidas/person/aendern" : {
+ "post" : {
+ "operationId" : "aendern",
+ "parameters" : [ {
+ "name" : "Client-Request-Time",
+ "in" : "header",
+ "description" : "Client-Requestzeit im ISO-8601 Format mit optionaler Zeitzone (zb '2016-10-27T16:36:08.993')",
+ "schema" : {
+ "type" : "string",
+ "format" : "date-time"
+ }
+ }, {
+ "name" : "Client-Request-Id",
+ "in" : "header",
+ "description" : "Client-Request ID (um Systemübergreifende Fehlersuche zu vereinfache)",
+ "schema" : {
+ "type" : "string"
+ }
+ }, {
+ "name" : "Client-Behkz",
+ "in" : "header",
+ "description" : "Client-Behördenkennzeichen",
+ "required" : true,
+ "schema" : {
+ "type" : "string"
+ }
+ }, {
+ "name" : "Client-Name",
+ "in" : "header",
+ "description" : "Client-Name bzw Applikationskürzel und Version des aufrufenden Systems (zb 'ZMR 3.4.5')",
+ "required" : true,
+ "schema" : {
+ "type" : "string"
+ }
+ } ],
+ "requestBody" : {
+ "content" : {
+ "application/json" : {
+ "schema" : {
+ "$ref" : "#/components/schemas/PersonAendern"
+ }
+ },
+ "application/xml" : {
+ "schema" : {
+ "$ref" : "#/components/schemas/PersonAendern"
+ }
+ }
+ }
+ },
+ "responses" : {
+ "default" : {
+ "description" : "Erfolgreicher Response hat Status 200 wenn Responsepayload vorhanden, sonst 204",
+ "content" : {
+ "application/json" : {
+ "schema" : {
+ "$ref" : "#/components/schemas/AendernResponse"
+ }
+ },
+ "application/xml" : {
+ "schema" : {
+ "$ref" : "#/components/schemas/AendernResponse"
+ }
+ }
+ }
+ },
+ "4XX" : {
+ "description" : "Client Fehler (kann vom Client behoben werden)",
+ "content" : {
+ "application/json" : {
+ "schema" : {
+ "$ref" : "#/components/schemas/Fault"
+ }
+ },
+ "application/xml" : {
+ "schema" : {
+ "$ref" : "#/components/schemas/Fault"
+ }
+ }
+ }
+ },
+ "5XX" : {
+ "description" : "Server Fehler (normalerweise nicht vom Client behebbar)",
+ "content" : {
+ "application/json" : {
+ "schema" : {
+ "$ref" : "#/components/schemas/Fault"
+ }
+ },
+ "application/xml" : {
+ "schema" : {
+ "$ref" : "#/components/schemas/Fault"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/eidas/person/anlegen" : {
+ "post" : {
+ "operationId" : "anlegen",
+ "parameters" : [ {
+ "name" : "Client-Request-Time",
+ "in" : "header",
+ "description" : "Client-Requestzeit im ISO-8601 Format mit optionaler Zeitzone (zb '2016-10-27T16:36:08.993')",
+ "schema" : {
+ "type" : "string",
+ "format" : "date-time"
+ }
+ }, {
+ "name" : "Client-Request-Id",
+ "in" : "header",
+ "description" : "Client-Request ID (um Systemübergreifende Fehlersuche zu vereinfache)",
+ "schema" : {
+ "type" : "string"
+ }
+ }, {
+ "name" : "Client-Behkz",
+ "in" : "header",
+ "description" : "Client-Behördenkennzeichen",
+ "required" : true,
+ "schema" : {
+ "type" : "string"
+ }
+ }, {
+ "name" : "Client-Name",
+ "in" : "header",
+ "description" : "Client-Name bzw Applikationskürzel und Version des aufrufenden Systems (zb 'ZMR 3.4.5')",
+ "required" : true,
+ "schema" : {
+ "type" : "string"
+ }
+ } ],
+ "requestBody" : {
+ "content" : {
+ "application/json" : {
+ "schema" : {
+ "$ref" : "#/components/schemas/PersonAnlegen"
+ }
+ },
+ "application/xml" : {
+ "schema" : {
+ "$ref" : "#/components/schemas/PersonAnlegen"
+ }
+ }
+ }
+ },
+ "responses" : {
+ "default" : {
+ "description" : "Erfolgreicher Response hat Status 200 wenn Responsepayload vorhanden, sonst 204",
+ "content" : {
+ "application/json" : {
+ "schema" : {
+ "$ref" : "#/components/schemas/AnlegenResponse"
+ }
+ },
+ "application/xml" : {
+ "schema" : {
+ "$ref" : "#/components/schemas/AnlegenResponse"
+ }
+ }
+ }
+ },
+ "4XX" : {
+ "description" : "Client Fehler (kann vom Client behoben werden)",
+ "content" : {
+ "application/json" : {
+ "schema" : {
+ "$ref" : "#/components/schemas/Fault"
+ }
+ },
+ "application/xml" : {
+ "schema" : {
+ "$ref" : "#/components/schemas/Fault"
+ }
+ }
+ }
+ },
+ "5XX" : {
+ "description" : "Server Fehler (normalerweise nicht vom Client behebbar)",
+ "content" : {
+ "application/json" : {
+ "schema" : {
+ "$ref" : "#/components/schemas/Fault"
+ }
+ },
+ "application/xml" : {
+ "schema" : {
+ "$ref" : "#/components/schemas/Fault"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/eidas/person/suchen" : {
+ "post" : {
+ "operationId" : "suchen",
+ "parameters" : [ {
+ "name" : "Client-Request-Time",
+ "in" : "header",
+ "description" : "Client-Requestzeit im ISO-8601 Format mit optionaler Zeitzone (zb '2016-10-27T16:36:08.993')",
+ "schema" : {
+ "type" : "string",
+ "format" : "date-time"
+ }
+ }, {
+ "name" : "Client-Request-Id",
+ "in" : "header",
+ "description" : "Client-Request ID (um Systemübergreifende Fehlersuche zu vereinfache)",
+ "schema" : {
+ "type" : "string"
+ }
+ }, {
+ "name" : "Client-Behkz",
+ "in" : "header",
+ "description" : "Client-Behördenkennzeichen",
+ "required" : true,
+ "schema" : {
+ "type" : "string"
+ }
+ }, {
+ "name" : "Client-Name",
+ "in" : "header",
+ "description" : "Client-Name bzw Applikationskürzel und Version des aufrufenden Systems (zb 'ZMR 3.4.5')",
+ "required" : true,
+ "schema" : {
+ "type" : "string"
+ }
+ } ],
+ "requestBody" : {
+ "content" : {
+ "application/json" : {
+ "schema" : {
+ "$ref" : "#/components/schemas/PersonSuchen"
+ }
+ },
+ "application/xml" : {
+ "schema" : {
+ "$ref" : "#/components/schemas/PersonSuchen"
+ }
+ }
+ }
+ },
+ "responses" : {
+ "default" : {
+ "description" : "Erfolgreicher Response hat Status 200 wenn Responsepayload vorhanden, sonst 204",
+ "content" : {
+ "application/json" : {
+ "schema" : {
+ "$ref" : "#/components/schemas/SuchenResponse"
+ }
+ },
+ "application/xml" : {
+ "schema" : {
+ "$ref" : "#/components/schemas/SuchenResponse"
+ }
+ }
+ }
+ },
+ "4XX" : {
+ "description" : "Client Fehler (kann vom Client behoben werden)",
+ "content" : {
+ "application/json" : {
+ "schema" : {
+ "$ref" : "#/components/schemas/Fault"
+ }
+ },
+ "application/xml" : {
+ "schema" : {
+ "$ref" : "#/components/schemas/Fault"
+ }
+ }
+ }
+ },
+ "5XX" : {
+ "description" : "Server Fehler (normalerweise nicht vom Client behebbar)",
+ "content" : {
+ "application/json" : {
+ "schema" : {
+ "$ref" : "#/components/schemas/Fault"
+ }
+ },
+ "application/xml" : {
+ "schema" : {
+ "$ref" : "#/components/schemas/Fault"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "components" : {
+ "schemas" : {
+ "Fault" : {
+ "required" : [ "message" ],
+ "type" : "object",
+ "properties" : {
+ "message" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Message"
+ }
+ },
+ "faultDetails" : {
+ "$ref" : "#/components/schemas/FaultDetails"
+ }
+ },
+ "xml" : {
+ "name" : "Fault"
+ }
+ },
+ "FaultDetails" : {
+ "required" : [ "fault" ],
+ "type" : "object",
+ "properties" : {
+ "faultNumber" : {
+ "type" : "integer",
+ "format" : "int32",
+ "xml" : {
+ "name" : "FaultNumber"
+ }
+ },
+ "fault" : {
+ "type" : "array",
+ "xml" : {
+ "name" : "Fault"
+ },
+ "items" : {
+ "$ref" : "#/components/schemas/FaultDetailsEntry"
+ }
+ }
+ }
+ },
+ "FaultDetailsEntry" : {
+ "type" : "object",
+ "properties" : {
+ "key" : {
+ "type" : "string",
+ "xml" : {
+ "attribute" : true
+ }
+ },
+ "message" : {
+ "type" : "string",
+ "xml" : {
+ "attribute" : true
+ }
+ }
+ }
+ },
+ "AendernResponse" : {
+ "required" : [ "person" ],
+ "type" : "object",
+ "properties" : {
+ "person" : {
+ "$ref" : "#/components/schemas/Person"
+ }
+ },
+ "xml" : {
+ "name" : "AendernResponse"
+ }
+ },
+ "AkademischerGrad" : {
+ "required" : [ "ebene", "kurzerName", "langerName", "stellung" ],
+ "type" : "object",
+ "properties" : {
+ "entityId" : {
+ "type" : "string",
+ "xml" : {
+ "attribute" : true
+ }
+ },
+ "gueltigAb" : {
+ "type" : "string",
+ "format" : "date-time",
+ "xml" : {
+ "attribute" : true
+ }
+ },
+ "gueltigBis" : {
+ "type" : "string",
+ "format" : "date-time",
+ "xml" : {
+ "attribute" : true
+ }
+ },
+ "ausgestelltVon" : {
+ "$ref" : "#/components/schemas/AusgestelltVon"
+ },
+ "ebene" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Ebene"
+ },
+ "enum" : [ "0", "1", "2", "2/3", "3" ]
+ },
+ "stellung" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Stellung"
+ },
+ "enum" : [ "Vorangestellt", "Nachgestellt" ]
+ },
+ "langerName" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "LangerName"
+ }
+ },
+ "kurzerName" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "KurzerName"
+ }
+ }
+ }
+ },
+ "Anschrift" : {
+ "required" : [ "staat", "strasse", "type" ],
+ "type" : "object",
+ "properties" : {
+ "entityId" : {
+ "type" : "string",
+ "xml" : {
+ "attribute" : true
+ }
+ },
+ "gueltigAb" : {
+ "type" : "string",
+ "format" : "date-time",
+ "xml" : {
+ "attribute" : true
+ }
+ },
+ "gueltigBis" : {
+ "type" : "string",
+ "format" : "date-time",
+ "xml" : {
+ "attribute" : true
+ }
+ },
+ "staat" : {
+ "$ref" : "#/components/schemas/Staat"
+ },
+ "gemeinde" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Gemeinde"
+ }
+ },
+ "strasse" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Strasse"
+ }
+ },
+ "postleitzahl" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Postleitzahl"
+ }
+ },
+ "hausnummer" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Hausnummer"
+ }
+ },
+ "adresszusatz" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Adresszusatz"
+ }
+ },
+ "stiege" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Stiege"
+ }
+ },
+ "tuer" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Tuer"
+ }
+ },
+ "kontaktinformationen" : {
+ "$ref" : "#/components/schemas/Kontaktinformationen"
+ },
+ "type" : {
+ "type" : "string"
+ }
+ },
+ "discriminator" : {
+ "propertyName" : "type"
+ }
+ },
+ "AnschriftInland" : {
+ "required" : [ "gemeinde", "hausnummer", "ort", "postleitzahl", "staat", "strasse" ],
+ "type" : "object",
+ "allOf" : [ {
+ "$ref" : "#/components/schemas/Anschrift"
+ }, {
+ "type" : "object",
+ "properties" : {
+ "adressstatus" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Adressstatus"
+ }
+ },
+ "ort" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Ort"
+ }
+ },
+ "ortZweisprachig" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "OrtZweisprachig"
+ }
+ },
+ "postort" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Postort"
+ }
+ },
+ "codes" : {
+ "$ref" : "#/components/schemas/Anschriftcodes"
+ },
+ "auskunftssperre" : {
+ "type" : "boolean",
+ "xml" : {
+ "name" : "Auskunftssperre"
+ }
+ },
+ "wohnsitzqualitaet" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Wohnsitzqualitaet"
+ },
+ "enum" : [ "H", "N", "O" ]
+ }
+ }
+ } ]
+ },
+ "AnschriftInlandAgs" : {
+ "required" : [ "gemeinde", "hausnummer", "ort", "postleitzahl", "staat", "strasse" ],
+ "type" : "object",
+ "allOf" : [ {
+ "$ref" : "#/components/schemas/Anschrift"
+ }, {
+ "type" : "object",
+ "properties" : {
+ "adressstatus" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Adressstatus"
+ }
+ },
+ "ort" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Ort"
+ }
+ },
+ "ortZweisprachig" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "OrtZweisprachig"
+ }
+ },
+ "postort" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Postort"
+ }
+ },
+ "codes" : {
+ "$ref" : "#/components/schemas/Anschriftcodes"
+ },
+ "auskunftssperre" : {
+ "type" : "boolean",
+ "xml" : {
+ "name" : "Auskunftssperre"
+ }
+ },
+ "wohnsitzqualitaet" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Wohnsitzqualitaet"
+ },
+ "enum" : [ "H", "N", "O" ]
+ },
+ "detailgrad" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Detailgrad"
+ }
+ },
+ "nutzungsartCode" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "NutzungsartCode"
+ }
+ },
+ "gebaeudeeigenschaft" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Gebaeudeeigenschaft"
+ }
+ }
+ }
+ } ]
+ },
+ "Anschriftcodes" : {
+ "type" : "object",
+ "properties" : {
+ "adresscode" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Adresscode",
+ "attribute" : true
+ }
+ },
+ "subcode" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Subcode",
+ "attribute" : true
+ }
+ },
+ "ortskennziffer" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Ortskennziffer",
+ "attribute" : true
+ }
+ },
+ "strassenkennziffer" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Strassenkennziffer",
+ "attribute" : true
+ }
+ },
+ "objektnummer" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Objektnummer",
+ "attribute" : true
+ }
+ },
+ "nutzungseinheitlaufnummer" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Nutzungseinheitlaufnummer",
+ "attribute" : true
+ }
+ },
+ "adrRefkey" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "AdrRefkey",
+ "attribute" : true
+ }
+ },
+ "gbrRefkey" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "GbrRefkey",
+ "attribute" : true
+ }
+ },
+ "gemeindekennziffer" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Gemeindekennziffer",
+ "attribute" : true
+ }
+ }
+ }
+ },
+ "AusgestelltVon" : {
+ "required" : [ "behoerde", "datum", "staat" ],
+ "type" : "object",
+ "properties" : {
+ "datum" : {
+ "type" : "string",
+ "format" : "date-time",
+ "xml" : {
+ "name" : "Datum"
+ }
+ },
+ "behoerde" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Behoerde"
+ }
+ },
+ "staat" : {
+ "$ref" : "#/components/schemas/Staat"
+ }
+ }
+ },
+ "Benutzer" : {
+ "required" : [ "benutzer" ],
+ "type" : "object",
+ "properties" : {
+ "benutzer" : {
+ "type" : "string",
+ "xml" : {
+ "attribute" : true
+ }
+ },
+ "behoerdenkennzeichen" : {
+ "type" : "string",
+ "xml" : {
+ "attribute" : true
+ }
+ }
+ }
+ },
+ "Eidas" : {
+ "required" : [ "art", "staatscode2", "wert" ],
+ "type" : "object",
+ "properties" : {
+ "entityId" : {
+ "type" : "string",
+ "xml" : {
+ "attribute" : true
+ }
+ },
+ "gueltigAb" : {
+ "type" : "string",
+ "format" : "date-time",
+ "xml" : {
+ "attribute" : true
+ }
+ },
+ "gueltigBis" : {
+ "type" : "string",
+ "format" : "date-time",
+ "xml" : {
+ "attribute" : true
+ }
+ },
+ "art" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Art"
+ }
+ },
+ "wert" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Wert"
+ }
+ },
+ "ausstellDatum" : {
+ "type" : "string",
+ "format" : "date-time",
+ "xml" : {
+ "name" : "AusstellDatum"
+ }
+ },
+ "ablaufDatum" : {
+ "type" : "string",
+ "format" : "date-time",
+ "xml" : {
+ "name" : "AblaufDatum"
+ }
+ },
+ "ausstellBehoerde" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "AusstellBehoerde"
+ }
+ },
+ "staatscode2" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Staatscode2"
+ }
+ }
+ }
+ },
+ "Kontaktinformationen" : {
+ "type" : "object",
+ "properties" : {
+ "firmenname1" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Firmenname1"
+ }
+ },
+ "firmenname2" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Firmenname2"
+ }
+ },
+ "ansprechpartner" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Ansprechpartner"
+ }
+ },
+ "telefon" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Telefon"
+ }
+ },
+ "mobil" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Mobil"
+ }
+ },
+ "fax" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Fax"
+ }
+ },
+ "email" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Email"
+ }
+ },
+ "postfach" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Postfach"
+ }
+ }
+ }
+ },
+ "LetzteOperation" : {
+ "required" : [ "begruendung", "durchgefuehrtVon" ],
+ "type" : "object",
+ "properties" : {
+ "begruendung" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Begruendung"
+ }
+ },
+ "durchgefuehrtVon" : {
+ "$ref" : "#/components/schemas/Benutzer"
+ },
+ "vorgang" : {
+ "type" : "string",
+ "xml" : {
+ "attribute" : true
+ }
+ },
+ "zeitpunkt" : {
+ "type" : "string",
+ "format" : "date-time",
+ "xml" : {
+ "attribute" : true
+ }
+ }
+ }
+ },
+ "PartialDate" : {
+ "required" : [ "jahr" ],
+ "type" : "object",
+ "properties" : {
+ "jahr" : {
+ "type" : "integer",
+ "format" : "int32",
+ "xml" : {
+ "attribute" : true
+ }
+ },
+ "monat" : {
+ "type" : "integer",
+ "format" : "int32",
+ "xml" : {
+ "attribute" : true
+ }
+ },
+ "tag" : {
+ "type" : "integer",
+ "format" : "int32",
+ "xml" : {
+ "attribute" : true
+ }
+ }
+ }
+ },
+ "Person" : {
+ "required" : [ "letzteOperation", "personendaten", "type" ],
+ "type" : "object",
+ "properties" : {
+ "letzteOperation" : {
+ "$ref" : "#/components/schemas/LetzteOperation"
+ },
+ "personendaten" : {
+ "$ref" : "#/components/schemas/PersonendatenErgebnis"
+ },
+ "anschrift" : {
+ "$ref" : "#/components/schemas/Anschrift"
+ },
+ "akademischerGrad" : {
+ "type" : "array",
+ "xml" : {
+ "name" : "AkademischerGrad"
+ },
+ "items" : {
+ "$ref" : "#/components/schemas/AkademischerGrad"
+ }
+ },
+ "reisedokument" : {
+ "type" : "array",
+ "xml" : {
+ "name" : "Reisedokument"
+ },
+ "items" : {
+ "$ref" : "#/components/schemas/Reisedokument"
+ }
+ },
+ "sonstigesDokument" : {
+ "type" : "array",
+ "xml" : {
+ "name" : "SonstigesDokument"
+ },
+ "items" : {
+ "$ref" : "#/components/schemas/SonstigesDokument"
+ }
+ },
+ "staatsangehoerigkeit" : {
+ "type" : "array",
+ "xml" : {
+ "name" : "Staatsangehoerigkeit"
+ },
+ "items" : {
+ "$ref" : "#/components/schemas/Staatsangehoerigkeit"
+ }
+ },
+ "eidas" : {
+ "type" : "array",
+ "xml" : {
+ "name" : "Eidas"
+ },
+ "items" : {
+ "$ref" : "#/components/schemas/Eidas"
+ }
+ },
+ "gueltigAb" : {
+ "type" : "string",
+ "format" : "date-time",
+ "xml" : {
+ "attribute" : true
+ }
+ },
+ "gueltigBis" : {
+ "type" : "string",
+ "format" : "date-time",
+ "xml" : {
+ "attribute" : true
+ }
+ },
+ "entityId" : {
+ "type" : "string",
+ "xml" : {
+ "attribute" : true
+ }
+ },
+ "version" : {
+ "type" : "string",
+ "format" : "date-time",
+ "xml" : {
+ "attribute" : true
+ }
+ },
+ "type" : {
+ "type" : "string"
+ }
+ },
+ "discriminator" : {
+ "propertyName" : "type"
+ }
+ },
+ "PersonendatenErgebnis" : {
+ "required" : [ "basiszahl", "familienname", "geburtsdatum", "vorname" ],
+ "type" : "object",
+ "properties" : {
+ "entityId" : {
+ "type" : "string",
+ "xml" : {
+ "attribute" : true
+ }
+ },
+ "gueltigAb" : {
+ "type" : "string",
+ "format" : "date-time",
+ "xml" : {
+ "attribute" : true
+ }
+ },
+ "gueltigBis" : {
+ "type" : "string",
+ "format" : "date-time",
+ "xml" : {
+ "attribute" : true
+ }
+ },
+ "familienname" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Familienname"
+ }
+ },
+ "nameVorEhe" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "NameVorEhe"
+ }
+ },
+ "vorname" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Vorname"
+ }
+ },
+ "geburtsbundesland" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Geburtsbundesland"
+ },
+ "enum" : [ "Burgenland", "Kärnten", "Niederösterreich", "Oberösterreich", "Salzburg", "Steiermark", "Tirol", "Vorarlberg", "Wien" ]
+ },
+ "geburtsort" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Geburtsort"
+ }
+ },
+ "geburtsstaat" : {
+ "$ref" : "#/components/schemas/Staat"
+ },
+ "geburtsdatum" : {
+ "$ref" : "#/components/schemas/PartialDate"
+ },
+ "geschlecht" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Geschlecht"
+ },
+ "enum" : [ "Männlich", "Weiblich" ]
+ },
+ "basiszahl" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Basiszahl"
+ }
+ },
+ "kitquelle" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Kitquelle"
+ }
+ },
+ "bpkZp" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "BpkZp"
+ }
+ },
+ "sterbedatum" : {
+ "$ref" : "#/components/schemas/PartialDate"
+ },
+ "geprueft" : {
+ "type" : "boolean",
+ "xml" : {
+ "name" : "Geprueft"
+ }
+ }
+ }
+ },
+ "Reisedokument" : {
+ "required" : [ "art" ],
+ "type" : "object",
+ "properties" : {
+ "entityId" : {
+ "type" : "string",
+ "xml" : {
+ "attribute" : true
+ }
+ },
+ "gueltigAb" : {
+ "type" : "string",
+ "format" : "date-time",
+ "xml" : {
+ "attribute" : true
+ }
+ },
+ "gueltigBis" : {
+ "type" : "string",
+ "format" : "date-time",
+ "xml" : {
+ "attribute" : true
+ }
+ },
+ "ausgestelltVon" : {
+ "$ref" : "#/components/schemas/AusgestelltVon"
+ },
+ "art" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Art"
+ },
+ "enum" : [ "Asylwerber", "Dienstpass", "Elektronisch", "Fremdenpass", "Konventionspass", "Personalausweis", "Reisepass", "Staatenlos", "Sonstiges" ]
+ },
+ "nummer" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Nummer"
+ }
+ }
+ }
+ },
+ "SonstigesDokument" : {
+ "required" : [ "art", "nummer" ],
+ "type" : "object",
+ "properties" : {
+ "entityId" : {
+ "type" : "string",
+ "xml" : {
+ "attribute" : true
+ }
+ },
+ "gueltigAb" : {
+ "type" : "string",
+ "format" : "date-time",
+ "xml" : {
+ "attribute" : true
+ }
+ },
+ "gueltigBis" : {
+ "type" : "string",
+ "format" : "date-time",
+ "xml" : {
+ "attribute" : true
+ }
+ },
+ "ausgestelltVon" : {
+ "$ref" : "#/components/schemas/AusgestelltVon"
+ },
+ "art" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Art"
+ },
+ "enum" : [ "Führerschein", "Geburtsurkunde", "Heiratsurkunde", "Sonstiges", "Staatsbürgerschaftsnachweis", "Sterbeurkunde", "Todeserklärung" ]
+ },
+ "lichtbildausweis" : {
+ "type" : "boolean",
+ "xml" : {
+ "name" : "Lichtbildausweis"
+ }
+ },
+ "nummer" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Nummer"
+ }
+ },
+ "name" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Name"
+ }
+ }
+ }
+ },
+ "Staat" : {
+ "type" : "object",
+ "properties" : {
+ "isoCode3" : {
+ "type" : "string",
+ "xml" : {
+ "attribute" : true
+ }
+ },
+ "name" : {
+ "type" : "string",
+ "xml" : {
+ "attribute" : true
+ }
+ }
+ }
+ },
+ "Staatsangehoerigkeit" : {
+ "required" : [ "staat" ],
+ "type" : "object",
+ "properties" : {
+ "entityId" : {
+ "type" : "string",
+ "xml" : {
+ "attribute" : true
+ }
+ },
+ "gueltigAb" : {
+ "type" : "string",
+ "format" : "date-time",
+ "xml" : {
+ "attribute" : true
+ }
+ },
+ "gueltigBis" : {
+ "type" : "string",
+ "format" : "date-time",
+ "xml" : {
+ "attribute" : true
+ }
+ },
+ "staat" : {
+ "$ref" : "#/components/schemas/Staat"
+ }
+ }
+ },
+ "ZmrPerson" : {
+ "required" : [ "letzteOperation", "personendaten", "qkz" ],
+ "type" : "object",
+ "allOf" : [ {
+ "$ref" : "#/components/schemas/Person"
+ }, {
+ "type" : "object",
+ "properties" : {
+ "auskunftssperre" : {
+ "type" : "boolean",
+ "xml" : {
+ "name" : "Auskunftssperre"
+ }
+ },
+ "qkz" : {
+ "type" : "array",
+ "xml" : {
+ "name" : "Qkz"
+ },
+ "items" : {
+ "type" : "string"
+ }
+ }
+ }
+ } ]
+ },
+ "Aendern" : {
+ "type" : "object",
+ "properties" : {
+ "personendaten" : {
+ "$ref" : "#/components/schemas/Personendaten"
+ },
+ "anschrift" : {
+ "$ref" : "#/components/schemas/Anschrift"
+ },
+ "akademischerGrad" : {
+ "type" : "array",
+ "xml" : {
+ "name" : "AkademischerGrad"
+ },
+ "items" : {
+ "$ref" : "#/components/schemas/AkademischerGrad"
+ }
+ },
+ "reisedokument" : {
+ "type" : "array",
+ "xml" : {
+ "name" : "Reisedokument"
+ },
+ "items" : {
+ "$ref" : "#/components/schemas/Reisedokument"
+ }
+ },
+ "sonstigesDokument" : {
+ "type" : "array",
+ "xml" : {
+ "name" : "SonstigesDokument"
+ },
+ "items" : {
+ "$ref" : "#/components/schemas/SonstigesDokument"
+ }
+ },
+ "staatsangehoerigkeit" : {
+ "type" : "array",
+ "xml" : {
+ "name" : "Staatsangehoerigkeit"
+ },
+ "items" : {
+ "$ref" : "#/components/schemas/Staatsangehoerigkeit"
+ }
+ },
+ "eidas" : {
+ "type" : "array",
+ "xml" : {
+ "name" : "Eidas"
+ },
+ "items" : {
+ "$ref" : "#/components/schemas/Eidas"
+ }
+ }
+ }
+ },
+ "Anlegen" : {
+ "type" : "object",
+ "properties" : {
+ "anschrift" : {
+ "$ref" : "#/components/schemas/Anschrift"
+ },
+ "akademischerGrad" : {
+ "type" : "array",
+ "xml" : {
+ "name" : "AkademischerGrad"
+ },
+ "items" : {
+ "$ref" : "#/components/schemas/AkademischerGrad"
+ }
+ },
+ "reisedokument" : {
+ "type" : "array",
+ "xml" : {
+ "name" : "Reisedokument"
+ },
+ "items" : {
+ "$ref" : "#/components/schemas/Reisedokument"
+ }
+ },
+ "sonstigesDokument" : {
+ "type" : "array",
+ "xml" : {
+ "name" : "SonstigesDokument"
+ },
+ "items" : {
+ "$ref" : "#/components/schemas/SonstigesDokument"
+ }
+ },
+ "staatsangehoerigkeit" : {
+ "type" : "array",
+ "xml" : {
+ "name" : "Staatsangehoerigkeit"
+ },
+ "items" : {
+ "$ref" : "#/components/schemas/Staatsangehoerigkeit"
+ }
+ },
+ "eidas" : {
+ "type" : "array",
+ "xml" : {
+ "name" : "Eidas"
+ },
+ "items" : {
+ "$ref" : "#/components/schemas/Eidas"
+ }
+ }
+ }
+ },
+ "Beenden" : {
+ "type" : "object",
+ "properties" : {
+ "entityId" : {
+ "type" : "array",
+ "xml" : {
+ "name" : "EntityId"
+ },
+ "items" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "EntityId"
+ }
+ }
+ }
+ }
+ },
+ "PersonAendern" : {
+ "required" : [ "begruendung", "entityId", "version" ],
+ "type" : "object",
+ "properties" : {
+ "begruendung" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Begruendung"
+ }
+ },
+ "anlegen" : {
+ "$ref" : "#/components/schemas/Anlegen"
+ },
+ "aendern" : {
+ "$ref" : "#/components/schemas/Aendern"
+ },
+ "beenden" : {
+ "$ref" : "#/components/schemas/Beenden"
+ },
+ "entityId" : {
+ "type" : "string",
+ "xml" : {
+ "attribute" : true
+ }
+ },
+ "version" : {
+ "type" : "string",
+ "format" : "date-time",
+ "xml" : {
+ "attribute" : true
+ }
+ }
+ },
+ "xml" : {
+ "name" : "PersonAendern"
+ }
+ },
+ "Personendaten" : {
+ "required" : [ "familienname", "geburtsdatum", "vorname" ],
+ "type" : "object",
+ "properties" : {
+ "entityId" : {
+ "type" : "string",
+ "xml" : {
+ "attribute" : true
+ }
+ },
+ "gueltigAb" : {
+ "type" : "string",
+ "format" : "date-time",
+ "xml" : {
+ "attribute" : true
+ }
+ },
+ "gueltigBis" : {
+ "type" : "string",
+ "format" : "date-time",
+ "xml" : {
+ "attribute" : true
+ }
+ },
+ "familienname" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Familienname"
+ }
+ },
+ "nameVorEhe" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "NameVorEhe"
+ }
+ },
+ "vorname" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Vorname"
+ }
+ },
+ "geburtsbundesland" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Geburtsbundesland"
+ },
+ "enum" : [ "Burgenland", "Kärnten", "Niederösterreich", "Oberösterreich", "Salzburg", "Steiermark", "Tirol", "Vorarlberg", "Wien" ]
+ },
+ "geburtsort" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Geburtsort"
+ }
+ },
+ "geburtsstaat" : {
+ "$ref" : "#/components/schemas/Staat"
+ },
+ "geburtsdatum" : {
+ "$ref" : "#/components/schemas/PartialDate"
+ },
+ "geschlecht" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Geschlecht"
+ },
+ "enum" : [ "Männlich", "Weiblich" ]
+ }
+ }
+ },
+ "AnlegenResponse" : {
+ "required" : [ "person" ],
+ "type" : "object",
+ "properties" : {
+ "person" : {
+ "$ref" : "#/components/schemas/Person"
+ }
+ },
+ "xml" : {
+ "name" : "AnlegenResponse"
+ }
+ },
+ "PersonAnlegen" : {
+ "required" : [ "anschrift", "begruendung", "personendaten" ],
+ "type" : "object",
+ "properties" : {
+ "begruendung" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Begruendung"
+ }
+ },
+ "personendaten" : {
+ "$ref" : "#/components/schemas/Personendaten"
+ },
+ "anschrift" : {
+ "$ref" : "#/components/schemas/Anschrift"
+ },
+ "akademischerGrad" : {
+ "type" : "array",
+ "xml" : {
+ "name" : "AkademischerGrad"
+ },
+ "items" : {
+ "$ref" : "#/components/schemas/AkademischerGrad"
+ }
+ },
+ "reisedokument" : {
+ "type" : "array",
+ "xml" : {
+ "name" : "Reisedokument"
+ },
+ "items" : {
+ "$ref" : "#/components/schemas/Reisedokument"
+ }
+ },
+ "sonstigesDokument" : {
+ "type" : "array",
+ "xml" : {
+ "name" : "SonstigesDokument"
+ },
+ "items" : {
+ "$ref" : "#/components/schemas/SonstigesDokument"
+ }
+ },
+ "staatsangehoerigkeit" : {
+ "type" : "array",
+ "xml" : {
+ "name" : "Staatsangehoerigkeit"
+ },
+ "items" : {
+ "$ref" : "#/components/schemas/Staatsangehoerigkeit"
+ }
+ },
+ "eidas" : {
+ "type" : "array",
+ "xml" : {
+ "name" : "Eidas"
+ },
+ "items" : {
+ "$ref" : "#/components/schemas/Eidas"
+ }
+ }
+ },
+ "xml" : {
+ "name" : "PersonAnlegen"
+ }
+ },
+ "SuchenResponse" : {
+ "type" : "object",
+ "properties" : {
+ "person" : {
+ "type" : "array",
+ "xml" : {
+ "name" : "Person"
+ },
+ "items" : {
+ "$ref" : "#/components/schemas/Person"
+ }
+ }
+ },
+ "xml" : {
+ "name" : "SuchenResponse"
+ }
+ },
+ "PersonSuchen" : {
+ "required" : [ "begruendung", "suchdaten", "suchoptionen" ],
+ "type" : "object",
+ "properties" : {
+ "begruendung" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Begruendung"
+ }
+ },
+ "suchoptionen" : {
+ "$ref" : "#/components/schemas/Suchoptionen"
+ },
+ "suchdaten" : {
+ "$ref" : "#/components/schemas/Suchdaten"
+ }
+ },
+ "xml" : {
+ "name" : "PersonSuchen"
+ }
+ },
+ "SuchAnschrift" : {
+ "type" : "object",
+ "properties" : {
+ "staat" : {
+ "$ref" : "#/components/schemas/Staat"
+ },
+ "gemeinde" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Gemeinde"
+ }
+ },
+ "strasse" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Strasse"
+ }
+ },
+ "ort" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Ort"
+ }
+ },
+ "postleitzahl" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Postleitzahl"
+ }
+ },
+ "hausnummer" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Hausnummer"
+ }
+ },
+ "adresszusatz" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Adresszusatz"
+ }
+ },
+ "stiege" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Stiege"
+ }
+ },
+ "tuer" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Tuer"
+ }
+ },
+ "postfach" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Postfach"
+ }
+ }
+ }
+ },
+ "SuchAusgestelltVon" : {
+ "type" : "object",
+ "properties" : {
+ "datum" : {
+ "type" : "string",
+ "format" : "date-time",
+ "xml" : {
+ "name" : "Datum"
+ }
+ },
+ "behoerde" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Behoerde"
+ }
+ },
+ "staat" : {
+ "$ref" : "#/components/schemas/Staat"
+ }
+ }
+ },
+ "SuchEidas" : {
+ "type" : "object",
+ "properties" : {
+ "art" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Art"
+ }
+ },
+ "wert" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Wert"
+ }
+ },
+ "ausstellDatum" : {
+ "type" : "string",
+ "format" : "date-time",
+ "xml" : {
+ "name" : "AusstellDatum"
+ }
+ },
+ "ablaufDatum" : {
+ "type" : "string",
+ "format" : "date-time",
+ "xml" : {
+ "name" : "AblaufDatum"
+ }
+ },
+ "ausstellBehoerde" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "AusstellBehoerde"
+ }
+ },
+ "staatscode2" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Staatscode2"
+ }
+ }
+ }
+ },
+ "SuchReisedokument" : {
+ "type" : "object",
+ "properties" : {
+ "art" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Art"
+ },
+ "enum" : [ "Asylwerber", "Dienstpass", "Elektronisch", "Fremdenpass", "Konventionspass", "Personalausweis", "Reisepass", "Staatenlos", "Sonstiges" ]
+ },
+ "ausgestelltVon" : {
+ "$ref" : "#/components/schemas/SuchAusgestelltVon"
+ },
+ "nummer" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Nummer"
+ }
+ }
+ }
+ },
+ "SuchStaatsangehoerigkeit" : {
+ "type" : "object",
+ "properties" : {
+ "staat" : {
+ "$ref" : "#/components/schemas/Staat"
+ }
+ }
+ },
+ "Suchdaten" : {
+ "required" : [ "familienname", "vorname" ],
+ "type" : "object",
+ "properties" : {
+ "basiszahl" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Basiszahl"
+ }
+ },
+ "bpkZp" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "BpkZp"
+ }
+ },
+ "fremdBpkBmiZp" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "FremdBpkBmiZp"
+ }
+ },
+ "entityId" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "EntityId"
+ }
+ },
+ "familienname" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Familienname"
+ }
+ },
+ "nameVorEhe" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "NameVorEhe"
+ }
+ },
+ "vorname" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Vorname"
+ }
+ },
+ "geburtsdatum" : {
+ "$ref" : "#/components/schemas/PartialDate"
+ },
+ "geburtsort" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Geburtsort"
+ }
+ },
+ "geburtsstaat" : {
+ "$ref" : "#/components/schemas/Staat"
+ },
+ "geschlecht" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Geschlecht"
+ },
+ "enum" : [ "Männlich", "Weiblich" ]
+ },
+ "anschrift" : {
+ "$ref" : "#/components/schemas/SuchAnschrift"
+ },
+ "reisedokument" : {
+ "$ref" : "#/components/schemas/SuchReisedokument"
+ },
+ "staatsangehoerigkeit" : {
+ "$ref" : "#/components/schemas/SuchStaatsangehoerigkeit"
+ },
+ "eidas" : {
+ "type" : "array",
+ "xml" : {
+ "name" : "Eidas"
+ },
+ "items" : {
+ "$ref" : "#/components/schemas/SuchEidas"
+ }
+ }
+ }
+ },
+ "Suchoptionen" : {
+ "required" : [ "historisch" ],
+ "type" : "object",
+ "properties" : {
+ "historisch" : {
+ "type" : "string",
+ "xml" : {
+ "name" : "Historisch"
+ },
+ "enum" : [ "Aktuell", "AktuellDannHistorisch", "AktuellUndHistorisch" ]
+ },
+ "formalisiert" : {
+ "type" : "boolean",
+ "xml" : {
+ "name" : "Formalisiert"
+ }
+ },
+ "sucheMitNamensteilen" : {
+ "type" : "boolean",
+ "xml" : {
+ "name" : "SucheMitNamensteilen"
+ }
+ },
+ "suchwizard" : {
+ "type" : "boolean",
+ "xml" : {
+ "name" : "Suchwizard"
+ }
+ },
+ "zmr" : {
+ "type" : "boolean",
+ "xml" : {
+ "name" : "Zmr"
+ }
+ }
+ },
+ "xml" : {
+ "name" : "Suchoptionen",
+ "namespace" : "http://bmi.gv.at/ernp"
+ }
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/szr_client/SZR-1.1.WSDL b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/szr_client/SZR-1.1.WSDL
new file mode 100644
index 00000000..3c34458d
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/szr_client/SZR-1.1.WSDL
@@ -0,0 +1,939 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions targetNamespace="urn:SZRServices" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" xmlns:ecdsa="http://www.w3.org/2001/04/xmldsig-more#" xmlns:pd="http://reference.e-government.gv.at/namespace/persondata/20020228#" xmlns:pvp="http://egov.gv.at/pvp1.xsd" xmlns:saml="urn:oasis:names:tc:SAML:1.0:assertion" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:szr="urn:SZRServices" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsse="http://schemas.xmlsoap.org/ws/2002/04/secext" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+ <types>
+ <xs:schema elementFormDefault="qualified" targetNamespace="http://reference.e-government.gv.at/namespace/persondata/20020228#">
+ <xs:complexType name="PhysicalPersonType">
+ <xs:sequence>
+ <xs:element minOccurs="0" name="Identification" type="pd:IdentificationType" />
+ <xs:element minOccurs="1" name="Name" type="pd:PersonNameType" />
+ <xs:element minOccurs="0" name="AlternativeName" type="pd:AlternativeNameType" />
+ <xs:element minOccurs="0" name="Sex" type="xs:string" />
+ <xs:element minOccurs="0" name="DateOfBirth" type="xs:string" />
+ <xs:element minOccurs="0" name="PlaceOfBirth" type="xs:string" />
+ <xs:element minOccurs="0" name="CountryOfBirth" type="xs:string" />
+ <xs:element minOccurs="0" name="Nationality" type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="IdentificationType">
+ <xs:sequence>
+ <xs:element minOccurs="0" name="Value" type="xs:string" />
+ <xs:element minOccurs="0" name="Type" type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="PersonNameType">
+ <xs:sequence>
+ <xs:element minOccurs="0" name="PrefixedDegree" type="xs:string" />
+ <xs:element name="GivenName" type="xs:string" nillable="true" />
+ <xs:element name="FamilyName" type="xs:string" nillable="true" />
+ <xs:element minOccurs="0" name="SuffixedDegree" type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="AlternativeNameType">
+ <xs:sequence>
+ <xs:element name="FamilyName" type="xs:string" nillable="true" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="PostalAddressType">
+ <xs:sequence>
+ <xs:element minOccurs="0" name="PostalCode" type="xs:string" />
+ <xs:element minOccurs="0" name="Municipality" type="xs:string" />
+ <xs:element minOccurs="0" name="Locality" type="xs:string" />
+ <xs:element minOccurs="0" name="StateCode3" type="xs:string" />
+ <xs:element minOccurs="0" name="DeliveryAddress" type="pd:DeliveryAddressType" />
+ <xs:element minOccurs="0" name="HistoricRecord" type="xs:boolean" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="DeliveryAddressType">
+ <xs:sequence>
+ <xs:element minOccurs="0" name="AddressLine" type="xs:string" />
+ <xs:element minOccurs="0" name="StreetName" type="xs:string" />
+ <xs:element minOccurs="0" name="BuildingNumber" type="xs:string" />
+ <xs:element minOccurs="0" name="Unit" type="xs:string" />
+ <xs:element minOccurs="0" name="DoorNumber" type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:schema>
+ <xs:schema elementFormDefault="qualified" targetNamespace="http://www.w3.org/2001/04/xmldsig-more#">
+ <xs:element name="ECDSAKeyValue" type="ecdsa:ECDSAKeyValueType" nillable="true" />
+ <xs:complexType name="ECDSAKeyValueType">
+ <xs:sequence>
+ <xs:element minOccurs="0" name="DomainParameters" type="ecdsa:DomainParamsType" />
+ <xs:element name="PublicKey" type="ecdsa:ECPointType" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="DomainParamsType">
+ <xs:sequence>
+ <xs:element minOccurs="0" name="NamedCurve" type="ecdsa:NamedCurveType" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="NamedCurveType">
+ <xs:attribute name="URN" type="xs:string" use="required" />
+ </xs:complexType>
+ <xs:complexType name="ECPointType">
+ <xs:sequence minOccurs="0">
+ <xs:element name="X" type="ecdsa:PrimeFieldElemType" />
+ <xs:element name="Y" type="ecdsa:PrimeFieldElemType" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="PrimeFieldElemType">
+ <xs:attribute name="Value" type="xs:string" use="required" />
+ </xs:complexType>
+ </xs:schema>
+ <xs:schema elementFormDefault="qualified" targetNamespace="http://www.w3.org/2000/09/xmldsig#" xmlns="http://www.w3.org/2001/XMLSchema">
+ <xs:import namespace="http://www.w3.org/2001/04/xmldsig-more#" />
+ <xs:complexType name="KeyValueType">
+ <xs:sequence>
+ <xs:element minOccurs="0" name="DSAKeyValue" type="dsig:DSAKeyValueType" />
+ <xs:element minOccurs="0" name="RSAKeyValue" type="dsig:RSAKeyValueType" />
+ <xs:element minOccurs="0" ref="ecdsa:ECDSAKeyValue" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="DSAKeyValueType">
+ <xs:sequence>
+ <xs:element minOccurs="0" name="P" type="xs:string" />
+ <xs:element minOccurs="0" name="Q" type="xs:string" />
+ <xs:element minOccurs="0" name="J" type="xs:string" />
+ <xs:element minOccurs="0" name="G" type="xs:string" />
+ <xs:element minOccurs="0" name="Y" type="xs:string" />
+ <!-- https://www.w3.org/TR/xmldsig-core/ defines PgenCounter THEN Seed, SZR.wsdl used Seed BEFORE PgenCounter. To keep it backwards compatible but allow the usual order, both ways are allowed. -->
+ <xs:choice maxOccurs="unbounded">
+ <xs:element minOccurs="0" name="PgenCounter" type="xs:string" />
+ <xs:element minOccurs="0" name="Seed" type="xs:string" />
+ </xs:choice>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="RSAKeyValueType">
+ <xs:sequence>
+ <xs:element minOccurs="0" name="Modulus" type="xs:string" />
+ <xs:element minOccurs="0" name="Exponent" type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:schema>
+ <xs:schema elementFormDefault="qualified" targetNamespace="urn:SZRServices">
+ <xs:import namespace="http://reference.e-government.gv.at/namespace/persondata/20020228#" />
+ <xs:import namespace="http://www.w3.org/2000/09/xmldsig#" />
+ <xs:element name="SZRException" type="szr:SZRException" />
+ <xs:complexType name="SZRException" />
+ <xs:complexType name="PersonInfoType">
+ <xs:sequence>
+ <xs:element name="Person" type="pd:PhysicalPersonType" />
+ <xs:element minOccurs="0" name="RegularDomicile" type="pd:PostalAddressType" />
+ <xs:element minOccurs="0" name="AddressCodes" type="szr:AddressCodesType" />
+ <xs:element minOccurs="0" name="TravelDocument" type="szr:TravelDocumentType" />
+ <xs:element minOccurs="0" name="DateOfBirthWildcard" type="xs:boolean" />
+ <xs:element minOccurs="0" name="AuskunftssperreGesetzt" type="xs:boolean" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="TravelDocumentType">
+ <xs:sequence>
+ <xs:element minOccurs="0" name="DocumentNumber" type="xs:string" />
+ <xs:element minOccurs="0" name="DocumentType" type="xs:string" />
+ <xs:element minOccurs="0" name="IssueDate" type="xs:string" />
+ <xs:element minOccurs="0" name="IssuingAuthority" type="xs:string" />
+ <xs:element minOccurs="0" name="IssuingCountry" type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="AddressCodesType">
+ <xs:sequence>
+ <xs:element minOccurs="0" name="GKZ" type="xs:string" />
+ <xs:element minOccurs="0" name="OKZ" type="xs:string" />
+ <xs:element minOccurs="0" name="SKZ" type="xs:string" />
+ <xs:element minOccurs="0" name="ADRCD" type="xs:string" />
+ <xs:element minOccurs="0" name="SUBCD" type="xs:string" />
+ <xs:element minOccurs="0" name="OBJNR" type="xs:string" />
+ <xs:element minOccurs="0" name="NTZLNR" type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:element name="TransformBPK">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="PersonInfo" type="szr:PersonInfoType" />
+ <xs:element name="InputBPK" type="xs:string" />
+ <xs:element name="InputBereichsKennung" type="xs:string" />
+ <xs:element name="Begruendung" type="xs:string" />
+ <xs:element maxOccurs="unbounded" name="Target" type="szr:FremdBPKRequestType" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="TransformBPKResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element maxOccurs="unbounded" name="TransformBPKReturn" type="szr:FremdBPKType" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetVKZPermission">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="VKZ" type="xs:string" />
+ <xs:element name="BereichsKennung" type="xs:string" />
+ <xs:element minOccurs="0" name="ParticipantId" type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetVKZPermissionResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="GetVKZPermissionReturn" type="szr:GetVKZPermissionResponseType" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:complexType name="IdentityLinkType">
+ <xs:sequence>
+ <xs:element name="PersonInfo" type="szr:PersonInfoType" />
+ <xs:element name="Assertion" type="xs:anyType" />
+ <xs:element minOccurs="0" name="AdditionalInfo" type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="ResultRecord">
+ <xs:sequence>
+ <xs:element name="PersonInfo" type="szr:PersonInfoType" />
+ <xs:element name="Register" type="xs:string" />
+ <xs:element name="bPK" type="xs:string" />
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="FremdBPK" type="szr:FremdBPKType" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="GetBPKKombiRequestType">
+ <xs:sequence>
+ <xs:element name="PersonInfo" type="szr:PersonInfoType" />
+ <xs:element minOccurs="0" name="InsertERnP">
+ <xs:simpleType>
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="NoInsert" />
+ <xs:enumeration value="InsertOnNoMatch" />
+ <xs:enumeration value="ForceInsert" />
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:element>
+ <xs:element minOccurs="0" name="Suchwizard" type="xs:boolean" />
+ <xs:element name="VKZ" type="xs:string" nillable="true" />
+ <xs:element minOccurs="0" name="BehoerdenKennzeichen" type="xs:string" />
+ <xs:element minOccurs="0" name="BereichsKennung" type="xs:string" />
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="Target" type="szr:FremdBPKRequestType" />
+ <xs:element minOccurs="0" name="Sessionid" type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="GetBPKKombiResponseType">
+ <xs:complexContent>
+ <xs:extension base="szr:GetBPKZPVResponseType">
+ <xs:sequence>
+ <xs:element name="FoundWithSuchwizard" type="xs:boolean" />
+ <xs:element name="Sessionid" type="xs:string" />
+ </xs:sequence>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:complexType name="GetBPKZPVRequestType">
+ <xs:sequence>
+ <xs:element name="PersonInfo" type="szr:PersonInfoType" />
+ <xs:element minOccurs="0" name="InsertERnP" type="xs:boolean" default="false" />
+ <xs:element minOccurs="1" name="VKZ" type="xs:string" />
+ <xs:element minOccurs="0" name="BehoerdenKennzeichen" type="xs:string" />
+ <xs:element minOccurs="0" name="BereichsKennung" type="xs:string" />
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="Target" type="szr:FremdBPKRequestType" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="GetBPKZPVResponseType">
+ <xs:sequence>
+ <xs:element maxOccurs="unbounded" name="ResultRecord" type="szr:ResultRecord" />
+ <xs:element name="InsertERnPResult" type="xs:boolean" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="GetBPKFromStammzahlEncryptedRequestType">
+ <xs:sequence>
+ <xs:element minOccurs="1" name="StammzahlEncrypted" type="xs:string" />
+ <xs:element minOccurs="0" name="PersonInfo" type="szr:PersonInfoType" />
+ <xs:element minOccurs="1" name="VKZ" type="xs:string" />
+ <xs:element minOccurs="0" name="BereichsKennung" type="xs:string" />
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="Target" type="szr:FremdBPKRequestType" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="GetBPKFromStammzahlEncryptedResponseType">
+ <xs:sequence>
+ <xs:element minOccurs="0" name="bPK" type="xs:string" />
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="FremdBPK" type="szr:FremdBPKType" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:element name="GetIdentityLink">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="PersonInfo" type="szr:PersonInfoType" />
+ <xs:element minOccurs="0" maxOccurs="unbounded" name="KeyValue" type="dsig:KeyValueType" />
+ <xs:element minOccurs="0" name="InsertERnP" type="xs:boolean" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetIdentityLinkResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="GetIdentityLinkReturn" type="szr:IdentityLinkType" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetIdentityLinkEidas">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="PersonInfo" type="szr:PersonInfoType" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetIdentityLinkEidasResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="GetIdentityLinkReturn" type="szr:IdentityLinkType" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetBPK">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="PersonInfo" type="szr:PersonInfoType" />
+ <xs:element minOccurs="0" name="BereichsKennung" type="xs:string" />
+ <xs:element minOccurs="0" name="VKZ" type="xs:string" />
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="Target" type="szr:FremdBPKRequestType" />
+ <xs:element minOccurs="0" name="ListMultiplePersons" type="xs:boolean" />
+ <xs:element minOccurs="0" name="InsertERnP" type="xs:boolean" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetBPKResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element minOccurs="0" name="GetBPKReturn" type="xs:string" />
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="FremdBPK" type="szr:FremdBPKType" />
+ <xs:element maxOccurs="5" minOccurs="0" name="PersonInfo" type="szr:PersonInfoType" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetBPKs">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element maxOccurs="unbounded" name="PersonInfo" type="szr:PersonInfoType" />
+ <xs:element minOccurs="0" name="BereichsKennung" type="xs:string" />
+ <xs:element name="VKZ" type="xs:string" />
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="Target" type="szr:FremdBPKRequestType" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetBPKsResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element maxOccurs="unbounded" name="ResultRecord" type="szr:GetBPKsResponseType" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:complexType name="GetBPKsResponseType">
+ <xs:sequence>
+ <xs:element minOccurs="0" name="BPK" type="xs:string" />
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="FremdBPK" type="szr:FremdBPKType" />
+ <xs:element minOccurs="0" name="Fault">
+ <xs:complexType>
+ <xs:attribute name="Code" type="xs:string" />
+ <xs:attribute name="String" type="xs:string" />
+ </xs:complexType>
+ </xs:element>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:element name="GetBPKKombi">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="GetBPKKombiRequest" type="szr:GetBPKKombiRequestType" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetBPKKombiResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="GetBPKKombiResponse" type="szr:GetBPKKombiResponseType" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetBPKZPV">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="GetBPKZPVRequest" type="szr:GetBPKZPVRequestType" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetBPKZPVResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="GetBPKZPVResponse" type="szr:GetBPKZPVResponseType" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetBPKFromStammzahlEncrypted">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="GetBPKFromStammzahlEncryptedRequest" type="szr:GetBPKFromStammzahlEncryptedRequestType" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetBPKFromStammzahlEncryptedResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="GetBPKFromStammzahlEncryptedResponse" type="szr:GetBPKFromStammzahlEncryptedResponseType" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="ValidateIdentityLink">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="IdentityLink" type="szr:IdentityLinkType" />
+ <xs:element name="BereichsKennung" type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="ValidateIdentityLinkResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="ValidateIdentityLinkReturn" type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="BPKzuBasiszahl">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="Bereich" type="xs:string" />
+ <xs:element name="BPK" type="xs:string" />
+ <xs:element maxOccurs="unbounded" name="BasisZahl" type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="BPKzuBasiszahlResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="BPKzuBasiszahlReturn" type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:complexType name="FremdBPKRequestType">
+ <xs:sequence>
+ <xs:element name="BereichsKennung" type="xs:string" />
+ <xs:element name="VKZ" type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="FremdBPKType">
+ <xs:sequence>
+ <xs:element name="BereichsKennung" type="xs:string" />
+ <xs:element name="FremdBPK" type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="GetVKZPermissionResponseType">
+ <xs:sequence>
+ <xs:element name="isAllowed" type="xs:boolean" />
+ <xs:element minOccurs="0" name="behSchluessel" type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:element name="BasiszahlZuBPK">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element minOccurs="0" name="VKZ" type="xs:string" />
+ <xs:element maxOccurs="unbounded" name="BasisZahl" type="xs:string" />
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="Bereich" type="xs:string" />
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="FremdBPKTargets" type="szr:FremdBPKRequestType" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:complexType name="BasiszahlZuBPKReturnType">
+ <xs:sequence>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="BPK" type="xs:string" />
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="FremdBPKs" type="szr:FremdBPKType" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:element name="BasiszahlZuBPKResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element maxOccurs="unbounded" name="BasiszahlZuBPKReturn" type="szr:BasiszahlZuBPKReturnType" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="ZMRAnwendungsIntegration">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="Bereich" type="xs:string" />
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="FremdBPKTargets" type="szr:FremdBPKRequestType" />
+ <xs:element maxOccurs="unbounded" name="ZMRfremdbPK" type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:complexType name="ZMRAnwendungsIntegrationReturnType">
+ <xs:sequence>
+ <xs:element name="BPK" type="xs:string" />
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="FremdBPKs" type="szr:FremdBPKType" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:element name="ZMRAnwendungsIntegrationResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element maxOccurs="unbounded" name="ZMRAnwendungsIntegrationReturn" type="szr:ZMRAnwendungsIntegrationReturnType" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetStammzahl">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="PersonInfo" type="szr:PersonInfoType" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetStammzahlResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="Stammzahl" type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetStammzahlEncrypted">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="PersonInfo" type="szr:PersonInfoType" />
+ <xs:element minOccurs="0" name="InsertERnP" type="xs:boolean" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetStammzahlEncryptedResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="Stammzahl" type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetVersion" nillable="true" />
+ <xs:element name="GetVersionResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="Version" type="xs:string" />
+ <xs:element name="Revision" type="xs:string" />
+ <xs:element name="Time" type="xs:string" />
+ <xs:element name="IdentityLinkNotAfter" type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ </xs:schema>
+ <xs:schema targetNamespace="http://egov.gv.at/pvp1.xsd">
+ <xs:include schemaLocation="pvp1.xsd" />
+ </xs:schema>
+ <xs:schema elementFormDefault="qualified" targetNamespace="http://schemas.xmlsoap.org/ws/2002/04/secext">
+ <xs:element name="Security">
+ <xs:complexType>
+ <xs:sequence>
+ <!-- add the pvpToken here. You can also uncomment the following line if you support XSD 1.1 -->
+ <!-- <xs:element ref="pvp:pvpToken" /> -->
+ <xs:any processContents="lax" minOccurs="0" maxOccurs="unbounded" />
+ </xs:sequence>
+ <xs:anyAttribute processContents="lax" />
+ </xs:complexType>
+ </xs:element>
+ </xs:schema>
+ </types>
+ <message name="Header">
+ <part name="SecurityHeader" element="wsse:Security" />
+ </message>
+ <message name="GetIdentityLinkRequest">
+ <part element="szr:GetIdentityLink" name="parameters" />
+ </message>
+ <message name="GetIdentityLinkResponse">
+ <part element="szr:GetIdentityLinkResponse" name="parameters" />
+ </message>
+ <message name="GetIdentityLinkEidasRequest">
+ <part element="szr:GetIdentityLinkEidas" name="parameters" />
+ </message>
+ <message name="GetIdentityLinkEidasResponse">
+ <part element="szr:GetIdentityLinkEidasResponse" name="parameters" />
+ </message>
+ <message name="GetBPKRequest">
+ <part element="szr:GetBPK" name="parameters" />
+ </message>
+ <message name="GetBPKResponse">
+ <part element="szr:GetBPKResponse" name="parameters" />
+ </message>
+ <message name="GetBPKsRequest">
+ <part element="szr:GetBPKs" name="parameters" />
+ </message>
+ <message name="GetBPKsResponse">
+ <part element="szr:GetBPKsResponse" name="parameters" />
+ </message>
+ <message name="GetBPKKombiRequest">
+ <part element="szr:GetBPKKombi" name="parameters" />
+ </message>
+ <message name="GetBPKKombiResponse">
+ <part element="szr:GetBPKKombiResponse" name="parameters" />
+ </message>
+ <message name="GetBPKZPVRequest">
+ <part element="szr:GetBPKZPV" name="parameters" />
+ </message>
+ <message name="GetBPKZPVResponse">
+ <part element="szr:GetBPKZPVResponse" name="parameters" />
+ </message>
+ <message name="GetBPKFromStammzahlEncryptedRequest">
+ <part element="szr:GetBPKFromStammzahlEncrypted" name="parameters" />
+ </message>
+ <message name="GetBPKFromStammzahlEncryptedResponse">
+ <part element="szr:GetBPKFromStammzahlEncryptedResponse" name="parameters" />
+ </message>
+ <message name="BPKzuBasiszahlRequest">
+ <part element="szr:BPKzuBasiszahl" name="parameters" />
+ </message>
+ <message name="BPKzuBasiszahlResponse">
+ <part element="szr:BPKzuBasiszahlResponse" name="parameters" />
+ </message>
+ <message name="BasiszahlZuBPKRequest">
+ <part element="szr:BasiszahlZuBPK" name="parameters" />
+ </message>
+ <message name="BasiszahlZuBPKResponse">
+ <part element="szr:BasiszahlZuBPKResponse" name="parameters" />
+ </message>
+ <message name="ValidateIdentityLinkRequest">
+ <part element="szr:ValidateIdentityLink" name="parameters" />
+ </message>
+ <message name="ValidateIdentityLinkResponse">
+ <part element="szr:ValidateIdentityLinkResponse" name="parameters" />
+ </message>
+ <message name="TransformBPKRequest">
+ <part element="szr:TransformBPK" name="parameters" />
+ </message>
+ <message name="TransformBPKResponse">
+ <part element="szr:TransformBPKResponse" name="parameters" />
+ </message>
+ <message name="GetVKZPermissionRequest">
+ <part element="szr:GetVKZPermission" name="parameters" />
+ </message>
+ <message name="GetVKZPermissionResponse">
+ <part element="szr:GetVKZPermissionResponse" name="parameters" />
+ </message>
+ <message name="ZMRAnwendungsIntegrationRequest">
+ <part element="szr:ZMRAnwendungsIntegration" name="parameters" />
+ </message>
+ <message name="ZMRAnwendungsIntegrationResponse">
+ <part element="szr:ZMRAnwendungsIntegrationResponse" name="parameters" />
+ </message>
+ <message name="GetStammzahlRequest">
+ <part element="szr:GetStammzahl" name="parameters" />
+ </message>
+ <message name="GetStammzahlResponse">
+ <part element="szr:GetStammzahlResponse" name="parameters" />
+ </message>
+ <message name="GetStammzahlEncryptedRequest">
+ <part element="szr:GetStammzahlEncrypted" name="parameters" />
+ </message>
+ <message name="GetStammzahlEncryptedResponse">
+ <part element="szr:GetStammzahlEncryptedResponse" name="parameters" />
+ </message>
+ <message name="GetVersionRequest">
+ <part element="szr:GetVersion" name="parameters" />
+ </message>
+ <message name="GetVersionResponse">
+ <part element="szr:GetVersionResponse" name="parameters" />
+ </message>
+ <message name="SZRException">
+ <part element="szr:SZRException" name="fault" />
+ </message>
+ <portType name="SZR">
+ <operation name="GetIdentityLink">
+ <input message="szr:GetIdentityLinkRequest" name="GetIdentityLinkRequest" />
+ <output message="szr:GetIdentityLinkResponse" name="GetIdentityLinkResponse" />
+ <fault message="szr:SZRException" name="SZRException" />
+ </operation>
+ <operation name="GetIdentityLinkEidas">
+ <input message="szr:GetIdentityLinkEidasRequest" name="GetIdentityLinkEidasRequest" />
+ <output message="szr:GetIdentityLinkEidasResponse" name="GetIdentityLinkEidasResponse" />
+ <fault message="szr:SZRException" name="SZRException" />
+ </operation>
+ <operation name="GetBPK">
+ <jaxws:bindings xmlns:jaxws="http://java.sun.com/xml/ns/jaxws">
+ <jaxws:enableWrapperStyle>false</jaxws:enableWrapperStyle>
+ </jaxws:bindings>
+ <input message="szr:GetBPKRequest" name="GetBPKRequest" />
+ <output message="szr:GetBPKResponse" name="GetBPKResponse" />
+ <fault message="szr:SZRException" name="SZRException" />
+ </operation>
+ <operation name="GetBPKs">
+ <input message="szr:GetBPKsRequest" name="GetBPKsRequest" />
+ <output message="szr:GetBPKsResponse" name="GetBPKsResponse" />
+ <fault message="szr:SZRException" name="SZRException" />
+ </operation>
+ <operation name="GetBPKKombi">
+ <input message="szr:GetBPKKombiRequest" name="GetBPKKombiRequest" />
+ <output message="szr:GetBPKKombiResponse" name="GetBPKKombiResponse" />
+ <fault message="szr:SZRException" name="SZRException" />
+ </operation>
+ <operation name="GetBPKZPV">
+ <input message="szr:GetBPKZPVRequest" name="GetBPKZPVRequest" />
+ <output message="szr:GetBPKZPVResponse" name="GetBPKZPVResponse" />
+ <fault message="szr:SZRException" name="SZRException" />
+ </operation>
+ <operation name="GetBPKFromStammzahlEncrypted">
+ <input message="szr:GetBPKFromStammzahlEncryptedRequest" name="GetBPKFromStammzahlEncryptedRequest" />
+ <output message="szr:GetBPKFromStammzahlEncryptedResponse" name="GetBPKFromStammzahlEncryptedResponse" />
+ <fault message="szr:SZRException" name="SZRException" />
+ </operation>
+ <operation name="ValidateIdentityLink">
+ <input message="szr:ValidateIdentityLinkRequest" name="ValidateIdentityLinkRequest" />
+ <output message="szr:ValidateIdentityLinkResponse" name="ValidateIdentityLinkResponse" />
+ <fault message="szr:SZRException" name="SZRException" />
+ </operation>
+ <operation name="TransformBPK">
+ <input message="szr:TransformBPKRequest" name="TransformBPKRequest" />
+ <output message="szr:TransformBPKResponse" name="TransformBPKResponse" />
+ <fault message="szr:SZRException" name="SZRException" />
+ </operation>
+ <operation name="GetVKZPermission">
+ <input message="szr:GetVKZPermissionRequest" name="GetVKZPermissionRequest" />
+ <output message="szr:GetVKZPermissionResponse" name="GetVKZPermissionResponse" />
+ <fault message="szr:SZRException" name="SZRException" />
+ </operation>
+ <operation name="BPKzuBasiszahl">
+ <input message="szr:BPKzuBasiszahlRequest" name="BPKzuBasiszahlRequest" />
+ <output message="szr:BPKzuBasiszahlResponse" name="BPKzuBasiszahlResponse" />
+ <fault message="szr:SZRException" name="SZRException" />
+ </operation>
+ <operation name="BasiszahlZuBPK">
+ <input message="szr:BasiszahlZuBPKRequest" name="BasiszahlZuBPKRequest" />
+ <output message="szr:BasiszahlZuBPKResponse" name="BasiszahlZuBPKResponse" />
+ <fault message="szr:SZRException" name="SZRException" />
+ </operation>
+ <operation name="ZMRAnwendungsIntegration">
+ <input message="szr:ZMRAnwendungsIntegrationRequest" name="ZMRAnwendungsIntegrationRequest" />
+ <output message="szr:ZMRAnwendungsIntegrationResponse" name="ZMRAnwendungsIntegrationResponse" />
+ <fault message="szr:SZRException" name="SZRException" />
+ </operation>
+ <operation name="GetStammzahl">
+ <input message="szr:GetStammzahlRequest" name="GetStammzahlRequest" />
+ <output message="szr:GetStammzahlResponse" name="GetStammzahlResponse" />
+ <fault message="szr:SZRException" name="SZRException" />
+ </operation>
+ <operation name="GetStammzahlEncrypted">
+ <input message="szr:GetStammzahlEncryptedRequest" name="GetStammzahlEncryptedRequest" />
+ <output message="szr:GetStammzahlEncryptedResponse" name="GetStammzahlEncryptedResponse" />
+ <fault message="szr:SZRException" name="SZRException" />
+ </operation>
+ <operation name="GetVersion">
+ <input message="szr:GetVersionRequest" name="GetVersionRequest" />
+ <output message="szr:GetVersionResponse" name="GetVersionResponse" />
+ <fault message="szr:SZRException" name="SZRException" />
+ </operation>
+ </portType>
+ <binding name="SZRSoapBinding" type="szr:SZR">
+ <wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" />
+ <operation name="GetIdentityLink">
+ <wsdlsoap:operation soapAction="" />
+ <input name="GetIdentityLinkRequest">
+ <wsdlsoap:header message="szr:Header" part="SecurityHeader" use="literal" />
+ <wsdlsoap:body use="literal" />
+ </input>
+ <output name="GetIdentityLinkResponse">
+ <wsdlsoap:body use="literal" />
+ </output>
+ <fault name="SZRException">
+ <wsdlsoap:fault name="SZRException" use="literal" />
+ </fault>
+ </operation>
+ <operation name="GetIdentityLinkEidas">
+ <wsdlsoap:operation soapAction="" />
+ <input name="GetIdentityLinkEidasRequest">
+ <wsdlsoap:header message="szr:Header" part="SecurityHeader" use="literal" />
+ <wsdlsoap:body use="literal" />
+ </input>
+ <output name="GetIdentityLinkEidasResponse">
+ <wsdlsoap:body use="literal" />
+ </output>
+ <fault name="SZRException">
+ <wsdlsoap:fault name="SZRException" use="literal" />
+ </fault>
+ </operation>
+ <operation name="GetBPK">
+ <wsdlsoap:operation soapAction="" />
+ <input name="GetBPKRequest">
+ <wsdlsoap:header message="szr:Header" part="SecurityHeader" use="literal" />
+ <wsdlsoap:body use="literal" />
+ </input>
+ <output name="GetBPKResponse">
+ <wsdlsoap:body use="literal" />
+ </output>
+ <fault name="SZRException">
+ <wsdlsoap:fault name="SZRException" use="literal" />
+ </fault>
+ </operation>
+ <operation name="GetBPKs">
+ <wsdlsoap:operation soapAction="" />
+ <input name="GetBPKsRequest">
+ <wsdlsoap:header message="szr:Header" part="SecurityHeader" use="literal" />
+ <wsdlsoap:body use="literal" />
+ </input>
+ <output name="GetBPKsResponse">
+ <wsdlsoap:body use="literal" />
+ </output>
+ <fault name="SZRException">
+ <wsdlsoap:fault name="SZRException" use="literal" />
+ </fault>
+ </operation>
+ <operation name="GetBPKKombi">
+ <wsdlsoap:operation soapAction="" />
+ <input name="GetBPKKombiRequest">
+ <wsdlsoap:header message="szr:Header" part="SecurityHeader" use="literal" />
+ <wsdlsoap:body use="literal" />
+ </input>
+ <output name="GetBPKKombiResponse">
+ <wsdlsoap:body use="literal" />
+ </output>
+ <fault name="SZRException">
+ <wsdlsoap:fault name="SZRException" use="literal" />
+ </fault>
+ </operation>
+ <operation name="GetBPKZPV">
+ <wsdlsoap:operation soapAction="" />
+ <input name="GetBPKZPVRequest">
+ <wsdlsoap:header message="szr:Header" part="SecurityHeader" use="literal" />
+ <wsdlsoap:body use="literal" />
+ </input>
+ <output name="GetBPKZPVResponse">
+ <wsdlsoap:body use="literal" />
+ </output>
+ <fault name="SZRException">
+ <wsdlsoap:fault name="SZRException" use="literal" />
+ </fault>
+ </operation>
+ <operation name="GetBPKFromStammzahlEncrypted">
+ <wsdlsoap:operation soapAction="" />
+ <input name="GetBPKFromStammzahlEncryptedRequest">
+ <wsdlsoap:header message="szr:Header" part="SecurityHeader" use="literal" />
+ <wsdlsoap:body use="literal" />
+ </input>
+ <output name="GetBPKFromStammzahlEncryptedResponse">
+ <wsdlsoap:body use="literal" />
+ </output>
+ <fault name="SZRException">
+ <wsdlsoap:fault name="SZRException" use="literal" />
+ </fault>
+ </operation>
+ <operation name="GetVKZPermission">
+ <wsdlsoap:operation soapAction="" />
+ <input name="GetVKZPermissionRequest">
+ <wsdlsoap:header message="szr:Header" part="SecurityHeader" use="literal" />
+ <wsdlsoap:body use="literal" />
+ </input>
+ <output name="GetVKZPermissionResponse">
+ <wsdlsoap:body use="literal" />
+ </output>
+ <fault name="SZRException">
+ <wsdlsoap:fault name="SZRException" use="literal" />
+ </fault>
+ </operation>
+ <operation name="ValidateIdentityLink">
+ <wsdlsoap:operation soapAction="" />
+ <input name="ValidateIdentityLinkRequest">
+ <wsdlsoap:header message="szr:Header" part="SecurityHeader" use="literal" />
+ <wsdlsoap:body use="literal" />
+ </input>
+ <output name="ValidateIdentityLinkResponse">
+ <wsdlsoap:body use="literal" />
+ </output>
+ <fault name="SZRException">
+ <wsdlsoap:fault name="SZRException" use="literal" />
+ </fault>
+ </operation>
+ <operation name="TransformBPK">
+ <wsdlsoap:operation soapAction="" />
+ <input name="TransformBPKRequest">
+ <wsdlsoap:header message="szr:Header" part="SecurityHeader" use="literal" />
+ <wsdlsoap:body use="literal" />
+ </input>
+ <output name="TransformBPKResponse">
+ <wsdlsoap:body use="literal" />
+ </output>
+ <fault name="SZRException">
+ <wsdlsoap:fault name="SZRException" use="literal" />
+ </fault>
+ </operation>
+ <operation name="BPKzuBasiszahl">
+ <wsdlsoap:operation soapAction="" />
+ <input name="BPKzuBasiszahlRequest">
+ <wsdlsoap:header message="szr:Header" part="SecurityHeader" use="literal" />
+ <wsdlsoap:body use="literal" />
+ </input>
+ <output name="BPKzuBasiszahlResponse">
+ <wsdlsoap:body use="literal" />
+ </output>
+ <fault name="SZRException">
+ <wsdlsoap:fault name="SZRException" use="literal" />
+ </fault>
+ </operation>
+ <operation name="BasiszahlZuBPK">
+ <wsdlsoap:operation soapAction="" />
+ <input name="BasiszahlZuBPKRequest">
+ <wsdlsoap:header message="szr:Header" part="SecurityHeader" use="literal" />
+ <wsdlsoap:body use="literal" />
+ </input>
+ <output name="BasiszahlZuBPKResponse">
+ <wsdlsoap:body use="literal" />
+ </output>
+ <fault name="SZRException">
+ <wsdlsoap:fault name="SZRException" use="literal" />
+ </fault>
+ </operation>
+ <operation name="ZMRAnwendungsIntegration">
+ <wsdlsoap:operation soapAction="" />
+ <input name="ZMRAnwendungsIntegrationRequest">
+ <wsdlsoap:header message="szr:Header" part="SecurityHeader" use="literal" />
+ <wsdlsoap:body use="literal" />
+ </input>
+ <output name="ZMRAnwendungsIntegrationResponse">
+ <wsdlsoap:body use="literal" />
+ </output>
+ <fault name="SZRException">
+ <wsdlsoap:fault name="SZRException" use="literal" />
+ </fault>
+ </operation>
+ <operation name="GetStammzahl">
+ <wsdlsoap:operation soapAction="" />
+ <input name="GetStammzahlRequest">
+ <wsdlsoap:header message="szr:Header" part="SecurityHeader" use="literal" />
+ <wsdlsoap:body use="literal" />
+ </input>
+ <output name="GetStammzahlResponse">
+ <wsdlsoap:body use="literal" />
+ </output>
+ <fault name="SZRException">
+ <wsdlsoap:fault name="SZRException" use="literal" />
+ </fault>
+ </operation>
+ <operation name="GetStammzahlEncrypted">
+ <wsdlsoap:operation soapAction="" />
+ <input name="GetStammzahlEncryptedRequest">
+ <wsdlsoap:header message="szr:Header" part="SecurityHeader" use="literal" />
+ <wsdlsoap:body use="literal" />
+ </input>
+ <output name="GetStammzahlEncryptedResponse">
+ <wsdlsoap:body use="literal" />
+ </output>
+ <fault name="SZRException">
+ <wsdlsoap:fault name="SZRException" use="literal" />
+ </fault>
+ </operation>
+ <operation name="GetVersion">
+ <wsdlsoap:operation soapAction="" />
+ <input name="GetVersionRequest">
+ <wsdlsoap:header message="szr:Header" part="SecurityHeader" use="literal" />
+ <wsdlsoap:body use="literal" />
+ </input>
+ <output name="GetVersionResponse">
+ <wsdlsoap:body use="literal" />
+ </output>
+ <fault name="SZRException">
+ <wsdlsoap:fault name="SZRException" use="literal" />
+ </fault>
+ </operation>
+ </binding>
+ <service name="SZRService">
+ <port binding="szr:SZRSoapBinding" name="SZRBusinesspartnerTestumgebung">
+ <wsdlsoap:address location="https://pvawp.bmi.gv.at/at.gv.bmi.szrsrv-b/services/SZR" />
+ </port>
+ <port binding="szr:SZRSoapBinding" name="SZRTestumgebung">
+ <wsdlsoap:address location="https://pvawp.bmi.gv.at/bmi.gv.at/soap/SZ2Services-T/services/SZR" />
+ </port>
+ <port binding="szr:SZRSoapBinding" name="SZRProduktionsumgebung">
+ <wsdlsoap:address location="https://pvawp.bmi.gv.at/bmi.gv.at/soap/SZ2Services/services/SZR" />
+ </port>
+ </service>
+</definitions> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/szr_client/SZR-1.WSDL b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/szr_client/SZR-1.WSDL
new file mode 100644
index 00000000..4ad2645a
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/szr_client/SZR-1.WSDL
@@ -0,0 +1,901 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions targetNamespace="urn:SZRServices" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" xmlns:ecdsa="http://www.w3.org/2001/04/xmldsig-more#" xmlns:pd="http://reference.e-government.gv.at/namespace/persondata/20020228#" xmlns:pvp="http://egov.gv.at/pvp1.xsd" xmlns:saml="urn:oasis:names:tc:SAML:1.0:assertion" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:szr="urn:SZRServices" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsse="http://schemas.xmlsoap.org/ws/2002/04/secext" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+ <types>
+ <xs:schema elementFormDefault="qualified" targetNamespace="http://reference.e-government.gv.at/namespace/persondata/20020228#">
+ <xs:complexType name="PhysicalPersonType">
+ <xs:sequence>
+ <xs:element minOccurs="0" name="Identification" type="pd:IdentificationType" />
+ <xs:element minOccurs="1" name="Name" type="pd:PersonNameType" />
+ <xs:element minOccurs="0" name="AlternativeName" type="pd:AlternativeNameType" />
+ <xs:element minOccurs="0" name="Sex" type="xs:string" />
+ <xs:element minOccurs="0" name="DateOfBirth" type="xs:string" />
+ <xs:element minOccurs="0" name="PlaceOfBirth" type="xs:string" />
+ <xs:element minOccurs="0" name="CountryOfBirth" type="xs:string" />
+ <xs:element minOccurs="0" name="Nationality" type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="IdentificationType">
+ <xs:sequence>
+ <xs:element minOccurs="0" name="Value" type="xs:string" />
+ <xs:element minOccurs="0" name="Type" type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="PersonNameType">
+ <xs:sequence>
+ <xs:element minOccurs="0" name="PrefixedDegree" type="xs:string" />
+ <xs:element name="GivenName" type="xs:string" nillable="true" />
+ <xs:element name="FamilyName" type="xs:string" nillable="true" />
+ <xs:element minOccurs="0" name="SuffixedDegree" type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="AlternativeNameType">
+ <xs:sequence>
+ <xs:element name="FamilyName" type="xs:string" nillable="true" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="PostalAddressType">
+ <xs:sequence>
+ <xs:element minOccurs="0" name="PostalCode" type="xs:string" />
+ <xs:element minOccurs="0" name="Municipality" type="xs:string" />
+ <xs:element minOccurs="0" name="Locality" type="xs:string" />
+ <xs:element minOccurs="0" name="StateCode3" type="xs:string" />
+ <xs:element minOccurs="0" name="DeliveryAddress" type="pd:DeliveryAddressType" />
+ <xs:element minOccurs="0" name="HistoricRecord" type="xs:boolean" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="DeliveryAddressType">
+ <xs:sequence>
+ <xs:element minOccurs="0" name="AddressLine" type="xs:string" />
+ <xs:element minOccurs="0" name="StreetName" type="xs:string" />
+ <xs:element minOccurs="0" name="BuildingNumber" type="xs:string" />
+ <xs:element minOccurs="0" name="Unit" type="xs:string" />
+ <xs:element minOccurs="0" name="DoorNumber" type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:schema>
+ <xs:schema elementFormDefault="qualified" targetNamespace="http://www.w3.org/2001/04/xmldsig-more#">
+ <xs:element name="ECDSAKeyValue" type="ecdsa:ECDSAKeyValueType" nillable="true" />
+ <xs:complexType name="ECDSAKeyValueType">
+ <xs:sequence>
+ <xs:element minOccurs="0" name="DomainParameters" type="ecdsa:DomainParamsType" />
+ <xs:element name="PublicKey" type="ecdsa:ECPointType" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="DomainParamsType">
+ <xs:sequence>
+ <xs:element minOccurs="0" name="NamedCurve" type="ecdsa:NamedCurveType" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="NamedCurveType">
+ <xs:attribute name="URN" type="xs:string" use="required" />
+ </xs:complexType>
+ <xs:complexType name="ECPointType">
+ <xs:sequence minOccurs="0">
+ <xs:element name="X" type="ecdsa:PrimeFieldElemType" />
+ <xs:element name="Y" type="ecdsa:PrimeFieldElemType" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="PrimeFieldElemType">
+ <xs:attribute name="Value" type="xs:string" use="required" />
+ </xs:complexType>
+ </xs:schema>
+ <xs:schema elementFormDefault="qualified" targetNamespace="http://www.w3.org/2000/09/xmldsig#" xmlns="http://www.w3.org/2001/XMLSchema">
+ <xs:import namespace="http://www.w3.org/2001/04/xmldsig-more#" />
+ <xs:complexType name="KeyValueType">
+ <xs:sequence>
+ <xs:element minOccurs="0" name="DSAKeyValue" type="dsig:DSAKeyValueType" />
+ <xs:element minOccurs="0" name="RSAKeyValue" type="dsig:RSAKeyValueType" />
+ <xs:element minOccurs="0" ref="ecdsa:ECDSAKeyValue" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="DSAKeyValueType">
+ <xs:sequence>
+ <xs:element minOccurs="0" name="P" type="xs:string" />
+ <xs:element minOccurs="0" name="Q" type="xs:string" />
+ <xs:element minOccurs="0" name="J" type="xs:string" />
+ <xs:element minOccurs="0" name="G" type="xs:string" />
+ <xs:element minOccurs="0" name="Y" type="xs:string" />
+ <!-- https://www.w3.org/TR/xmldsig-core/ defines PgenCounter THEN Seed, SZR.wsdl used Seed BEFORE PgenCounter. To keep it backwards compatible but allow the usual order, both ways are allowed. -->
+ <xs:choice maxOccurs="unbounded">
+ <xs:element minOccurs="0" name="PgenCounter" type="xs:string" />
+ <xs:element minOccurs="0" name="Seed" type="xs:string" />
+ </xs:choice>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="RSAKeyValueType">
+ <xs:sequence>
+ <xs:element minOccurs="0" name="Modulus" type="xs:string" />
+ <xs:element minOccurs="0" name="Exponent" type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:schema>
+ <xs:schema elementFormDefault="qualified" targetNamespace="urn:SZRServices">
+ <xs:import namespace="http://reference.e-government.gv.at/namespace/persondata/20020228#" />
+ <xs:import namespace="http://www.w3.org/2000/09/xmldsig#" />
+ <xs:element name="SZRException" type="szr:SZRException" />
+ <xs:complexType name="SZRException" />
+ <xs:complexType name="PersonInfoType">
+ <xs:sequence>
+ <xs:element name="Person" type="pd:PhysicalPersonType" />
+ <xs:element minOccurs="0" name="RegularDomicile" type="pd:PostalAddressType" />
+ <xs:element minOccurs="0" name="AddressCodes" type="szr:AddressCodesType" />
+ <xs:element minOccurs="0" name="TravelDocument" type="szr:TravelDocumentType" />
+ <xs:element minOccurs="0" name="DateOfBirthWildcard" type="xs:boolean" />
+ <xs:element minOccurs="0" name="AuskunftssperreGesetzt" type="xs:boolean" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="TravelDocumentType">
+ <xs:sequence>
+ <xs:element minOccurs="0" name="DocumentNumber" type="xs:string" />
+ <xs:element minOccurs="0" name="DocumentType" type="xs:string" />
+ <xs:element minOccurs="0" name="IssueDate" type="xs:string" />
+ <xs:element minOccurs="0" name="IssuingAuthority" type="xs:string" />
+ <xs:element minOccurs="0" name="IssuingCountry" type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="AddressCodesType">
+ <xs:sequence>
+ <xs:element minOccurs="0" name="GKZ" type="xs:string" />
+ <xs:element minOccurs="0" name="OKZ" type="xs:string" />
+ <xs:element minOccurs="0" name="SKZ" type="xs:string" />
+ <xs:element minOccurs="0" name="ADRCD" type="xs:string" />
+ <xs:element minOccurs="0" name="SUBCD" type="xs:string" />
+ <xs:element minOccurs="0" name="OBJNR" type="xs:string" />
+ <xs:element minOccurs="0" name="NTZLNR" type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:element name="TransformBPK">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="PersonInfo" type="szr:PersonInfoType" />
+ <xs:element name="InputBPK" type="xs:string" />
+ <xs:element name="InputBereichsKennung" type="xs:string" />
+ <xs:element name="Begruendung" type="xs:string" />
+ <xs:element maxOccurs="unbounded" name="Target" type="szr:FremdBPKRequestType" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="TransformBPKResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element maxOccurs="unbounded" name="TransformBPKReturn" type="szr:FremdBPKType" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetVKZPermission">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="VKZ" type="xs:string" />
+ <xs:element name="BereichsKennung" type="xs:string" />
+ <xs:element minOccurs="0" name="ParticipantId" type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetVKZPermissionResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="GetVKZPermissionReturn" type="szr:GetVKZPermissionResponseType" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:complexType name="IdentityLinkType">
+ <xs:sequence>
+ <xs:element name="PersonInfo" type="szr:PersonInfoType" />
+ <xs:element name="Assertion" type="xs:anyType" />
+ <xs:element minOccurs="0" name="AdditionalInfo" type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="ResultRecord">
+ <xs:sequence>
+ <xs:element name="PersonInfo" type="szr:PersonInfoType" />
+ <xs:element name="Register" type="xs:string" />
+ <xs:element name="bPK" type="xs:string" />
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="FremdBPK" type="szr:FremdBPKType" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="GetBPKKombiRequestType">
+ <xs:sequence>
+ <xs:element name="PersonInfo" type="szr:PersonInfoType" />
+ <xs:element minOccurs="0" name="InsertERnP">
+ <xs:simpleType>
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="NoInsert" />
+ <xs:enumeration value="InsertOnNoMatch" />
+ <xs:enumeration value="ForceInsert" />
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:element>
+ <xs:element minOccurs="0" name="Suchwizard" type="xs:boolean" />
+ <xs:element name="VKZ" type="xs:string" nillable="true" />
+ <xs:element minOccurs="0" name="BehoerdenKennzeichen" type="xs:string" />
+ <xs:element minOccurs="0" name="BereichsKennung" type="xs:string" />
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="Target" type="szr:FremdBPKRequestType" />
+ <xs:element minOccurs="0" name="Sessionid" type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="GetBPKKombiResponseType">
+ <xs:complexContent>
+ <xs:extension base="szr:GetBPKZPVResponseType">
+ <xs:sequence>
+ <xs:element name="FoundWithSuchwizard" type="xs:boolean" />
+ <xs:element name="Sessionid" type="xs:string" />
+ </xs:sequence>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:complexType name="GetBPKZPVRequestType">
+ <xs:sequence>
+ <xs:element name="PersonInfo" type="szr:PersonInfoType" />
+ <xs:element minOccurs="0" name="InsertERnP" type="xs:boolean" default="false" />
+ <xs:element minOccurs="1" name="VKZ" type="xs:string" />
+ <xs:element minOccurs="0" name="BehoerdenKennzeichen" type="xs:string" />
+ <xs:element minOccurs="0" name="BereichsKennung" type="xs:string" />
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="Target" type="szr:FremdBPKRequestType" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="GetBPKZPVResponseType">
+ <xs:sequence>
+ <xs:element maxOccurs="unbounded" name="ResultRecord" type="szr:ResultRecord" />
+ <xs:element name="InsertERnPResult" type="xs:boolean" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="GetBPKFromStammzahlEncryptedRequestType">
+ <xs:sequence>
+ <xs:element minOccurs="1" name="StammzahlEncrypted" type="xs:string" />
+ <xs:element minOccurs="0" name="PersonInfo" type="szr:PersonInfoType" />
+ <xs:element minOccurs="1" name="VKZ" type="xs:string" />
+ <xs:element minOccurs="0" name="BereichsKennung" type="xs:string" />
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="Target" type="szr:FremdBPKRequestType" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="GetBPKFromStammzahlEncryptedResponseType">
+ <xs:sequence>
+ <xs:element minOccurs="0" name="bPK" type="xs:string" />
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="FremdBPK" type="szr:FremdBPKType" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:element name="GetIdentityLink">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="PersonInfo" type="szr:PersonInfoType" />
+ <xs:element maxOccurs="unbounded" name="KeyValue" type="dsig:KeyValueType" />
+ <xs:element minOccurs="0" name="InsertERnP" type="xs:boolean" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetIdentityLinkResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="GetIdentityLinkReturn" type="szr:IdentityLinkType" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetBPK">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="PersonInfo" type="szr:PersonInfoType" />
+ <xs:element minOccurs="0" name="BereichsKennung" type="xs:string" />
+ <xs:element minOccurs="0" name="VKZ" type="xs:string" />
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="Target" type="szr:FremdBPKRequestType" />
+ <xs:element minOccurs="0" name="ListMultiplePersons" type="xs:boolean" />
+ <xs:element minOccurs="0" name="InsertERnP" type="xs:boolean" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetBPKResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element minOccurs="0" name="GetBPKReturn" type="xs:string" />
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="FremdBPK" type="szr:FremdBPKType" />
+ <xs:element maxOccurs="5" minOccurs="0" name="PersonInfo" type="szr:PersonInfoType" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetBPKs">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element maxOccurs="unbounded" name="PersonInfo" type="szr:PersonInfoType" />
+ <xs:element minOccurs="0" name="BereichsKennung" type="xs:string" />
+ <xs:element name="VKZ" type="xs:string" />
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="Target" type="szr:FremdBPKRequestType" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetBPKsResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element maxOccurs="unbounded" name="ResultRecord" type="szr:GetBPKsResponseType" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:complexType name="GetBPKsResponseType">
+ <xs:sequence>
+ <xs:element minOccurs="0" name="BPK" type="xs:string" />
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="FremdBPK" type="szr:FremdBPKType" />
+ <xs:element minOccurs="0" name="Fault">
+ <xs:complexType>
+ <xs:attribute name="Code" type="xs:string" />
+ <xs:attribute name="String" type="xs:string" />
+ </xs:complexType>
+ </xs:element>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:element name="GetBPKKombi">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="GetBPKKombiRequest" type="szr:GetBPKKombiRequestType" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetBPKKombiResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="GetBPKKombiResponse" type="szr:GetBPKKombiResponseType" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetBPKZPV">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="GetBPKZPVRequest" type="szr:GetBPKZPVRequestType" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetBPKZPVResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="GetBPKZPVResponse" type="szr:GetBPKZPVResponseType" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetBPKFromStammzahlEncrypted">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="GetBPKFromStammzahlEncryptedRequest" type="szr:GetBPKFromStammzahlEncryptedRequestType" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetBPKFromStammzahlEncryptedResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="GetBPKFromStammzahlEncryptedResponse" type="szr:GetBPKFromStammzahlEncryptedResponseType" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="ValidateIdentityLink">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="IdentityLink" type="szr:IdentityLinkType" />
+ <xs:element name="BereichsKennung" type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="ValidateIdentityLinkResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="ValidateIdentityLinkReturn" type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="BPKzuBasiszahl">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="Bereich" type="xs:string" />
+ <xs:element name="BPK" type="xs:string" />
+ <xs:element maxOccurs="unbounded" name="BasisZahl" type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="BPKzuBasiszahlResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="BPKzuBasiszahlReturn" type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:complexType name="FremdBPKRequestType">
+ <xs:sequence>
+ <xs:element name="BereichsKennung" type="xs:string" />
+ <xs:element name="VKZ" type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="FremdBPKType">
+ <xs:sequence>
+ <xs:element name="BereichsKennung" type="xs:string" />
+ <xs:element name="FremdBPK" type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="GetVKZPermissionResponseType">
+ <xs:sequence>
+ <xs:element name="isAllowed" type="xs:boolean" />
+ <xs:element minOccurs="0" name="behSchluessel" type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:element name="BasiszahlZuBPK">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element minOccurs="0" name="VKZ" type="xs:string" />
+ <xs:element maxOccurs="unbounded" name="BasisZahl" type="xs:string" />
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="Bereich" type="xs:string" />
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="FremdBPKTargets" type="szr:FremdBPKRequestType" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:complexType name="BasiszahlZuBPKReturnType">
+ <xs:sequence>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="BPK" type="xs:string" />
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="FremdBPKs" type="szr:FremdBPKType" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:element name="BasiszahlZuBPKResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element maxOccurs="unbounded" name="BasiszahlZuBPKReturn" type="szr:BasiszahlZuBPKReturnType" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="ZMRAnwendungsIntegration">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="Bereich" type="xs:string" />
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="FremdBPKTargets" type="szr:FremdBPKRequestType" />
+ <xs:element maxOccurs="unbounded" name="ZMRfremdbPK" type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:complexType name="ZMRAnwendungsIntegrationReturnType">
+ <xs:sequence>
+ <xs:element name="BPK" type="xs:string" />
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="FremdBPKs" type="szr:FremdBPKType" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:element name="ZMRAnwendungsIntegrationResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element maxOccurs="unbounded" name="ZMRAnwendungsIntegrationReturn" type="szr:ZMRAnwendungsIntegrationReturnType" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetStammzahl">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="PersonInfo" type="szr:PersonInfoType" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetStammzahlResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="Stammzahl" type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetStammzahlEncrypted">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="PersonInfo" type="szr:PersonInfoType" />
+ <xs:element minOccurs="0" name="InsertERnP" type="xs:boolean" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetStammzahlEncryptedResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="Stammzahl" type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetVersion" />
+ <xs:element name="GetVersionResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="Version" type="xs:string" />
+ <xs:element name="Revision" type="xs:string" />
+ <xs:element name="Time" type="xs:string" />
+ <xs:element name="IdentityLinkNotAfter" type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ </xs:schema>
+ <xs:schema targetNamespace="http://egov.gv.at/pvp1.xsd">
+ <xs:include schemaLocation="pvp1.xsd" />
+ </xs:schema>
+ <xs:schema elementFormDefault="qualified" targetNamespace="http://schemas.xmlsoap.org/ws/2002/04/secext">
+ <xs:element name="Security">
+ <xs:complexType>
+ <xs:sequence>
+ <!-- add the pvpToken here. You can also uncomment the following line if you support XSD 1.1 -->
+ <!-- <xs:element ref="pvp:pvpToken" /> -->
+ <xs:any processContents="lax" minOccurs="0" maxOccurs="unbounded" />
+ </xs:sequence>
+ <xs:anyAttribute processContents="lax" />
+ </xs:complexType>
+ </xs:element>
+ </xs:schema>
+ </types>
+ <message name="Header">
+ <part name="SecurityHeader" element="wsse:Security" />
+ </message>
+ <message name="GetIdentityLinkRequest">
+ <part element="szr:GetIdentityLink" name="parameters" />
+ </message>
+ <message name="GetIdentityLinkResponse">
+ <part element="szr:GetIdentityLinkResponse" name="parameters" />
+ </message>
+ <message name="GetBPKRequest">
+ <part element="szr:GetBPK" name="parameters" />
+ </message>
+ <message name="GetBPKResponse">
+ <part element="szr:GetBPKResponse" name="parameters" />
+ </message>
+ <message name="GetBPKsRequest">
+ <part element="szr:GetBPKs" name="parameters" />
+ </message>
+ <message name="GetBPKsResponse">
+ <part element="szr:GetBPKsResponse" name="parameters" />
+ </message>
+ <message name="GetBPKKombiRequest">
+ <part element="szr:GetBPKKombi" name="parameters" />
+ </message>
+ <message name="GetBPKKombiResponse">
+ <part element="szr:GetBPKKombiResponse" name="parameters" />
+ </message>
+ <message name="GetBPKZPVRequest">
+ <part element="szr:GetBPKZPV" name="parameters" />
+ </message>
+ <message name="GetBPKZPVResponse">
+ <part element="szr:GetBPKZPVResponse" name="parameters" />
+ </message>
+ <message name="GetBPKFromStammzahlEncryptedRequest">
+ <part element="szr:GetBPKFromStammzahlEncrypted" name="parameters" />
+ </message>
+ <message name="GetBPKFromStammzahlEncryptedResponse">
+ <part element="szr:GetBPKFromStammzahlEncryptedResponse" name="parameters" />
+ </message>
+ <message name="BPKzuBasiszahlRequest">
+ <part element="szr:BPKzuBasiszahl" name="parameters" />
+ </message>
+ <message name="BPKzuBasiszahlResponse">
+ <part element="szr:BPKzuBasiszahlResponse" name="parameters" />
+ </message>
+ <message name="BasiszahlZuBPKRequest">
+ <part element="szr:BasiszahlZuBPK" name="parameters" />
+ </message>
+ <message name="BasiszahlZuBPKResponse">
+ <part element="szr:BasiszahlZuBPKResponse" name="parameters" />
+ </message>
+ <message name="ValidateIdentityLinkRequest">
+ <part element="szr:ValidateIdentityLink" name="parameters" />
+ </message>
+ <message name="ValidateIdentityLinkResponse">
+ <part element="szr:ValidateIdentityLinkResponse" name="parameters" />
+ </message>
+ <message name="TransformBPKRequest">
+ <part element="szr:TransformBPK" name="parameters" />
+ </message>
+ <message name="TransformBPKResponse">
+ <part element="szr:TransformBPKResponse" name="parameters" />
+ </message>
+ <message name="GetVKZPermissionRequest">
+ <part element="szr:GetVKZPermission" name="parameters" />
+ </message>
+ <message name="GetVKZPermissionResponse">
+ <part element="szr:GetVKZPermissionResponse" name="parameters" />
+ </message>
+ <message name="ZMRAnwendungsIntegrationRequest">
+ <part element="szr:ZMRAnwendungsIntegration" name="parameters" />
+ </message>
+ <message name="ZMRAnwendungsIntegrationResponse">
+ <part element="szr:ZMRAnwendungsIntegrationResponse" name="parameters" />
+ </message>
+ <message name="GetStammzahlRequest">
+ <part element="szr:GetStammzahl" name="parameters" />
+ </message>
+ <message name="GetStammzahlResponse">
+ <part element="szr:GetStammzahlResponse" name="parameters" />
+ </message>
+ <message name="GetStammzahlEncryptedRequest">
+ <part element="szr:GetStammzahlEncrypted" name="parameters" />
+ </message>
+ <message name="GetStammzahlEncryptedResponse">
+ <part element="szr:GetStammzahlEncryptedResponse" name="parameters" />
+ </message>
+ <message name="GetVersionRequest">
+ <part element="szr:GetVersion" name="parameters" />
+ </message>
+ <message name="GetVersionResponse">
+ <part element="szr:GetVersionResponse" name="parameters" />
+ </message>
+ <message name="SZRException">
+ <part element="szr:SZRException" name="fault" />
+ </message>
+ <portType name="SZR">
+ <operation name="GetIdentityLink">
+ <input message="szr:GetIdentityLinkRequest" name="GetIdentityLinkRequest" />
+ <output message="szr:GetIdentityLinkResponse" name="GetIdentityLinkResponse" />
+ <fault message="szr:SZRException" name="SZRException" />
+ </operation>
+ <operation name="GetBPK">
+ <jaxws:bindings xmlns:jaxws="http://java.sun.com/xml/ns/jaxws">
+ <jaxws:enableWrapperStyle>false</jaxws:enableWrapperStyle>
+ </jaxws:bindings>
+ <input message="szr:GetBPKRequest" name="GetBPKRequest" />
+ <output message="szr:GetBPKResponse" name="GetBPKResponse" />
+ <fault message="szr:SZRException" name="SZRException" />
+ </operation>
+ <operation name="GetBPKs">
+ <input message="szr:GetBPKsRequest" name="GetBPKsRequest" />
+ <output message="szr:GetBPKsResponse" name="GetBPKsResponse" />
+ <fault message="szr:SZRException" name="SZRException" />
+ </operation>
+ <operation name="GetBPKKombi">
+ <input message="szr:GetBPKKombiRequest" name="GetBPKKombiRequest" />
+ <output message="szr:GetBPKKombiResponse" name="GetBPKKombiResponse" />
+ <fault message="szr:SZRException" name="SZRException" />
+ </operation>
+ <operation name="GetBPKZPV">
+ <input message="szr:GetBPKZPVRequest" name="GetBPKZPVRequest" />
+ <output message="szr:GetBPKZPVResponse" name="GetBPKZPVResponse" />
+ <fault message="szr:SZRException" name="SZRException" />
+ </operation>
+ <operation name="GetBPKFromStammzahlEncrypted">
+ <input message="szr:GetBPKFromStammzahlEncryptedRequest" name="GetBPKFromStammzahlEncryptedRequest" />
+ <output message="szr:GetBPKFromStammzahlEncryptedResponse" name="GetBPKFromStammzahlEncryptedResponse" />
+ <fault message="szr:SZRException" name="SZRException" />
+ </operation>
+ <operation name="ValidateIdentityLink">
+ <input message="szr:ValidateIdentityLinkRequest" name="ValidateIdentityLinkRequest" />
+ <output message="szr:ValidateIdentityLinkResponse" name="ValidateIdentityLinkResponse" />
+ <fault message="szr:SZRException" name="SZRException" />
+ </operation>
+ <operation name="TransformBPK">
+ <input message="szr:TransformBPKRequest" name="TransformBPKRequest" />
+ <output message="szr:TransformBPKResponse" name="TransformBPKResponse" />
+ <fault message="szr:SZRException" name="SZRException" />
+ </operation>
+ <operation name="GetVKZPermission">
+ <input message="szr:GetVKZPermissionRequest" name="GetVKZPermissionRequest" />
+ <output message="szr:GetVKZPermissionResponse" name="GetVKZPermissionResponse" />
+ <fault message="szr:SZRException" name="SZRException" />
+ </operation>
+ <operation name="BPKzuBasiszahl">
+ <input message="szr:BPKzuBasiszahlRequest" name="BPKzuBasiszahlRequest" />
+ <output message="szr:BPKzuBasiszahlResponse" name="BPKzuBasiszahlResponse" />
+ <fault message="szr:SZRException" name="SZRException" />
+ </operation>
+ <operation name="BasiszahlZuBPK">
+ <input message="szr:BasiszahlZuBPKRequest" name="BasiszahlZuBPKRequest" />
+ <output message="szr:BasiszahlZuBPKResponse" name="BasiszahlZuBPKResponse" />
+ <fault message="szr:SZRException" name="SZRException" />
+ </operation>
+ <operation name="ZMRAnwendungsIntegration">
+ <input message="szr:ZMRAnwendungsIntegrationRequest" name="ZMRAnwendungsIntegrationRequest" />
+ <output message="szr:ZMRAnwendungsIntegrationResponse" name="ZMRAnwendungsIntegrationResponse" />
+ <fault message="szr:SZRException" name="SZRException" />
+ </operation>
+ <operation name="GetStammzahl">
+ <input message="szr:GetStammzahlRequest" name="GetStammzahlRequest" />
+ <output message="szr:GetStammzahlResponse" name="GetStammzahlResponse" />
+ <fault message="szr:SZRException" name="SZRException" />
+ </operation>
+ <operation name="GetStammzahlEncrypted">
+ <input message="szr:GetStammzahlEncryptedRequest" name="GetStammzahlEncryptedRequest" />
+ <output message="szr:GetStammzahlEncryptedResponse" name="GetStammzahlEncryptedResponse" />
+ <fault message="szr:SZRException" name="SZRException" />
+ </operation>
+ <operation name="GetVersion">
+ <input message="szr:GetVersionRequest" name="GetVersionRequest" />
+ <output message="szr:GetVersionResponse" name="GetVersionResponse" />
+ <fault message="szr:SZRException" name="SZRException" />
+ </operation>
+ </portType>
+ <binding name="SZRSoapBinding" type="szr:SZR">
+ <wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" />
+ <operation name="GetIdentityLink">
+ <wsdlsoap:operation soapAction="" />
+ <input name="GetIdentityLinkRequest">
+ <wsdlsoap:header message="szr:Header" part="SecurityHeader" use="literal" />
+ <wsdlsoap:body use="literal" />
+ </input>
+ <output name="GetIdentityLinkResponse">
+ <wsdlsoap:body use="literal" />
+ </output>
+ <fault name="SZRException">
+ <wsdlsoap:fault name="SZRException" use="literal" />
+ </fault>
+ </operation>
+ <operation name="GetBPK">
+ <wsdlsoap:operation soapAction="" />
+ <input name="GetBPKRequest">
+ <wsdlsoap:header message="szr:Header" part="SecurityHeader" use="literal" />
+ <wsdlsoap:body use="literal" />
+ </input>
+ <output name="GetBPKResponse">
+ <wsdlsoap:body use="literal" />
+ </output>
+ <fault name="SZRException">
+ <wsdlsoap:fault name="SZRException" use="literal" />
+ </fault>
+ </operation>
+ <operation name="GetBPKs">
+ <wsdlsoap:operation soapAction="" />
+ <input name="GetBPKsRequest">
+ <wsdlsoap:header message="szr:Header" part="SecurityHeader" use="literal" />
+ <wsdlsoap:body use="literal" />
+ </input>
+ <output name="GetBPKsResponse">
+ <wsdlsoap:body use="literal" />
+ </output>
+ <fault name="SZRException">
+ <wsdlsoap:fault name="SZRException" use="literal" />
+ </fault>
+ </operation>
+ <operation name="GetBPKKombi">
+ <wsdlsoap:operation soapAction="" />
+ <input name="GetBPKKombiRequest">
+ <wsdlsoap:header message="szr:Header" part="SecurityHeader" use="literal" />
+ <wsdlsoap:body use="literal" />
+ </input>
+ <output name="GetBPKKombiResponse">
+ <wsdlsoap:body use="literal" />
+ </output>
+ <fault name="SZRException">
+ <wsdlsoap:fault name="SZRException" use="literal" />
+ </fault>
+ </operation>
+ <operation name="GetBPKZPV">
+ <wsdlsoap:operation soapAction="" />
+ <input name="GetBPKZPVRequest">
+ <wsdlsoap:header message="szr:Header" part="SecurityHeader" use="literal" />
+ <wsdlsoap:body use="literal" />
+ </input>
+ <output name="GetBPKZPVResponse">
+ <wsdlsoap:body use="literal" />
+ </output>
+ <fault name="SZRException">
+ <wsdlsoap:fault name="SZRException" use="literal" />
+ </fault>
+ </operation>
+ <operation name="GetBPKFromStammzahlEncrypted">
+ <wsdlsoap:operation soapAction="" />
+ <input name="GetBPKFromStammzahlEncryptedRequest">
+ <wsdlsoap:header message="szr:Header" part="SecurityHeader" use="literal" />
+ <wsdlsoap:body use="literal" />
+ </input>
+ <output name="GetBPKFromStammzahlEncryptedResponse">
+ <wsdlsoap:body use="literal" />
+ </output>
+ <fault name="SZRException">
+ <wsdlsoap:fault name="SZRException" use="literal" />
+ </fault>
+ </operation>
+ <operation name="GetVKZPermission">
+ <wsdlsoap:operation soapAction="" />
+ <input name="GetVKZPermissionRequest">
+ <wsdlsoap:header message="szr:Header" part="SecurityHeader" use="literal" />
+ <wsdlsoap:body use="literal" />
+ </input>
+ <output name="GetVKZPermissionResponse">
+ <wsdlsoap:body use="literal" />
+ </output>
+ <fault name="SZRException">
+ <wsdlsoap:fault name="SZRException" use="literal" />
+ </fault>
+ </operation>
+ <operation name="ValidateIdentityLink">
+ <wsdlsoap:operation soapAction="" />
+ <input name="ValidateIdentityLinkRequest">
+ <wsdlsoap:header message="szr:Header" part="SecurityHeader" use="literal" />
+ <wsdlsoap:body use="literal" />
+ </input>
+ <output name="ValidateIdentityLinkResponse">
+ <wsdlsoap:body use="literal" />
+ </output>
+ <fault name="SZRException">
+ <wsdlsoap:fault name="SZRException" use="literal" />
+ </fault>
+ </operation>
+ <operation name="TransformBPK">
+ <wsdlsoap:operation soapAction="" />
+ <input name="TransformBPKRequest">
+ <wsdlsoap:header message="szr:Header" part="SecurityHeader" use="literal" />
+ <wsdlsoap:body use="literal" />
+ </input>
+ <output name="TransformBPKResponse">
+ <wsdlsoap:body use="literal" />
+ </output>
+ <fault name="SZRException">
+ <wsdlsoap:fault name="SZRException" use="literal" />
+ </fault>
+ </operation>
+ <operation name="BPKzuBasiszahl">
+ <wsdlsoap:operation soapAction="" />
+ <input name="BPKzuBasiszahlRequest">
+ <wsdlsoap:header message="szr:Header" part="SecurityHeader" use="literal" />
+ <wsdlsoap:body use="literal" />
+ </input>
+ <output name="BPKzuBasiszahlResponse">
+ <wsdlsoap:body use="literal" />
+ </output>
+ <fault name="SZRException">
+ <wsdlsoap:fault name="SZRException" use="literal" />
+ </fault>
+ </operation>
+ <operation name="BasiszahlZuBPK">
+ <wsdlsoap:operation soapAction="" />
+ <input name="BasiszahlZuBPKRequest">
+ <wsdlsoap:header message="szr:Header" part="SecurityHeader" use="literal" />
+ <wsdlsoap:body use="literal" />
+ </input>
+ <output name="BasiszahlZuBPKResponse">
+ <wsdlsoap:body use="literal" />
+ </output>
+ <fault name="SZRException">
+ <wsdlsoap:fault name="SZRException" use="literal" />
+ </fault>
+ </operation>
+ <operation name="ZMRAnwendungsIntegration">
+ <wsdlsoap:operation soapAction="" />
+ <input name="ZMRAnwendungsIntegrationRequest">
+ <wsdlsoap:header message="szr:Header" part="SecurityHeader" use="literal" />
+ <wsdlsoap:body use="literal" />
+ </input>
+ <output name="ZMRAnwendungsIntegrationResponse">
+ <wsdlsoap:body use="literal" />
+ </output>
+ <fault name="SZRException">
+ <wsdlsoap:fault name="SZRException" use="literal" />
+ </fault>
+ </operation>
+ <operation name="GetStammzahl">
+ <wsdlsoap:operation soapAction="" />
+ <input name="GetStammzahlRequest">
+ <wsdlsoap:header message="szr:Header" part="SecurityHeader" use="literal" />
+ <wsdlsoap:body use="literal" />
+ </input>
+ <output name="GetStammzahlResponse">
+ <wsdlsoap:body use="literal" />
+ </output>
+ <fault name="SZRException">
+ <wsdlsoap:fault name="SZRException" use="literal" />
+ </fault>
+ </operation>
+ <operation name="GetStammzahlEncrypted">
+ <wsdlsoap:operation soapAction="" />
+ <input name="GetStammzahlEncryptedRequest">
+ <wsdlsoap:header message="szr:Header" part="SecurityHeader" use="literal" />
+ <wsdlsoap:body use="literal" />
+ </input>
+ <output name="GetStammzahlEncryptedResponse">
+ <wsdlsoap:body use="literal" />
+ </output>
+ <fault name="SZRException">
+ <wsdlsoap:fault name="SZRException" use="literal" />
+ </fault>
+ </operation>
+ <operation name="GetVersion">
+ <wsdlsoap:operation soapAction="" />
+ <input name="GetVersionRequest">
+ <wsdlsoap:header message="szr:Header" part="SecurityHeader" use="literal" />
+ <wsdlsoap:body use="literal" />
+ </input>
+ <output name="GetVersionResponse">
+ <wsdlsoap:body use="literal" />
+ </output>
+ <fault name="SZRException">
+ <wsdlsoap:fault name="SZRException" use="literal" />
+ </fault>
+ </operation>
+ </binding>
+ <service name="SZRService">
+ <port binding="szr:SZRSoapBinding" name="SZRBusinesspartnerTestumgebung">
+ <wsdlsoap:address location="https://pvawp.bmi.gv.at/at.gv.bmi.szrsrv-b/services/SZR" />
+ </port>
+ <port binding="szr:SZRSoapBinding" name="SZRTestumgebung">
+ <wsdlsoap:address location="https://pvawp.bmi.gv.at/bmi.gv.at/soap/SZ2Services-T/services/SZR" />
+ </port>
+ <port binding="szr:SZRSoapBinding" name="SZRProduktionsumgebung">
+ <wsdlsoap:address location="https://pvawp.bmi.gv.at/bmi.gv.at/soap/SZ2Services/services/SZR" />
+ </port>
+ </service>
+</definitions> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/szr_client/SZR_v4.0.wsdl b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/szr_client/SZR_v4.0.wsdl
new file mode 100644
index 00000000..e7f296bd
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/szr_client/SZR_v4.0.wsdl
@@ -0,0 +1,441 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions targetNamespace="urn:SZRServices" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" xmlns:ecdsa="http://www.w3.org/2001/04/xmldsig-more#" xmlns:pd="http://reference.e-government.gv.at/namespace/persondata/20020228#" xmlns:pvp="http://egov.gv.at/pvp1.xsd" xmlns:saml="urn:oasis:names:tc:SAML:1.0:assertion" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:szr="urn:SZRServices" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsse="http://schemas.xmlsoap.org/ws/2002/04/secext" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+ <types>
+ <xs:schema>
+ <xs:import namespace="urn:SZRServices" schemaLocation="szr_v4.0.xsd"/>
+ </xs:schema>
+ </types>
+ <message name="Header">
+ <part name="SecurityHeader" element="wsse:Security" />
+ </message>
+ <message name="GetIdentityLinkRequest">
+ <part element="szr:GetIdentityLink" name="parameters" />
+ </message>
+ <message name="GetIdentityLinkResponse">
+ <part element="szr:GetIdentityLinkResponse" name="parameters" />
+ </message>
+ <message name="GetIdentityLinkEidasRequest">
+ <part element="szr:GetIdentityLinkEidas" name="parameters" />
+ </message>
+ <message name="GetIdentityLinkEidasResponse">
+ <part element="szr:GetIdentityLinkEidasResponse" name="parameters" />
+ </message>
+ <message name="GetBPKRequest">
+ <part element="szr:GetBPK" name="parameters" />
+ </message>
+ <message name="GetBPKResponse">
+ <part element="szr:GetBPKResponse" name="parameters" />
+ </message>
+ <message name="GetBPKsRequest">
+ <part element="szr:GetBPKs" name="parameters" />
+ </message>
+ <message name="GetBPKsResponse">
+ <part element="szr:GetBPKsResponse" name="parameters" />
+ </message>
+ <message name="GetBPKKombiRequest">
+ <part element="szr:GetBPKKombi" name="parameters" />
+ </message>
+ <message name="GetBPKKombiResponse">
+ <part element="szr:GetBPKKombiResponse" name="parameters" />
+ </message>
+ <message name="GetBPKZPVRequest">
+ <part element="szr:GetBPKZPV" name="parameters" />
+ </message>
+ <message name="GetBPKZPVResponse">
+ <part element="szr:GetBPKZPVResponse" name="parameters" />
+ </message>
+ <message name="GetBPKFromStammzahlEncryptedRequest">
+ <part element="szr:GetBPKFromStammzahlEncrypted" name="parameters" />
+ </message>
+ <message name="GetBPKFromStammzahlEncryptedResponse">
+ <part element="szr:GetBPKFromStammzahlEncryptedResponse" name="parameters" />
+ </message>
+ <message name="SignContentRequest">
+ <part element="szr:SignContent" name="parameters" />
+ </message>
+ <message name="SignContentResponse">
+ <part element="szr:SignContentResponse" name="parameters" />
+ </message>
+ <message name="BPKzuBasiszahlRequest">
+ <part element="szr:BPKzuBasiszahl" name="parameters" />
+ </message>
+ <message name="BPKzuBasiszahlResponse">
+ <part element="szr:BPKzuBasiszahlResponse" name="parameters" />
+ </message>
+ <message name="BasiszahlZuBPKRequest">
+ <part element="szr:BasiszahlZuBPK" name="parameters" />
+ </message>
+ <message name="BasiszahlZuBPKResponse">
+ <part element="szr:BasiszahlZuBPKResponse" name="parameters" />
+ </message>
+ <message name="ValidateIdentityLinkRequest">
+ <part element="szr:ValidateIdentityLink" name="parameters" />
+ </message>
+ <message name="ValidateIdentityLinkResponse">
+ <part element="szr:ValidateIdentityLinkResponse" name="parameters" />
+ </message>
+ <message name="TransformBPKRequest">
+ <part element="szr:TransformBPK" name="parameters" />
+ </message>
+ <message name="TransformBPKResponse">
+ <part element="szr:TransformBPKResponse" name="parameters" />
+ </message>
+ <message name="GetVKZPermissionRequest">
+ <part element="szr:GetVKZPermission" name="parameters" />
+ </message>
+ <message name="GetVKZPermissionResponse">
+ <part element="szr:GetVKZPermissionResponse" name="parameters" />
+ </message>
+ <message name="ZMRAnwendungsIntegrationRequest">
+ <part element="szr:ZMRAnwendungsIntegration" name="parameters" />
+ </message>
+ <message name="ZMRAnwendungsIntegrationResponse">
+ <part element="szr:ZMRAnwendungsIntegrationResponse" name="parameters" />
+ </message>
+ <message name="GetStammzahlRequest">
+ <part element="szr:GetStammzahl" name="parameters" />
+ </message>
+ <message name="GetStammzahlResponse">
+ <part element="szr:GetStammzahlResponse" name="parameters" />
+ </message>
+ <message name="GetStammzahlEncryptedRequest">
+ <part element="szr:GetStammzahlEncrypted" name="parameters" />
+ </message>
+ <message name="GetStammzahlEncryptedResponse">
+ <part element="szr:GetStammzahlEncryptedResponse" name="parameters" />
+ </message>
+ <message name="GetVersionRequest">
+ <part element="szr:GetVersion" name="parameters" />
+ </message>
+ <message name="GetVersionResponse">
+ <part element="szr:GetVersionResponse" name="parameters" />
+ </message>
+ <message name="SZRException">
+ <part element="szr:SZRException" name="fault" />
+ </message>
+ <portType name="SZR">
+ <operation name="GetIdentityLink">
+ <input message="szr:GetIdentityLinkRequest" name="GetIdentityLinkRequest" />
+ <output message="szr:GetIdentityLinkResponse" name="GetIdentityLinkResponse" />
+ <fault message="szr:SZRException" name="SZRException" />
+ </operation>
+ <operation name="GetIdentityLinkEidas">
+ <input message="szr:GetIdentityLinkEidasRequest" name="GetIdentityLinkEidasRequest" />
+ <output message="szr:GetIdentityLinkEidasResponse" name="GetIdentityLinkEidasResponse" />
+ <fault message="szr:SZRException" name="SZRException" />
+ </operation>
+ <operation name="GetBPK">
+ <jaxws:bindings xmlns:jaxws="http://java.sun.com/xml/ns/jaxws">
+ <jaxws:enableWrapperStyle>false</jaxws:enableWrapperStyle>
+ </jaxws:bindings>
+ <input message="szr:GetBPKRequest" name="GetBPKRequest" />
+ <output message="szr:GetBPKResponse" name="GetBPKResponse" />
+ <fault message="szr:SZRException" name="SZRException" />
+ </operation>
+ <operation name="GetBPKs">
+ <input message="szr:GetBPKsRequest" name="GetBPKsRequest" />
+ <output message="szr:GetBPKsResponse" name="GetBPKsResponse" />
+ <fault message="szr:SZRException" name="SZRException" />
+ </operation>
+ <operation name="GetBPKKombi">
+ <input message="szr:GetBPKKombiRequest" name="GetBPKKombiRequest" />
+ <output message="szr:GetBPKKombiResponse" name="GetBPKKombiResponse" />
+ <fault message="szr:SZRException" name="SZRException" />
+ </operation>
+ <operation name="GetBPKZPV">
+ <input message="szr:GetBPKZPVRequest" name="GetBPKZPVRequest" />
+ <output message="szr:GetBPKZPVResponse" name="GetBPKZPVResponse" />
+ <fault message="szr:SZRException" name="SZRException" />
+ </operation>
+ <operation name="GetBPKFromStammzahlEncrypted">
+ <input message="szr:GetBPKFromStammzahlEncryptedRequest" name="GetBPKFromStammzahlEncryptedRequest" />
+ <output message="szr:GetBPKFromStammzahlEncryptedResponse" name="GetBPKFromStammzahlEncryptedResponse" />
+ <fault message="szr:SZRException" name="SZRException" />
+ </operation>
+ <operation name="SignContent">
+ <input message="szr:SignContentRequest" name="SignContentRequest" />
+ <output message="szr:SignContentResponse" name="SignContentResponse" />
+ <fault message="szr:SZRException" name="SZRException" />
+ </operation>
+ <operation name="ValidateIdentityLink">
+ <input message="szr:ValidateIdentityLinkRequest" name="ValidateIdentityLinkRequest" />
+ <output message="szr:ValidateIdentityLinkResponse" name="ValidateIdentityLinkResponse" />
+ <fault message="szr:SZRException" name="SZRException" />
+ </operation>
+ <operation name="TransformBPK">
+ <input message="szr:TransformBPKRequest" name="TransformBPKRequest" />
+ <output message="szr:TransformBPKResponse" name="TransformBPKResponse" />
+ <fault message="szr:SZRException" name="SZRException" />
+ </operation>
+ <operation name="GetVKZPermission">
+ <input message="szr:GetVKZPermissionRequest" name="GetVKZPermissionRequest" />
+ <output message="szr:GetVKZPermissionResponse" name="GetVKZPermissionResponse" />
+ <fault message="szr:SZRException" name="SZRException" />
+ </operation>
+ <operation name="BPKzuBasiszahl">
+ <input message="szr:BPKzuBasiszahlRequest" name="BPKzuBasiszahlRequest" />
+ <output message="szr:BPKzuBasiszahlResponse" name="BPKzuBasiszahlResponse" />
+ <fault message="szr:SZRException" name="SZRException" />
+ </operation>
+ <operation name="BasiszahlZuBPK">
+ <input message="szr:BasiszahlZuBPKRequest" name="BasiszahlZuBPKRequest" />
+ <output message="szr:BasiszahlZuBPKResponse" name="BasiszahlZuBPKResponse" />
+ <fault message="szr:SZRException" name="SZRException" />
+ </operation>
+ <operation name="ZMRAnwendungsIntegration">
+ <input message="szr:ZMRAnwendungsIntegrationRequest" name="ZMRAnwendungsIntegrationRequest" />
+ <output message="szr:ZMRAnwendungsIntegrationResponse" name="ZMRAnwendungsIntegrationResponse" />
+ <fault message="szr:SZRException" name="SZRException" />
+ </operation>
+ <operation name="GetStammzahl">
+ <input message="szr:GetStammzahlRequest" name="GetStammzahlRequest" />
+ <output message="szr:GetStammzahlResponse" name="GetStammzahlResponse" />
+ <fault message="szr:SZRException" name="SZRException" />
+ </operation>
+ <operation name="GetStammzahlEncrypted">
+ <input message="szr:GetStammzahlEncryptedRequest" name="GetStammzahlEncryptedRequest" />
+ <output message="szr:GetStammzahlEncryptedResponse" name="GetStammzahlEncryptedResponse" />
+ <fault message="szr:SZRException" name="SZRException" />
+ </operation>
+ <operation name="GetVersion">
+ <input message="szr:GetVersionRequest" name="GetVersionRequest" />
+ <output message="szr:GetVersionResponse" name="GetVersionResponse" />
+ <fault message="szr:SZRException" name="SZRException" />
+ </operation>
+ </portType>
+ <binding name="SZRSoapBinding" type="szr:SZR">
+ <wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" />
+ <operation name="GetIdentityLink">
+ <wsdlsoap:operation soapAction="" />
+ <input name="GetIdentityLinkRequest">
+ <wsdlsoap:header message="szr:Header" part="SecurityHeader" use="literal" />
+ <wsdlsoap:body use="literal" />
+ </input>
+ <output name="GetIdentityLinkResponse">
+ <wsdlsoap:body use="literal" />
+ </output>
+ <fault name="SZRException">
+ <wsdlsoap:fault name="SZRException" use="literal" />
+ </fault>
+ </operation>
+ <operation name="GetIdentityLinkEidas">
+ <wsdlsoap:operation soapAction="" />
+ <input name="GetIdentityLinkEidasRequest">
+ <wsdlsoap:header message="szr:Header" part="SecurityHeader" use="literal" />
+ <wsdlsoap:body use="literal" />
+ </input>
+ <output name="GetIdentityLinkEidasResponse">
+ <wsdlsoap:body use="literal" />
+ </output>
+ <fault name="SZRException">
+ <wsdlsoap:fault name="SZRException" use="literal" />
+ </fault>
+ </operation>
+ <operation name="GetBPK">
+ <wsdlsoap:operation soapAction="" />
+ <input name="GetBPKRequest">
+ <wsdlsoap:header message="szr:Header" part="SecurityHeader" use="literal" />
+ <wsdlsoap:body use="literal" />
+ </input>
+ <output name="GetBPKResponse">
+ <wsdlsoap:body use="literal" />
+ </output>
+ <fault name="SZRException">
+ <wsdlsoap:fault name="SZRException" use="literal" />
+ </fault>
+ </operation>
+ <operation name="GetBPKs">
+ <wsdlsoap:operation soapAction="" />
+ <input name="GetBPKsRequest">
+ <wsdlsoap:header message="szr:Header" part="SecurityHeader" use="literal" />
+ <wsdlsoap:body use="literal" />
+ </input>
+ <output name="GetBPKsResponse">
+ <wsdlsoap:body use="literal" />
+ </output>
+ <fault name="SZRException">
+ <wsdlsoap:fault name="SZRException" use="literal" />
+ </fault>
+ </operation>
+ <operation name="GetBPKKombi">
+ <wsdlsoap:operation soapAction="" />
+ <input name="GetBPKKombiRequest">
+ <wsdlsoap:header message="szr:Header" part="SecurityHeader" use="literal" />
+ <wsdlsoap:body use="literal" />
+ </input>
+ <output name="GetBPKKombiResponse">
+ <wsdlsoap:body use="literal" />
+ </output>
+ <fault name="SZRException">
+ <wsdlsoap:fault name="SZRException" use="literal" />
+ </fault>
+ </operation>
+ <operation name="GetBPKZPV">
+ <wsdlsoap:operation soapAction="" />
+ <input name="GetBPKZPVRequest">
+ <wsdlsoap:header message="szr:Header" part="SecurityHeader" use="literal" />
+ <wsdlsoap:body use="literal" />
+ </input>
+ <output name="GetBPKZPVResponse">
+ <wsdlsoap:body use="literal" />
+ </output>
+ <fault name="SZRException">
+ <wsdlsoap:fault name="SZRException" use="literal" />
+ </fault>
+ </operation>
+ <operation name="GetBPKFromStammzahlEncrypted">
+ <wsdlsoap:operation soapAction="" />
+ <input name="GetBPKFromStammzahlEncryptedRequest">
+ <wsdlsoap:header message="szr:Header" part="SecurityHeader" use="literal" />
+ <wsdlsoap:body use="literal" />
+ </input>
+ <output name="GetBPKFromStammzahlEncryptedResponse">
+ <wsdlsoap:body use="literal" />
+ </output>
+ <fault name="SZRException">
+ <wsdlsoap:fault name="SZRException" use="literal" />
+ </fault>
+ </operation>
+ <operation name="SignContent">
+ <wsdlsoap:operation soapAction="" />
+ <input name="SignContentRequest">
+ <wsdlsoap:header message="szr:Header" part="SecurityHeader" use="literal" />
+ <wsdlsoap:body use="literal" />
+ </input>
+ <output name="SignContentResponse">
+ <wsdlsoap:body use="literal" />
+ </output>
+ <fault name="SZRException">
+ <wsdlsoap:fault name="SZRException" use="literal" />
+ </fault>
+ </operation>
+ <operation name="GetVKZPermission">
+ <wsdlsoap:operation soapAction="" />
+ <input name="GetVKZPermissionRequest">
+ <wsdlsoap:header message="szr:Header" part="SecurityHeader" use="literal" />
+ <wsdlsoap:body use="literal" />
+ </input>
+ <output name="GetVKZPermissionResponse">
+ <wsdlsoap:body use="literal" />
+ </output>
+ <fault name="SZRException">
+ <wsdlsoap:fault name="SZRException" use="literal" />
+ </fault>
+ </operation>
+ <operation name="ValidateIdentityLink">
+ <wsdlsoap:operation soapAction="" />
+ <input name="ValidateIdentityLinkRequest">
+ <wsdlsoap:header message="szr:Header" part="SecurityHeader" use="literal" />
+ <wsdlsoap:body use="literal" />
+ </input>
+ <output name="ValidateIdentityLinkResponse">
+ <wsdlsoap:body use="literal" />
+ </output>
+ <fault name="SZRException">
+ <wsdlsoap:fault name="SZRException" use="literal" />
+ </fault>
+ </operation>
+ <operation name="TransformBPK">
+ <wsdlsoap:operation soapAction="" />
+ <input name="TransformBPKRequest">
+ <wsdlsoap:header message="szr:Header" part="SecurityHeader" use="literal" />
+ <wsdlsoap:body use="literal" />
+ </input>
+ <output name="TransformBPKResponse">
+ <wsdlsoap:body use="literal" />
+ </output>
+ <fault name="SZRException">
+ <wsdlsoap:fault name="SZRException" use="literal" />
+ </fault>
+ </operation>
+ <operation name="BPKzuBasiszahl">
+ <wsdlsoap:operation soapAction="" />
+ <input name="BPKzuBasiszahlRequest">
+ <wsdlsoap:header message="szr:Header" part="SecurityHeader" use="literal" />
+ <wsdlsoap:body use="literal" />
+ </input>
+ <output name="BPKzuBasiszahlResponse">
+ <wsdlsoap:body use="literal" />
+ </output>
+ <fault name="SZRException">
+ <wsdlsoap:fault name="SZRException" use="literal" />
+ </fault>
+ </operation>
+ <operation name="BasiszahlZuBPK">
+ <wsdlsoap:operation soapAction="" />
+ <input name="BasiszahlZuBPKRequest">
+ <wsdlsoap:header message="szr:Header" part="SecurityHeader" use="literal" />
+ <wsdlsoap:body use="literal" />
+ </input>
+ <output name="BasiszahlZuBPKResponse">
+ <wsdlsoap:body use="literal" />
+ </output>
+ <fault name="SZRException">
+ <wsdlsoap:fault name="SZRException" use="literal" />
+ </fault>
+ </operation>
+ <operation name="ZMRAnwendungsIntegration">
+ <wsdlsoap:operation soapAction="" />
+ <input name="ZMRAnwendungsIntegrationRequest">
+ <wsdlsoap:header message="szr:Header" part="SecurityHeader" use="literal" />
+ <wsdlsoap:body use="literal" />
+ </input>
+ <output name="ZMRAnwendungsIntegrationResponse">
+ <wsdlsoap:body use="literal" />
+ </output>
+ <fault name="SZRException">
+ <wsdlsoap:fault name="SZRException" use="literal" />
+ </fault>
+ </operation>
+ <operation name="GetStammzahl">
+ <wsdlsoap:operation soapAction="" />
+ <input name="GetStammzahlRequest">
+ <wsdlsoap:header message="szr:Header" part="SecurityHeader" use="literal" />
+ <wsdlsoap:body use="literal" />
+ </input>
+ <output name="GetStammzahlResponse">
+ <wsdlsoap:body use="literal" />
+ </output>
+ <fault name="SZRException">
+ <wsdlsoap:fault name="SZRException" use="literal" />
+ </fault>
+ </operation>
+ <operation name="GetStammzahlEncrypted">
+ <wsdlsoap:operation soapAction="" />
+ <input name="GetStammzahlEncryptedRequest">
+ <wsdlsoap:header message="szr:Header" part="SecurityHeader" use="literal" />
+ <wsdlsoap:body use="literal" />
+ </input>
+ <output name="GetStammzahlEncryptedResponse">
+ <wsdlsoap:body use="literal" />
+ </output>
+ <fault name="SZRException">
+ <wsdlsoap:fault name="SZRException" use="literal" />
+ </fault>
+ </operation>
+ <operation name="GetVersion">
+ <wsdlsoap:operation soapAction="" />
+ <input name="GetVersionRequest">
+ <wsdlsoap:header message="szr:Header" part="SecurityHeader" use="literal" />
+ <wsdlsoap:body use="literal" />
+ </input>
+ <output name="GetVersionResponse">
+ <wsdlsoap:body use="literal" />
+ </output>
+ <fault name="SZRException">
+ <wsdlsoap:fault name="SZRException" use="literal" />
+ </fault>
+ </operation>
+ </binding>
+ <service name="SZRService">
+ <port binding="szr:SZRSoapBinding" name="SZRBusinesspartnerTestumgebung">
+ <wsdlsoap:address location="https://pvawp.bmi.gv.at/at.gv.bmi.szrsrv-b/services/SZR" />
+ </port>
+ <port binding="szr:SZRSoapBinding" name="SZRTestumgebung">
+ <wsdlsoap:address location="https://pvawp.bmi.gv.at/bmi.gv.at/soap/SZ2Services-T/services/SZR" />
+ </port>
+ <port binding="szr:SZRSoapBinding" name="SZRProduktionsumgebung">
+ <wsdlsoap:address location="https://pvawp.bmi.gv.at/bmi.gv.at/soap/SZ2Services/services/SZR" />
+ </port>
+ </service>
+</definitions> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/szr_client/pvp1.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/szr_client/pvp1.xsd
new file mode 100644
index 00000000..09c0b1e3
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/szr_client/pvp1.xsd
@@ -0,0 +1,133 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- edited with XMLSPY v2004 rel. 2 U (http://www.xmlspy.com) by BM (Bundeskanzleramt) -->
+<!-- PVP Schema 1.8.10 -->
+<!-- pvpToken wird über das Element <Security> aus der Spezifikation WS-Security in den SOAP-Header eingebunden -->
+<!--erstellt: rainer.hoerbe@bmi.gv.at 2004-04-30 -->
+<!--geändert: rainer.hoerbe@beko.at 2007-04-04: Extensions Points definiert -->
+<xs:schema targetNamespace="http://egov.gv.at/pvp1.xsd" xmlns="http://egov.gv.at/pvp1.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
+ <xs:element name="pvpToken">
+ <xs:complexType>
+ <xs:complexContent>
+ <xs:extension base="pvpTokenType" />
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+ <xs:complexType name="pvpTokenType">
+ <xs:sequence>
+ <xs:element name="authenticate">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="participantId" type="xs:string" />
+ <xs:element name="gvOuDomain" type="xs:string" minOccurs="0" maxOccurs="1" />
+ <xs:choice>
+ <xs:element name="userPrincipal">
+ <xs:complexType>
+ <xs:complexContent>
+ <xs:extension base="pvpPrincipalType">
+ <xs:sequence>
+ <xs:element name="gvGid" type="xs:string" />
+ <xs:element name="mail" type="xs:string" minOccurs="0" maxOccurs="1" />
+ <xs:element name="tel" type="xs:string" minOccurs="0" maxOccurs="1" />
+ <xs:element name="bpk" type="xs:string" minOccurs="0" maxOccurs="1" />
+ <xs:element name="gvFunction" type="xs:string" minOccurs="0" maxOccurs="1" />
+ </xs:sequence>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="systemPrincipal" type="pvpPrincipalType" />
+ </xs:choice>
+ <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded">
+ <xs:annotation>
+ <xs:documentation>additional authentication properties</xs:documentation>
+ </xs:annotation>
+ </xs:any>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="authorize" minOccurs="0" maxOccurs="1">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:sequence minOccurs="0">
+ <xs:element name="gvOuId" type="xs:string" />
+ <xs:element name="ou" type="xs:string" />
+ </xs:sequence>
+ <xs:element name="role" maxOccurs="unbounded">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:any namespace="##any" processContents="skip" minOccurs="0" maxOccurs="unbounded" />
+ </xs:sequence>
+ <xs:attribute name="value" type="xs:string" use="required" />
+ </xs:complexType>
+ </xs:element>
+ <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded">
+ <xs:annotation>
+ <xs:documentation>additional authorization properties</xs:documentation>
+ </xs:annotation>
+ </xs:any>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="accounting" minOccurs="0">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:any processContents="skip" minOccurs="0" maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="pvpChainedToken" type="pvpTokenType" minOccurs="0" />
+ <xs:element name="pvpExtension" block="extension" minOccurs="0">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:any namespace="##any" processContents="skip" minOccurs="0" maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ </xs:sequence>
+ <xs:attribute name="version" type="gvVersionType" use="required" />
+ <xs:anyAttribute namespace="##any" processContents="lax" />
+ </xs:complexType>
+ <xs:complexType name="pvpPrincipalType">
+ <xs:sequence>
+ <xs:element name="userId" type="xs:string" />
+ <xs:element name="cn" type="xs:string" />
+ <xs:element name="gvOuId" type="xs:string" />
+ <xs:element name="ou" type="xs:string" />
+ <xs:element name="gvOuOKZ" type="xs:string" minOccurs="0" /> <!-- steht auch in der pvp doku, fehlt aber im normalen pvp1.xsd -->
+ <xs:element name="gvSecClass" type="gvSecClassType" minOccurs="0" />
+ <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded">
+ <xs:annotation>
+ <xs:documentation>additional principal attributes</xs:documentation>
+ </xs:annotation>
+ </xs:any>
+ </xs:sequence>
+ <xs:anyAttribute namespace="##any" processContents="lax" />
+ </xs:complexType>
+ <xs:simpleType name="gvSecClassType">
+ <xs:restriction base="xs:integer">
+ <xs:enumeration value="0" />
+ <xs:enumeration value="1" />
+ <xs:enumeration value="2" />
+ <xs:enumeration value="3" />
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="gvVersionType">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="1.0" />
+ <xs:enumeration value="1.1" />
+ <xs:enumeration value="1.2" />
+ <xs:enumeration value="1.8" />
+ <xs:enumeration value="1.9" />
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="logLevelType">
+ <xs:restriction base="xs:integer">
+ <xs:enumeration value="0" />
+ <xs:enumeration value="1" />
+ <xs:enumeration value="2" />
+ <xs:enumeration value="3" />
+ <xs:enumeration value="4" />
+ <xs:enumeration value="5" />
+ </xs:restriction>
+ </xs:simpleType>
+</xs:schema>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/szr_client/pvp19.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/szr_client/pvp19.xsd
new file mode 100644
index 00000000..596a2b99
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/szr_client/pvp19.xsd
@@ -0,0 +1,133 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- edited with XMLSPY v2004 rel. 2 U (http://www.xmlspy.com) by BM (Bundeskanzleramt) -->
+<!-- PVP Schema 1.8.10 -->
+<!-- pvpToken wird über das Element <Security> aus der Spezifikation WS-Security in den SOAP-Header eingebunden -->
+<!--erstellt: rainer.hoerbe@bmi.gv.at 2004-04-30 -->
+<!--geändert: rainer.hoerbe@beko.at 2007-04-04: Extensions Points definiert -->
+<xs:schema targetNamespace="http://egov.gv.at/pvp1.xsd" xmlns="http://egov.gv.at/pvp1.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
+ <xs:element name="pvpToken">
+ <xs:complexType>
+ <xs:complexContent>
+ <xs:extension base="pvpTokenType" />
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+ <xs:complexType name="pvpTokenType">
+ <xs:sequence>
+ <xs:element name="authenticate">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="participantId" type="xs:string" />
+ <xs:element name="gvOuDomain" type="xs:string" minOccurs="0" maxOccurs="1" />
+ <xs:choice>
+ <xs:element name="userPrincipal">
+ <xs:complexType>
+ <xs:complexContent>
+ <xs:extension base="pvpPrincipalType">
+ <xs:sequence>
+ <xs:element name="gvGid" type="xs:string" />
+ <xs:element name="mail" type="xs:string" minOccurs="0" maxOccurs="1" />
+ <xs:element name="tel" type="xs:string" minOccurs="0" maxOccurs="1" />
+ <xs:element name="bpk" type="xs:string" minOccurs="0" maxOccurs="1" />
+ <xs:element name="gvFunction" type="xs:string" minOccurs="0" maxOccurs="1" />
+ </xs:sequence>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="systemPrincipal" type="pvpPrincipalType" />
+ </xs:choice>
+ <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded">
+ <xs:annotation>
+ <xs:documentation>additional authentication properties</xs:documentation>
+ </xs:annotation>
+ </xs:any>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="authorize" minOccurs="0" maxOccurs="1">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:sequence minOccurs="0">
+ <xs:element name="gvOuId" type="xs:string" />
+ <xs:element name="ou" type="xs:string" />
+ </xs:sequence>
+ <xs:element name="role" maxOccurs="unbounded">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:any namespace="##any" processContents="skip" minOccurs="0" maxOccurs="unbounded" />
+ </xs:sequence>
+ <xs:attribute name="value" type="xs:string" use="required" />
+ </xs:complexType>
+ </xs:element>
+ <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded">
+ <xs:annotation>
+ <xs:documentation>additional authorization properties</xs:documentation>
+ </xs:annotation>
+ </xs:any>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="accounting" minOccurs="0">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:any processContents="skip" minOccurs="0" maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="pvpChainedToken" type="pvpTokenType" minOccurs="0" />
+ <xs:element name="pvpExtension" block="extension" minOccurs="0">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:any namespace="##any" processContents="skip" minOccurs="0" maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ </xs:sequence>
+ <xs:attribute name="version" type="gvVersionType" use="required" />
+ <xs:anyAttribute namespace="##any" processContents="lax" />
+ </xs:complexType>
+ <xs:complexType name="pvpPrincipalType">
+ <xs:sequence>
+ <xs:element name="userId" type="xs:string" />
+ <xs:element name="cn" type="xs:string" />
+ <xs:element name="gvOuId" type="xs:string" />
+ <xs:element name="ou" type="xs:string" />
+ <xs:element name="gvOuOKZ" type="xs:string" minOccurs="0" />
+ <xs:element name="gvSecClass" type="gvSecClassType" minOccurs="0" />
+ <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded">
+ <xs:annotation>
+ <xs:documentation>additional principal attributes</xs:documentation>
+ </xs:annotation>
+ </xs:any>
+ </xs:sequence>
+ <xs:anyAttribute namespace="##any" processContents="lax" />
+ </xs:complexType>
+ <xs:simpleType name="gvSecClassType">
+ <xs:restriction base="xs:integer">
+ <xs:enumeration value="0" />
+ <xs:enumeration value="1" />
+ <xs:enumeration value="2" />
+ <xs:enumeration value="3" />
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="gvVersionType">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="1.0" />
+ <xs:enumeration value="1.1" />
+ <xs:enumeration value="1.2" />
+ <xs:enumeration value="1.8" />
+ <xs:enumeration value="1.9" />
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="logLevelType">
+ <xs:restriction base="xs:integer">
+ <xs:enumeration value="0" />
+ <xs:enumeration value="1" />
+ <xs:enumeration value="2" />
+ <xs:enumeration value="3" />
+ <xs:enumeration value="4" />
+ <xs:enumeration value="5" />
+ </xs:restriction>
+ </xs:simpleType>
+</xs:schema>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/szr_client/szr.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/szr_client/szr.xsd
new file mode 100644
index 00000000..85acfb65
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/szr_client/szr.xsd
@@ -0,0 +1,388 @@
+<xs:schema elementFormDefault="qualified" targetNamespace="urn:SZRServices" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" xmlns:pd="http://reference.e-government.gv.at/namespace/persondata/20020228#" xmlns:szr="urn:SZRServices" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+ <xs:import namespace="http://reference.e-government.gv.at/namespace/persondata/20020228#" />
+ <xs:import namespace="http://www.w3.org/2000/09/xmldsig#" />
+ <xs:element name="SZRException" type="szr:SZRException" />
+ <xs:complexType name="SZRException" />
+ <xs:complexType name="PersonInfoType">
+ <xs:sequence>
+ <xs:element name="Person" type="pd:PhysicalPersonType" />
+ <xs:element minOccurs="0" name="RegularDomicile" type="pd:PostalAddressType" />
+ <xs:element minOccurs="0" name="AddressCodes" type="szr:AddressCodesType" />
+ <xs:element minOccurs="0" name="TravelDocument" type="szr:TravelDocumentType" />
+ <xs:element minOccurs="0" name="DateOfBirthWildcard" type="xs:boolean" />
+ <xs:element minOccurs="0" name="AuskunftssperreGesetzt" type="xs:boolean" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="TravelDocumentType">
+ <xs:sequence>
+ <xs:element minOccurs="0" name="DocumentNumber" type="xs:string" />
+ <xs:element minOccurs="0" name="DocumentType" type="xs:string" />
+ <xs:element minOccurs="0" name="IssueDate" type="xs:string" />
+ <xs:element minOccurs="0" name="IssuingAuthority" type="xs:string" />
+ <xs:element minOccurs="0" name="IssuingCountry" type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="AddressCodesType">
+ <xs:sequence>
+ <xs:element minOccurs="0" name="GKZ" type="xs:string" />
+ <xs:element minOccurs="0" name="OKZ" type="xs:string" />
+ <xs:element minOccurs="0" name="SKZ" type="xs:string" />
+ <xs:element minOccurs="0" name="ADRCD" type="xs:string" />
+ <xs:element minOccurs="0" name="SUBCD" type="xs:string" />
+ <xs:element minOccurs="0" name="OBJNR" type="xs:string" />
+ <xs:element minOccurs="0" name="NTZLNR" type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:element name="TransformBPK">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="PersonInfo" type="szr:PersonInfoType" />
+ <xs:element name="InputBPK" type="xs:string" />
+ <xs:element name="InputBereichsKennung" type="xs:string" />
+ <xs:element name="Begruendung" type="xs:string" />
+ <xs:element maxOccurs="unbounded" name="Target" type="szr:FremdBPKRequestType" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="TransformBPKResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element maxOccurs="unbounded" name="TransformBPKReturn" type="szr:FremdBPKType" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetVKZPermission">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="VKZ" type="xs:string" />
+ <xs:element name="BereichsKennung" type="xs:string" />
+ <xs:element minOccurs="0" name="ParticipantId" type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetVKZPermissionResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="GetVKZPermissionReturn" type="szr:GetVKZPermissionResponseType" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:complexType name="IdentityLinkType">
+ <xs:sequence>
+ <xs:element name="PersonInfo" type="szr:PersonInfoType" />
+ <xs:element name="Assertion" type="xs:anyType" />
+ <xs:element minOccurs="0" name="AdditionalInfo" type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="ResultRecord">
+ <xs:sequence>
+ <xs:element name="PersonInfo" type="szr:PersonInfoType" />
+ <xs:element name="Register" type="xs:string" />
+ <xs:element name="bPK" type="xs:string" />
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="FremdBPK" type="szr:FremdBPKType" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="GetBPKKombiRequestType">
+ <xs:sequence>
+ <xs:element name="PersonInfo" type="szr:PersonInfoType" />
+ <xs:element minOccurs="0" name="InsertERnP">
+ <xs:simpleType>
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="NoInsert" />
+ <xs:enumeration value="InsertOnNoMatch" />
+ <xs:enumeration value="ForceInsert" />
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:element>
+ <xs:element minOccurs="0" name="Suchwizard" type="xs:boolean" />
+ <xs:element name="VKZ" type="xs:string" nillable="true" />
+ <xs:element minOccurs="0" name="BehoerdenKennzeichen" type="xs:string" />
+ <xs:element minOccurs="0" name="BereichsKennung" type="xs:string" />
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="Target" type="szr:FremdBPKRequestType" />
+ <xs:element minOccurs="0" name="Sessionid" type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="GetBPKKombiResponseType">
+ <xs:complexContent>
+ <xs:extension base="szr:GetBPKZPVResponseType">
+ <xs:sequence>
+ <xs:element name="FoundWithSuchwizard" type="xs:boolean" />
+ <xs:element name="Sessionid" type="xs:string" />
+ </xs:sequence>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:complexType name="GetBPKZPVRequestType">
+ <xs:sequence>
+ <xs:element name="PersonInfo" type="szr:PersonInfoType" />
+ <xs:element minOccurs="0" name="InsertERnP" type="xs:boolean" default="false" />
+ <xs:element minOccurs="1" name="VKZ" type="xs:string" />
+ <xs:element minOccurs="0" name="BehoerdenKennzeichen" type="xs:string" />
+ <xs:element minOccurs="0" name="BereichsKennung" type="xs:string" />
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="Target" type="szr:FremdBPKRequestType" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="GetBPKZPVResponseType">
+ <xs:sequence>
+ <xs:element maxOccurs="unbounded" name="ResultRecord" type="szr:ResultRecord" />
+ <xs:element name="InsertERnPResult" type="xs:boolean" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="GetBPKFromStammzahlEncryptedRequestType">
+ <xs:sequence>
+ <xs:element minOccurs="1" name="StammzahlEncrypted" type="xs:string" />
+ <xs:element minOccurs="0" name="PersonInfo" type="szr:PersonInfoType" />
+ <xs:element minOccurs="1" name="VKZ" type="xs:string" />
+ <xs:element minOccurs="0" name="BereichsKennung" type="xs:string" />
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="Target" type="szr:FremdBPKRequestType" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="GetBPKFromStammzahlEncryptedResponseType">
+ <xs:sequence>
+ <xs:element minOccurs="0" name="bPK" type="xs:string" />
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="FremdBPK" type="szr:FremdBPKType" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:element name="GetIdentityLink">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="PersonInfo" type="szr:PersonInfoType" />
+ <xs:element maxOccurs="unbounded" name="KeyValue" type="dsig:KeyValueType" />
+ <xs:element minOccurs="0" name="InsertERnP" type="xs:boolean" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetIdentityLinkResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="GetIdentityLinkReturn" type="szr:IdentityLinkType" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetBPK">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="PersonInfo" type="szr:PersonInfoType" />
+ <xs:element minOccurs="0" name="BereichsKennung" type="xs:string" />
+ <xs:element minOccurs="0" name="VKZ" type="xs:string" />
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="Target" type="szr:FremdBPKRequestType" />
+ <xs:element minOccurs="0" name="ListMultiplePersons" type="xs:boolean" />
+ <xs:element minOccurs="0" name="InsertERnP" type="xs:boolean" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetBPKResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element minOccurs="0" name="GetBPKReturn" type="xs:string" />
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="FremdBPK" type="szr:FremdBPKType" />
+ <xs:element maxOccurs="5" minOccurs="0" name="PersonInfo" type="szr:PersonInfoType" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetBPKs">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element maxOccurs="unbounded" name="PersonInfo" type="szr:PersonInfoType" />
+ <xs:element minOccurs="0" name="BereichsKennung" type="xs:string" />
+ <xs:element name="VKZ" type="xs:string" />
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="Target" type="szr:FremdBPKRequestType" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetBPKsResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element maxOccurs="unbounded" name="ResultRecord" type="szr:GetBPKsResponseType" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:complexType name="GetBPKsResponseType">
+ <xs:sequence>
+ <xs:element minOccurs="0" name="BPK" type="xs:string" />
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="FremdBPK" type="szr:FremdBPKType" />
+ <xs:element minOccurs="0" name="Fault">
+ <xs:complexType>
+ <xs:attribute name="Code" type="xs:string" />
+ <xs:attribute name="String" type="xs:string" />
+ </xs:complexType>
+ </xs:element>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:element name="GetBPKKombi">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="GetBPKKombiRequest" type="szr:GetBPKKombiRequestType" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetBPKKombiResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="GetBPKKombiResponse" type="szr:GetBPKKombiResponseType" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetBPKZPV">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="GetBPKZPVRequest" type="szr:GetBPKZPVRequestType" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetBPKZPVResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="GetBPKZPVResponse" type="szr:GetBPKZPVResponseType" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetBPKFromStammzahlEncrypted">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="GetBPKFromStammzahlEncryptedRequest" type="szr:GetBPKFromStammzahlEncryptedRequestType" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetBPKFromStammzahlEncryptedResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="GetBPKFromStammzahlEncryptedResponse" type="szr:GetBPKFromStammzahlEncryptedResponseType" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="ValidateIdentityLink">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="IdentityLink" type="szr:IdentityLinkType" />
+ <xs:element name="BereichsKennung" type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="ValidateIdentityLinkResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="ValidateIdentityLinkReturn" type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="BPKzuBasiszahl">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="Bereich" type="xs:string" />
+ <xs:element name="BPK" type="xs:string" />
+ <xs:element maxOccurs="unbounded" name="BasisZahl" type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="BPKzuBasiszahlResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="BPKzuBasiszahlReturn" type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:complexType name="FremdBPKRequestType">
+ <xs:sequence>
+ <xs:element name="BereichsKennung" type="xs:string" />
+ <xs:element name="VKZ" type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="FremdBPKType">
+ <xs:sequence>
+ <xs:element name="BereichsKennung" type="xs:string" />
+ <xs:element name="FremdBPK" type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="GetVKZPermissionResponseType">
+ <xs:sequence>
+ <xs:element name="isAllowed" type="xs:boolean" />
+ <xs:element minOccurs="0" name="behSchluessel" type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:element name="BasiszahlZuBPK">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element minOccurs="0" name="VKZ" type="xs:string" />
+ <xs:element maxOccurs="unbounded" name="BasisZahl" type="xs:string" />
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="Bereich" type="xs:string" />
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="FremdBPKTargets" type="szr:FremdBPKRequestType" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:complexType name="BasiszahlZuBPKReturnType">
+ <xs:sequence>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="BPK" type="xs:string" />
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="FremdBPKs" type="szr:FremdBPKType" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:element name="BasiszahlZuBPKResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element maxOccurs="unbounded" name="BasiszahlZuBPKReturn" type="szr:BasiszahlZuBPKReturnType" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="ZMRAnwendungsIntegration">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="Bereich" type="xs:string" />
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="FremdBPKTargets" type="szr:FremdBPKRequestType" />
+ <xs:element maxOccurs="unbounded" name="ZMRfremdbPK" type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:complexType name="ZMRAnwendungsIntegrationReturnType">
+ <xs:sequence>
+ <xs:element name="BPK" type="xs:string" />
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="FremdBPKs" type="szr:FremdBPKType" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:element name="ZMRAnwendungsIntegrationResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element maxOccurs="unbounded" name="ZMRAnwendungsIntegrationReturn" type="szr:ZMRAnwendungsIntegrationReturnType" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetStammzahl">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="PersonInfo" type="szr:PersonInfoType" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetStammzahlResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="Stammzahl" type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetStammzahlEncrypted">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="PersonInfo" type="szr:PersonInfoType" />
+ <xs:element minOccurs="0" name="InsertERnP" type="xs:boolean" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetStammzahlEncryptedResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="Stammzahl" type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetVersion" />
+ <xs:element name="GetVersionResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="Version" type="xs:string" />
+ <xs:element name="Revision" type="xs:string" />
+ <xs:element name="Time" type="xs:string" />
+ <xs:element name="IdentityLinkNotAfter" type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+</xs:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/szr_client/szr_ecdsa.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/szr_client/szr_ecdsa.xsd
new file mode 100644
index 00000000..87ee80be
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/szr_client/szr_ecdsa.xsd
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://www.w3.org/2001/04/xmldsig-more#" xmlns:ecdsa="http://www.w3.org/2001/04/xmldsig-more#">
+ <xs:element name="ECDSAKeyValue" type="ecdsa:ECDSAKeyValueType" />
+ <xs:complexType name="ECDSAKeyValueType">
+ <xs:sequence>
+ <xs:element name="DomainParameters" type="ecdsa:DomainParamsType"
+ minOccurs="0" />
+ <xs:element name="PublicKey" type="ecdsa:ECPointType" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="DomainParamsType">
+ <xs:sequence>
+ <xs:element name="NamedCurve" minOccurs="0"
+ type="ecdsa:NamedCurveType" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="NamedCurveType">
+ <xs:attribute name="URN" type="xs:string" use="required" />
+ </xs:complexType>
+ <xs:complexType name="ECPointType">
+ <xs:sequence minOccurs="0">
+ <xs:element name="X" type="ecdsa:PrimeFieldElemType" />
+ <xs:element name="Y" type="ecdsa:PrimeFieldElemType" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="PrimeFieldElemType">
+ <xs:attribute name="Value" type="xs:string" use="required" />
+ </xs:complexType>
+</xs:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/szr_client/szr_persondata.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/szr_client/szr_persondata.xsd
new file mode 100644
index 00000000..3c9ac932
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/szr_client/szr_persondata.xsd
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema elementFormDefault="qualified" xmlns:pd="http://reference.e-government.gv.at/namespace/persondata/20020228#"
+ targetNamespace="http://reference.e-government.gv.at/namespace/persondata/20020228#" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+ <xs:complexType name="PhysicalPersonType">
+ <xs:sequence>
+ <xs:element minOccurs="0" name="Identification" type="pd:IdentificationType" />
+ <xs:element minOccurs="1" name="Name" type="pd:PersonNameType" />
+ <xs:element minOccurs="0" name="AlternativeName" type="pd:AlternativeNameType" />
+ <xs:element minOccurs="0" name="Sex" type="xs:string" />
+ <xs:element minOccurs="0" name="DateOfBirth" type="xs:string" />
+ <xs:element minOccurs="0" name="PlaceOfBirth" type="xs:string" />
+ <xs:element minOccurs="0" name="CountryOfBirth" type="xs:string" />
+ <xs:element minOccurs="0" name="Nationality" type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="IdentificationType">
+ <xs:sequence>
+ <xs:element minOccurs="0" name="Value" type="xs:string" />
+ <xs:element minOccurs="0" name="Type" type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="PersonNameType">
+ <xs:sequence>
+ <xs:element minOccurs="0" name="PrefixedDegree" type="xs:string" />
+ <xs:element name="GivenName" type="xs:string" nillable="true" />
+ <xs:element name="FamilyName" type="xs:string" nillable="true" />
+ <xs:element minOccurs="0" name="SuffixedDegree" type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="AlternativeNameType">
+ <xs:sequence>
+ <xs:element name="FamilyName" type="xs:string" nillable="true" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="PostalAddressType">
+ <xs:sequence>
+ <xs:element minOccurs="0" name="PostalCode" type="xs:string" />
+ <xs:element minOccurs="0" name="Municipality" type="xs:string" />
+ <xs:element minOccurs="0" name="Locality" type="xs:string" />
+ <xs:element minOccurs="0" name="StateCode3" type="xs:string" />
+ <xs:element minOccurs="0" name="DeliveryAddress" type="pd:DeliveryAddressType" />
+ <xs:element minOccurs="0" name="HistoricRecord" type="xs:boolean" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="DeliveryAddressType">
+ <xs:sequence>
+ <xs:element minOccurs="0" name="AddressLine" type="xs:string" />
+ <xs:element minOccurs="0" name="StreetName" type="xs:string" />
+ <xs:element minOccurs="0" name="BuildingNumber" type="xs:string" />
+ <xs:element minOccurs="0" name="Unit" type="xs:string" />
+ <xs:element minOccurs="0" name="DoorNumber" type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+</xs:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/szr_client/szr_pvp_sec.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/szr_client/szr_pvp_sec.xsd
new file mode 100644
index 00000000..5001c1b8
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/szr_client/szr_pvp_sec.xsd
@@ -0,0 +1,10 @@
+<xs:schema xmlns:pvp="http://egov.gv.at/pvp1.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://schemas.xmlsoap.org/ws/2002/04/secext" elementFormDefault="qualified">
+ <xs:import namespace="http://egov.gv.at/pvp1.xsd" schemaLocation="pvp19.xsd"/>
+ <xs:element name="Security">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="pvp:pvpToken"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+</xs:schema>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/szr_client/szr_v4.0-schemas.xml b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/szr_client/szr_v4.0-schemas.xml
new file mode 100644
index 00000000..d40efa45
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/szr_client/szr_v4.0-schemas.xml
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<bindings version="2.0" xmlns="http://java.sun.com/xml/ns/jaxb"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
+ xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc">
+
+ <bindings schemaLocation="../szr_v4/szr_v4.0.xsd">
+ <bindings node="/xsd:schema">
+ <schemaBindings>
+ <package name="at.gv.util.xsd.szr_v4" />
+ </schemaBindings>
+ </bindings>
+ </bindings>
+
+ <bindings schemaLocation="../szr/szr_ecdsa.xsd">
+ <bindings node="/xsd:schema">
+ <schemaBindings>
+ <package name="at.gv.util.xsd.szr.ecdsa" />
+ </schemaBindings>
+ </bindings>
+ </bindings>
+
+ <bindings schemaLocation="../szr_v4/szr_persondata.xsd">
+ <bindings node="/xsd:schema">
+ <schemaBindings>
+ <package name="at.gv.util.xsd.szr.persondata" />
+ </schemaBindings>
+ </bindings>
+ </bindings>
+
+ <bindings schemaLocation="../szr_v4/szr_pvp_sec.xsd">
+ <bindings node="/xsd:schema">
+ <schemaBindings>
+ <package name="at.gv.util.xsd.szr.pvp19.sec" />
+ </schemaBindings>
+ </bindings>
+ </bindings>
+
+ <bindings schemaLocation="../szr_v4/pvp19.xsd">
+ <bindings node="/xsd:schema">
+ <schemaBindings>
+ <package name="at.gv.util.xsd.szr.pvp19" />
+ </schemaBindings>
+ </bindings>
+ </bindings>
+
+ <bindings schemaLocation="../szr/szr_xmldsig.xsd">
+ <bindings node="/xsd:schema">
+ <schemaBindings>
+ <package name="at.gv.util.xsd.szr.xmldsig" />
+ </schemaBindings>
+ </bindings>
+ </bindings>
+
+</bindings> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/szr_client/szr_v4.0-wsdl.xml b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/szr_client/szr_v4.0-wsdl.xml
new file mode 100644
index 00000000..f95c35f0
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/szr_client/szr_v4.0-wsdl.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<bindings xmlns="http://java.sun.com/xml/ns/jaxws"
+ xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
+
+ <enableWrapperStyle>false</enableWrapperStyle>
+ <package name="at.gv.util.wsdl.szr_v4"/>
+
+</bindings> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/szr_client/szr_v4.0.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/szr_client/szr_v4.0.xsd
new file mode 100644
index 00000000..2d25f2dc
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/szr_client/szr_v4.0.xsd
@@ -0,0 +1,443 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:szr="urn:SZRServices" xmlns:pd="http://reference.e-government.gv.at/namespace/persondata/20020228#" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" targetNamespace="urn:SZRServices" elementFormDefault="qualified">
+ <xs:import namespace="http://reference.e-government.gv.at/namespace/persondata/20020228#" schemaLocation="szr_persondata.xsd"/>
+ <xs:import namespace="http://www.w3.org/2000/09/xmldsig#" schemaLocation="szr_xmldsig.xsd"/>
+ <xs:element name="SZRException" type="szr:SZRException"/>
+ <xs:complexType name="SZRException"/>
+ <xs:complexType name="PersonInfoType">
+ <xs:sequence>
+ <xs:element name="Person" type="pd:PhysicalPersonType"/>
+ <xs:element name="RegularDomicile" type="pd:PostalAddressType" minOccurs="0"/>
+ <xs:element name="AddressCodes" type="szr:AddressCodesType" minOccurs="0"/>
+ <xs:element name="TravelDocument" type="szr:TravelDocumentType" minOccurs="0"/>
+ <xs:element name="DateOfBirthWildcard" type="xs:boolean" minOccurs="0"/>
+ <xs:element name="AuskunftssperreGesetzt" type="xs:boolean" minOccurs="0"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="TravelDocumentType">
+ <xs:sequence>
+ <xs:element name="DocumentNumber" type="xs:string" minOccurs="0"/>
+ <xs:element name="DocumentType" type="xs:string" minOccurs="0"/>
+ <xs:element name="IssueDate" type="xs:string" minOccurs="0"/>
+ <xs:element name="IssuingAuthority" type="xs:string" minOccurs="0"/>
+ <xs:element name="IssuingCountry" type="xs:string" minOccurs="0"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="AddressCodesType">
+ <xs:sequence>
+ <xs:element name="GKZ" type="xs:string" minOccurs="0"/>
+ <xs:element name="OKZ" type="xs:string" minOccurs="0"/>
+ <xs:element name="SKZ" type="xs:string" minOccurs="0"/>
+ <xs:element name="ADRCD" type="xs:string" minOccurs="0"/>
+ <xs:element name="SUBCD" type="xs:string" minOccurs="0"/>
+ <xs:element name="OBJNR" type="xs:string" minOccurs="0"/>
+ <xs:element name="NTZLNR" type="xs:string" minOccurs="0"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:element name="TransformBPK">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="PersonInfo" type="szr:PersonInfoType"/>
+ <xs:element name="InputBPK" type="xs:string"/>
+ <xs:element name="InputBereichsKennung" type="xs:string"/>
+ <xs:element name="Begruendung" type="xs:string"/>
+ <xs:element name="Target" type="szr:FremdBPKRequestType" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="TransformBPKResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="TransformBPKReturn" type="szr:FremdBPKType" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetVKZPermission">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="VKZ" type="xs:string"/>
+ <xs:element name="BereichsKennung" type="xs:string"/>
+ <xs:element name="ParticipantId" type="xs:string" minOccurs="0"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetVKZPermissionResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="GetVKZPermissionReturn" type="szr:GetVKZPermissionResponseType"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:complexType name="IdentityLinkType">
+ <xs:sequence>
+ <xs:element name="PersonInfo" type="szr:PersonInfoType"/>
+ <xs:element name="Assertion" type="xs:anyType"/>
+ <xs:element name="AdditionalInfo" type="xs:string" minOccurs="0"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="ResultRecord">
+ <xs:sequence>
+ <xs:element name="PersonInfo" type="szr:PersonInfoType"/>
+ <xs:element name="Register" type="xs:string"/>
+ <xs:element name="bPK" type="xs:string"/>
+ <xs:element name="FremdBPK" type="szr:FremdBPKType" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="GetBPKKombiRequestType">
+ <xs:sequence>
+ <xs:element name="PersonInfo" type="szr:PersonInfoType"/>
+ <xs:element name="InsertERnP" minOccurs="0">
+ <xs:simpleType>
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="NoInsert"/>
+ <xs:enumeration value="InsertOnNoMatch"/>
+ <xs:enumeration value="ForceInsert"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:element>
+ <xs:element name="Suchwizard" type="xs:boolean" minOccurs="0"/>
+ <xs:element name="VKZ" type="xs:string" nillable="true"/>
+ <xs:element name="BehoerdenKennzeichen" type="xs:string" minOccurs="0"/>
+ <xs:element name="BereichsKennung" type="xs:string" minOccurs="0"/>
+ <xs:element name="Target" type="szr:FremdBPKRequestType" minOccurs="0" maxOccurs="unbounded"/>
+ <xs:element name="Sessionid" type="xs:string" minOccurs="0"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="GetBPKKombiResponseType">
+ <xs:complexContent>
+ <xs:extension base="szr:GetBPKZPVResponseType">
+ <xs:sequence>
+ <xs:element name="FoundWithSuchwizard" type="xs:boolean"/>
+ <xs:element name="Sessionid" type="xs:string"/>
+ </xs:sequence>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:complexType name="GetBPKZPVRequestType">
+ <xs:sequence>
+ <xs:element name="PersonInfo" type="szr:PersonInfoType"/>
+ <xs:element name="InsertERnP" type="xs:boolean" default="false" minOccurs="0"/>
+ <xs:element name="VKZ" type="xs:string" minOccurs="1"/>
+ <xs:element name="BehoerdenKennzeichen" type="xs:string" minOccurs="0"/>
+ <xs:element name="BereichsKennung" type="xs:string" minOccurs="0"/>
+ <xs:element name="Target" type="szr:FremdBPKRequestType" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="GetBPKZPVResponseType">
+ <xs:sequence>
+ <xs:element name="ResultRecord" type="szr:ResultRecord" maxOccurs="unbounded"/>
+ <xs:element name="InsertERnPResult" type="xs:boolean"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="GetBPKFromStammzahlEncryptedRequestType">
+ <xs:sequence>
+ <xs:element name="StammzahlEncrypted" type="xs:string" minOccurs="1"/>
+ <xs:element name="PersonInfo" type="szr:PersonInfoType" minOccurs="0"/>
+ <xs:element name="VKZ" type="xs:string" minOccurs="1"/>
+ <xs:element name="BereichsKennung" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
+ <xs:element name="Target" type="szr:FremdBPKRequestType" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ <xs:attribute name="key"/>
+ </xs:complexType>
+ <xs:complexType name="GetBPKFromStammzahlEncryptedResponseType">
+ <xs:sequence>
+ <xs:element name="bPK" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
+ <xs:element name="FremdBPK" type="szr:FremdBPKType" minOccurs="0" maxOccurs="unbounded"/>
+ <xs:element name="Fault" type="szr:Fault" minOccurs="0"/>
+ </xs:sequence>
+ <xs:attribute name="key"/>
+ </xs:complexType>
+ <xs:complexType name="Fault">
+ <xs:attribute name="Code" type="xs:string"/>
+ <xs:attribute name="String" type="xs:string"/>
+ </xs:complexType>
+ <xs:complexType name="SignContentResponseType">
+ <xs:sequence>
+ <xs:element name="JwsAlg" type="xs:string" minOccurs="0"/>
+ <xs:element name="Out" type="szr:SignContentEntry" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="SignContentEntry">
+ <xs:simpleContent>
+ <xs:extension base="xs:string">
+ <xs:attribute name="key"/>
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
+ <xs:element name="GetIdentityLink">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="PersonInfo" type="szr:PersonInfoType"/>
+ <xs:element name="KeyValue" type="dsig:KeyValueType" minOccurs="0" maxOccurs="unbounded"/>
+ <xs:element name="InsertERnP" type="xs:boolean" minOccurs="0"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetIdentityLinkResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="GetIdentityLinkReturn" type="szr:IdentityLinkType"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetIdentityLinkEidas">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="PersonInfo" type="szr:PersonInfoType"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetIdentityLinkEidasResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="GetIdentityLinkReturn" type="szr:IdentityLinkType"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetBPK">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="PersonInfo" type="szr:PersonInfoType"/>
+ <xs:element name="BereichsKennung" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
+ <xs:element name="VKZ" type="xs:string" minOccurs="0"/>
+ <xs:element name="Target" type="szr:FremdBPKRequestType" minOccurs="0" maxOccurs="unbounded"/>
+ <xs:element name="ListMultiplePersons" type="xs:boolean" minOccurs="0"/>
+ <xs:element name="InsertERnP" type="xs:boolean" minOccurs="0"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetBPKResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="GetBPKReturn" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
+ <xs:element name="FremdBPK" type="szr:FremdBPKType" minOccurs="0" maxOccurs="unbounded"/>
+ <xs:element name="PersonInfo" type="szr:PersonInfoType" minOccurs="0" maxOccurs="5"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetBPKs">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="PersonInfo" type="szr:PersonInfoType" maxOccurs="unbounded"/>
+ <xs:element name="BereichsKennung" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
+ <xs:element name="VKZ" type="xs:string"/>
+ <xs:element name="Target" type="szr:FremdBPKRequestType" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetBPKsResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="ResultRecord" type="szr:GetBPKsResponseType" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:complexType name="GetBPKsResponseType">
+ <xs:sequence>
+ <xs:element name="BPK" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
+ <xs:element name="FremdBPK" type="szr:FremdBPKType" minOccurs="0" maxOccurs="unbounded"/>
+ <xs:element name="Fault" minOccurs="0">
+ <xs:complexType>
+ <xs:attribute name="Code" type="xs:string"/>
+ <xs:attribute name="String" type="xs:string"/>
+ </xs:complexType>
+ </xs:element>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:element name="GetBPKKombi">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="GetBPKKombiRequest" type="szr:GetBPKKombiRequestType"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetBPKKombiResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="GetBPKKombiResponse" type="szr:GetBPKKombiResponseType"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetBPKZPV">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="GetBPKZPVRequest" type="szr:GetBPKZPVRequestType"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetBPKZPVResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="GetBPKZPVResponse" type="szr:GetBPKZPVResponseType"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetBPKFromStammzahlEncrypted">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="In" type="szr:GetBPKFromStammzahlEncryptedRequestType" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetBPKFromStammzahlEncryptedResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="Out" type="szr:GetBPKFromStammzahlEncryptedResponseType" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="SignContent">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="AppendCert" type="xs:boolean" default="false" minOccurs="0"/>
+ <xs:element name="JWSHeaderParam" type="szr:JwsHeaderParam" minOccurs="0" maxOccurs="unbounded"/>
+ <xs:element name="In" type="szr:SignContentEntry" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:complexType name="JwsHeaderParam">
+ <xs:attribute name="key" type="xs:string" use="required"/>
+ <xs:attribute name="value" type="xs:string" use="required"/>
+ </xs:complexType>
+ <xs:element name="SignContentResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="SignContentResponse" type="szr:SignContentResponseType"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="ValidateIdentityLink">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="IdentityLink" type="szr:IdentityLinkType"/>
+ <xs:element name="BereichsKennung" type="xs:string"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="ValidateIdentityLinkResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="ValidateIdentityLinkReturn" type="xs:string"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="BPKzuBasiszahl">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="Bereich" type="xs:string"/>
+ <xs:element name="BPK" type="xs:string"/>
+ <xs:element name="BasisZahl" type="xs:string" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="BPKzuBasiszahlResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="BPKzuBasiszahlReturn" type="xs:string"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:complexType name="FremdBPKRequestType">
+ <xs:sequence>
+ <xs:element name="BereichsKennung" type="xs:string"/>
+ <xs:element name="VKZ" type="xs:string"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="FremdBPKType">
+ <xs:sequence>
+ <xs:element name="BereichsKennung" type="xs:string"/>
+ <xs:element name="FremdBPK" type="xs:string"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="GetVKZPermissionResponseType">
+ <xs:sequence>
+ <xs:element name="isAllowed" type="xs:boolean"/>
+ <xs:element name="behSchluessel" type="xs:string" minOccurs="0"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:element name="BasiszahlZuBPK">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="VKZ" type="xs:string" minOccurs="0"/>
+ <xs:element name="BasisZahl" type="xs:string" maxOccurs="unbounded"/>
+ <xs:element name="Bereich" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
+ <xs:element name="FremdBPKTargets" type="szr:FremdBPKRequestType" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:complexType name="BasiszahlZuBPKReturnType">
+ <xs:sequence>
+ <xs:element name="BPK" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
+ <xs:element name="FremdBPKs" type="szr:FremdBPKType" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:element name="BasiszahlZuBPKResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="BasiszahlZuBPKReturn" type="szr:BasiszahlZuBPKReturnType" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="ZMRAnwendungsIntegration">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="Bereich" type="xs:string"/>
+ <xs:element name="FremdBPKTargets" type="szr:FremdBPKRequestType" minOccurs="0" maxOccurs="unbounded"/>
+ <xs:element name="ZMRfremdbPK" type="xs:string" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:complexType name="ZMRAnwendungsIntegrationReturnType">
+ <xs:sequence>
+ <xs:element name="BPK" type="xs:string"/>
+ <xs:element name="FremdBPKs" type="szr:FremdBPKType" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:element name="ZMRAnwendungsIntegrationResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="ZMRAnwendungsIntegrationReturn" type="szr:ZMRAnwendungsIntegrationReturnType" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetStammzahl">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="PersonInfo" type="szr:PersonInfoType"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetStammzahlResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="Stammzahl" type="xs:string"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetStammzahlEncrypted">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="PersonInfo" type="szr:PersonInfoType"/>
+ <xs:element name="InsertERnP" type="xs:boolean" minOccurs="0"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetStammzahlEncryptedResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="Stammzahl" type="xs:string"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetVersion" nillable="true"/>
+ <xs:element name="GetVersionResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="Version" type="xs:string"/>
+ <xs:element name="Revision" type="xs:string"/>
+ <xs:element name="Time" type="xs:string"/>
+ <xs:element name="IdentityLinkNotAfter" type="xs:string"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+</xs:schema>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/szr_client/szr_xmldsig.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/szr_client/szr_xmldsig.xsd
new file mode 100644
index 00000000..96b50b40
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/szr_client/szr_xmldsig.xsd
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:ecdsa="http://www.w3.org/2001/04/xmldsig-more#"
+ targetNamespace="http://www.w3.org/2000/09/xmldsig#" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#">
+ <xs:import namespace="http://www.w3.org/2001/04/xmldsig-more#" schemaLocation="szr_ecdsa.xsd"/>
+ <xs:complexType name="KeyValueType">
+ <xs:sequence>
+ <xs:element name="DSAKeyValue" minOccurs="0"
+ type="dsig:DSAKeyValueType" />
+ <xs:element name="RSAKeyValue" minOccurs="0"
+ type="dsig:RSAKeyValueType" />
+ <xs:element ref="ecdsa:ECDSAKeyValue" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="DSAKeyValueType">
+ <xs:sequence>
+ <xs:element name="P" minOccurs="0" type="xs:string" />
+ <xs:element name="Q" minOccurs="0" type="xs:string" />
+ <xs:element name="J" minOccurs="0" type="xs:string" />
+ <xs:element name="G" minOccurs="0" type="xs:string" />
+ <xs:element name="Y" minOccurs="0" type="xs:string" />
+ <xs:element name="PgenCounter" minOccurs="0" type="xs:string" />
+ <xs:element name="Seed" minOccurs="0" type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="RSAKeyValueType">
+ <xs:sequence>
+ <xs:element name="Modulus" minOccurs="0" type="xs:string" />
+ <xs:element name="Exponent" minOccurs="0" type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+</xs:schema>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/soapenv.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/soapenv.xsd
new file mode 100644
index 00000000..cb89c710
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/soapenv.xsd
@@ -0,0 +1,125 @@
+<?xml version='1.0' encoding='UTF-8' ?>
+
+<!-- Schema for the SOAP/1.1 envelope
+
+ This schema has been produced using W3C's SOAP Version 1.2 schema
+ found at:
+
+ http://www.w3.org/2001/06/soap-envelope
+
+ Copyright 2001 Martin Gudgin, Developmentor.
+
+ Changes made are the following:
+ - reverted namespace to http://schemas.xmlsoap.org/soap/envelope/
+ - reverted mustUnderstand to only allow 0 and 1 as lexical values
+ - made encodingStyle a global attribute 20020825
+
+ Further changes:
+
+ - removed default value from mustUnderstand attribute declaration - 20030314
+
+ Original copyright:
+
+ Copyright 2001 W3C (Massachusetts Institute of Technology,
+ Institut National de Recherche en Informatique et en Automatique,
+ Keio University). All Rights Reserved.
+ http://www.w3.org/Consortium/Legal/
+
+ This document is governed by the W3C Software License [1] as
+ described in the FAQ [2].
+
+ [1] http://www.w3.org/Consortium/Legal/copyright-software-19980720
+ [2] http://www.w3.org/Consortium/Legal/IPR-FAQ-20000620.html#DTD
+-->
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ xmlns:tns="http://schemas.xmlsoap.org/soap/envelope/"
+ targetNamespace="http://schemas.xmlsoap.org/soap/envelope/" >
+
+
+ <!-- Envelope, header and body -->
+ <xs:element name="Envelope" type="tns:Envelope" />
+ <xs:complexType name="Envelope" >
+ <xs:sequence>
+ <xs:element ref="tns:Header" minOccurs="0" />
+ <xs:element ref="tns:Body" minOccurs="1" />
+ <xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="lax" />
+ </xs:sequence>
+ <xs:anyAttribute namespace="##other" processContents="lax" />
+ </xs:complexType>
+
+ <xs:element name="Header" type="tns:Header" />
+ <xs:complexType name="Header" >
+ <xs:sequence>
+ <xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="lax" />
+ </xs:sequence>
+ <xs:anyAttribute namespace="##other" processContents="lax" />
+ </xs:complexType>
+
+ <xs:element name="Body" type="tns:Body" />
+ <xs:complexType name="Body" >
+ <xs:sequence>
+ <xs:any namespace="##any" minOccurs="0" maxOccurs="unbounded" processContents="strict" />
+ </xs:sequence>
+ <xs:anyAttribute namespace="##any" processContents="lax" >
+ <xs:annotation>
+ <xs:documentation>
+ Prose in the spec does not specify that attributes are allowed on the Body element
+ </xs:documentation>
+ </xs:annotation>
+ </xs:anyAttribute>
+ </xs:complexType>
+
+
+ <!-- Global Attributes. The following attributes are intended to be usable via qualified attribute names on any complex type referencing them. -->
+ <xs:attribute name="mustUnderstand" >
+ <xs:simpleType>
+ <xs:restriction base='xs:boolean'>
+ <xs:pattern value='0|1' />
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="actor" type="xs:anyURI" />
+
+ <xs:simpleType name="encodingStyle" >
+ <xs:annotation>
+ <xs:documentation>
+ 'encodingStyle' indicates any canonicalization conventions followed in the contents of the containing element. For example, the value 'http://schemas.xmlsoap.org/soap/encoding/' indicates the pattern described in SOAP specification
+ </xs:documentation>
+ </xs:annotation>
+ <xs:list itemType="xs:anyURI" />
+ </xs:simpleType>
+
+ <xs:attribute name="encodingStyle" type="tns:encodingStyle" />
+ <xs:attributeGroup name="encodingStyle" >
+ <xs:attribute ref="tns:encodingStyle" />
+ </xs:attributeGroup>
+
+ <xs:element name="Fault" type="tns:Fault" />
+ <xs:complexType name="Fault" final="extension" >
+ <xs:annotation>
+ <xs:documentation>
+ Fault reporting structure
+ </xs:documentation>
+ </xs:annotation>
+ <xs:sequence>
+ <xs:element name="faultcode" type="xs:QName" />
+ <xs:element name="faultstring" type="xs:string" />
+ <xs:element name="faultactor" type="xs:anyURI" minOccurs="0" />
+ <xs:element name="detail" type="tns:detail" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="detail">
+ <xs:sequence>
+ <xs:any namespace="##any" minOccurs="0" maxOccurs="unbounded" processContents="lax" />
+ </xs:sequence>
+ <xs:anyAttribute namespace="##any" processContents="lax" />
+ </xs:complexType>
+
+</xs:schema>
+
+
+
+
+
+
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/ablaufendeauskunfssperren/ablaufendeauskunftssperrenrequest.xml b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/ablaufendeauskunfssperren/ablaufendeauskunftssperrenrequest.xml
new file mode 100644
index 00000000..173c3894
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/ablaufendeauskunfssperren/ablaufendeauskunftssperrenrequest.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:zmr="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#" xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#" xmlns="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ ../../soapenv.xsd http://bmi.gv.at/namespace/zmr-su/base/20040201# ../../../xsd/allgemein/Service.xsd http://bmi.gv.at/namespace/zmr-su/zmr/20040201# ../../../xsd/zmr/ZMRProxy.xsd">
+<soap:Body>
+ <base:Request>
+ <base:WorkflowInfoClient>
+ <base:ProzessName>GP_Ablaufende_Auskunftssperren</base:ProzessName>
+ <base:VorgangName>ZPR_VO_Ablaufende_Auskunftssperren</base:VorgangName>
+ </base:WorkflowInfoClient>
+ <base:ClientInfo>
+ <base:Organisation>
+ <base:BehoerdenNr>000000</base:BehoerdenNr>
+ </base:Organisation>
+ <base:Client>Test</base:Client>
+ </base:ClientInfo>
+ <zmr:AblaufendeAuskunftssperrenSucheRequest>
+ <zmr:SperreBis>2005-01-01T00:00:00.000</zmr:SperreBis>
+ <base:AnzahlSaetze>10</base:AnzahlSaetze>
+ </zmr:AblaufendeAuskunftssperrenSucheRequest>
+ </base:Request>
+ </soap:Body>
+</soap:Envelope> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/ablaufendeauskunfssperren/ablaufendeauskunftssperrenresponse.xml b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/ablaufendeauskunfssperren/ablaufendeauskunftssperrenresponse.xml
new file mode 100644
index 00000000..75fbd86f
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/ablaufendeauskunfssperren/ablaufendeauskunftssperrenresponse.xml
@@ -0,0 +1,194 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:zmr="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#" xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#" xmlns="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ ../../soapenv.xsd http://bmi.gv.at/namespace/zmr-su/base/20040201# ../../../xsd/allgemein/Service.xsd http://bmi.gv.at/namespace/zmr-su/zmr/20040201# ../../../xsd/zmr/ZMRProxy.xsd">
+<soap:Body>
+ <base:Response>
+ <base:WorkflowInfoServer>
+ <base:ProzessName>GP_Ablaufende_Auskunftssperren</base:ProzessName>
+ <base:ProzessInstanzID>1234</base:ProzessInstanzID>
+ <base:ProzessStatus>A</base:ProzessStatus>
+ <base:SequenzID>00034</base:SequenzID>
+ <base:Subprozess>
+ <base:VorgangName>ZPR_VO_Ablaufende_Auskunftssperren</base:VorgangName>
+ <base:VorgangStatus>A</base:VorgangStatus>
+ <base:Required>false</base:Required>
+ <base:Visible>true</base:Visible>
+ </base:Subprozess>
+ </base:WorkflowInfoServer>
+ <base:ServerInfo>
+ <base:GeneriertVon>ZMR Server</base:GeneriertVon>
+ <base:GeneriertAm>2004-01-26T00:00:00.000</base:GeneriertAm>
+ <base:ServerTransaktionNr>1234567</base:ServerTransaktionNr>
+ </base:ServerInfo>
+ <zmr:AblaufendeAuskunftssperrenSucheResponse>
+ <zmr:AblaufendeAuskunftssperrenSucheAnfrage>
+ <zmr:SperreBis>2005-01-01T00:00:00.000</zmr:SperreBis>
+ <base:AnzahlSaetze>10</base:AnzahlSaetze>
+ </zmr:AblaufendeAuskunftssperrenSucheAnfrage>
+ <base:Message>
+ <base:Number>0003</base:Number>
+ <base:Text>Es wurde 1 Personen im ZMR gefunden</base:Text>
+ </base:Message>
+ <zmr:AblaufendeAuskunftssperreErgebnis>
+ <base:GefundeneSaetze>1</base:GefundeneSaetze>
+ <base:SaetzeVon>0</base:SaetzeVon>
+ <base:SaetzeBis>1</base:SaetzeBis>
+ <zmr:PersonErgebnisSatz>
+ <!-- 1. gelieferte Person im Suchergebnis (Personendaten + Meldedaten, historisch und aktuell) -->
+ <zmr:Personendaten>
+ <!-- Historienliste der Personendaten. Nur ein PersonErgebnis-Element, wenn nur aktuelle Daten -->
+ <zmr:PersonErgebnis>
+ <!-- aktueller Personendaten Gesamtdatensatz -->
+ <base:ErgebnissatzInfo>
+ <!-- letzter Änderungs-Zeitpunkt des Person-Gesamtdatensatzes (mit Staatsangehörigkeiten, ...)-->
+ <base:LetzteAenderung>2004-01-26T00:00:00.000</base:LetzteAenderung>
+ </base:ErgebnissatzInfo>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>0000001</base:EntityID>
+ <!-- letzter Änderungs-Zeitpunkt der Person-Entity (ohne Staatsangehörigkeiten, ...)-->
+ <base:LetzteAenderung>2004-01-26T00:00:00.000</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2004-01-26T00:00:00.000</base:Von>
+ <base:BeginnCode>AMKOR</base:BeginnCode>
+ <base:BeginnText>Amtliche Korrektur</base:BeginnText>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:GemeindeNr>09999</base:GemeindeNr>
+ </base:Organisation>
+ <base:Benutzer>test@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <base:ZMRZahl>000111111111</base:ZMRZahl>
+ <zmr:NatuerlichePerson>
+ <zmr:PersonenName>
+ <Vorname>Maximilian</Vorname>
+ <Familienname>Mustermann</Familienname>
+ </zmr:PersonenName>
+ <Geschlecht>männlich</Geschlecht>
+ <Geburtsdatum>2001-05-07</Geburtsdatum>
+ <Geburtsort>Wien</Geburtsort>
+ <Geburtsbundesland>Wien</Geburtsbundesland>
+ <Geburtsstaat>Österreich</Geburtsstaat>
+ <zmr:Staatsangehoerigkeit>
+ <ISOCode3>AUT</ISOCode3>
+ <StaatsnameDE>Österreich</StaatsnameDE>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>0000001</base:EntityID>
+ <base:LetzteAenderung>2003-01-01T00:00:00.000</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2003-01-01T00:00:00.000</base:Von>
+ <base:BeginnCode>REISEDOK_ANLEGEN</base:BeginnCode>
+ <base:BeginnText>Reisedokument anlegen</base:BeginnText>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:GemeindeNr>09999</base:GemeindeNr>
+ </base:Organisation>
+ <base:Benutzer>test@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ </zmr:Staatsangehoerigkeit>
+ </zmr:NatuerlichePerson>
+ </zmr:PersonErgebnis>
+ <zmr:PersonErgebnis>
+ <!-- historischer Personendaten Gesamtdatensatz (durch Vornamen-Änderung entstanden. Die Staatsagehörigkeit wurde nicht geändert und ist somit mit der im aktuellen Satz identisch-->
+ <base:ErgebnissatzInfo>
+ <base:LetzteAenderung>2004-01-26T00:00:00.000</base:LetzteAenderung>
+ </base:ErgebnissatzInfo>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>0000001</base:EntityID>
+ <base:LetzteAenderung>2004-01-26T00:00:00.000</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2003-01-01T00:00:00.000</base:Von>
+ <base:BeginnCode>GEBURT</base:BeginnCode>
+ <base:BeginnText>Geburt</base:BeginnText>
+ <base:Bis>2004-01-26T00:00:00.000</base:Bis>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:GemeindeNr>09999</base:GemeindeNr>
+ </base:Organisation>
+ <base:Benutzer>test@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <base:ZMRZahl>000111111111</base:ZMRZahl>
+ <zmr:NatuerlichePerson>
+ <zmr:PersonenName>
+ <Vorname>Hans</Vorname>
+ <Familienname>Mustermann</Familienname>
+ </zmr:PersonenName>
+ <Geschlecht>männlich</Geschlecht>
+ <Geburtsdatum>2001-05-07</Geburtsdatum>
+ <Geburtsort>Wien</Geburtsort>
+ <Geburtsbundesland>Wien</Geburtsbundesland>
+ <Geburtsstaat>Österreich</Geburtsstaat>
+ <zmr:Staatsangehoerigkeit>
+ <ISOCode3>AUT</ISOCode3>
+ <StaatsnameDE>Österreich</StaatsnameDE>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>0000001</base:EntityID>
+ <base:LetzteAenderung>2003-01-01T00:00:00.000</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2003-01-01T00:00:00.000</base:Von>
+ <base:BeginnCode>REISEDOK_ANLEGEN</base:BeginnCode>
+ <base:BeginnText>Reisedokument anlegen</base:BeginnText>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:GemeindeNr>09999</base:GemeindeNr>
+ </base:Organisation>
+ <base:Benutzer>test@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ </zmr:Staatsangehoerigkeit>
+ </zmr:NatuerlichePerson>
+ </zmr:PersonErgebnis>
+ </zmr:Personendaten>
+ <zmr:Meldedaten>
+ <!-- Historienliste einer Meldung. Nur ein MeldungErgebnis-Element, wenn nur aktuelle Daten -->
+ <zmr:MeldungErgebnis>
+ <base:ErgebnissatzInfo>
+ <!-- letzter Änderungs-Zeitpunkt des Meldung-Gesamtdatensatzes (mit Auskunftssperren, ...)-->
+ <base:LetzteAenderung>2004-01-26T00:00:00.000</base:LetzteAenderung>
+ </base:ErgebnissatzInfo>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>00000002</base:EntityID>
+ <!-- letzter Änderungs-Zeitpunkt der Meldung-Entity (ohne Auskunftssperren, ...)-->
+ <base:LetzteAenderung>2004-01-26T00:00:00.000</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2004-01-26T00:00:00.000</base:Von>
+ <base:BeginnCode>WSANM</base:BeginnCode>
+ <base:BeginnText>Wohnsitz anmelden</base:BeginnText>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:BehoerdenNr>099999</base:BehoerdenNr>
+ </base:Organisation>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <zmr:Wohnsitz>
+ <zmr:PostAdresse>
+ <Postleitzahl>1245</Postleitzahl>
+ <Gemeinde>Testgemeinde</Gemeinde>
+ <Gemeindekennziffer>09999</Gemeindekennziffer>
+ <Ortschaft>Testort</Ortschaft>
+ <zmr:Zustelladresse>
+ <Strassenname>Teststrasse</Strassenname>
+ <Orientierungsnummer>1</Orientierungsnummer>
+ <Wohnsitzqualitaet>H</Wohnsitzqualitaet>
+ </zmr:Zustelladresse>
+ </zmr:PostAdresse>
+ <base:Adressstatus>XXX000</base:Adressstatus>
+ </zmr:Wohnsitz>
+ <base:GemeldetVon>2004-01-26T00:00:00.000</base:GemeldetVon>
+ <base:PeriodeCode>WSANM</base:PeriodeCode>
+ <base:PeriodeText>Wohnsitz anmelden</base:PeriodeText>
+ </zmr:MeldungErgebnis>
+ </zmr:Meldedaten>
+ </zmr:PersonErgebnisSatz>
+ </zmr:AblaufendeAuskunftssperreErgebnis>
+ </zmr:AblaufendeAuskunftssperrenSucheResponse>
+ </base:Response>
+ </soap:Body>
+</soap:Envelope>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/ablaufendeauskunfssperren/blaetternrequest.xml b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/ablaufendeauskunfssperren/blaetternrequest.xml
new file mode 100644
index 00000000..50517e75
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/ablaufendeauskunfssperren/blaetternrequest.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:zmr="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#" xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#" xmlns="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ ../../soapenv.xsd http://bmi.gv.at/namespace/zmr-su/base/20040201# ../../../xsd/allgemein/Service.xsd http://bmi.gv.at/namespace/zmr-su/zmr/20040201# ../../../xsd/zmr/ZMRProxy.xsd">
+<soap:Body>
+ <base:Request>
+ <base:WorkflowInfoClient>
+ <base:ProzessName>GP_Ablaufende_Auskunftssperren</base:ProzessName>
+ <base:ProzessInstanzID>1234</base:ProzessInstanzID>
+ <!-- Die InstanzID der laufenden Prozesses muss hier übermittelt werden, um die Suche fortzusetzen (aus WorkflowInfoServer des ersten Suchergebnisses-->
+ <base:SequenzID>00034</base:SequenzID>
+ <base:VorgangName>ZPR_VO_Ablaufende_Auskunftssperren</base:VorgangName>
+ </base:WorkflowInfoClient>
+ <base:ClientInfo>
+ <base:Organisation>
+ <base:BehoerdenNr>000000</base:BehoerdenNr>
+ </base:Organisation>
+ <base:Client>Test</base:Client>
+ </base:ClientInfo>
+ <base:BlaetternRequest>
+ <base:BlaetternInfo>
+ <base:Richtung>Vor</base:Richtung>
+ <base:AnzahlSaetze>3</base:AnzahlSaetze>
+ </base:BlaetternInfo>
+ </base:BlaetternRequest>
+ </base:Request>
+ </soap:Body>
+</soap:Envelope>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/ablaufendeauskunfssperren/blaetternresponse.xml b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/ablaufendeauskunfssperren/blaetternresponse.xml
new file mode 100644
index 00000000..add2f3ad
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/ablaufendeauskunfssperren/blaetternresponse.xml
@@ -0,0 +1,195 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:zmr="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#" xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#" xmlns="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ ../../soapenv.xsd http://bmi.gv.at/namespace/zmr-su/base/20040201# ../../../xsd/allgemein/Service.xsd http://bmi.gv.at/namespace/zmr-su/zmr/20040201# ../../../xsd/zmr/ZMRProxy.xsd">
+<soap:Body>
+ <base:Response>
+ <base:WorkflowInfoServer>
+ <base:ProzessName>GP_Ablaufende_Auskunftssperren</base:ProzessName>
+ <base:ProzessInstanzID>1234</base:ProzessInstanzID>
+ <base:ProzessStatus>A</base:ProzessStatus>
+ <base:SequenzID>00034</base:SequenzID>
+ <base:Subprozess>
+ <base:VorgangName>ZPR_VO_Ablaufende_Auskunftssperren</base:VorgangName>
+ <base:VorgangStatus>A</base:VorgangStatus>
+ <base:Required>false</base:Required>
+ <base:Visible>true</base:Visible>
+ </base:Subprozess>
+ </base:WorkflowInfoServer>
+ <base:ServerInfo>
+ <base:GeneriertVon>ZMR Server</base:GeneriertVon>
+ <base:GeneriertAm>2004-01-26T00:00:00.000</base:GeneriertAm>
+ <base:ServerTransaktionNr>1234567</base:ServerTransaktionNr>
+ </base:ServerInfo>
+ <zmr:AblaufendeAuskunftssperrenSucheResponse>
+ <zmr:AblaufendeAuskunftssperrenSucheAnfrage>
+ <zmr:SperreBis>2005-01-01T00:00:00.000</zmr:SperreBis>
+ <base:AnzahlSaetze>10</base:AnzahlSaetze>
+ </zmr:AblaufendeAuskunftssperrenSucheAnfrage>
+ <base:Message>
+ <base:Number>0003</base:Number>
+ <base:Text>Es wurde 1 Personen im ZMR gefunden</base:Text>
+ </base:Message>
+ <zmr:AblaufendeAuskunftssperreErgebnis>
+ <base:GefundeneSaetze>4</base:GefundeneSaetze>
+ <base:SaetzeVon>3</base:SaetzeVon>
+ <!-- Es wurde weitergeblättert - der letzte Satz wird geliefert -->
+ <base:SaetzeBis>4</base:SaetzeBis>
+ <zmr:PersonErgebnisSatz>
+ <!-- 1. gelieferte Person im Suchergebnis (Personendaten + Meldedaten, historisch und aktuell) -->
+ <zmr:Personendaten>
+ <!-- Historienliste der Personendaten. Nur ein PersonErgebnis-Element, wenn nur aktuelle Daten -->
+ <zmr:PersonErgebnis>
+ <!-- aktueller Personendaten Gesamtdatensatz -->
+ <base:ErgebnissatzInfo>
+ <!-- letzter Änderungs-Zeitpunkt des Person-Gesamtdatensatzes (mit Staatsangehörigkeiten, ...)-->
+ <base:LetzteAenderung>2004-01-26T00:00:00.000</base:LetzteAenderung>
+ </base:ErgebnissatzInfo>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>0000001</base:EntityID>
+ <!-- letzter Änderungs-Zeitpunkt der Person-Entity (ohne Staatsangehörigkeiten, ...)-->
+ <base:LetzteAenderung>2004-01-26T00:00:00.000</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2004-01-26T00:00:00.000</base:Von>
+ <base:BeginnCode>AMKOR</base:BeginnCode>
+ <base:BeginnText>Amtliche Korrektur</base:BeginnText>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:GemeindeNr>09999</base:GemeindeNr>
+ </base:Organisation>
+ <base:Benutzer>test@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <base:ZMRZahl>000111111111</base:ZMRZahl>
+ <zmr:NatuerlichePerson>
+ <zmr:PersonenName>
+ <Vorname>Maximilian</Vorname>
+ <Familienname>Mustermann</Familienname>
+ </zmr:PersonenName>
+ <Geschlecht>männlich</Geschlecht>
+ <Geburtsdatum>2001-05-07</Geburtsdatum>
+ <Geburtsort>Wien</Geburtsort>
+ <Geburtsbundesland>Wien</Geburtsbundesland>
+ <Geburtsstaat>Österreich</Geburtsstaat>
+ <zmr:Staatsangehoerigkeit>
+ <ISOCode3>AUT</ISOCode3>
+ <StaatsnameDE>Österreich</StaatsnameDE>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>0000001</base:EntityID>
+ <base:LetzteAenderung>2003-01-01T00:00:00.000</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2003-01-01T00:00:00.000</base:Von>
+ <base:BeginnCode>REISEDOK_ANLEGEN</base:BeginnCode>
+ <base:BeginnText>Reisedokument anlegen</base:BeginnText>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:GemeindeNr>09999</base:GemeindeNr>
+ </base:Organisation>
+ <base:Benutzer>test@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ </zmr:Staatsangehoerigkeit>
+ </zmr:NatuerlichePerson>
+ </zmr:PersonErgebnis>
+ <zmr:PersonErgebnis>
+ <!-- historischer Personendaten Gesamtdatensatz (durch Vornamen-Änderung entstanden. Die Staatsagehörigkeit wurde nicht geändert und ist somit mit der im aktuellen Satz identisch-->
+ <base:ErgebnissatzInfo>
+ <base:LetzteAenderung>2004-01-26T00:00:00.000</base:LetzteAenderung>
+ </base:ErgebnissatzInfo>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>0000001</base:EntityID>
+ <base:LetzteAenderung>2004-01-26T00:00:00.000</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2003-01-01T00:00:00.000</base:Von>
+ <base:BeginnCode>GEBURT</base:BeginnCode>
+ <base:BeginnText>Geburt</base:BeginnText>
+ <base:Bis>2004-01-26T00:00:00.000</base:Bis>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:GemeindeNr>09999</base:GemeindeNr>
+ </base:Organisation>
+ <base:Benutzer>test@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <base:ZMRZahl>000111111111</base:ZMRZahl>
+ <zmr:NatuerlichePerson>
+ <zmr:PersonenName>
+ <Vorname>Hans</Vorname>
+ <Familienname>Mustermann</Familienname>
+ </zmr:PersonenName>
+ <Geschlecht>männlich</Geschlecht>
+ <Geburtsdatum>2001-05-07</Geburtsdatum>
+ <Geburtsort>Wien</Geburtsort>
+ <Geburtsbundesland>Wien</Geburtsbundesland>
+ <Geburtsstaat>Österreich</Geburtsstaat>
+ <zmr:Staatsangehoerigkeit>
+ <ISOCode3>AUT</ISOCode3>
+ <StaatsnameDE>Österreich</StaatsnameDE>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>0000001</base:EntityID>
+ <base:LetzteAenderung>2003-01-01T00:00:00.000</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2003-01-01T00:00:00.000</base:Von>
+ <base:BeginnCode>REISEDOK_ANLEGEN</base:BeginnCode>
+ <base:BeginnText>Reisedokument anlegen</base:BeginnText>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:GemeindeNr>09999</base:GemeindeNr>
+ </base:Organisation>
+ <base:Benutzer>test@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ </zmr:Staatsangehoerigkeit>
+ </zmr:NatuerlichePerson>
+ </zmr:PersonErgebnis>
+ </zmr:Personendaten>
+ <zmr:Meldedaten>
+ <!-- Historienliste einer Meldung. Nur ein MeldungErgebnis-Element, wenn nur aktuelle Daten -->
+ <zmr:MeldungErgebnis>
+ <base:ErgebnissatzInfo>
+ <!-- letzter Änderungs-Zeitpunkt des Meldung-Gesamtdatensatzes (mit Auskunftssperren, ...)-->
+ <base:LetzteAenderung>2004-01-26T00:00:00.000</base:LetzteAenderung>
+ </base:ErgebnissatzInfo>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>00000002</base:EntityID>
+ <!-- letzter Änderungs-Zeitpunkt der Meldung-Entity (ohne Auskunftssperren, ...)-->
+ <base:LetzteAenderung>2004-01-26T00:00:00.000</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2004-01-26T00:00:00.000</base:Von>
+ <base:BeginnCode>WSANM</base:BeginnCode>
+ <base:BeginnText>Wohnsitz anmelden</base:BeginnText>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:BehoerdenNr>099999</base:BehoerdenNr>
+ </base:Organisation>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <zmr:Wohnsitz>
+ <zmr:PostAdresse>
+ <Postleitzahl>1245</Postleitzahl>
+ <Gemeinde>Testgemeinde</Gemeinde>
+ <Gemeindekennziffer>09999</Gemeindekennziffer>
+ <Ortschaft>Testort</Ortschaft>
+ <zmr:Zustelladresse>
+ <Strassenname>Teststrasse</Strassenname>
+ <Orientierungsnummer>1</Orientierungsnummer>
+ <Wohnsitzqualitaet>H</Wohnsitzqualitaet>
+ </zmr:Zustelladresse>
+ </zmr:PostAdresse>
+ <base:Adressstatus>XXX000</base:Adressstatus>
+ </zmr:Wohnsitz>
+ <base:GemeldetVon>2004-01-26T00:00:00.000</base:GemeldetVon>
+ <base:PeriodeCode>WSANM</base:PeriodeCode>
+ <base:PeriodeText>Wohnsitz anmelden</base:PeriodeText>
+ </zmr:MeldungErgebnis>
+ </zmr:Meldedaten>
+ </zmr:PersonErgebnisSatz>
+ </zmr:AblaufendeAuskunftssperreErgebnis>
+ </zmr:AblaufendeAuskunftssperrenSucheResponse>
+ </base:Response>
+ </soap:Body>
+</soap:Envelope>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/adoption/adoptionrequest.xml b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/adoption/adoptionrequest.xml
new file mode 100644
index 00000000..9e8746ce
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/adoption/adoptionrequest.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:zmr="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#" xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#" xmlns="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ ../../soapenv.xsd http://bmi.gv.at/namespace/zmr-su/base/20040201# ../../../xsd/allgemein/Service.xsd http://bmi.gv.at/namespace/zmr-su/zmr/20040201# ../../../xsd/zmr/ZMRProxy.xsd">
+<soap:Body>
+ <base:Request>
+ <base:WorkflowInfoClient>
+ <base:ProzessName>GP_Adoption</base:ProzessName>
+ <base:VorgangName>ZPR_VO_Adoption</base:VorgangName>
+ </base:WorkflowInfoClient>
+ <base:ClientInfo>
+ <base:Organisation>
+ <base:BehoerdenNr>000000</base:BehoerdenNr>
+ </base:Organisation>
+ <base:Client>Test</base:Client>
+ </base:ClientInfo>
+ <zmr:AdoptionRequest>
+ <zmr:AdoptionInfo>
+ <base:Von>2004-01-26T00:00:00.000</base:Von>
+ </zmr:AdoptionInfo>
+ <zmr:PersonReferenz>
+ <base:Technisch>
+ <base:EntityID>2434</base:EntityID>
+ <base:LetzteAenderung>2003-03-01T00:00:00.000</base:LetzteAenderung>
+ </base:Technisch>
+ <base:ZMRZahl>000111111111</base:ZMRZahl>
+ </zmr:PersonReferenz>
+ <Familienname>MustermannAdoption</Familienname>
+ </zmr:AdoptionRequest>
+ </base:Request>
+ </soap:Body>
+</soap:Envelope>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/adoption/adoptionresponse.xml b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/adoption/adoptionresponse.xml
new file mode 100644
index 00000000..466bdc2c
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/adoption/adoptionresponse.xml
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:zmr="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#" xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#" xmlns="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ ../../soapenv.xsd http://bmi.gv.at/namespace/zmr-su/base/20040201# ../../../xsd/allgemein/Service.xsd http://bmi.gv.at/namespace/zmr-su/zmr/20040201# ../../../xsd/zmr/ZMRProxy.xsd">
+<soap:Body>
+ <base:Response>
+ <base:WorkflowInfoServer>
+ <base:ProzessName>GP_Adoption</base:ProzessName>
+ <base:ProzessInstanzID>1234</base:ProzessInstanzID>
+ <base:ProzessStatus>C</base:ProzessStatus>
+ <base:SequenzID>00034</base:SequenzID>
+ <base:Subprozess>
+ <base:VorgangName>ZPR_VO_Adoption</base:VorgangName>
+ <base:VorgangStatus>C</base:VorgangStatus>
+ <base:Required>false</base:Required>
+ <base:Visible>true</base:Visible>
+ </base:Subprozess>
+ </base:WorkflowInfoServer>
+ <base:ServerInfo>
+ <base:GeneriertVon>ZMR Server</base:GeneriertVon>
+ <base:GeneriertAm>2004-01-26T00:00:00.000</base:GeneriertAm>
+ <base:ServerTransaktionNr>1234567</base:ServerTransaktionNr>
+ </base:ServerInfo>
+ <zmr:AdoptionResponse>
+ <base:Message>
+ <base:Number>1234</base:Number>
+ <base:Text>Person wurde geändert</base:Text>
+ </base:Message>
+ <zmr:PersonErgebnis>
+ <base:ErgebnissatzInfo>
+ <base:LetzteAenderung>2004-01-26T00:00:00.000</base:LetzteAenderung>
+ </base:ErgebnissatzInfo>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>0000001</base:EntityID>
+ <base:LetzteAenderung>2004-01-26T00:00:00.000</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2004-01-26T00:00:00.000</base:Von>
+ <base:BeginnCode>NAMENSAENDERUNG</base:BeginnCode>
+ <base:BeginnText>Namensänderung</base:BeginnText>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:GemeindeNr>09999</base:GemeindeNr>
+ </base:Organisation>
+ <base:Benutzer>test@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <base:ZMRZahl>000111111111</base:ZMRZahl>
+ <zmr:NatuerlichePerson>
+ <zmr:PersonenName>
+ <Vorname>Anna</Vorname>
+ <Familienname>MustermannAdoption</Familienname>
+ </zmr:PersonenName>
+ <Geschlecht>weiblich</Geschlecht>
+ <Geburtsdatum>2001-05-07</Geburtsdatum>
+ <Geburtsort>Wien</Geburtsort>
+ <Geburtsbundesland>Wien</Geburtsbundesland>
+ <Geburtsstaat>Österreich</Geburtsstaat>
+ <zmr:Staatsangehoerigkeit>
+ <ISOCode3>AUT</ISOCode3>
+ <StaatsnameDE>Österreich</StaatsnameDE>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>0000001</base:EntityID>
+ <base:LetzteAenderung>2003-01-01T00:00:00.000</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2003-01-01T00:00:00.000</base:Von>
+ <base:BeginnCode>REISEDOK_ANLEGEN</base:BeginnCode>
+ <base:BeginnText>Reisedokument anlegen</base:BeginnText>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:GemeindeNr>09999</base:GemeindeNr>
+ </base:Organisation>
+ <base:Benutzer>test@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ </zmr:Staatsangehoerigkeit>
+ </zmr:NatuerlichePerson>
+ </zmr:PersonErgebnis>
+ </zmr:AdoptionResponse>
+ </base:Response>
+ </soap:Body>
+</soap:Envelope>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/adresssuche/adresssucherequest.xml b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/adresssuche/adresssucherequest.xml
new file mode 100644
index 00000000..b37c1ecf
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/adresssuche/adresssucherequest.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:zmr="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#" xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#" xmlns="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ ../../soapenv.xsd http://bmi.gv.at/namespace/zmr-su/base/20040201# ../../../xsd/allgemein/Service.xsd http://bmi.gv.at/namespace/zmr-su/zmr/20040201# ../../../xsd/zmr/ZMRProxy.xsd">
+ <soap:Body>
+ <base:Request>
+ <base:WorkflowInfoClient>
+ <base:ProzessName>Meldevorgang</base:ProzessName>
+ <base:VorgangName>Adresssuche</base:VorgangName>
+ </base:WorkflowInfoClient>
+ <base:ClientInfo>
+ <base:Organisation>
+ <base:BehoerdenNr>099999</base:BehoerdenNr>
+ </base:Organisation>
+ <base:Client>ZMRHTMLClient V3.0</base:Client>
+ </base:ClientInfo>
+ <zmr:AdresssucheRequest>
+ <zmr:AdresssucheInfo>
+ <zmr:Suchart>ADRESSSUCHE</zmr:Suchart>
+ </zmr:AdresssucheInfo>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Gemeindekennziffer>09999</Gemeindekennziffer>
+ <Ortschaft>Testort</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Teststraße</Strassenname>
+ </Zustelladresse>
+ </PostAdresse>
+ </zmr:Adressdaten>
+ </zmr:AdresssucheRequest>
+ </base:Request>
+ </soap:Body>
+</soap:Envelope>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/adresssuche/adresssucheresponse.xml b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/adresssuche/adresssucheresponse.xml
new file mode 100644
index 00000000..53c04d79
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/adresssuche/adresssucheresponse.xml
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:zmr="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#" xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#" xmlns="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+ xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ ../../soapenv.xsd http://bmi.gv.at/namespace/zmr-su/base/20040201# ../../../xsd/allgemein/Service.xsd http://bmi.gv.at/namespace/zmr-su/zmr/20040201# ../../../xsd/zmr/ZMRProxy.xsd">
+ <soap:Body>
+ <base:Response>
+ <base:WorkflowInfoServer>
+ <base:ProzessName>Meldevorgang</base:ProzessName>
+ <base:ProzessInstanzID>1234</base:ProzessInstanzID>
+ <base:ProzessStatus>A</base:ProzessStatus>
+ <base:SequenzID>00034</base:SequenzID>
+ <base:Subprozess>
+ <base:VorgangName>Adresssuche</base:VorgangName>
+ <base:VorgangStatus>A</base:VorgangStatus>
+ <base:Required>true</base:Required>
+ <base:Visible>true</base:Visible>
+ </base:Subprozess>
+ </base:WorkflowInfoServer>
+ <base:ServerInfo>
+ <base:GeneriertVon>ZMR Server</base:GeneriertVon>
+ <base:GeneriertAm>2004-01-26T00:00:00.000</base:GeneriertAm>
+ <base:ServerTransaktionNr>1234567</base:ServerTransaktionNr>
+ </base:ServerInfo>
+ <zmr:AdresssucheResponse>
+ <zmr:AdresssucheAnfrage>
+ <zmr:AdresssucheInfo>
+ <zmr:Suchart>ADRESSSUCHE</zmr:Suchart>
+ </zmr:AdresssucheInfo>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Gemeindekennziffer>09999</Gemeindekennziffer>
+ <Zustelladresse>
+ <Strassenname>Teststraße</Strassenname>
+ </Zustelladresse>
+ </PostAdresse>
+ </zmr:Adressdaten>
+ </zmr:AdresssucheAnfrage>
+ <base:Message>
+ <base:Number>123</base:Number>
+ <base:Text>Adressen gefunden.</base:Text>
+ </base:Message>
+ <zmr:Adresssuchergebnis>
+ <zmr:Detailgrad>Orientierungsnummer</zmr:Detailgrad>
+ <base:GefundeneSaetze>3</base:GefundeneSaetze>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Gemeinde>Testgemeinde</Gemeinde>
+ <Gemeindekennziffer>09999</Gemeindekennziffer>
+ <Ortschaft>Testort</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Teststraße</Strassenname>
+ <Orientierungsnummer>1</Orientierungsnummer>
+ </Zustelladresse>
+ </PostAdresse>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Gemeinde>Testgemeinde</Gemeinde>
+ <Gemeindekennziffer>09999</Gemeindekennziffer>
+ <Ortschaft>Testort</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Teststraße</Strassenname>
+ <Orientierungsnummer>2</Orientierungsnummer>
+ </Zustelladresse>
+ </PostAdresse>
+ </zmr:Adressdaten>
+ <zmr:Adressdaten>
+ <PostAdresse>
+ <Gemeinde>Testgemeinde</Gemeinde>
+ <Gemeindekennziffer>09999</Gemeindekennziffer>
+ <Ortschaft>Testort</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Teststraße</Strassenname>
+ <Orientierungsnummer>3</Orientierungsnummer>
+ </Zustelladresse>
+ </PostAdresse>
+ </zmr:Adressdaten>
+ </zmr:Adresssuchergebnis>
+ </zmr:AdresssucheResponse>
+ </base:Response>
+ </soap:Body>
+</soap:Envelope>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/behoerdenabfrage/behoerdenabfragerequestStufe1.xml b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/behoerdenabfrage/behoerdenabfragerequestStufe1.xml
new file mode 100644
index 00000000..0aa8460b
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/behoerdenabfrage/behoerdenabfragerequestStufe1.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:zmr="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#" xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#" xmlns="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ ../../soapenv.xsd http://bmi.gv.at/namespace/zmr-su/base/20040201# ../../../xsd/allgemein/Service.xsd http://bmi.gv.at/namespace/zmr-su/zmr/20040201# ../../../xsd/zmr/ZMRProxy.xsd">
+<soap:Body>
+ <base:Request>
+ <base:WorkflowInfoClient>
+ <base:ProzessName>GP_Behoerdenabfrage_erstellen</base:ProzessName>
+ <base:VorgangName>ZMR_VO_Behoerdenabfrage_Ueberblick_erstellen</base:VorgangName>
+ </base:WorkflowInfoClient>
+ <base:ClientInfo>
+ <base:Organisation>
+ <base:BehoerdenNr>000000</base:BehoerdenNr>
+ </base:Organisation>
+ <base:Client>Test</base:Client>
+ </base:ClientInfo>
+ <zmr:BehoerdenabfrageRequest>
+ <zmr:BehoerdenabfrageInfo>
+ <base:Bezugsfeld>Test</base:Bezugsfeld>
+ <zmr:BehoerdenabfrageAction>SONSTIGES</zmr:BehoerdenabfrageAction>
+ <base:InclusivHistorie>false</base:InclusivHistorie>
+ <base:Formalisiert>false</base:Formalisiert>
+ </zmr:BehoerdenabfrageInfo>
+ <NatuerlichePerson>
+ <PersonenName>
+ <Vorname>Max</Vorname>
+ <Familienname>Mustermann</Familienname>
+ </PersonenName>
+ <Geburtsdatum>2000-01-01</Geburtsdatum>
+ </NatuerlichePerson>
+ </zmr:BehoerdenabfrageRequest>
+ </base:Request>
+ </soap:Body>
+</soap:Envelope> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/behoerdenabfrage/behoerdenabfragerequestStufe2.xml b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/behoerdenabfrage/behoerdenabfragerequestStufe2.xml
new file mode 100644
index 00000000..a68cd27d
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/behoerdenabfrage/behoerdenabfragerequestStufe2.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:zmr="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#" xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#" xmlns="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ ../../soapenv.xsd http://bmi.gv.at/namespace/zmr-su/base/20040201# ../../../xsd/allgemein/Service.xsd http://bmi.gv.at/namespace/zmr-su/zmr/20040201# ../../../xsd/zmr/ZMRProxy.xsd">
+<soap:Body>
+ <base:Request>
+ <base:WorkflowInfoClient>
+ <base:ProzessName>GP_Behoerdenabfrage_erstellen</base:ProzessName>
+ <base:VorgangName>ZMR_VO_Behoerdenabfrage_Detail_erstellen</base:VorgangName>
+ </base:WorkflowInfoClient>
+ <base:ClientInfo>
+ <base:Organisation>
+ <base:BehoerdenNr>000000</base:BehoerdenNr>
+ </base:Organisation>
+ <base:Client>Test</base:Client>
+ </base:ClientInfo>
+ <zmr:BehoerdenabfrageRequest>
+ <zmr:BehoerdenabfrageInfo>
+ <base:Bezugsfeld>Test</base:Bezugsfeld>
+ <zmr:BehoerdenabfrageAction>SONSTIGES</zmr:BehoerdenabfrageAction>
+ <base:InclusivHistorie>false</base:InclusivHistorie>
+ <base:Formalisiert>false</base:Formalisiert>
+ </zmr:BehoerdenabfrageInfo>
+ <zmr:PersonKey>1</zmr:PersonKey>
+ </zmr:BehoerdenabfrageRequest>
+ </base:Request>
+ </soap:Body>
+</soap:Envelope> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/behoerdenabfrage/behoerdenabfrageresponseStufe1.xml b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/behoerdenabfrage/behoerdenabfrageresponseStufe1.xml
new file mode 100644
index 00000000..cf18458e
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/behoerdenabfrage/behoerdenabfrageresponseStufe1.xml
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:zmr="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#" xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#" xmlns="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ ../../soapenv.xsd http://bmi.gv.at/namespace/zmr-su/base/20040201# ../../../xsd/allgemein/Service.xsd http://bmi.gv.at/namespace/zmr-su/zmr/20040201# ../../../xsd/zmr/ZMRProxy.xsd">
+<soap:Body>
+ <base:Response>
+ <base:WorkflowInfoServer>
+ <base:ProzessName>GP_Behoerdenabfrage_erstellen</base:ProzessName>
+ <base:ProzessInstanzID>1234</base:ProzessInstanzID>
+ <base:ProzessStatus>A</base:ProzessStatus>
+ <base:SequenzID>00034</base:SequenzID>
+ <base:Subprozess>
+ <base:VorgangName>ZPR_VO_Person_suchen_Meldevorgang</base:VorgangName>
+ <base:VorgangStatus>C</base:VorgangStatus>
+ <base:Required>false</base:Required>
+ <base:Visible>true</base:Visible>
+ </base:Subprozess>
+ <base:Subprozess>
+ <base:VorgangName>ZMR_VO_Behoerdenabfrage_Detail_erstellen</base:VorgangName>
+ <base:VorgangStatus>A</base:VorgangStatus>
+ <base:Required>false</base:Required>
+ <base:Visible>true</base:Visible>
+ </base:Subprozess>
+ </base:WorkflowInfoServer>
+ <base:ServerInfo>
+ <base:GeneriertVon>ZMR Server</base:GeneriertVon>
+ <base:GeneriertAm>2004-01-26T00:00:00.000</base:GeneriertAm>
+ <base:ServerTransaktionNr>1234567</base:ServerTransaktionNr>
+ </base:ServerInfo>
+ <zmr:BehoerdenabfrageResponse>
+ <zmr:BehoerdenabfrageAnfrage>
+ <zmr:BehoerdenabfrageInfo>
+ <base:Bezugsfeld>Test</base:Bezugsfeld>
+ <zmr:BehoerdenabfrageAction>SONSTIGES</zmr:BehoerdenabfrageAction>
+ <base:InclusivHistorie>false</base:InclusivHistorie>
+ <base:Formalisiert>false</base:Formalisiert>
+ </zmr:BehoerdenabfrageInfo>
+ <NatuerlichePerson>
+ <PersonenName>
+ <Vorname>Max</Vorname>
+ <Familienname>Mustermann</Familienname>
+ </PersonenName>
+ <Geburtsdatum>2000-01-01</Geburtsdatum>
+ </NatuerlichePerson>
+ </zmr:BehoerdenabfrageAnfrage>
+ <base:Message>
+ <base:Number>0003</base:Number>
+ <base:Text>Es wurden 3 Personen im ZMR gefunden</base:Text>
+ </base:Message>
+ <zmr:BehoerdenabfrageUeberblick>
+ <base:AnzahlSaetze>3</base:AnzahlSaetze>
+ <zmr:PersonUeberblick>
+ <zmr:PersonKey>0</zmr:PersonKey>
+ <Geburtsdatum>2001-01-01</Geburtsdatum>
+ <Geburtsort>Wien - Ottakring</Geburtsort>
+ <Postleitzahl>1010</Postleitzahl>
+ <Ortschaft>Wien - Innere Stadt</Ortschaft>
+ </zmr:PersonUeberblick>
+ <zmr:PersonUeberblick>
+ <zmr:PersonKey>1</zmr:PersonKey>
+ <Geburtsdatum>2001-01-01</Geburtsdatum>
+ <Geburtsort>Testort</Geburtsort>
+ <Postleitzahl>9999</Postleitzahl>
+ <Ortschaft>Testort</Ortschaft>
+ </zmr:PersonUeberblick>
+ <zmr:PersonUeberblick>
+ <zmr:PersonKey>2</zmr:PersonKey>
+ <Geburtsdatum>2001-01-01</Geburtsdatum>
+ <Geburtsort>Testort2</Geburtsort>
+ <Postleitzahl>8888</Postleitzahl>
+ <Ortschaft>Testort2</Ortschaft>
+ </zmr:PersonUeberblick>
+ </zmr:BehoerdenabfrageUeberblick>
+ </zmr:BehoerdenabfrageResponse>
+ </base:Response>
+ </soap:Body>
+</soap:Envelope>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/behoerdenabfrage/behoerdenabfrageresponseStufe2.xml b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/behoerdenabfrage/behoerdenabfrageresponseStufe2.xml
new file mode 100644
index 00000000..909c491e
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/behoerdenabfrage/behoerdenabfrageresponseStufe2.xml
@@ -0,0 +1,200 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:zmr="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#" xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#" xmlns="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ ../../soapenv.xsd http://bmi.gv.at/namespace/zmr-su/base/20040201# ../../../xsd/allgemein/Service.xsd http://bmi.gv.at/namespace/zmr-su/zmr/20040201# ../../../xsd/zmr/ZMRProxy.xsd">
+<soap:Body>
+ <base:Response>
+ <base:WorkflowInfoServer>
+ <base:ProzessName>GP_Behoerdenabfrage_erstellen</base:ProzessName>
+ <base:ProzessInstanzID>1234</base:ProzessInstanzID>
+ <base:ProzessStatus>C</base:ProzessStatus>
+ <base:SequenzID>00034</base:SequenzID>
+ <base:Subprozess>
+ <base:VorgangName>ZPR_VO_Person_suchen_Meldevorgang</base:VorgangName>
+ <base:VorgangStatus>C</base:VorgangStatus>
+ <base:Required>false</base:Required>
+ <base:Visible>true</base:Visible>
+ </base:Subprozess>
+ <base:Subprozess>
+ <base:VorgangName>ZMR_VO_Behoerdenabfrage_Detail_erstellen</base:VorgangName>
+ <base:VorgangStatus>C</base:VorgangStatus>
+ <base:Required>false</base:Required>
+ <base:Visible>true</base:Visible>
+ </base:Subprozess>
+ </base:WorkflowInfoServer>
+ <base:ServerInfo>
+ <base:GeneriertVon>ZMR Server</base:GeneriertVon>
+ <base:GeneriertAm>2004-01-26T00:00:00.000</base:GeneriertAm>
+ <base:ServerTransaktionNr>1234567</base:ServerTransaktionNr>
+ </base:ServerInfo>
+ <zmr:BehoerdenabfrageResponse>
+ <zmr:BehoerdenabfrageAnfrage>
+ <zmr:BehoerdenabfrageInfo>
+ <base:Bezugsfeld>Test</base:Bezugsfeld>
+ <zmr:BehoerdenabfrageAction>SONSTIGES</zmr:BehoerdenabfrageAction>
+ <base:InclusivHistorie>false</base:InclusivHistorie>
+ <base:Formalisiert>false</base:Formalisiert>
+ </zmr:BehoerdenabfrageInfo>
+ <zmr:PersonKey>1</zmr:PersonKey>
+ </zmr:BehoerdenabfrageAnfrage>
+ <base:Message>
+ <base:Number>0003</base:Number>
+ <base:Text>Es wurde 1 Person im ZMR gefunden</base:Text>
+ </base:Message>
+ <zmr:BehoerdenabfrageDetail>
+ <zmr:Personendaten>
+ <!-- Historienliste der Personendaten. Nur ein PersonErgebnis-Element, wenn nur aktuelle Daten -->
+ <zmr:PersonErgebnis>
+ <!-- aktueller Personendaten Gesamtdatensatz -->
+ <base:ErgebnissatzInfo>
+ <!-- letzter Änderungs-Zeitpunkt des Person-Gesamtdatensatzes (mit Staatsangehörigkeiten, ...)-->
+ <base:LetzteAenderung>2004-01-26T00:00:00.000</base:LetzteAenderung>
+ </base:ErgebnissatzInfo>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>0000001</base:EntityID>
+ <!-- letzter Änderungs-Zeitpunkt der Person-Entity (ohne Staatsangehörigkeiten, ...)-->
+ <base:LetzteAenderung>2004-01-26T00:00:00.000</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2004-01-26T00:00:00.000</base:Von>
+ <base:BeginnCode>AMKOR</base:BeginnCode>
+ <base:BeginnText>Amtliche Korrektur</base:BeginnText>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:GemeindeNr>09999</base:GemeindeNr>
+ </base:Organisation>
+ <base:Benutzer>test@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <base:ZMRZahl>000111111111</base:ZMRZahl>
+ <zmr:NatuerlichePerson>
+ <zmr:PersonenName>
+ <Vorname>Maximilian</Vorname>
+ <Familienname>Mustermann</Familienname>
+ </zmr:PersonenName>
+ <Geschlecht>männlich</Geschlecht>
+ <Geburtsdatum>2001-05-07</Geburtsdatum>
+ <Geburtsort>Wien</Geburtsort>
+ <Geburtsbundesland>Wien</Geburtsbundesland>
+ <Geburtsstaat>Österreich</Geburtsstaat>
+ <zmr:Staatsangehoerigkeit>
+ <ISOCode3>AUT</ISOCode3>
+ <StaatsnameDE>Österreich</StaatsnameDE>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>0000001</base:EntityID>
+ <base:LetzteAenderung>2003-01-01T00:00:00.000</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2003-01-01T00:00:00.000</base:Von>
+ <base:BeginnCode>REISEDOK_ANLEGEN</base:BeginnCode>
+ <base:BeginnText>Reisedokument anlegen</base:BeginnText>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:GemeindeNr>09999</base:GemeindeNr>
+ </base:Organisation>
+ <base:Benutzer>test@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ </zmr:Staatsangehoerigkeit>
+ </zmr:NatuerlichePerson>
+ </zmr:PersonErgebnis>
+ <zmr:PersonErgebnis>
+ <!-- historischer Personendaten Gesamtdatensatz (durch Vornamen-Änderung entstanden. Die Staatsagehörigkeit wurde nicht geändert und ist somit mit der im aktuellen Satz identisch-->
+ <base:ErgebnissatzInfo>
+ <base:LetzteAenderung>2004-01-26T00:00:00.000</base:LetzteAenderung>
+ </base:ErgebnissatzInfo>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>0000001</base:EntityID>
+ <base:LetzteAenderung>2004-01-26T00:00:00.000</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2003-01-01T00:00:00.000</base:Von>
+ <base:BeginnCode>GEBURT</base:BeginnCode>
+ <base:BeginnText>Geburt</base:BeginnText>
+ <base:Bis>2004-01-26T00:00:00.000</base:Bis>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:GemeindeNr>09999</base:GemeindeNr>
+ </base:Organisation>
+ <base:Benutzer>test@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <base:ZMRZahl>000111111111</base:ZMRZahl>
+ <zmr:NatuerlichePerson>
+ <zmr:PersonenName>
+ <Vorname>Hans</Vorname>
+ <Familienname>Mustermann</Familienname>
+ </zmr:PersonenName>
+ <Geschlecht>männlich</Geschlecht>
+ <Geburtsdatum>2001-05-07</Geburtsdatum>
+ <Geburtsort>Wien</Geburtsort>
+ <Geburtsbundesland>Wien</Geburtsbundesland>
+ <Geburtsstaat>Österreich</Geburtsstaat>
+ <zmr:Staatsangehoerigkeit>
+ <ISOCode3>AUT</ISOCode3>
+ <StaatsnameDE>Österreich</StaatsnameDE>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>0000001</base:EntityID>
+ <base:LetzteAenderung>2003-01-01T00:00:00.000</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2003-01-01T00:00:00.000</base:Von>
+ <base:BeginnCode>REISEDOK_ANLEGEN</base:BeginnCode>
+ <base:BeginnText>Reisedokument anlegen</base:BeginnText>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:GemeindeNr>09999</base:GemeindeNr>
+ </base:Organisation>
+ <base:Benutzer>test@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ </zmr:Staatsangehoerigkeit>
+ </zmr:NatuerlichePerson>
+ </zmr:PersonErgebnis>
+ </zmr:Personendaten>
+ <zmr:Meldedaten>
+ <!-- Historienliste einer Meldung. Nur ein MeldungErgebnis-Element, wenn nur aktuelle Daten -->
+ <zmr:MeldungErgebnis>
+ <base:ErgebnissatzInfo>
+ <!-- letzter Änderungs-Zeitpunkt des Meldung-Gesamtdatensatzes (mit Auskunftssperren, ...)-->
+ <base:LetzteAenderung>2004-01-26T00:00:00.000</base:LetzteAenderung>
+ </base:ErgebnissatzInfo>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>00000002</base:EntityID>
+ <!-- letzter Änderungs-Zeitpunkt der Meldung-Entity (ohne Auskunftssperren, ...)-->
+ <base:LetzteAenderung>2004-01-26T00:00:00.000</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2004-01-26T00:00:00.000</base:Von>
+ <base:BeginnCode>WSANM</base:BeginnCode>
+ <base:BeginnText>Wohnsitz anmelden</base:BeginnText>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:BehoerdenNr>099999</base:BehoerdenNr>
+ </base:Organisation>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <zmr:Wohnsitz>
+ <zmr:PostAdresse>
+ <Postleitzahl>1245</Postleitzahl>
+ <Gemeinde>Testgemeinde</Gemeinde>
+ <Gemeindekennziffer>09999</Gemeindekennziffer>
+ <Ortschaft>Testort</Ortschaft>
+ <zmr:Zustelladresse>
+ <Strassenname>Teststrasse</Strassenname>
+ <Orientierungsnummer>1</Orientierungsnummer>
+ <Wohnsitzqualitaet>H</Wohnsitzqualitaet>
+ </zmr:Zustelladresse>
+ </zmr:PostAdresse>
+ <base:Adressstatus>XXX000</base:Adressstatus>
+ </zmr:Wohnsitz>
+ <base:GemeldetVon>2004-01-26T00:00:00.000</base:GemeldetVon>
+ <base:PeriodeCode>WSANM</base:PeriodeCode>
+ <base:PeriodeText>Wohnsitz anmelden</base:PeriodeText>
+ </zmr:MeldungErgebnis>
+ </zmr:Meldedaten>
+ <zmr:PDFDaten>XXYY</zmr:PDFDaten>
+ </zmr:BehoerdenabfrageDetail>
+ </zmr:BehoerdenabfrageResponse>
+ </base:Response>
+ </soap:Body>
+</soap:Envelope>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/bestandsaenderungen/bestandsaenderungenrequest.xml b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/bestandsaenderungen/bestandsaenderungenrequest.xml
new file mode 100644
index 00000000..db6014cd
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/bestandsaenderungen/bestandsaenderungenrequest.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:zmr="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#" xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#" xmlns="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ ../../soapenv.xsd http://bmi.gv.at/namespace/zmr-su/base/20040201# ../../../xsd/allgemein/Service.xsd http://bmi.gv.at/namespace/zmr-su/zmr/20040201# ../../../xsd/zmr/ZMRProxy.xsd">
+<soap:Body>
+ <base:Request>
+ <base:WorkflowInfoClient>
+ <base:ProzessName>Abfragen</base:ProzessName>
+ <base:VorgangName>Bestandsaenderungen</base:VorgangName>
+ </base:WorkflowInfoClient>
+ <base:ClientInfo>
+ <base:Organisation>
+ <base:BehoerdenNr>099999</base:BehoerdenNr>
+ </base:Organisation>
+ <base:Client>ZMRHTMLClient V3.0</base:Client>
+ </base:ClientInfo>
+ <zmr:BestandsaenderungenRequest>
+ <zmr:BestandsaenderungenInfo>
+ <zmr:AenderungenVon>2004-01-01T00:00:00.000</zmr:AenderungenVon>
+ <zmr:AenderungenBis>2004-07-01T00:00:00.000</zmr:AenderungenBis>
+ <zmr:InclusiveAdressen>true</zmr:InclusiveAdressen>
+ <zmr:Veraenderung>TYP_ZUGANG</zmr:Veraenderung>
+ </zmr:BestandsaenderungenInfo>
+ </zmr:BestandsaenderungenRequest>
+ </base:Request>
+ </soap:Body>
+</soap:Envelope> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/bestandsaenderungen/bestandsaenderungenresponse.xml b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/bestandsaenderungen/bestandsaenderungenresponse.xml
new file mode 100644
index 00000000..b66a6636
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/bestandsaenderungen/bestandsaenderungenresponse.xml
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:zmr="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#" xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#" xmlns="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ ../../soapenv.xsd http://bmi.gv.at/namespace/zmr-su/base/20040201# ../../../xsd/allgemein/Service.xsd http://bmi.gv.at/namespace/zmr-su/zmr/20040201# ../../../xsd/zmr/ZMRProxy.xsd">
+ <soap:Body>
+ <base:Response>
+ <base:WorkflowInfoServer>
+ <base:ProzessName>Abfragen</base:ProzessName>
+ <base:ProzessAnzeigeName>Bestandsaenderung</base:ProzessAnzeigeName>
+ <base:ProzessInstanzID>1234</base:ProzessInstanzID>
+ <base:ProzessStatus>A</base:ProzessStatus>
+ <base:SequenzID>00034</base:SequenzID>
+ <base:Subprozess>
+ <base:VorgangName>Bestandsaenderung</base:VorgangName>
+ <base:VorgangAnzeigeName>Bestandsaenderung</base:VorgangAnzeigeName>
+ <base:VorgangStatus>C</base:VorgangStatus>
+ <base:Required>true</base:Required>
+ <base:Visible>true</base:Visible>
+ </base:Subprozess>
+ </base:WorkflowInfoServer>
+ <base:ServerInfo>
+ <base:GeneriertVon>ZMR Server</base:GeneriertVon>
+ <base:GeneriertAm>2004-06-01T00:00:00.000</base:GeneriertAm>
+ <base:ServerTransaktionNr>1234567</base:ServerTransaktionNr>
+ </base:ServerInfo>
+ <zmr:BestandsaenderungenResponse>
+ <zmr:BestandsaenderungenAnfrage>
+ <zmr:BestandsaenderungenInfo>
+ <zmr:AenderungenVon>2004-01-01T00:00:00.000</zmr:AenderungenVon>
+ <zmr:AenderungenBis>2004-07-01T00:00:00.000</zmr:AenderungenBis>
+ <zmr:InclusiveAdressen>true</zmr:InclusiveAdressen>
+ <zmr:Veraenderung>TYP_ZUGANG</zmr:Veraenderung>
+ </zmr:BestandsaenderungenInfo>
+ </zmr:BestandsaenderungenAnfrage>
+ <base:Message>
+ <base:Number>0004</base:Number>
+ <base:Text>Die Abgleichdaten wurden erstellt</base:Text>
+ </base:Message>
+ <zmr:Bestandsaenderungen>
+ <base:GefundeneSaetze>230</base:GefundeneSaetze>
+ <base:AnzahlSaetze>2</base:AnzahlSaetze>
+ <zmr:BestandsaenderungSatz>
+ <zmr:Aenderungszeitpunkt>2004-01-01T08:00:00.000</zmr:Aenderungszeitpunkt>
+ <base:ZMRZahl>000111111111</base:ZMRZahl>
+ <Geburtsdatum>2001-05-07</Geburtsdatum>
+ <Geschlecht>männlich</Geschlecht>
+ <zmr:Bestandsaenderung>
+ <zmr:Veraenderung>TYP_ZUGANG</zmr:Veraenderung>
+ <PostAdresse>
+ <Gemeinde>Testgemeinde</Gemeinde>
+ <Gemeindekennziffer>09999</Gemeindekennziffer>
+ <Ortschaft>Testort</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Teststraße</Strassenname>
+ <Orientierungsnummer>3</Orientierungsnummer>
+ <Nutzungseinheit>7</Nutzungseinheit>
+ </Zustelladresse>
+ </PostAdresse>
+ </zmr:Bestandsaenderung>
+ </zmr:BestandsaenderungSatz>
+ <zmr:BestandsaenderungSatz>
+ <zmr:Aenderungszeitpunkt>2004-01-02T08:00:00.000</zmr:Aenderungszeitpunkt>
+ <base:ZMRZahl>000111111111</base:ZMRZahl>
+ <Geburtsdatum>2003-05-07</Geburtsdatum>
+ <Geschlecht>weiblich</Geschlecht>
+ <zmr:Bestandsaenderung>
+ <zmr:Veraenderung>TYP_ZUGANG</zmr:Veraenderung>
+ <PostAdresse>
+ <Gemeinde>Testgemeinde</Gemeinde>
+ <Gemeindekennziffer>09999</Gemeindekennziffer>
+ <Ortschaft>Testort</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Teststraße</Strassenname>
+ <Orientierungsnummer>3</Orientierungsnummer>
+ <Nutzungseinheit>3</Nutzungseinheit>
+ </Zustelladresse>
+ </PostAdresse>
+ </zmr:Bestandsaenderung>
+ </zmr:BestandsaenderungSatz>
+ </zmr:Bestandsaenderungen>
+ </zmr:BestandsaenderungenResponse>
+ </base:Response>
+ </soap:Body>
+</soap:Envelope>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/bpabfrage/bpabfragerequest.xml b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/bpabfrage/bpabfragerequest.xml
new file mode 100644
index 00000000..73c30b8b
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/bpabfrage/bpabfragerequest.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:zmr="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#" xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#" xmlns="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ ../../soapenv.xsd http://bmi.gv.at/namespace/zmr-su/base/20040201# ../../../xsd/allgemein/Service.xsd http://bmi.gv.at/namespace/zmr-su/zmr/20040201# ../../../xsd/zmr/ZMRProxy.xsd">
+ <soap:Body>
+ <base:Request>
+ <base:WorkflowInfoClient>
+ <base:ProzessName>GP_Businesspartnerabfrage_erstellen</base:ProzessName>
+ <base:VorgangName>ZMR_VO_Businesspartnerabfrage_erstellen</base:VorgangName>
+ </base:WorkflowInfoClient>
+ <base:ClientInfo>
+ <base:Organisation>
+ <base:BehoerdenNr>000000</base:BehoerdenNr>
+ </base:Organisation>
+ <base:Client>ZMRHTMLClient V4.0</base:Client>
+ </base:ClientInfo>
+ <zmr:BPAbfrageRequest>
+ <zmr:BPAbfrageInfo>
+ <base:Bezugsfeld>Test</base:Bezugsfeld>
+ <zmr:BPAbfrageAction>SONSTIGES</zmr:BPAbfrageAction>
+ </zmr:BPAbfrageInfo>
+ <NatuerlichePerson>
+ <PersonenName>
+ <Vorname>Max</Vorname>
+ <Familienname>Mustermann</Familienname>
+ </PersonenName>
+ <Geburtsdatum>2005-01-01</Geburtsdatum>
+ </NatuerlichePerson>
+ </zmr:BPAbfrageRequest>
+ </base:Request>
+ </soap:Body>
+</soap:Envelope>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/bpabfrage/bpabfrageresponse.xml b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/bpabfrage/bpabfrageresponse.xml
new file mode 100644
index 00000000..bd7d3a22
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/bpabfrage/bpabfrageresponse.xml
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:zmr="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#" xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#" xmlns="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ ../../soapenv.xsd http://bmi.gv.at/namespace/zmr-su/base/20040201# ../../../xsd/allgemein/Service.xsd http://bmi.gv.at/namespace/zmr-su/zmr/20040201# ../../../xsd/zmr/ZMRProxy.xsd">
+ <soap:Body>
+ <base:Response>
+ <ns1:WorkflowInfoServer xmlns:ns1="http://bmi.gv.at/namespace/zmr-su/base/20040201#">
+ <ns1:ProzessName>GP_Businesspartnerabfrage_erstellen</ns1:ProzessName>
+ <ns1:ProzessAnzeigeName>Businesspartnerabfragen</ns1:ProzessAnzeigeName>
+ <ns1:ProzessInstanzID>62700000000195</ns1:ProzessInstanzID>
+ <ns1:ProzessStatus>C</ns1:ProzessStatus>
+ <ns1:SequenzID>0</ns1:SequenzID>
+ <ns1:Subprozess>
+ <ns1:VorgangName>ZMR_VO_Businesspartnerabfrage_erstellen</ns1:VorgangName>
+ <ns1:VorgangAnzeigeName>Businesspartnerabfrage</ns1:VorgangAnzeigeName>
+ <ns1:VorgangStatus>C</ns1:VorgangStatus>
+ <ns1:Required>false</ns1:Required>
+ <ns1:Visible>true</ns1:Visible>
+ </ns1:Subprozess>
+ </ns1:WorkflowInfoServer>
+ <ns1:ServerInfo xmlns:ns1="http://bmi.gv.at/namespace/zmr-su/base/20040201#">
+ <ns1:GeneriertVon>ZMR-Server</ns1:GeneriertVon>
+ <ns1:GeneriertAm>2005-03-10T13:38:22.617</ns1:GeneriertAm>
+ <ns1:ServerTransaktionNr>32900000000018</ns1:ServerTransaktionNr>
+ </ns1:ServerInfo>
+ <zmr:BPAbfrageResponse>
+ <zmr:BPAbfrageAnfrage>
+ <zmr:BPAbfrageInfo>
+ <base:Bezugsfeld>Test</base:Bezugsfeld>
+ <zmr:BPAbfrageAction>SONSTIGES</zmr:BPAbfrageAction>
+ </zmr:BPAbfrageInfo>
+ <NatuerlichePerson>
+ <PersonenName>
+ <Vorname>Max</Vorname>
+ <Familienname>Mustermann</Familienname>
+ </PersonenName>
+ <Geburtsdatum>2005-01-01</Geburtsdatum>
+ </NatuerlichePerson>
+ </zmr:BPAbfrageAnfrage>
+ <base:Message>
+ <base:Number>5020</base:Number>
+ <base:Text>Person gefunden</base:Text>
+ </base:Message>
+ <zmr:BPAbfrageErgebnis>
+ <NatuerlichePerson>
+ <PersonenName>
+ <Vorname>Max</Vorname>
+ <Familienname>Mustermann</Familienname>
+ </PersonenName>
+ <Geburtsdatum>2005-01-01</Geburtsdatum>
+ </NatuerlichePerson>
+ <PostAdresse>
+ <Postleitzahl>1160</Postleitzahl>
+ <Ortschaft>Wien,Ottakring</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Ottakringer Straße</Strassenname>
+ <Orientierungsnummer>101</Orientierungsnummer>
+ <Nutzungseinheit>7</Nutzungseinheit>
+ <Abgabestelle>false</Abgabestelle>
+ <Nutzungseinheitlaufnummer>0003</Nutzungseinheitlaufnummer>
+ </Zustelladresse>
+ </PostAdresse>
+ <zmr:AktMeldesatz>true</zmr:AktMeldesatz>
+ <zmr:PDFDaten>JVBERi0xLjMKJaqrrK0KNCAwIG9iago8PCAvVHlwZSAvSW5mbwovUHJvZHVjZXIgKG51bGwpID4+CmVuZG9iago1IDAgb2JqCjw8IC9MZW5ndGggODA2IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlIAogPj4Kc3RyZWFtCnicnVbbctMwEH33V+ixnaGqpNXNfUsGtwRIWhIDMwUe3FZNMyQOOA4w/XrWt8hOYwpMHqJozp69nN1VhnFweg6EC8pIfB+w4us2YGQecMLww4mQnGoAooWhoQlJvCKfjq6i6exyEk1eDuJocky+kPg18nDCecXTGHMrqVCcaKaoCE1lfJ6sFsuFS9Nk5c6OyYliEFJhgByNt5vcZaskTWvOfR4VChoKUfF8WGcNhRGa1xTJrz5by6iSdQwX7mab5Zu7JN+uCgIZWoEEQpEjhjkgGWNql5gv0I6UYzUQrYSkFlRFOlohkzAWoUfXLs2zZOlSfzV2yzuXufmiSNJfb24f3CJtA+/Xy7lL79yeKQbbRiXb+7M6wigOvpeiGUat1kQq/MaUpQJMGQgmTjJH7oN3wTD+o1AyBKrrdAZf861bLtuxvkq23/Kf64d0s8gfz3oKLY2imumKZIZV+AxgSpksYNlKmS7zPPmaLdJ5m32H9Veccf/D9DnUQAXwujXfXp9eZnnZFbZ0V4jKuWae6CN234tdCD1FNFJSwJ6tiiiwiNAp4tOmaAwxf7B1OMMxPaejySSaRjMfwGAY09GHU+FvRvHJeNaepB5u7HO7446mFxdUwl5ZdvFbHwZnYTv/0W5qy6ytojiDpTkwapglEkcSdEiMklTakNyugtPRipOX6yr9qljUCiMVlqw5XQRaVc5FSI2QpTRFB54odFGU76Ztj5Y9+G7HttGAaG1QeEQXKKUr4n2oQkbJwr/C1kE00D8FcSDlpt64CsoU6qE7AV7Z37Q6RnZVFQo1UkAMh6JRK63GXqj3reHwx9gfI3+c7k8Ht9Tg6g0NVc3KHDxH/eYgYOKP590wLMi9Wxxg2QmqwQyf8z066DA6iG0dr1pj1XX8tFyHeaedDdCvsMblKNoKo2pdhZ/OrWD4UIAh2gK2o61kSLYb7/3O/dOz4TcE69kQuPrrZzpO5m73xh3aEbrY1DX4/UP26BZ5DxL3ADS0M4SV+7xZ0v74Y5127rsdiX8lDIhOiEUW0H5t98HtEDmcgd3DgTG4scIO6f8sXRT/N+i29j4KZW5kc3RyZWFtCmVuZG9iago2IDAgb2JqCjw8L1R5cGUgL1hPYmplY3QKL1N1YnR5cGUgL0ltYWdlCi9OYW1lIC9JbTEKL0xlbmd0aCAyMDU1Ci9XaWR0aCAxMDgKL0hlaWdodCAzOQovQml0c1BlckNvbXBvbmVudCA4Ci9Db2xvclNwYWNlIC9EZXZpY2VSR0IKL0ZpbHRlciAvRmxhdGVEZWNvZGUgCj4+CnN0cmVhbQp4nO1aK7CrOhStPPLI2iuRSCyyEolFIpG1SGQkFllZeWxl5ZXHVlZW8layIA35lZ72zdx572YYhk+ys7Oy9ieBcfxb/mtlvz+U1VAUfb4Tu50oyr6uh04cI02EOFa1bLJTTXZFDwmQ80atfgvxe7+XR11Ph7p1a0KBLBd5/p6zHkVZ9qFqbXcHp2kGPMyyDkcqz0Jf4AyIhIMksJU6L2vqW8hvfEhCjlcfeRTDBNp+/10U31l22W4vHx/fm81ls+GZF9fN5pCmrnAOwdU/My7STA8zWBmvgNt9aoo+VLNtD8s6wif5frtv75hU1WA1sZRkk8LQZEK+O7oKs4lIikuSuKBdDPSm64+PvutcDDEd6Wvo8QJyTLGgkEkSs2aneKi45EXDgwllwsADWnmal0sYZwyn+kkm8rQFeqfN59WBzgWTJITjcAGcMbQsYu3ZVLvrFkbn8PB+hi3DhAPEc9GQZ9APbAzNaUh/0w9oHpJ+dVpp9DTHYMLXLOMhmWlYNGqettthGNZgGNDnAbx1Ywtf8nAhh97MR2mL/J62D6fSrA/kTQzT+ZX4TCfctttbWd76fjydxuvVhgZPcJxOqHCra/hZL4Dj3R96rCOioanqbmc7HwPD+DDVq/xhX8785p7KLgEyw70oDOXDw0dyJXptO95uC8TOZ3l8f8vDfPWowG/A7gp16AvrOmY1uRiGL1esGy9sf1UN2tYgwfF1/okDtUQ/ter74zLEeNDWusGBwAFK+/38uKN3PuP6mueMKTy+DbsG/cbD4XI+h6x4ZYGqPiOaYGxbf0pm8dBib+nEzVHFXF8Tf9x3OvKnOtpLi+5w3HzekkQyDeXrC9C52YsbU0BadPwKgOOSURY9TIezutWCHmbph6+wMxTZMu7rYgVcqzs9xcj64Pok/U4njd5VHSZ6+sllRShZWbAWCHHJ6wYtDL0RAYuRUKtwjO7clC/QauEhmVtiiSGtchxhudJOFT6wawSX/WdWbXfFrwJHW5SgHLLok4rIBDMSStYUWHEkJvY+LunizQ/ZMMLePLdNUnfthn6nlY08rsHDcz/cigIhA2dSDtDlv8ok2Sdpm2Rdomo2zX1mQTzk0sgGQwnh+mImIZZvj4yIJRCX5W1kVYseQ8n8mlauBwAyICF8IO2X6P1K25SS57wuYhqvlNnDe1YuXt9uFW9+OPmoLriZ4MzaIjOPtvKEvESt4xA+bnmOgEL0El+KDpf1Q5jCBev6kE2FfLtVQjzERbcKQztTfaqVAlCUSSPTY7W5U1X7xJdG8hzKLl4p4bxXxLekdPH5w2mYEQmu99AX7gaO2cpVNUU2uBdyfaEyExi1GpSf5HHf/oMit60C64WHblCXyDoljoZ3ifdsK5CwLgSicJtPQaFtBwWaf/34FD4PC1gdWikAlvVyvDzMnK0Aq3gZxYbr2ctggXBcpxVMmHW4Xg5tBawf18MyyCzXm/CLPH9usiL7h+vQsAm8Bvmpl1QtCZs9shedsSxT8QWM78WwKM3FxcKrR8KiX1R4//B5Hj5mr6ltKjczpT80MyJnD3ZxfmpokYLuvBkCLpA+YQjy6I+RC3MF97I/tDPSKHvtdeVk0R4MPbHyXf4Qw4+4C/e599rMGyP7h+ut0hz1M8jfG5oYeqPJG3noLG/9K9DQHqy7iIvsYz+T2zwbU2ytIjy8y1+X8cZLs7Biz6hD02elcKWBYTguP2fLT+WHrt+I+MM3xhQhjk7vHo55s2Wr/lt5aOuwPqaY/Tq27Df5FzEMTOIa6Oxz9YCHP4gpK5G3d9r1resPPTHrNVsup730uP2GwLQVjn5fvleL8zBgEStt2YYowEObMD8GENlI7nz6D92uuTB3P/R/Dm61CBrydxGf/J+1woXeTMDEhZTP3xFT/pY/rcArvn0bpGkGa3uqDG+Gryx9f/T+mfOvFoxize5r6vzz8HqBxzO7Vp8aXw2m3uGsHKMu8DCYX3hdPR2QIH9aUwhg5YJbLJPxhL6IYQKOBRU69b9H30u+oQKEoDLXejqGok5t8Ad16iWdUB8Pu7kLqcm8twYm41rfomsGfTSH163V32KmWK3zvpWa8FOUpQBu0Va/xUS0ulo98CHTCdqRKVmoURMQE0MI4U8s/JpQq9/5uIONc6teAV61nSgnnWEC0tgR6qMvOGTcUg7VYD5MHy7UuVGapOpLpRkauEJHK/6/N/XYDFx4cvro8NEFhk/6Nc2Bn+alzs2AxAYySX5KgJ5C6c9lPhUQqm1N/JWGzTwRmfo8RMW4dzqqdcdONafatfq+ibd9b5uYkP/yTdTN1PdHSIaGnCxKE7PhYMhEW/78UN5bocLpdCKSmocQAh2gCcYOmYeD/JMBrcxPS0SeUNCCIITMyeTnpGHxXLEdCqAvSMvUR2qAUBo6c/OTwvn/hnylFFDzJdui4EI6w2YaDl5x4ITOHCPnixiGwjdxI13RKRw1FOMtSTLO31bG+X/LcemdmBa2aiVF02Au10p29VoaGIuH5IDJw5QYKngpmXyTCxO1I8R5x7gq9W8Je+FX71FFFvROt2PqrImkFWBbzBrrwAtBGcJC78SHeozVUnIVwBBtJbdrOYl0ZZxQbvhD+Vrle/wZZpz9J/mjnQweYiDKdx043nrOEiUJq4G3/DeGc6oV0F3QdRAEDln6LlWff9dIf6ue07eYnrP26aznSAqZn/C2oS2rCWIgIAK81mO00KD/9/Lwf1UYUKSf/JtU/xnlH7uDa8sKZW5kc3RyZWFtCmVuZG9iago3IDAgb2JqCjw8IC9UeXBlIC9QYWdlCi9QYXJlbnQgMSAwIFIKL01lZGlhQm94IFsgMCAwIDU5NSA4NDIgXQovUmVzb3VyY2VzIDMgMCBSCi9Db250ZW50cyA1IDAgUgo+PgplbmRvYmoKOCAwIG9iago8PCAvVHlwZSAvRm9udAovU3VidHlwZSAvVHlwZTEKL05hbWUgL0YzCi9CYXNlRm9udCAvSGVsdmV0aWNhLUJvbGQKL0VuY29kaW5nIC9XaW5BbnNpRW5jb2RpbmcgPj4KZW5kb2JqCjkgMCBvYmoKPDwgL1R5cGUgL0ZvbnQKL1N1YnR5cGUgL1R5cGUxCi9OYW1lIC9GMQovQmFzZUZvbnQgL0hlbHZldGljYQovRW5jb2RpbmcgL1dpbkFuc2lFbmNvZGluZyA+PgplbmRvYmoKMSAwIG9iago8PCAvVHlwZSAvUGFnZXMKL0NvdW50IDEKL0tpZHMgWzcgMCBSIF0gPj4KZW5kb2JqCjIgMCBvYmoKPDwgL1R5cGUgL0NhdGFsb2cKL1BhZ2VzIDEgMCBSCiA+PgplbmRvYmoKMyAwIG9iago8PCAKL0ZvbnQgPDwgL0YzIDggMCBSIC9GMSA5IDAgUiA+PiAKL1Byb2NTZXQgWyAvUERGIC9JbWFnZUMgL1RleHQgXSAvWE9iamVjdCA8PC9JbTEgNiAwIFIgCiA+Pgo+PiAKZW5kb2JqCnhyZWYKMCAxMAowMDAwMDAwMDAwIDY1NTM1IGYgCjAwMDAwMDM1MDQgMDAwMDAgbiAKMDAwMDAwMzU2MiAwMDAwMCBuIAowMDAwMDAzNjEyIDAwMDAwIG4gCjAwMDAwMDAwMTUgMDAwMDAgbiAKMDAwMDAwMDA2NSAwMDAwMCBuIAowMDAwMDAwOTQ0IDAwMDAwIG4gCjAwMDAwMDMxNzkgMDAwMDAgbiAKMDAwMDAwMzI4NSAwMDAwMCBuIAowMDAwMDAzMzk3IDAwMDAwIG4gCnRyYWlsZXIKPDwKL1NpemUgMTAKL1Jvb3QgMiAwIFIKL0luZm8gNCAwIFIKPj4Kc3RhcnR4cmVmCjM3MjcKJSVFT0YK</zmr:PDFDaten>
+ </zmr:BPAbfrageErgebnis>
+ </zmr:BPAbfrageResponse>
+ </base:Response>
+ </soap:Body>
+</soap:Envelope>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/datenabgleich/datenabgleichrequest.xml b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/datenabgleich/datenabgleichrequest.xml
new file mode 100644
index 00000000..07c501c6
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/datenabgleich/datenabgleichrequest.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:zmr="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#" xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#" xmlns="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ ../../soapenv.xsd http://bmi.gv.at/namespace/zmr-su/base/20040201# ../../../xsd/allgemein/Service.xsd http://bmi.gv.at/namespace/zmr-su/zmr/20040201# ../../../xsd/zmr/ZMRProxy.xsd">
+ <soap:Body>
+ <base:Request>
+ <base:WorkflowInfoClient>
+ <base:ProzessName>GP_Datenabgleich_anfordern</base:ProzessName>
+ <base:VorgangName>ZMR_VO_Datenabgleich_anfordern</base:VorgangName>
+ </base:WorkflowInfoClient>
+ <base:ClientInfo>
+ <base:Organisation>
+ <base:BehoerdenNr>000000</base:BehoerdenNr>
+ </base:Organisation>
+ <base:Client>Test</base:Client>
+ </base:ClientInfo>
+ <zmr:DatenabgleichRequest>
+ <zmr:DatenabgleichInfo>
+ <base:GemeindeNr>91601</base:GemeindeNr>
+ <zmr:DatenabgleichAction>AENDERUNGEN</zmr:DatenabgleichAction>
+ <zmr:AbgleichVon>2004-01-01T00:00:00.000</zmr:AbgleichVon>
+ <zmr:AbgleichBis>2004-02-01T00:00:00.000</zmr:AbgleichBis>
+ </zmr:DatenabgleichInfo>
+ </zmr:DatenabgleichRequest>
+ </base:Request>
+ </soap:Body>
+</soap:Envelope>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/datenabgleich/datenabgleichresponse.xml b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/datenabgleich/datenabgleichresponse.xml
new file mode 100644
index 00000000..86d96963
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/datenabgleich/datenabgleichresponse.xml
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:zmr="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#" xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#" xmlns="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ ../../soapenv.xsd http://bmi.gv.at/namespace/zmr-su/base/20040201# ../../../xsd/allgemein/Service.xsd http://bmi.gv.at/namespace/zmr-su/zmr/20040201# ../../../xsd/zmr/ZMRProxy.xsd">
+ <soap:Body>
+ <base:Response>
+ <base:WorkflowInfoServer>
+ <base:ProzessName>GP_Datenabgleich_anfordern</base:ProzessName>
+ <base:ProzessInstanzID>1234</base:ProzessInstanzID>
+ <base:ProzessStatus>C</base:ProzessStatus>
+ <base:SequenzID>00034</base:SequenzID>
+ <base:Subprozess>
+ <base:VorgangName>ZMR_VO_Datenabgleich_anfordern</base:VorgangName>
+ <base:VorgangStatus>C</base:VorgangStatus>
+ <base:Required>false</base:Required>
+ <base:Visible>true</base:Visible>
+ </base:Subprozess>
+ </base:WorkflowInfoServer>
+ <base:ServerInfo>
+ <base:GeneriertVon>ZMR Server</base:GeneriertVon>
+ <base:GeneriertAm>2004-06-01T00:00:00.000</base:GeneriertAm>
+ <base:ServerTransaktionNr>1234567</base:ServerTransaktionNr>
+ </base:ServerInfo>
+ <zmr:DatenabgleichResponse>
+ <zmr:DatenabgleichAnfrage>
+ <zmr:DatenabgleichInfo>
+ <base:GemeindeNr>09999</base:GemeindeNr>
+ <zmr:DatenabgleichAction>AENDERUNGEN</zmr:DatenabgleichAction>
+ <zmr:AbgleichVon>2004-01-01T00:00:00.000</zmr:AbgleichVon>
+ <zmr:AbgleichBis>2004-02-01T00:00:00.000</zmr:AbgleichBis>
+ <base:InclusivHistorie>false</base:InclusivHistorie>
+ </zmr:DatenabgleichInfo>
+ </zmr:DatenabgleichAnfrage>
+ <base:Message>
+ <base:Number>0004</base:Number>
+ <base:Text>Die Abgleichdaten wurden erstellt</base:Text>
+ </base:Message>
+ <zmr:Datenabgleich>
+ <base:GefundeneSaetze>230</base:GefundeneSaetze>
+ <base:AnzahlSaetze>2</base:AnzahlSaetze>
+ <zmr:DatenabgleichSatz>
+ <zmr:Aenderungszeitpunkt>2004-01-01T08:00:00.000</zmr:Aenderungszeitpunkt>
+ <zmr:PersonReferenz>
+ <base:Technisch>
+ <base:EntityID>0000001</base:EntityID>
+ <base:LetzteAenderung>2004-01-26T00:00:00.000</base:LetzteAenderung>
+ </base:Technisch>
+ <base:ZMRZahl>000111111111</base:ZMRZahl>
+ </zmr:PersonReferenz>
+ <Familienname>Mustermann</Familienname>
+ <Vorname>Max</Vorname>
+ <Geburtsdatum>2001-05-07</Geburtsdatum>
+ <zmr:PersonAbgleich>
+ <zmr:DatenAktiv>
+ <zmr:Person>
+ <!-- geaenderte Personendaten (ohne Staatsbuergerschaft, Reisedokument, ... -->
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>0000001</base:EntityID>
+ <base:LetzteAenderung>2004-01-26T00:00:00.000</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2004-01-01T08:00:00.000</base:Von>
+ <base:BeginnCode>PAN</base:BeginnCode>
+ <base:BeginnText>Personensnlage</base:BeginnText>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:GemeindeNr>09999</base:GemeindeNr>
+ </base:Organisation>
+ <base:Benutzer>test@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <base:ZMRZahl>000111111111</base:ZMRZahl>
+ <zmr:NatuerlichePerson>
+ <zmr:PersonenName>
+ <Vorname>Max</Vorname>
+ <Familienname>Mustermann</Familienname>
+ </zmr:PersonenName>
+ <Geschlecht>männlich</Geschlecht>
+ <Geburtsdatum>2001-05-07</Geburtsdatum>
+ <Geburtsort>Wien</Geburtsort>
+ <Geburtsbundesland>Wien</Geburtsbundesland>
+ <Geburtsstaat>Österreich</Geburtsstaat>
+ </zmr:NatuerlichePerson>
+ </zmr:Person>
+ </zmr:DatenAktiv>
+ </zmr:PersonAbgleich>
+ </zmr:DatenabgleichSatz>
+ </zmr:Datenabgleich>
+ </zmr:DatenabgleichResponse>
+ </base:Response>
+ </soap:Body>
+</soap:Envelope>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/fremdenabfrage/fremdenabfragerequest.xml b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/fremdenabfrage/fremdenabfragerequest.xml
new file mode 100644
index 00000000..6e9ad235
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/fremdenabfrage/fremdenabfragerequest.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:zmr="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#" xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#" xmlns="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ ../../soapenv.xsd http://bmi.gv.at/namespace/zmr-su/base/20040201# ../../../xsd/allgemein/Service.xsd http://bmi.gv.at/namespace/zmr-su/zmr/20040201# ../../../xsd/zmr/ZMRProxy.xsd">
+<soap:Body>
+ <base:Request>
+ <base:WorkflowInfoClient>
+ <base:ProzessName>GP_Fremden_abfrage</base:ProzessName>
+ <base:VorgangName>ZPR_VO_Fremden_abfrage</base:VorgangName>
+ </base:WorkflowInfoClient>
+ <base:ClientInfo>
+ <base:Organisation>
+ <base:BehoerdenNr>000000</base:BehoerdenNr>
+ </base:Organisation>
+ <base:Client>Test</base:Client>
+ </base:ClientInfo>
+ <zmr:FremdenabfrageRequest>
+ <zmr:FremdenabfrageInfo>
+ <base:Bezugsfeld>Test</base:Bezugsfeld>
+ <zmr:FremdenabfrageAction>NICHT_OESTERREICH</zmr:FremdenabfrageAction>
+ <base:Bezirkskennung>916</base:Bezirkskennung>
+ <base:InclusivHistorie>false</base:InclusivHistorie>
+ <base:Formalisiert>false</base:Formalisiert>
+ <zmr:AlsDruck>true</zmr:AlsDruck>
+ <base:AnzahlSaetze>10</base:AnzahlSaetze>
+ </zmr:FremdenabfrageInfo>
+ <base:GemeldetVon>2004-01-01T00:00:00.000</base:GemeldetVon>
+ <base:GemeldetBis>2004-01-07T00:00:00.000</base:GemeldetBis>
+ </zmr:FremdenabfrageRequest>
+ </base:Request>
+ </soap:Body>
+</soap:Envelope> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/fremdenabfrage/fremdenabfrageresponse.xml b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/fremdenabfrage/fremdenabfrageresponse.xml
new file mode 100644
index 00000000..7f0adb0d
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/fremdenabfrage/fremdenabfrageresponse.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:zmr="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#" xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#" xmlns="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ ../../soapenv.xsd http://bmi.gv.at/namespace/zmr-su/base/20040201# ../../../xsd/allgemein/Service.xsd http://bmi.gv.at/namespace/zmr-su/zmr/20040201# ../../../xsd/zmr/ZMRProxy.xsd">
+<soap:Body>
+ <base:Response>
+ <base:WorkflowInfoServer>
+ <base:ProzessName>GP_Fremden_abfrage</base:ProzessName>
+ <base:ProzessInstanzID>1234</base:ProzessInstanzID>
+ <base:ProzessStatus>A</base:ProzessStatus>
+ <base:SequenzID>00034</base:SequenzID>
+ <base:Subprozess>
+ <base:VorgangName>ZPR_VO_Fremden_abfrage</base:VorgangName>
+ <base:VorgangStatus>A</base:VorgangStatus>
+ <base:Required>false</base:Required>
+ <base:Visible>true</base:Visible>
+ </base:Subprozess>
+ </base:WorkflowInfoServer>
+ <base:ServerInfo>
+ <base:GeneriertVon>ZMR Server</base:GeneriertVon>
+ <base:GeneriertAm>2004-01-26T00:00:00.000</base:GeneriertAm>
+ <base:ServerTransaktionNr>1234567</base:ServerTransaktionNr>
+ </base:ServerInfo>
+ <zmr:FremdenabfrageResponse>
+ <zmr:FremdenabfrageAnfrage>
+ <zmr:FremdenabfrageInfo>
+ <base:Bezugsfeld>Test</base:Bezugsfeld>
+ <zmr:FremdenabfrageAction>NICHT_OESTERREICH</zmr:FremdenabfrageAction>
+ <base:Bezirkskennung>916</base:Bezirkskennung>
+ <base:InclusivHistorie>false</base:InclusivHistorie>
+ <base:Formalisiert>false</base:Formalisiert>
+ <zmr:AlsDruck>true</zmr:AlsDruck>
+ <base:AnzahlSaetze>10</base:AnzahlSaetze>
+ </zmr:FremdenabfrageInfo>
+ <base:GemeldetVon>2004-01-01T00:00:00.000</base:GemeldetVon>
+ <base:GemeldetBis>2004-01-07T00:00:00.000</base:GemeldetBis>
+ </zmr:FremdenabfrageAnfrage>
+ <base:Message>
+ <base:Number>0003</base:Number>
+ <base:Text>Es wurde 1 Personen im ZMR gefunden</base:Text>
+ </base:Message>
+ <zmr:PDFDaten>XXYY</zmr:PDFDaten>
+ </zmr:FremdenabfrageResponse>
+ </base:Response>
+ </soap:Body>
+</soap:Envelope>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/gisadressabfrage/gisadressabfragerequest1.xml b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/gisadressabfrage/gisadressabfragerequest1.xml
new file mode 100644
index 00000000..50bd6226
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/gisadressabfrage/gisadressabfragerequest1.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:zmr="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#" xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#" xmlns="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ ../../soapenv.xsd http://bmi.gv.at/namespace/zmr-su/base/20040201# ../../../xsd/allgemein/Service.xsd http://bmi.gv.at/namespace/zmr-su/zmr/20040201# ../../../xsd/zmr/ZMRProxy.xsd">
+ <soap:Body>
+ <base:Request>
+ <base:WorkflowInfoClient>
+ <base:ProzessName>GP_GIS_Adressabfrage</base:ProzessName>
+ <base:VorgangName>ZMR_VO_GIS_Adressabfrage</base:VorgangName>
+ </base:WorkflowInfoClient>
+ <base:ClientInfo>
+ <base:Organisation>
+ <base:BehoerdenNr>000000</base:BehoerdenNr>
+ </base:Organisation>
+ <base:Client>Test</base:Client>
+ </base:ClientInfo>
+ <zmr:GISAdressabfrageRequest>
+ <PostAdresse>
+ <Gemeinde>Testgemeinde</Gemeinde>
+ <Gemeindekennziffer>09999</Gemeindekennziffer>
+ <Ortschaft>Testort</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Teststraße</Strassenname>
+ <Orientierungsnummer>3</Orientierungsnummer>
+ <Nutzungseinheit>3</Nutzungseinheit>
+ </Zustelladresse>
+ </PostAdresse>
+ </zmr:GISAdressabfrageRequest>
+ </base:Request>
+ </soap:Body>
+</soap:Envelope> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/gisadressabfrage/gisadressabfragerequest2.xml b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/gisadressabfrage/gisadressabfragerequest2.xml
new file mode 100644
index 00000000..86ddb20e
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/gisadressabfrage/gisadressabfragerequest2.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:zmr="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#" xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#" xmlns="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ ../../soapenv.xsd http://bmi.gv.at/namespace/zmr-su/base/20040201# ../../../xsd/allgemein/Service.xsd http://bmi.gv.at/namespace/zmr-su/zmr/20040201# ../../../xsd/zmr/ZMRProxy.xsd">
+ <soap:Body>
+ <base:Request>
+ <base:WorkflowInfoClient>
+ <base:ProzessName>GP_GIS_Adressabfrage</base:ProzessName>
+ <base:ProzessInstanzID>1234</base:ProzessInstanzID>
+ <base:SequenzID>00034</base:SequenzID>
+ <base:VorgangName>ZMR_VO_GIS_Adressabfrage_Druck</base:VorgangName>
+ </base:WorkflowInfoClient>
+ <base:ClientInfo>
+ <base:Organisation>
+ <base:BehoerdenNr>099999</base:BehoerdenNr>
+ </base:Organisation>
+ <base:Client>ZMRHTMLClient V3.0</base:Client>
+ </base:ClientInfo>
+ <zmr:GISAdressabfrageDetailRequest>
+ <zmr:Bestaetigt>true</zmr:Bestaetigt>
+ </zmr:GISAdressabfrageDetailRequest>
+ </base:Request>
+ </soap:Body>
+</soap:Envelope> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/gisadressabfrage/gisadressabfrageresponse1.xml b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/gisadressabfrage/gisadressabfrageresponse1.xml
new file mode 100644
index 00000000..f17c9596
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/gisadressabfrage/gisadressabfrageresponse1.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:zmr="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#" xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#" xmlns="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ ../../soapenv.xsd http://bmi.gv.at/namespace/zmr-su/base/20040201# ../../../xsd/allgemein/Service.xsd http://bmi.gv.at/namespace/zmr-su/zmr/20040201# ../../../xsd/zmr/ZMRProxy.xsd">
+ <soap:Body>
+ <base:Response>
+ <base:WorkflowInfoServer>
+ <base:ProzessName>GP_GIS_Adressabfrage</base:ProzessName>
+ <base:ProzessInstanzID>1234</base:ProzessInstanzID>
+ <base:ProzessStatus>A</base:ProzessStatus>
+ <base:SequenzID>00034</base:SequenzID>
+ <base:Subprozess>
+ <base:VorgangName>ZMR_VO_GIS_Adressabfrage</base:VorgangName>
+ <base:VorgangStatus>C</base:VorgangStatus>
+ <base:Required>false</base:Required>
+ <base:Visible>true</base:Visible>
+ </base:Subprozess>
+ <base:Subprozess>
+ <base:VorgangName>ZMR_VO_GIS_Adressabfrage_Druck</base:VorgangName>
+ <base:VorgangStatus>A</base:VorgangStatus>
+ <base:Required>false</base:Required>
+ <base:Visible>true</base:Visible>
+ </base:Subprozess>
+ </base:WorkflowInfoServer>
+ <base:ServerInfo>
+ <base:GeneriertVon>ZMR Server</base:GeneriertVon>
+ <base:GeneriertAm>2004-01-26T00:00:00.000</base:GeneriertAm>
+ <base:ServerTransaktionNr>1234567</base:ServerTransaktionNr>
+ </base:ServerInfo>
+ <zmr:GISAdressabfrageResponse>
+ <zmr:GISAdressabfrageAnfrage>
+ <PostAdresse>
+ <Gemeinde>Testgemeinde</Gemeinde>
+ <Gemeindekennziffer>09999</Gemeindekennziffer>
+ <Ortschaft>Testort</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Teststraße</Strassenname>
+ <Orientierungsnummer>3</Orientierungsnummer>
+ <Nutzungseinheit>3</Nutzungseinheit>
+ </Zustelladresse>
+ </PostAdresse>
+ </zmr:GISAdressabfrageAnfrage>
+ <base:Message>
+ <base:Number>023</base:Number>
+ <base:Text>Personen gefunden.</base:Text>
+ </base:Message>
+ <base:GefundeneSaetze>2</base:GefundeneSaetze>
+ </zmr:GISAdressabfrageResponse>
+ </base:Response>
+ </soap:Body>
+</soap:Envelope>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/gisadressabfrage/gisadressabfrageresponse2.xml b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/gisadressabfrage/gisadressabfrageresponse2.xml
new file mode 100644
index 00000000..68018bfc
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/gisadressabfrage/gisadressabfrageresponse2.xml
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:zmr="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#" xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#" xmlns="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ ../../soapenv.xsd http://bmi.gv.at/namespace/zmr-su/base/20040201# ../../../xsd/allgemein/Service.xsd http://bmi.gv.at/namespace/zmr-su/zmr/20040201# ../../../xsd/zmr/ZMRProxy.xsd">
+ <soap:Body>
+ <base:Response>
+ <base:WorkflowInfoServer>
+ <base:ProzessName>GP_GIS_Adressabfrage</base:ProzessName>
+ <base:ProzessInstanzID>1234</base:ProzessInstanzID>
+ <base:ProzessStatus>C</base:ProzessStatus>
+ <base:SequenzID>00134</base:SequenzID>
+ <base:Subprozess>
+ <base:VorgangName>ZMR_VO_GIS_Adressabfrage</base:VorgangName>
+ <base:VorgangStatus>C</base:VorgangStatus>
+ <base:Required>false</base:Required>
+ <base:Visible>true</base:Visible>
+ </base:Subprozess>
+ <base:Subprozess>
+ <base:VorgangName>ZMR_VO_GIS_Adressabfrage_Druck</base:VorgangName>
+ <base:VorgangStatus>C</base:VorgangStatus>
+ <base:Required>false</base:Required>
+ <base:Visible>true</base:Visible>
+ </base:Subprozess>
+ </base:WorkflowInfoServer>
+ <base:ServerInfo>
+ <base:GeneriertVon>ZMR Server</base:GeneriertVon>
+ <base:GeneriertAm>2004-01-26T00:00:00.000</base:GeneriertAm>
+ <base:ServerTransaktionNr>1234567</base:ServerTransaktionNr>
+ </base:ServerInfo>
+ <zmr:GISAdressabfrageDetailResponse>
+ <zmr:GISAdressabfrageAnfrage>
+ <PostAdresse>
+ <Gemeinde>Testgemeinde</Gemeinde>
+ <Gemeindekennziffer>09999</Gemeindekennziffer>
+ <Ortschaft>Testort</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Teststraße</Strassenname>
+ <Orientierungsnummer>3</Orientierungsnummer>
+ <Nutzungseinheit>3</Nutzungseinheit>
+ </Zustelladresse>
+ </PostAdresse>
+ </zmr:GISAdressabfrageAnfrage>
+ <base:Message>
+ <base:Number>023</base:Number>
+ <base:Text>Personen gefunden.</base:Text>
+ </base:Message>
+ <zmr:GISAdressabfrageErgebnis>
+ <base:GefundeneSaetze>2</base:GefundeneSaetze>
+ <PersonenDaten>
+ <NatuerlichePerson>
+ <PersonenName>
+ <Vorname>Max</Vorname>
+ <Familienname>Mustermann</Familienname>
+ </PersonenName>
+ <Geburtsdatum>2003-01-01</Geburtsdatum>
+ </NatuerlichePerson>
+ <PostAdresse>
+ <Gemeinde>Testgemeinde</Gemeinde>
+ <Gemeindekennziffer>09999</Gemeindekennziffer>
+ <Ortschaft>Testort</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Teststraße</Strassenname>
+ <Orientierungsnummer>3</Orientierungsnummer>
+ <Nutzungseinheit>3</Nutzungseinheit>
+ </Zustelladresse>
+ </PostAdresse>
+ </PersonenDaten>
+ <PersonenDaten>
+ <NatuerlichePerson>
+ <PersonenName>
+ <Vorname>Ida</Vorname>
+ <Familienname>Mustermann</Familienname>
+ </PersonenName>
+ <Geburtsdatum>2004-01-01</Geburtsdatum>
+ </NatuerlichePerson>
+ <PostAdresse>
+ <Gemeinde>Testgemeinde</Gemeinde>
+ <Gemeindekennziffer>09999</Gemeindekennziffer>
+ <Ortschaft>Testort</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Teststraße</Strassenname>
+ <Orientierungsnummer>3</Orientierungsnummer>
+ <Nutzungseinheit>3</Nutzungseinheit>
+ </Zustelladresse>
+ </PostAdresse>
+ </PersonenDaten>
+ <zmr:PDFDaten>WFhYWVlZ</zmr:PDFDaten>
+ </zmr:GISAdressabfrageErgebnis>
+ </zmr:GISAdressabfrageDetailResponse>
+ </base:Response>
+ </soap:Body>
+</soap:Envelope>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/hauseigentuemerabfrage/hauseigentuemerabfragerequest.xml b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/hauseigentuemerabfrage/hauseigentuemerabfragerequest.xml
new file mode 100644
index 00000000..c35e07e2
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/hauseigentuemerabfrage/hauseigentuemerabfragerequest.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:zmr="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#" xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#" xmlns="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ ../../soapenv.xsd http://bmi.gv.at/namespace/zmr-su/base/20040201# ../../../xsd/allgemein/Service.xsd http://bmi.gv.at/namespace/zmr-su/zmr/20040201# ../../../xsd/zmr/ZMRProxy.xsd">
+<soap:Body>
+ <base:Request>
+ <base:WorkflowInfoClient>
+ <base:ProzessName>GP_Hauseigentuemerabfrage_erstellen</base:ProzessName>
+ <base:VorgangName>ZMR_VO_Hauseigentuemerabfrage_erstellen</base:VorgangName>
+ </base:WorkflowInfoClient>
+ <base:ClientInfo>
+ <base:Organisation>
+ <base:BehoerdenNr>000000</base:BehoerdenNr>
+ </base:Organisation>
+ <base:Client>Test</base:Client>
+ </base:ClientInfo>
+ <zmr:HauseigentuemerAbfrageRequest>
+ <zmr:HauseigentuemerAbfrageInfo>
+ <base:Bezugsfeld>Test</base:Bezugsfeld>
+ <zmr:InclusiveAuskunftsgesperrt>false</zmr:InclusiveAuskunftsgesperrt>
+ <base:AnzahlSaetze>10</base:AnzahlSaetze>
+ </zmr:HauseigentuemerAbfrageInfo>
+ <PostAdresse>
+ <Postleitzahl>1245</Postleitzahl>
+ <Gemeinde>Testgemeinde</Gemeinde>
+ <Gemeindekennziffer>09999</Gemeindekennziffer>
+ <Ortschaft>Testort</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Teststrasse</Strassenname>
+ <Orientierungsnummer>1</Orientierungsnummer>
+ </Zustelladresse>
+ </PostAdresse>
+ </zmr:HauseigentuemerAbfrageRequest>
+ </base:Request>
+ </soap:Body>
+</soap:Envelope> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/hauseigentuemerabfrage/hauseigentuemerabfrageresponse.xml b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/hauseigentuemerabfrage/hauseigentuemerabfrageresponse.xml
new file mode 100644
index 00000000..e954abd5
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/hauseigentuemerabfrage/hauseigentuemerabfrageresponse.xml
@@ -0,0 +1,213 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:zmr="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#" xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#" xmlns="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ ../../soapenv.xsd http://bmi.gv.at/namespace/zmr-su/base/20040201# ../../../xsd/allgemein/Service.xsd http://bmi.gv.at/namespace/zmr-su/zmr/20040201# ../../../xsd/zmr/ZMRProxy.xsd">
+<soap:Body>
+ <base:Response>
+ <base:WorkflowInfoServer>
+ <base:ProzessName>GP_Hauseigentuemerabfrage_erstellen</base:ProzessName>
+ <base:ProzessInstanzID>1234</base:ProzessInstanzID>
+ <base:ProzessStatus>A</base:ProzessStatus>
+ <base:SequenzID>00034</base:SequenzID>
+ <base:Subprozess>
+ <base:VorgangName>ZMR_VO_Hauseigentuemerabfrage_erstellen</base:VorgangName>
+ <base:VorgangStatus>A</base:VorgangStatus>
+ <base:Required>false</base:Required>
+ <base:Visible>true</base:Visible>
+ </base:Subprozess>
+ <base:Subprozess>
+ <base:VorgangName>ZMR_VO_Hauseigentuemerabfrage_Druck_erstellen</base:VorgangName>
+ <base:VorgangStatus>A</base:VorgangStatus>
+ <base:Required>false</base:Required>
+ <base:Visible>true</base:Visible>
+ </base:Subprozess>
+ </base:WorkflowInfoServer>
+ <base:ServerInfo>
+ <base:GeneriertVon>ZMR Server</base:GeneriertVon>
+ <base:GeneriertAm>2004-01-26T00:00:00.000</base:GeneriertAm>
+ <base:ServerTransaktionNr>1234567</base:ServerTransaktionNr>
+ </base:ServerInfo>
+ <zmr:HauseigentuemerAbfrageResponse>
+ <zmr:HauseigentuemerAbfrageAnfrage>
+ <zmr:HauseigentuemerAbfrageInfo>
+ <base:Bezugsfeld>Test</base:Bezugsfeld>
+ <zmr:InclusiveAuskunftsgesperrt>false</zmr:InclusiveAuskunftsgesperrt>
+ <base:AnzahlSaetze>10</base:AnzahlSaetze>
+ </zmr:HauseigentuemerAbfrageInfo>
+ <PostAdresse>
+ <Postleitzahl>1245</Postleitzahl>
+ <Gemeinde>Testgemeinde</Gemeinde>
+ <Gemeindekennziffer>09999</Gemeindekennziffer>
+ <Ortschaft>Testort</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Teststrasse</Strassenname>
+ <Orientierungsnummer>1</Orientierungsnummer>
+ </Zustelladresse>
+ </PostAdresse>
+ </zmr:HauseigentuemerAbfrageAnfrage>
+ <base:Message>
+ <base:Number>0003</base:Number>
+ <base:Text>Es wurde 1 Personen im ZMR gefunden</base:Text>
+ </base:Message>
+ <zmr:HauseigentuemerAbfrageErgebnis>
+ <base:GefundeneSaetze>1</base:GefundeneSaetze>
+ <base:SaetzeVon>0</base:SaetzeVon>
+ <base:SaetzeBis>1</base:SaetzeBis>
+ <zmr:PersonErgebnisSatz>
+ <!-- 1. gelieferte Person im Suchergebnis (Personendaten + Meldedaten, historisch und aktuell) -->
+ <zmr:Personendaten>
+ <!-- Historienliste der Personendaten. Nur ein PersonErgebnis-Element, wenn nur aktuelle Daten -->
+ <zmr:PersonErgebnis>
+ <!-- aktueller Personendaten Gesamtdatensatz -->
+ <base:ErgebnissatzInfo>
+ <!-- letzter Änderungs-Zeitpunkt des Person-Gesamtdatensatzes (mit Staatsangehörigkeiten, ...)-->
+ <base:LetzteAenderung>2004-01-26T00:00:00.000</base:LetzteAenderung>
+ </base:ErgebnissatzInfo>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>0000001</base:EntityID>
+ <!-- letzter Änderungs-Zeitpunkt der Person-Entity (ohne Staatsangehörigkeiten, ...)-->
+ <base:LetzteAenderung>2004-01-26T00:00:00.000</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2004-01-26T00:00:00.000</base:Von>
+ <base:BeginnCode>AMKOR</base:BeginnCode>
+ <base:BeginnText>Amtliche Korrektur</base:BeginnText>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:GemeindeNr>09999</base:GemeindeNr>
+ </base:Organisation>
+ <base:Benutzer>test@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <base:ZMRZahl>000111111111</base:ZMRZahl>
+ <zmr:NatuerlichePerson>
+ <zmr:PersonenName>
+ <Vorname>Maximilian</Vorname>
+ <Familienname>Mustermann</Familienname>
+ </zmr:PersonenName>
+ <Geschlecht>männlich</Geschlecht>
+ <Geburtsdatum>2001-05-07</Geburtsdatum>
+ <Geburtsort>Wien</Geburtsort>
+ <Geburtsbundesland>Wien</Geburtsbundesland>
+ <Geburtsstaat>Österreich</Geburtsstaat>
+ <zmr:Staatsangehoerigkeit>
+ <ISOCode3>AUT</ISOCode3>
+ <StaatsnameDE>Österreich</StaatsnameDE>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>0000001</base:EntityID>
+ <base:LetzteAenderung>2003-01-01T00:00:00.000</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2003-01-01T00:00:00.000</base:Von>
+ <base:BeginnCode>REISEDOK_ANLEGEN</base:BeginnCode>
+ <base:BeginnText>Reisedokument anlegen</base:BeginnText>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:GemeindeNr>09999</base:GemeindeNr>
+ </base:Organisation>
+ <base:Benutzer>test@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ </zmr:Staatsangehoerigkeit>
+ </zmr:NatuerlichePerson>
+ </zmr:PersonErgebnis>
+ <zmr:PersonErgebnis>
+ <!-- historischer Personendaten Gesamtdatensatz (durch Vornamen-Änderung entstanden. Die Staatsagehörigkeit wurde nicht geändert und ist somit mit der im aktuellen Satz identisch-->
+ <base:ErgebnissatzInfo>
+ <base:LetzteAenderung>2004-01-26T00:00:00.000</base:LetzteAenderung>
+ </base:ErgebnissatzInfo>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>0000001</base:EntityID>
+ <base:LetzteAenderung>2004-01-26T00:00:00.000</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2003-01-01T00:00:00.000</base:Von>
+ <base:BeginnCode>GEBURT</base:BeginnCode>
+ <base:BeginnText>Geburt</base:BeginnText>
+ <base:Bis>2004-01-26T00:00:00.000</base:Bis>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:GemeindeNr>09999</base:GemeindeNr>
+ </base:Organisation>
+ <base:Benutzer>test@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <base:ZMRZahl>000111111111</base:ZMRZahl>
+ <zmr:NatuerlichePerson>
+ <zmr:PersonenName>
+ <Vorname>Hans</Vorname>
+ <Familienname>Mustermann</Familienname>
+ </zmr:PersonenName>
+ <Geschlecht>männlich</Geschlecht>
+ <Geburtsdatum>2001-05-07</Geburtsdatum>
+ <Geburtsort>Wien</Geburtsort>
+ <Geburtsbundesland>Wien</Geburtsbundesland>
+ <Geburtsstaat>Österreich</Geburtsstaat>
+ <zmr:Staatsangehoerigkeit>
+ <ISOCode3>AUT</ISOCode3>
+ <StaatsnameDE>Österreich</StaatsnameDE>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>0000001</base:EntityID>
+ <base:LetzteAenderung>2003-01-01T00:00:00.000</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2003-01-01T00:00:00.000</base:Von>
+ <base:BeginnCode>REISEDOK_ANLEGEN</base:BeginnCode>
+ <base:BeginnText>Reisedokument anlegen</base:BeginnText>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:GemeindeNr>09999</base:GemeindeNr>
+ </base:Organisation>
+ <base:Benutzer>test@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ </zmr:Staatsangehoerigkeit>
+ </zmr:NatuerlichePerson>
+ </zmr:PersonErgebnis>
+ </zmr:Personendaten>
+ <zmr:Meldedaten>
+ <!-- Historienliste einer Meldung. Nur ein MeldungErgebnis-Element, wenn nur aktuelle Daten -->
+ <zmr:MeldungErgebnis>
+ <base:ErgebnissatzInfo>
+ <!-- letzter Änderungs-Zeitpunkt des Meldung-Gesamtdatensatzes (mit Auskunftssperren, ...)-->
+ <base:LetzteAenderung>2004-01-26T00:00:00.000</base:LetzteAenderung>
+ </base:ErgebnissatzInfo>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>00000002</base:EntityID>
+ <!-- letzter Änderungs-Zeitpunkt der Meldung-Entity (ohne Auskunftssperren, ...)-->
+ <base:LetzteAenderung>2004-01-26T00:00:00.000</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2004-01-26T00:00:00.000</base:Von>
+ <base:BeginnCode>WSANM</base:BeginnCode>
+ <base:BeginnText>Wohnsitz anmelden</base:BeginnText>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:BehoerdenNr>099999</base:BehoerdenNr>
+ </base:Organisation>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <zmr:Wohnsitz>
+ <zmr:PostAdresse>
+ <Postleitzahl>1245</Postleitzahl>
+ <Gemeinde>Testgemeinde</Gemeinde>
+ <Gemeindekennziffer>09999</Gemeindekennziffer>
+ <Ortschaft>Testort</Ortschaft>
+ <zmr:Zustelladresse>
+ <Strassenname>Teststrasse</Strassenname>
+ <Orientierungsnummer>1</Orientierungsnummer>
+ <Wohnsitzqualitaet>H</Wohnsitzqualitaet>
+ </zmr:Zustelladresse>
+ </zmr:PostAdresse>
+ <base:Adressstatus>XXX000</base:Adressstatus>
+ </zmr:Wohnsitz>
+ <base:GemeldetVon>2004-01-26T00:00:00.000</base:GemeldetVon>
+ <base:PeriodeCode>WSANM</base:PeriodeCode>
+ <base:PeriodeText>Wohnsitz anmelden</base:PeriodeText>
+ </zmr:MeldungErgebnis>
+ </zmr:Meldedaten>
+ </zmr:PersonErgebnisSatz>
+ </zmr:HauseigentuemerAbfrageErgebnis>
+ </zmr:HauseigentuemerAbfrageResponse>
+ </base:Response>
+ </soap:Body>
+</soap:Envelope>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/meldeauskunft/meldeauskunftrequest.xml b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/meldeauskunft/meldeauskunftrequest.xml
new file mode 100644
index 00000000..f67f145e
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/meldeauskunft/meldeauskunftrequest.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:zmr="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#" xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#" xmlns="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ ../../soapenv.xsd http://bmi.gv.at/namespace/zmr-su/base/20040201# ../../../xsd/allgemein/Service.xsd http://bmi.gv.at/namespace/zmr-su/zmr/20040201# ../../../xsd/zmr/ZMRProxy.xsd">
+ <soap:Body>
+ <base:Request>
+ <base:WorkflowInfoClient>
+ <base:ProzessName>GP_Meldeauskunft_erstellen</base:ProzessName>
+ <base:VorgangName>ZMR_VO_Meldeauskunft_erstellen</base:VorgangName>
+ </base:WorkflowInfoClient>
+ <base:ClientInfo>
+ <base:Organisation>
+ <base:BehoerdenNr>000000</base:BehoerdenNr>
+ </base:Organisation>
+ <base:Client>Test</base:Client>
+ </base:ClientInfo>
+ <zmr:MeldeauskunftRequest>
+ <zmr:MeldeauskunftInfo>
+ <base:Bezugsfeld>Test</base:Bezugsfeld>
+ <zmr:Ergebnisdaten>
+ <zmr:AlleAktuellenWohnsitze>false</zmr:AlleAktuellenWohnsitze>
+ <zmr:OhneGeburtsdatum>false</zmr:OhneGeburtsdatum>
+ </zmr:Ergebnisdaten>
+ <base:DruckZusatztext>Testdruck 099999</base:DruckZusatztext>
+ </zmr:MeldeauskunftInfo>
+ <base:Bereichskennung>urn:publicid:gv.at:wbpk0009999999</base:Bereichskennung>
+ <base:BPK>000123456789</base:BPK>
+ <NatuerlichePerson>
+ <PersonenName>
+ <Vorname>Max</Vorname>
+ <Familienname>Mustermann</Familienname>
+ </PersonenName>
+ <Geburtsdatum>2003-01-01</Geburtsdatum>
+ </NatuerlichePerson>
+ <PostAdresse>
+ <Gemeindekennziffer>09999</Gemeindekennziffer>
+ <Ortschaft>Testort</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Teststraße</Strassenname>
+ </Zustelladresse>
+ </PostAdresse>
+ </zmr:MeldeauskunftRequest>
+ </base:Request>
+ </soap:Body>
+</soap:Envelope> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/meldeauskunft/meldeauskunftresponse.xml b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/meldeauskunft/meldeauskunftresponse.xml
new file mode 100644
index 00000000..75273ec7
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/meldeauskunft/meldeauskunftresponse.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:zmr="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#" xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#" xmlns="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ ../../soapenv.xsd http://bmi.gv.at/namespace/zmr-su/base/20040201# ../../../xsd/allgemein/Service.xsd http://bmi.gv.at/namespace/zmr-su/zmr/20040201# ../../../xsd/zmr/ZMRProxy.xsd">
+ <soap:Body>
+ <base:Response>
+ <base:WorkflowInfoServer>
+ <base:ProzessName>GP_Meldeauskunft_erstellen</base:ProzessName>
+ <base:ProzessInstanzID>1234</base:ProzessInstanzID>
+ <base:ProzessStatus>A</base:ProzessStatus>
+ <base:SequenzID>00034</base:SequenzID>
+ <base:Subprozess>
+ <base:VorgangName>ZMR_VO_Meldeauskunft_erstellen</base:VorgangName>
+ <base:VorgangStatus>C</base:VorgangStatus>
+ <base:Required>false</base:Required>
+ <base:Visible>true</base:Visible>
+ </base:Subprozess>
+ </base:WorkflowInfoServer>
+ <base:ServerInfo>
+ <base:GeneriertVon>ZMR Server</base:GeneriertVon>
+ <base:GeneriertAm>2004-01-26T00:00:00.000</base:GeneriertAm>
+ <base:ServerTransaktionNr>1234567</base:ServerTransaktionNr>
+ </base:ServerInfo>
+ <zmr:MeldeauskunftResponse>
+ <zmr:MeldeauskunftAnfrage>
+ <zmr:MeldeauskunftInfo>
+ <base:Bezugsfeld>Test</base:Bezugsfeld>
+ <zmr:Ergebnisdaten>
+ <zmr:AlleAktuellenWohnsitze>false</zmr:AlleAktuellenWohnsitze>
+ <zmr:OhneGeburtsdatum>false</zmr:OhneGeburtsdatum>
+ </zmr:Ergebnisdaten>
+ <base:DruckZusatztext>Testdruck 099999</base:DruckZusatztext>
+ </zmr:MeldeauskunftInfo>
+ <base:Bereichskennung>urn:publicid:gv.at:wbpk0009999999</base:Bereichskennung>
+ <base:BPK>000123456789</base:BPK>
+ <NatuerlichePerson>
+ <PersonenName>
+ <Vorname>Max</Vorname>
+ <Familienname>Mustermann</Familienname>
+ </PersonenName>
+ <Geburtsdatum>2003-01-01</Geburtsdatum>
+ </NatuerlichePerson>
+ <PostAdresse>
+ <Gemeindekennziffer>09999</Gemeindekennziffer>
+ <Ortschaft>Testort</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Teststraße</Strassenname>
+ </Zustelladresse>
+ </PostAdresse>
+ </zmr:MeldeauskunftAnfrage>
+ <base:Message>
+ <base:Number>123</base:Number>
+ <base:Text>Meldeauskunft erstellt.</base:Text>
+ </base:Message>
+ <zmr:Meldeauskunft>
+ <NatuerlichePerson>
+ <PersonenName>
+ <Vorname>Max</Vorname>
+ <Familienname>Mustermann</Familienname>
+ </PersonenName>
+ <Geburtsdatum>2003-01-01</Geburtsdatum>
+ </NatuerlichePerson>
+ <PostAdresse>
+ <Gemeindekennziffer>09999</Gemeindekennziffer>
+ <Ortschaft>Testort</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Teststraße</Strassenname>
+ </Zustelladresse>
+ </PostAdresse>
+ <zmr:AktMeldesatz>true</zmr:AktMeldesatz>
+ <zmr:PDFDaten></zmr:PDFDaten>
+ </zmr:Meldeauskunft>
+ </zmr:MeldeauskunftResponse>
+ </base:Response>
+ </soap:Body>
+</soap:Envelope>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/meldebestaetigung/meldebestaetigungrequest.xml b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/meldebestaetigung/meldebestaetigungrequest.xml
new file mode 100644
index 00000000..312e16b7
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/meldebestaetigung/meldebestaetigungrequest.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:zmr="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#" xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#" xmlns="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ ../../soapenv.xsd http://bmi.gv.at/namespace/zmr-su/base/20040201# ../../../xsd/allgemein/Service.xsd http://bmi.gv.at/namespace/zmr-su/zmr/20040201# ../../../xsd/zmr/ZMRProxy.xsd">
+<soap:Body>
+ <base:Request>
+ <base:WorkflowInfoClient>
+ <base:ProzessName>GP_Meldebestaetigung_erstellen</base:ProzessName>
+ <base:VorgangName>ZMR_VO_Meldebestaetigung_erstellen</base:VorgangName>
+ </base:WorkflowInfoClient>
+ <base:ClientInfo>
+ <base:Organisation>
+ <base:BehoerdenNr>099999</base:BehoerdenNr>
+ </base:Organisation>
+ <base:Client>ZMRHTMLClient V3.0</base:Client>
+ </base:ClientInfo>
+ <zmr:MeldebestaetigungRequest>
+ <zmr:MeldebestaetigungInfo>
+ <base:Bezugsfeld>Test</base:Bezugsfeld>
+ <zmr:MeldebestaetigungArt>AKTLETZT</zmr:MeldebestaetigungArt>
+ </zmr:MeldebestaetigungInfo>
+ <base:ZMRZahl>000111111111</base:ZMRZahl>
+ </zmr:MeldebestaetigungRequest>
+ </base:Request>
+ </soap:Body>
+</soap:Envelope>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/meldebestaetigung/meldebestaetigungresponse.xml b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/meldebestaetigung/meldebestaetigungresponse.xml
new file mode 100644
index 00000000..e3e4a42b
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/meldebestaetigung/meldebestaetigungresponse.xml
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:zmr="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+ xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ ../../soapenv.xsd http://bmi.gv.at/namespace/zmr-su/base/20040201# ../../../xsd/allgemein/Service.xsd http://bmi.gv.at/namespace/zmr-su/zmr/20040201# ../../../xsd/zmr/ZMRProxy.xsd">
+ <soap:Body>
+ <base:Response>
+ <base:WorkflowInfoServer>
+ <base:ProzessName>GP_Meldebestaetigung_erstellen</base:ProzessName>
+ <base:ProzessInstanzID>1234</base:ProzessInstanzID>
+ <base:ProzessStatus>C</base:ProzessStatus>
+ <base:SequenzID>00034</base:SequenzID>
+ <base:Subprozess>
+ <base:VorgangName>ZMR_VO_Meldebestaetigung_erstellen</base:VorgangName>
+ <base:VorgangStatus>C</base:VorgangStatus>
+ <base:Required>true</base:Required>
+ <base:Visible>true</base:Visible>
+ </base:Subprozess>
+ </base:WorkflowInfoServer>
+ <base:ServerInfo>
+ <base:GeneriertVon>ZMR Server</base:GeneriertVon>
+ <base:GeneriertAm>2004-01-26T00:00:00.000</base:GeneriertAm>
+ <base:ServerTransaktionNr>1234567</base:ServerTransaktionNr>
+ </base:ServerInfo>
+ <zmr:MeldebestaetigungResponse>
+ <zmr:MeldebestaetigungAnfrage>
+ <zmr:MeldebestaetigungInfo>
+ <base:Bezugsfeld>Test</base:Bezugsfeld>
+ <zmr:MeldebestaetigungArt>AKTLETZT</zmr:MeldebestaetigungArt>
+ </zmr:MeldebestaetigungInfo>
+ <base:ZMRZahl>000111111111</base:ZMRZahl>
+ </zmr:MeldebestaetigungAnfrage>
+ <base:Message>
+ <base:Number>01234</base:Number>
+ <base:Text>Die Meldebestätigung wurde erstellt</base:Text>
+ </base:Message>
+ <zmr:Meldebestaetigung>
+ <base:ZMRZahl>000111111111</base:ZMRZahl>
+ <NatuerlichePerson>
+ <PersonenName>
+ <Vorname>Max</Vorname>
+ <Familienname>Mustermann</Familienname>
+ </PersonenName>
+ <Geschlecht>männlich</Geschlecht>
+ <Geburtsdatum>2000-01-01</Geburtsdatum>
+ <Staatsangehoerigkeit>
+ <ISOCode3>AUT</ISOCode3>
+ <StaatsnameDE>Österreich</StaatsnameDE>
+ </Staatsangehoerigkeit>
+ </NatuerlichePerson>
+ <zmr:Meldung>
+ <PostAdresse>
+ <Gemeinde>Testgemeinde</Gemeinde>
+ <Gemeindekennziffer>09999</Gemeindekennziffer>
+ <Ortschaft>Testort</Ortschaft>
+ <Zustelladresse>
+ <Strassenname>Teststraße</Strassenname>
+ <Orientierungsnummer>3</Orientierungsnummer>
+ </Zustelladresse>
+ </PostAdresse>
+ <base:GemeldetVon>2000-01-01T00:00:00.000</base:GemeldetVon>
+ </zmr:Meldung>
+ <zmr:AktMeldesatz>true</zmr:AktMeldesatz>
+ <zmr:PDFDaten></zmr:PDFDaten>
+ </zmr:Meldebestaetigung>
+ </zmr:MeldebestaetigungResponse>
+ </base:Response>
+ </soap:Body>
+</soap:Envelope>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/militaerbehoerden/blaetternrequest.xml b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/militaerbehoerden/blaetternrequest.xml
new file mode 100644
index 00000000..a5733f30
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/militaerbehoerden/blaetternrequest.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+>
+ <soap:Body>
+ <base:Request>
+ <base:WorkflowInfoClient>
+ <base:ProzessName>GP_Militaerbehoerde</base:ProzessName>
+ <base:ProzessInstanzID>37300000000157</base:ProzessInstanzID>
+ <base:SequenzID>0</base:SequenzID>
+ <base:VorgangName>ZPR_VO_Wehrpflichtige_abfragen</base:VorgangName>
+ </base:WorkflowInfoClient>
+ <base:ClientInfo>
+ <base:Organisation>
+ <base:GemeindeNr>09999</base:GemeindeNr>
+ </base:Organisation>
+ <base:Client>ZMRGUI v4_9_3-04</base:Client>
+ </base:ClientInfo>
+ <base:BlaetternRequest>
+ <base:BlaetternInfo>
+ <base:Richtung>Vor</base:Richtung>
+ <base:AnzahlSaetze>30</base:AnzahlSaetze>
+ </base:BlaetternInfo>
+ </base:BlaetternRequest>
+ </base:Request>
+ </soap:Body>
+</soap:Envelope> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/militaerbehoerden/wehrpflichtigeAbfragenRequst.xml b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/militaerbehoerden/wehrpflichtigeAbfragenRequst.xml
new file mode 100644
index 00000000..1d4d1e1d
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/militaerbehoerden/wehrpflichtigeAbfragenRequst.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
+ xmlns:cio="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:zmr="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+>
+ <soap:Body>
+ <base:Request>
+ <base:WorkflowInfoClient>
+ <base:ProzessName>GP_Militaerbehoerde</base:ProzessName>
+ <base:VorgangName>ZPR_VO_Wehrpflichtige_abfragen</base:VorgangName>
+ </base:WorkflowInfoClient>
+ <base:ClientInfo>
+ <base:Organisation>
+ <base:GemeindeNr>09999</base:GemeindeNr>
+ </base:Organisation>
+ <base:Client>ZMRGUI v4_9_3-04</base:Client>
+ </base:ClientInfo>
+ <zmr:WehrpflichtigeAbfragenRequest>
+ <zmr:WehrpflichtigeAbfragenInfo>
+ <zmr:AlsDruck>false</zmr:AlsDruck>
+ <base:AnzahlSaetze>30</base:AnzahlSaetze>
+ </zmr:WehrpflichtigeAbfragenInfo>
+ <cio:Bundesland>Wien</cio:Bundesland>
+ <zmr:GeburtsdatumVon>1980-01-01T00:00:00.000</zmr:GeburtsdatumVon>
+ <zmr:GeburtsdatumBis>1980-02-01T00:00:00.000</zmr:GeburtsdatumBis>
+ <cio:Familienname>A</cio:Familienname>
+ </zmr:WehrpflichtigeAbfragenRequest>
+ </base:Request>
+ </soap:Body>
+</soap:Envelope> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/natuerlicheperson.xml b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/natuerlicheperson.xml
new file mode 100644
index 00000000..23958f84
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/natuerlicheperson.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<NatuerlichePerson xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+ xsi:schemaLocation="http://reference.e-government.gv.at/namespace/persondata/de/20040201# ../../xsd/eingebunden/PersonDataZMR.xsd">
+
+ <Identification>
+ <Value>000111111111</Value>
+ <Type>ZMR</Type>
+ </Identification>
+ <PersonenName>
+ <Vorname>Max</Vorname>
+ <Familienname>Mustermann</Familienname>
+ <Affix typ="akademischerGrad" position="prefix">Mag. rer. nat.</Affix>
+ </PersonenName>
+ <AlternativName Type="NameVorErsterEhe">
+ <Familienname>Musterfrau</Familienname>
+ </AlternativName>
+ <Geschlecht>männlich</Geschlecht>
+ <Geburtsdatum>2001-05-07</Geburtsdatum>
+ <Geburtsort>Wien</Geburtsort>
+ <Geburtsbundesland>Wien</Geburtsbundesland>
+ <Geburtsstaat>Österreich</Geburtsstaat>
+ <Sterbedatum>2003-05-07</Sterbedatum>
+ <Staatsangehoerigkeit>
+ <ISOCode3>AUT</ISOCode3>
+ <StaatsnameDE>Österreich</StaatsnameDE>
+ </Staatsangehoerigkeit>
+</NatuerlichePerson>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/personaendern/personaendernrequest1.xml b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/personaendern/personaendernrequest1.xml
new file mode 100644
index 00000000..62449f25
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/personaendern/personaendernrequest1.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:zmr="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#" xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#" xmlns="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ ../../soapenv.xsd http://bmi.gv.at/namespace/zmr-su/base/20040201# ../../../xsd/allgemein/Service.xsd http://bmi.gv.at/namespace/zmr-su/zmr/20040201# ../../../xsd/zmr/ZMRProxy.xsd">
+<soap:Body>
+ <base:Request>
+ <base:WorkflowInfoClient>
+ <base:ProzessName>GP_Person_aendern</base:ProzessName>
+ <base:VorgangName>ZPR_VO_Person_aendern</base:VorgangName>
+ </base:WorkflowInfoClient>
+ <base:ClientInfo>
+ <base:Organisation>
+ <base:BehoerdenNr>000000</base:BehoerdenNr>
+ </base:Organisation>
+ <base:Client>Test</base:Client>
+ </base:ClientInfo>
+ <zmr:PersonAendernRequest>
+ <zmr:PersonAendernInfo>
+ <base:Von>2004-01-26T00:00:00.000</base:Von>
+ <base:GrundCode>NAMENSAENDERUNG</base:GrundCode>
+ </zmr:PersonAendernInfo>
+ <zmr:PersonReferenz>
+ <base:Technisch>
+ <base:EntityID>2434</base:EntityID>
+ <base:LetzteAenderung>2003-03-01T00:00:00.000</base:LetzteAenderung>
+ </base:Technisch>
+ <base:ZMRZahl>000111111111</base:ZMRZahl>
+ </zmr:PersonReferenz>
+ <zmr:PersonAenderung>
+ <zmr:NatuerlichePerson>
+ <zmr:PersonenName>
+ <Vorname>Anna</Vorname> <!--Umbenennung auf Anna-->
+ </zmr:PersonenName>
+ </zmr:NatuerlichePerson>
+ <base:Titel></base:Titel> <!-- Feld Titel wird gelöscht-->
+ </zmr:PersonAenderung>
+ </zmr:PersonAendernRequest>
+ </base:Request>
+ </soap:Body>
+</soap:Envelope>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/personaendern/personaendernrequest2.xml b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/personaendern/personaendernrequest2.xml
new file mode 100644
index 00000000..c93c5b72
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/personaendern/personaendernrequest2.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:zmr="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#" xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#" xmlns="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ ../../soapenv.xsd http://bmi.gv.at/namespace/zmr-su/base/20040201# ../../../xsd/allgemein/Service.xsd http://bmi.gv.at/namespace/zmr-su/zmr/20040201# ../../../xsd/zmr/ZMRProxy.xsd">
+<soap:Body>
+ <base:Request>
+ <base:WorkflowInfoClient>
+ <base:ProzessName>GP_Person_aendern</base:ProzessName>
+ <base:VorgangName>ZPR_VO_Person_aendern</base:VorgangName>
+ </base:WorkflowInfoClient>
+ <base:ClientInfo>
+ <base:Organisation>
+ <base:BehoerdenNr>000000</base:BehoerdenNr>
+ </base:Organisation>
+ <base:Client>Test</base:Client>
+ </base:ClientInfo>
+ <zmr:PersonAendernRequest>
+ <zmr:PersonAendernInfo>
+ <base:Von>2004-01-26T00:00:00.000</base:Von>
+ <base:GrundCode>XXX</base:GrundCode>
+ </zmr:PersonAendernInfo>
+ <zmr:PersonReferenz>
+ <base:Technisch>
+ <base:EntityID>2434</base:EntityID>
+ <base:LetzteAenderung>2003-03-01T00:00:00.000</base:LetzteAenderung>
+ </base:Technisch>
+ <base:ZMRZahl>000111111111</base:ZMRZahl>
+ </zmr:PersonReferenz>
+ <zmr:ReisedokumentAenderung>
+ <base:EntityReferenz>
+ <base:EntityID>0004</base:EntityID>
+ </base:EntityReferenz>
+ <base:Beendigung>true</base:Beendigung>
+ <!-- Das Reisedokument wird fachlich beendet, andere Felder werden nicht geändert.
+ Es könnten auch andere Felder hier zugleich mit der Beendigung noch verändert werden.
+ Die Beendigung ist nicht an das Feld DokumentGiltBis gekoppelt
+ -->
+ </zmr:ReisedokumentAenderung>
+ </zmr:PersonAendernRequest>
+ </base:Request>
+ </soap:Body>
+</soap:Envelope>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/personaendern/personaendernresponse1.xml b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/personaendern/personaendernresponse1.xml
new file mode 100644
index 00000000..dde7e494
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/personaendern/personaendernresponse1.xml
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:zmr="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#" xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#" xmlns="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ ../../soapenv.xsd http://bmi.gv.at/namespace/zmr-su/base/20040201# ../../../xsd/allgemein/Service.xsd http://bmi.gv.at/namespace/zmr-su/zmr/20040201# ../../../xsd/zmr/ZMRProxy.xsd">
+<soap:Body>
+ <base:Response>
+ <base:WorkflowInfoServer>
+ <base:ProzessName>GP_Person_aendern</base:ProzessName>
+ <base:ProzessInstanzID>1234</base:ProzessInstanzID>
+ <base:ProzessStatus>A</base:ProzessStatus>
+ <base:SequenzID>00034</base:SequenzID>
+ <base:Subprozess>
+ <base:VorgangName>ZPR_VO_Person_aendern</base:VorgangName>
+ <base:VorgangStatus>C</base:VorgangStatus>
+ <base:Required>false</base:Required>
+ <base:Visible>true</base:Visible>
+ </base:Subprozess>
+ </base:WorkflowInfoServer>
+ <base:ServerInfo>
+ <base:GeneriertVon>ZMR Server</base:GeneriertVon>
+ <base:GeneriertAm>2004-01-26T00:00:00.000</base:GeneriertAm>
+ <base:ServerTransaktionNr>1234567</base:ServerTransaktionNr>
+ </base:ServerInfo>
+ <zmr:PersonAendernResponse>
+ <base:Message>
+ <base:Number>1234</base:Number>
+ <base:Text>Person wurde geändert</base:Text>
+ </base:Message>
+ <zmr:PersonErgebnis>
+ <base:ErgebnissatzInfo>
+ <base:LetzteAenderung>2004-01-26T00:00:00.000</base:LetzteAenderung>
+ </base:ErgebnissatzInfo>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>0000001</base:EntityID>
+ <base:LetzteAenderung>2004-01-26T00:00:00.000</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2004-01-26T00:00:00.000</base:Von>
+ <base:BeginnCode>NAMENSAENDERUNG</base:BeginnCode>
+ <base:BeginnText>Namensänderung</base:BeginnText>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:GemeindeNr>09999</base:GemeindeNr>
+ </base:Organisation>
+ <base:Benutzer>test@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <base:ZMRZahl>000111111111</base:ZMRZahl>
+ <zmr:NatuerlichePerson>
+ <zmr:PersonenName>
+ <Vorname>Anna</Vorname>
+ <Familienname>Mustermann</Familienname>
+ </zmr:PersonenName>
+ <AlternativName Type="NameVorErsterEhe">
+ <Familienname>Huber</Familienname>
+ </AlternativName>
+ <Geschlecht>weiblich</Geschlecht>
+ <Geburtsdatum>2001-05-07</Geburtsdatum>
+ <Geburtsort>Wien</Geburtsort>
+ <Geburtsbundesland>Wien</Geburtsbundesland>
+ <Geburtsstaat>Österreich</Geburtsstaat>
+ <zmr:Staatsangehoerigkeit>
+ <ISOCode3>AUT</ISOCode3>
+ <StaatsnameDE>Österreich</StaatsnameDE>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>0000001</base:EntityID>
+ <base:LetzteAenderung>2003-01-01T00:00:00.000</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2003-01-01T00:00:00.000</base:Von>
+ <base:BeginnCode>REISEDOK_ANLEGEN</base:BeginnCode>
+ <base:BeginnText>Reisedokument anlegen</base:BeginnText>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:GemeindeNr>09999</base:GemeindeNr>
+ </base:Organisation>
+ <base:Benutzer>test@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ </zmr:Staatsangehoerigkeit>
+ </zmr:NatuerlichePerson>
+ </zmr:PersonErgebnis>
+ </zmr:PersonAendernResponse>
+ </base:Response>
+ </soap:Body>
+</soap:Envelope>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/personaendern/personaendernresponse2.xml b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/personaendern/personaendernresponse2.xml
new file mode 100644
index 00000000..d824dfac
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/personaendern/personaendernresponse2.xml
@@ -0,0 +1,110 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:zmr="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#" xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#" xmlns="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ ../../soapenv.xsd http://bmi.gv.at/namespace/zmr-su/base/20040201# ../../../xsd/allgemein/Service.xsd http://bmi.gv.at/namespace/zmr-su/zmr/20040201# ../../../xsd/zmr/ZMRProxy.xsd">
+<soap:Body>
+ <base:Response>
+ <base:WorkflowInfoServer>
+ <base:ProzessName>GP_Person_aendern</base:ProzessName>
+ <base:ProzessInstanzID>1234</base:ProzessInstanzID>
+ <base:ProzessStatus>A</base:ProzessStatus>
+ <base:SequenzID>00034</base:SequenzID>
+ <base:Subprozess>
+ <base:VorgangName>ZPR_VO_Person_aendern</base:VorgangName>
+ <base:VorgangStatus>C</base:VorgangStatus>
+ <base:Required>false</base:Required>
+ <base:Visible>true</base:Visible>
+ </base:Subprozess>
+ </base:WorkflowInfoServer>
+ <base:ServerInfo>
+ <base:GeneriertVon>ZMR Server</base:GeneriertVon>
+ <base:GeneriertAm>2004-01-26T00:00:00.000</base:GeneriertAm>
+ <base:ServerTransaktionNr>1234567</base:ServerTransaktionNr>
+ </base:ServerInfo>
+ <zmr:PersonAendernResponse>
+ <base:Message>
+ <base:Number>1234</base:Number>
+ <base:Text>Personendaten wurden geändert</base:Text>
+ </base:Message>
+ <zmr:PersonErgebnis>
+ <base:ErgebnissatzInfo>
+ <base:LetzteAenderung>2004-01-26T00:00:00.000</base:LetzteAenderung>
+ </base:ErgebnissatzInfo>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>2434</base:EntityID>
+ <base:LetzteAenderung>2003-01-01T00:00:00.000</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2003-01-01T00:00:00.000</base:Von>
+ <base:BeginnCode>GEBURT</base:BeginnCode>
+ <base:BeginnText>Geburt</base:BeginnText>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:GemeindeNr>09999</base:GemeindeNr>
+ </base:Organisation>
+ <base:Benutzer>test@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <base:ZMRZahl>000111111111</base:ZMRZahl>
+ <zmr:NatuerlichePerson>
+ <zmr:PersonenName>
+ <Vorname>Anna</Vorname>
+ <Familienname>Mustermann</Familienname>
+ </zmr:PersonenName>
+ <AlternativName Type="NameVorErsterEhe">
+ <Familienname>Huber</Familienname>
+ </AlternativName>
+ <Geschlecht>weiblich</Geschlecht>
+ <Geburtsdatum>2001-05-07</Geburtsdatum>
+ <Geburtsort>Wien</Geburtsort>
+ <Geburtsbundesland>Wien</Geburtsbundesland>
+ <Geburtsstaat>Österreich</Geburtsstaat>
+ <zmr:Staatsangehoerigkeit>
+ <ISOCode3>AUT</ISOCode3>
+ <StaatsnameDE>Österreich</StaatsnameDE>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>0004</base:EntityID>
+ <base:LetzteAenderung>2004-01-26T00:00:00.000</base:LetzteAenderung>
+ </base:Technisch>
+
+ <base:Von>2003-01-01T00:00:00.000</base:Von>
+ <base:BeginnCode>STAATSANGEH_ANLEGEN</base:BeginnCode>
+ <base:BeginnText>Staatsangehörigkeit anlegen</base:BeginnText>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:GemeindeNr>09999</base:GemeindeNr>
+ </base:Organisation>
+ <base:Benutzer>test@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ </zmr:Staatsangehoerigkeit>
+ </zmr:NatuerlichePerson>
+ <zmr:Reisedokument>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>0004</base:EntityID>
+ <base:LetzteAenderung>2004-01-26T00:00:00.000</base:LetzteAenderung>
+ </base:Technisch>
+ <!-- Nulldauersatz des beendeten Reisedokuments -->
+ <base:Von>2004-01-26T00:00:00.000</base:Von>
+ <base:BeginnCode>REISEDOK_AENDERN</base:BeginnCode>
+ <base:BeginnText>Reisedokument geändert</base:BeginnText>
+ <base:Bis>2004-01-26T00:00:00.000</base:Bis>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:GemeindeNr>09999</base:GemeindeNr>
+ </base:Organisation>
+ <base:Benutzer>test@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <base:DokumentArt>Reisedokument</base:DokumentArt>
+ <base:DokumentNummer>123</base:DokumentNummer>
+ <base:AusstellDatum>2003-01-01</base:AusstellDatum>
+ <base:Ausstellungsstaat>Libyen</base:Ausstellungsstaat>
+ <base:DokumentGiltBis>2004-01-26T00:00:00.000</base:DokumentGiltBis>
+ </zmr:Reisedokument>
+ </zmr:PersonErgebnis>
+ </zmr:PersonAendernResponse>
+ </base:Response>
+ </soap:Body>
+</soap:Envelope>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/personanlegen/personanlegenrequest.xml b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/personanlegen/personanlegenrequest.xml
new file mode 100644
index 00000000..c9d604cd
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/personanlegen/personanlegenrequest.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:zmr="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#" xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#" xmlns="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ ../../soapenv.xsd http://bmi.gv.at/namespace/zmr-su/base/20040201# ../../../xsd/allgemein/Service.xsd http://bmi.gv.at/namespace/zmr-su/zmr/20040201# ../../../xsd/zmr/ZMRProxy.xsd">
+<soap:Body>
+ <base:Request>
+ <base:WorkflowInfoClient>
+ <base:ProzessName>GP_Person_anlegen</base:ProzessName>
+ <base:VorgangName>ZPR_VO_Person_anlegen</base:VorgangName>
+ </base:WorkflowInfoClient>
+ <base:ClientInfo>
+ <base:Organisation>
+ <base:BehoerdenNr>000000</base:BehoerdenNr>
+ </base:Organisation>
+ <base:Client>Test</base:Client>
+ </base:ClientInfo>
+ <zmr:PersonAnlegenRequest>
+ <zmr:PersonAnlegenInfo>
+ <base:Von>2004-01-26T00:00:00.000</base:Von>
+ <base:GrundCode>GEBURT</base:GrundCode>
+ </zmr:PersonAnlegenInfo>
+ <zmr:PersonAnlage>
+ <zmr:NatuerlichePerson>
+ <zmr:PersonenName>
+ <Vorname>Max</Vorname>
+ <Familienname>Mustermann</Familienname>
+ </zmr:PersonenName>
+ <Geschlecht>männlich</Geschlecht>
+ <Geburtsdatum>2001-05-07</Geburtsdatum>
+ <Geburtsort>Wien</Geburtsort>
+ <Geburtsbundesland>Wien</Geburtsbundesland>
+ <Geburtsstaat>Österreich</Geburtsstaat>
+ <zmr:Staatsangehoerigkeit>
+ <ISOCode3>AUT</ISOCode3>
+ </zmr:Staatsangehoerigkeit>
+ </zmr:NatuerlichePerson>
+ </zmr:PersonAnlage>
+ <zmr:MeldungAnlage>
+ <zmr:Wohnsitz>
+ <zmr:PostAdresse>
+ <Gemeindekennziffer>09999</Gemeindekennziffer>
+ <zmr:Zustelladresse>
+ <Wohnsitzqualitaet>H</Wohnsitzqualitaet>
+ <zmr:AdressRegisterEintrag>
+ <Adresscode>1234567</Adresscode>
+ <Subcode>111</Subcode>
+ <Objektnummer>1111111</Objektnummer>
+ </zmr:AdressRegisterEintrag>
+ <!-- Offizielle Adresse, es müssen nur die Adresscodes geschickt werden-->
+ </zmr:Zustelladresse>
+ </zmr:PostAdresse>
+ </zmr:Wohnsitz>
+ </zmr:MeldungAnlage>
+ </zmr:PersonAnlegenRequest>
+ </base:Request>
+ </soap:Body>
+</soap:Envelope>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/personanlegen/personanlegenresponse.xml b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/personanlegen/personanlegenresponse.xml
new file mode 100644
index 00000000..dbc29ee8
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/personanlegen/personanlegenresponse.xml
@@ -0,0 +1,118 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:zmr="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#" xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#" xmlns="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ ../../soapenv.xsd http://bmi.gv.at/namespace/zmr-su/base/20040201# ../../../xsd/allgemein/Service.xsd http://bmi.gv.at/namespace/zmr-su/zmr/20040201# ../../../xsd/zmr/ZMRProxy.xsd">
+<soap:Body>
+ <base:Response>
+ <base:WorkflowInfoServer>
+ <base:ProzessName>GP_Person_anlegen</base:ProzessName>
+ <base:ProzessInstanzID>1234</base:ProzessInstanzID>
+ <base:ProzessStatus>A</base:ProzessStatus>
+ <base:SequenzID>00034</base:SequenzID>
+ <base:Subprozess>
+ <base:VorgangName>ZPR_VO_Person_anlegen</base:VorgangName>
+ <base:VorgangStatus>C</base:VorgangStatus>
+ <base:Required>false</base:Required>
+ <base:Visible>true</base:Visible>
+ </base:Subprozess>
+ </base:WorkflowInfoServer>
+ <base:ServerInfo>
+ <base:GeneriertVon>ZMR Server</base:GeneriertVon>
+ <base:GeneriertAm>2004-01-26T00:00:00.000</base:GeneriertAm>
+ <base:ServerTransaktionNr>1234567</base:ServerTransaktionNr>
+ </base:ServerInfo>
+ <zmr:PersonAnlegenResponse>
+ <base:Message>
+ <base:Number>1234</base:Number>
+ <base:Text>Person wurde angelegt</base:Text>
+ </base:Message>
+ <zmr:PersonErgebnis>
+ <base:ErgebnissatzInfo>
+ <base:LetzteAenderung>2004-01-26T00:00:00.000</base:LetzteAenderung>
+ </base:ErgebnissatzInfo>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>0000001</base:EntityID>
+ <base:LetzteAenderung>2004-01-26T00:00:00.000</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2004-01-26T00:00:00.000</base:Von>
+ <base:BeginnCode>GEBURT</base:BeginnCode>
+ <base:BeginnText>Geburt</base:BeginnText>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:GemeindeNr>09999</base:GemeindeNr>
+ </base:Organisation>
+ <base:Benutzer>test@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <base:ZMRZahl>000111111111</base:ZMRZahl>
+ <zmr:NatuerlichePerson>
+ <zmr:PersonenName>
+ <Vorname>Max</Vorname>
+ <Familienname>Mustermann</Familienname>
+ </zmr:PersonenName>
+ <Geschlecht>männlich</Geschlecht>
+ <Geburtsdatum>2001-05-07</Geburtsdatum>
+ <Geburtsort>Wien</Geburtsort>
+ <Geburtsbundesland>Wien</Geburtsbundesland>
+ <Geburtsstaat>Österreich</Geburtsstaat>
+ <zmr:Staatsangehoerigkeit>
+ <ISOCode3>AUT</ISOCode3>
+ <StaatsnameDE>Österreich</StaatsnameDE>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>0000001</base:EntityID>
+ <base:LetzteAenderung>2004-01-26T00:00:00.000</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2004-01-26T00:00:00.000</base:Von>
+ <base:BeginnCode>STAATSANGEH_ANLEGEN</base:BeginnCode>
+ <base:BeginnText>Staatsangehörigkeit angelegt</base:BeginnText>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:GemeindeNr>09999</base:GemeindeNr>
+ </base:Organisation>
+ <base:Benutzer>test@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ </zmr:Staatsangehoerigkeit>
+ </zmr:NatuerlichePerson>
+ </zmr:PersonErgebnis>
+ <zmr:MeldungErgebnis>
+ <base:ErgebnissatzInfo>
+ <base:LetzteAenderung>2004-01-26T00:00:00.000</base:LetzteAenderung>
+ </base:ErgebnissatzInfo>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>00000002</base:EntityID>
+ <base:LetzteAenderung>2004-01-26T00:00:00.000</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2004-01-26T00:00:00.000</base:Von>
+ <base:BeginnCode>WSANM</base:BeginnCode>
+ <base:BeginnText>Wohnsitz anmelden</base:BeginnText>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:BehoerdenNr>099999</base:BehoerdenNr>
+ </base:Organisation>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <zmr:Wohnsitz>
+ <zmr:PostAdresse>
+ <Postleitzahl>1245</Postleitzahl>
+ <Gemeinde>Testgemeinde</Gemeinde>
+ <Gemeindekennziffer>09999</Gemeindekennziffer>
+ <Ortschaft>Testort</Ortschaft>
+ <zmr:Zustelladresse>
+ <Strassenname>Teststrasse</Strassenname>
+ <Orientierungsnummer>1</Orientierungsnummer>
+ <Wohnsitzqualitaet>H</Wohnsitzqualitaet>
+ </zmr:Zustelladresse>
+ </zmr:PostAdresse>
+ <base:Adressstatus>XXX000</base:Adressstatus>
+ </zmr:Wohnsitz>
+ <base:GemeldetVon>2004-01-26T00:00:00.000</base:GemeldetVon>
+ <base:PeriodeCode>WSANM</base:PeriodeCode>
+ <base:PeriodeText>Wohnsitz anmelden</base:PeriodeText>
+ </zmr:MeldungErgebnis>
+ </zmr:PersonAnlegenResponse>
+ </base:Response>
+ </soap:Body>
+</soap:Envelope>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/personenabfrage/blaetternrequest.xml b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/personenabfrage/blaetternrequest.xml
new file mode 100644
index 00000000..57395ab5
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/personenabfrage/blaetternrequest.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:zmr="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#" xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#" xmlns="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ ../../soapenv.xsd http://bmi.gv.at/namespace/zmr-su/base/20040201# ../../../xsd/allgemein/Service.xsd http://bmi.gv.at/namespace/zmr-su/zmr/20040201# ../../../xsd/zmr/ZMRProxy.xsd">
+<soap:Body>
+ <base:Request>
+ <base:WorkflowInfoClient>
+ <base:ProzessName>GP_Verknuepfungsanfrage</base:ProzessName>
+ <base:ProzessInstanzID>1234</base:ProzessInstanzID>
+ <!-- Die InstanzID der laufenden Prozesses muss hier übermittelt werden, um die Suche fortzusetzen (aus WorkflowInfoServer des ersten Suchergebnisses-->
+ <base:SequenzID>00034</base:SequenzID>
+ <base:VorgangName>ZPR_VO_Person_abfragen</base:VorgangName>
+ </base:WorkflowInfoClient>
+ <base:ClientInfo>
+ <base:Organisation>
+ <base:BehoerdenNr>000000</base:BehoerdenNr>
+ </base:Organisation>
+ <base:Client>Test</base:Client>
+ </base:ClientInfo>
+ <base:BlaetternRequest>
+ <base:BlaetternInfo>
+ <base:Richtung>Vor</base:Richtung>
+ <base:AnzahlSaetze>3</base:AnzahlSaetze>
+ </base:BlaetternInfo>
+ </base:BlaetternRequest>
+ </base:Request>
+ </soap:Body>
+</soap:Envelope>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/personenabfrage/blaetternresponse.xml b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/personenabfrage/blaetternresponse.xml
new file mode 100644
index 00000000..50e831f2
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/personenabfrage/blaetternresponse.xml
@@ -0,0 +1,210 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:zmr="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#" xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#" xmlns="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ ../../soapenv.xsd http://bmi.gv.at/namespace/zmr-su/base/20040201# ../../../xsd/allgemein/Service.xsd http://bmi.gv.at/namespace/zmr-su/zmr/20040201# ../../../xsd/zmr/ZMRProxy.xsd">
+<soap:Body>
+ <base:Response>
+ <base:WorkflowInfoServer>
+ <base:ProzessName>GP_Verknuepfungsanfrage</base:ProzessName>
+ <base:ProzessInstanzID>1234</base:ProzessInstanzID>
+ <base:ProzessStatus>A</base:ProzessStatus>
+ <base:SequenzID>00034</base:SequenzID>
+ <base:Subprozess>
+ <base:VorgangName>ZPR_VO_Person_abfragen</base:VorgangName>
+ <base:VorgangStatus>A</base:VorgangStatus>
+ <base:Required>false</base:Required>
+ <base:Visible>true</base:Visible>
+ </base:Subprozess>
+ </base:WorkflowInfoServer>
+ <base:ServerInfo>
+ <base:GeneriertVon>ZMR Server</base:GeneriertVon>
+ <base:GeneriertAm>2004-01-26T00:00:00.000</base:GeneriertAm>
+ <base:ServerTransaktionNr>1234567</base:ServerTransaktionNr>
+ </base:ServerInfo>
+ <zmr:PersonenAbfrageResponse>
+ <zmr:PersonenAbfrageAnfrage>
+ <zmr:PersonenAbfrageInfo>
+ <base:Bezugsfeld>Test</base:Bezugsfeld>
+ <zmr:Suchkriterien>
+ <base:InclusivHistorie>false</base:InclusivHistorie>
+ <base:Formalisiert>false</base:Formalisiert>
+ </zmr:Suchkriterien>
+ <zmr:Ergebniskriterien>
+ <base:InclusivHistorie>true</base:InclusivHistorie>
+ </zmr:Ergebniskriterien>
+ <base:AnzahlSaetze>10</base:AnzahlSaetze>
+ </zmr:PersonenAbfrageInfo>
+ <NatuerlichePerson>
+ <PersonenName>
+ <Vorname>Max</Vorname>
+ <Familienname>Mustermann</Familienname>
+ </PersonenName>
+ </NatuerlichePerson>
+ </zmr:PersonenAbfrageAnfrage>
+ <base:Message>
+ <base:Number>0003</base:Number>
+ <base:Text>Es wurde 1 Personen im ZMR gefunden</base:Text>
+ </base:Message>
+ <zmr:PersonenAbfrageErgebnis>
+ <base:GefundeneSaetze>4</base:GefundeneSaetze>
+ <base:SaetzeVon>3</base:SaetzeVon>
+ <!-- Es wurde weitergeblättert - der letzte Satz wird geliefert -->
+ <base:SaetzeBis>4</base:SaetzeBis>
+ <zmr:PersonErgebnisSatz>
+ <!-- 1. gelieferte Person im Suchergebnis (Personendaten + Meldedaten, historisch und aktuell) -->
+ <zmr:Personendaten>
+ <!-- Historienliste der Personendaten. Nur ein PersonErgebnis-Element, wenn nur aktuelle Daten -->
+ <zmr:PersonErgebnis>
+ <!-- aktueller Personendaten Gesamtdatensatz -->
+ <base:ErgebnissatzInfo>
+ <!-- letzter Änderungs-Zeitpunkt des Person-Gesamtdatensatzes (mit Staatsangehörigkeiten, ...)-->
+ <base:LetzteAenderung>2004-01-26T00:00:00.000</base:LetzteAenderung>
+ </base:ErgebnissatzInfo>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>0000001</base:EntityID>
+ <!-- letzter Änderungs-Zeitpunkt der Person-Entity (ohne Staatsangehörigkeiten, ...)-->
+ <base:LetzteAenderung>2004-01-26T00:00:00.000</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2004-01-26T00:00:00.000</base:Von>
+ <base:BeginnCode>AMKOR</base:BeginnCode>
+ <base:BeginnText>Amtliche Korrektur</base:BeginnText>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:GemeindeNr>09999</base:GemeindeNr>
+ </base:Organisation>
+ <base:Benutzer>test@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <base:ZMRZahl>000111111111</base:ZMRZahl>
+ <zmr:NatuerlichePerson>
+ <zmr:PersonenName>
+ <Vorname>Maximilian</Vorname>
+ <Familienname>Mustermann</Familienname>
+ </zmr:PersonenName>
+ <Geschlecht>männlich</Geschlecht>
+ <Geburtsdatum>2001-05-07</Geburtsdatum>
+ <Geburtsort>Wien</Geburtsort>
+ <Geburtsbundesland>Wien</Geburtsbundesland>
+ <Geburtsstaat>Österreich</Geburtsstaat>
+ <zmr:Staatsangehoerigkeit>
+ <ISOCode3>AUT</ISOCode3>
+ <StaatsnameDE>Österreich</StaatsnameDE>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>0000001</base:EntityID>
+ <base:LetzteAenderung>2003-01-01T00:00:00.000</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2003-01-01T00:00:00.000</base:Von>
+ <base:BeginnCode>REISEDOK_ANLEGEN</base:BeginnCode>
+ <base:BeginnText>Reisedokument anlegen</base:BeginnText>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:GemeindeNr>09999</base:GemeindeNr>
+ </base:Organisation>
+ <base:Benutzer>test@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ </zmr:Staatsangehoerigkeit>
+ </zmr:NatuerlichePerson>
+ </zmr:PersonErgebnis>
+ <zmr:PersonErgebnis>
+ <!-- historischer Personendaten Gesamtdatensatz (durch Vornamen-Änderung entstanden. Die Staatsagehörigkeit wurde nicht geändert und ist somit mit der im aktuellen Satz identisch-->
+ <base:ErgebnissatzInfo>
+ <base:LetzteAenderung>2004-01-26T00:00:00.000</base:LetzteAenderung>
+ </base:ErgebnissatzInfo>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>0000001</base:EntityID>
+ <base:LetzteAenderung>2004-01-26T00:00:00.000</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2003-01-01T00:00:00.000</base:Von>
+ <base:BeginnCode>GEBURT</base:BeginnCode>
+ <base:BeginnText>Geburt</base:BeginnText>
+ <base:Bis>2004-01-26T00:00:00.000</base:Bis>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:GemeindeNr>09999</base:GemeindeNr>
+ </base:Organisation>
+ <base:Benutzer>test@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <base:ZMRZahl>000111111111</base:ZMRZahl>
+ <zmr:NatuerlichePerson>
+ <zmr:PersonenName>
+ <Vorname>Hans</Vorname>
+ <Familienname>Mustermann</Familienname>
+ </zmr:PersonenName>
+ <Geschlecht>männlich</Geschlecht>
+ <Geburtsdatum>2001-05-07</Geburtsdatum>
+ <Geburtsort>Wien</Geburtsort>
+ <Geburtsbundesland>Wien</Geburtsbundesland>
+ <Geburtsstaat>Österreich</Geburtsstaat>
+ <zmr:Staatsangehoerigkeit>
+ <ISOCode3>AUT</ISOCode3>
+ <StaatsnameDE>Österreich</StaatsnameDE>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>0000001</base:EntityID>
+ <base:LetzteAenderung>2003-01-01T00:00:00.000</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2003-01-01T00:00:00.000</base:Von>
+ <base:BeginnCode>REISEDOK_ANLEGEN</base:BeginnCode>
+ <base:BeginnText>Reisedokument anlegen</base:BeginnText>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:GemeindeNr>09999</base:GemeindeNr>
+ </base:Organisation>
+ <base:Benutzer>test@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ </zmr:Staatsangehoerigkeit>
+ </zmr:NatuerlichePerson>
+ </zmr:PersonErgebnis>
+ </zmr:Personendaten>
+ <zmr:Meldedaten>
+ <!-- Historienliste einer Meldung. Nur ein MeldungErgebnis-Element, wenn nur aktuelle Daten -->
+ <zmr:MeldungErgebnis>
+ <base:ErgebnissatzInfo>
+ <!-- letzter Änderungs-Zeitpunkt des Meldung-Gesamtdatensatzes (mit Auskunftssperren, ...)-->
+ <base:LetzteAenderung>2004-01-26T00:00:00.000</base:LetzteAenderung>
+ </base:ErgebnissatzInfo>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>00000002</base:EntityID>
+ <!-- letzter Änderungs-Zeitpunkt der Meldung-Entity (ohne Auskunftssperren, ...)-->
+ <base:LetzteAenderung>2004-01-26T00:00:00.000</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2004-01-26T00:00:00.000</base:Von>
+ <base:BeginnCode>WSANM</base:BeginnCode>
+ <base:BeginnText>Wohnsitz anmelden</base:BeginnText>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:BehoerdenNr>099999</base:BehoerdenNr>
+ </base:Organisation>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <zmr:Wohnsitz>
+ <zmr:PostAdresse>
+ <Postleitzahl>1245</Postleitzahl>
+ <Gemeinde>Testgemeinde</Gemeinde>
+ <Gemeindekennziffer>09999</Gemeindekennziffer>
+ <Ortschaft>Testort</Ortschaft>
+ <zmr:Zustelladresse>
+ <Strassenname>Teststrasse</Strassenname>
+ <Orientierungsnummer>1</Orientierungsnummer>
+ <Wohnsitzqualitaet>H</Wohnsitzqualitaet>
+ </zmr:Zustelladresse>
+ </zmr:PostAdresse>
+ <base:Adressstatus>XXX000</base:Adressstatus>
+ </zmr:Wohnsitz>
+ <base:GemeldetVon>2004-01-26T00:00:00.000</base:GemeldetVon>
+ <base:PeriodeCode>WSANM</base:PeriodeCode>
+ <base:PeriodeText>Wohnsitz anmelden</base:PeriodeText>
+ </zmr:MeldungErgebnis>
+ </zmr:Meldedaten>
+ </zmr:PersonErgebnisSatz>
+ </zmr:PersonenAbfrageErgebnis>
+ </zmr:PersonenAbfrageResponse>
+ </base:Response>
+ </soap:Body>
+</soap:Envelope>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/personenabfrage/personenabfragedruckrequest.xml b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/personenabfrage/personenabfragedruckrequest.xml
new file mode 100644
index 00000000..2a6cc5e0
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/personenabfrage/personenabfragedruckrequest.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:zmr="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#" xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#" xmlns="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ ../../soapenv.xsd http://bmi.gv.at/namespace/zmr-su/base/20040201# ../../../xsd/allgemein/Service.xsd http://bmi.gv.at/namespace/zmr-su/zmr/20040201# ../../../xsd/zmr/ZMRProxy.xsd">
+<soap:Body>
+ <base:Request>
+ <base:WorkflowInfoClient>
+ <base:ProzessName>GP_Verknuepfungsanfrage</base:ProzessName>
+ <base:VorgangName>ZPR_VO_Person_abfragen_drucken</base:VorgangName>
+ </base:WorkflowInfoClient>
+ <base:ClientInfo>
+ <base:Organisation>
+ <base:BehoerdenNr>000000</base:BehoerdenNr>
+ </base:Organisation>
+ <base:Client>Test</base:Client>
+ </base:ClientInfo>
+ <zmr:PersonenAbfrageDruckRequest>
+ <base:EntityID>00001</base:EntityID>
+ <base:EntityID>00008</base:EntityID>
+ <base:EntityID>00003</base:EntityID>
+ </zmr:PersonenAbfrageDruckRequest>
+ </base:Request>
+ </soap:Body>
+</soap:Envelope> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/personenabfrage/personenabfragedruckresponse.xml b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/personenabfrage/personenabfragedruckresponse.xml
new file mode 100644
index 00000000..6463624b
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/personenabfrage/personenabfragedruckresponse.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:zmr="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#" xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#" xmlns="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ ../../soapenv.xsd http://bmi.gv.at/namespace/zmr-su/base/20040201# ../../../xsd/allgemein/Service.xsd http://bmi.gv.at/namespace/zmr-su/zmr/20040201# ../../../xsd/zmr/ZMRProxy.xsd">
+<soap:Body>
+ <base:Response>
+ <base:WorkflowInfoServer>
+ <base:ProzessName>GP_Verknuepfungsanfrage</base:ProzessName>
+ <base:ProzessInstanzID>1234</base:ProzessInstanzID>
+ <base:ProzessStatus>C</base:ProzessStatus>
+ <base:SequenzID>00034</base:SequenzID>
+ <base:Subprozess>
+ <base:VorgangName>ZPR_VO_Person_abfragen_drucken</base:VorgangName>
+ <base:VorgangStatus>C</base:VorgangStatus>
+ <base:Required>false</base:Required>
+ <base:Visible>true</base:Visible>
+ </base:Subprozess>
+ </base:WorkflowInfoServer>
+ <base:ServerInfo>
+ <base:GeneriertVon>ZMR Server</base:GeneriertVon>
+ <base:GeneriertAm>2004-01-26T00:00:00.000</base:GeneriertAm>
+ <base:ServerTransaktionNr>1234567</base:ServerTransaktionNr>
+ </base:ServerInfo>
+ <zmr:PersonenAbfrageDruckResponse>
+ <zmr:PersonenAbfrageAnfrage>
+ <zmr:PersonenAbfrageInfo>
+ <base:Bezugsfeld>Test</base:Bezugsfeld>
+ <zmr:Suchkriterien>
+ <base:InclusivHistorie>false</base:InclusivHistorie>
+ <base:Formalisiert>false</base:Formalisiert>
+ </zmr:Suchkriterien>
+ <zmr:Ergebniskriterien>
+ <base:InclusivHistorie>true</base:InclusivHistorie>
+ </zmr:Ergebniskriterien>
+ <base:AnzahlSaetze>10</base:AnzahlSaetze>
+ </zmr:PersonenAbfrageInfo>
+ <NatuerlichePerson>
+ <PersonenName>
+ <Vorname>Max</Vorname>
+ <Familienname>Mustermann</Familienname>
+ </PersonenName>
+ </NatuerlichePerson>
+ </zmr:PersonenAbfrageAnfrage>
+ <base:Message>
+ <base:Number>0003</base:Number>
+ <base:Text>Die Druckdaten wurden aufbereitet</base:Text>
+ </base:Message>
+ <zmr:PDFDaten>XXYY</zmr:PDFDaten>
+ </zmr:PersonenAbfrageDruckResponse>
+ </base:Response>
+ </soap:Body>
+</soap:Envelope>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/personenabfrage/personenabfragerequest.xml b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/personenabfrage/personenabfragerequest.xml
new file mode 100644
index 00000000..a856e8ab
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/personenabfrage/personenabfragerequest.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:zmr="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#" xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#" xmlns="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ ../../soapenv.xsd http://bmi.gv.at/namespace/zmr-su/base/20040201# ../../../xsd/allgemein/Service.xsd http://bmi.gv.at/namespace/zmr-su/zmr/20040201# ../../../xsd/zmr/ZMRProxy.xsd">
+<soap:Body>
+ <base:Request>
+ <base:WorkflowInfoClient>
+ <base:ProzessName>GP_Verknuepfungsanfrage</base:ProzessName>
+ <base:VorgangName>ZPR_VO_Person_abfragen</base:VorgangName>
+ </base:WorkflowInfoClient>
+ <base:ClientInfo>
+ <base:Organisation>
+ <base:BehoerdenNr>000000</base:BehoerdenNr>
+ </base:Organisation>
+ <base:Client>Test</base:Client>
+ </base:ClientInfo>
+ <zmr:PersonenAbfrageRequest>
+ <zmr:PersonenAbfrageInfo>
+ <base:Bezugsfeld>Test</base:Bezugsfeld>
+ <zmr:Suchkriterien>
+ <base:InclusivHistorie>false</base:InclusivHistorie>
+ <base:Formalisiert>false</base:Formalisiert>
+ </zmr:Suchkriterien>
+ <zmr:Ergebniskriterien>
+ <base:InclusivHistorie>true</base:InclusivHistorie>
+ </zmr:Ergebniskriterien>
+ <base:AnzahlSaetze>10</base:AnzahlSaetze>
+ </zmr:PersonenAbfrageInfo>
+ <NatuerlichePerson>
+ <PersonenName>
+ <Vorname>Max</Vorname>
+ <Familienname>Mustermann</Familienname>
+ </PersonenName>
+ </NatuerlichePerson>
+ </zmr:PersonenAbfrageRequest>
+ </base:Request>
+ </soap:Body>
+</soap:Envelope> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/personenabfrage/personenabfrageresponse.xml b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/personenabfrage/personenabfrageresponse.xml
new file mode 100644
index 00000000..70b6aef3
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/personenabfrage/personenabfrageresponse.xml
@@ -0,0 +1,209 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:zmr="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#" xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#" xmlns="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ ../../soapenv.xsd http://bmi.gv.at/namespace/zmr-su/base/20040201# ../../../xsd/allgemein/Service.xsd http://bmi.gv.at/namespace/zmr-su/zmr/20040201# ../../../xsd/zmr/ZMRProxy.xsd">
+<soap:Body>
+ <base:Response>
+ <base:WorkflowInfoServer>
+ <base:ProzessName>GP_Verknuepfungsanfrage</base:ProzessName>
+ <base:ProzessInstanzID>1234</base:ProzessInstanzID>
+ <base:ProzessStatus>A</base:ProzessStatus>
+ <base:SequenzID>00034</base:SequenzID>
+ <base:Subprozess>
+ <base:VorgangName>ZPR_VO_Person_abfragen</base:VorgangName>
+ <base:VorgangStatus>A</base:VorgangStatus>
+ <base:Required>false</base:Required>
+ <base:Visible>true</base:Visible>
+ </base:Subprozess>
+ </base:WorkflowInfoServer>
+ <base:ServerInfo>
+ <base:GeneriertVon>ZMR Server</base:GeneriertVon>
+ <base:GeneriertAm>2004-01-26T00:00:00.000</base:GeneriertAm>
+ <base:ServerTransaktionNr>1234567</base:ServerTransaktionNr>
+ </base:ServerInfo>
+ <zmr:PersonenAbfrageResponse>
+ <zmr:PersonenAbfrageAnfrage>
+ <zmr:PersonenAbfrageInfo>
+ <base:Bezugsfeld>Test</base:Bezugsfeld>
+ <zmr:Suchkriterien>
+ <base:InclusivHistorie>false</base:InclusivHistorie>
+ <base:Formalisiert>false</base:Formalisiert>
+ </zmr:Suchkriterien>
+ <zmr:Ergebniskriterien>
+ <base:InclusivHistorie>true</base:InclusivHistorie>
+ </zmr:Ergebniskriterien>
+ <base:AnzahlSaetze>10</base:AnzahlSaetze>
+ </zmr:PersonenAbfrageInfo>
+ <NatuerlichePerson>
+ <PersonenName>
+ <Vorname>Max</Vorname>
+ <Familienname>Mustermann</Familienname>
+ </PersonenName>
+ </NatuerlichePerson>
+ </zmr:PersonenAbfrageAnfrage>
+ <base:Message>
+ <base:Number>0003</base:Number>
+ <base:Text>Es wurde 1 Personen im ZMR gefunden</base:Text>
+ </base:Message>
+ <zmr:PersonenAbfrageErgebnis>
+ <base:GefundeneSaetze>1</base:GefundeneSaetze>
+ <base:SaetzeVon>0</base:SaetzeVon>
+ <base:SaetzeBis>1</base:SaetzeBis>
+ <zmr:PersonErgebnisSatz>
+ <!-- 1. gelieferte Person im Suchergebnis (Personendaten + Meldedaten, historisch und aktuell) -->
+ <zmr:Personendaten>
+ <!-- Historienliste der Personendaten. Nur ein PersonErgebnis-Element, wenn nur aktuelle Daten -->
+ <zmr:PersonErgebnis>
+ <!-- aktueller Personendaten Gesamtdatensatz -->
+ <base:ErgebnissatzInfo>
+ <!-- letzter Änderungs-Zeitpunkt des Person-Gesamtdatensatzes (mit Staatsangehörigkeiten, ...)-->
+ <base:LetzteAenderung>2004-01-26T00:00:00.000</base:LetzteAenderung>
+ </base:ErgebnissatzInfo>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>0000001</base:EntityID>
+ <!-- letzter Änderungs-Zeitpunkt der Person-Entity (ohne Staatsangehörigkeiten, ...)-->
+ <base:LetzteAenderung>2004-01-26T00:00:00.000</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2004-01-26T00:00:00.000</base:Von>
+ <base:BeginnCode>AMKOR</base:BeginnCode>
+ <base:BeginnText>Amtliche Korrektur</base:BeginnText>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:GemeindeNr>09999</base:GemeindeNr>
+ </base:Organisation>
+ <base:Benutzer>test@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <base:ZMRZahl>000111111111</base:ZMRZahl>
+ <zmr:NatuerlichePerson>
+ <zmr:PersonenName>
+ <Vorname>Maximilian</Vorname>
+ <Familienname>Mustermann</Familienname>
+ </zmr:PersonenName>
+ <Geschlecht>männlich</Geschlecht>
+ <Geburtsdatum>2001-05-07</Geburtsdatum>
+ <Geburtsort>Wien</Geburtsort>
+ <Geburtsbundesland>Wien</Geburtsbundesland>
+ <Geburtsstaat>Österreich</Geburtsstaat>
+ <zmr:Staatsangehoerigkeit>
+ <ISOCode3>AUT</ISOCode3>
+ <StaatsnameDE>Österreich</StaatsnameDE>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>0000001</base:EntityID>
+ <base:LetzteAenderung>2003-01-01T00:00:00.000</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2003-01-01T00:00:00.000</base:Von>
+ <base:BeginnCode>REISEDOK_ANLEGEN</base:BeginnCode>
+ <base:BeginnText>Reisedokument anlegen</base:BeginnText>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:GemeindeNr>09999</base:GemeindeNr>
+ </base:Organisation>
+ <base:Benutzer>test@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ </zmr:Staatsangehoerigkeit>
+ </zmr:NatuerlichePerson>
+ </zmr:PersonErgebnis>
+ <zmr:PersonErgebnis>
+ <!-- historischer Personendaten Gesamtdatensatz (durch Vornamen-Änderung entstanden. Die Staatsagehörigkeit wurde nicht geändert und ist somit mit der im aktuellen Satz identisch-->
+ <base:ErgebnissatzInfo>
+ <base:LetzteAenderung>2004-01-26T00:00:00.000</base:LetzteAenderung>
+ </base:ErgebnissatzInfo>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>0000001</base:EntityID>
+ <base:LetzteAenderung>2004-01-26T00:00:00.000</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2003-01-01T00:00:00.000</base:Von>
+ <base:BeginnCode>GEBURT</base:BeginnCode>
+ <base:BeginnText>Geburt</base:BeginnText>
+ <base:Bis>2004-01-26T00:00:00.000</base:Bis>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:GemeindeNr>09999</base:GemeindeNr>
+ </base:Organisation>
+ <base:Benutzer>test@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <base:ZMRZahl>000111111111</base:ZMRZahl>
+ <zmr:NatuerlichePerson>
+ <zmr:PersonenName>
+ <Vorname>Hans</Vorname>
+ <Familienname>Mustermann</Familienname>
+ </zmr:PersonenName>
+ <Geschlecht>männlich</Geschlecht>
+ <Geburtsdatum>2001-05-07</Geburtsdatum>
+ <Geburtsort>Wien</Geburtsort>
+ <Geburtsbundesland>Wien</Geburtsbundesland>
+ <Geburtsstaat>Österreich</Geburtsstaat>
+ <zmr:Staatsangehoerigkeit>
+ <ISOCode3>AUT</ISOCode3>
+ <StaatsnameDE>Österreich</StaatsnameDE>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>0000001</base:EntityID>
+ <base:LetzteAenderung>2003-01-01T00:00:00.000</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2003-01-01T00:00:00.000</base:Von>
+ <base:BeginnCode>REISEDOK_ANLEGEN</base:BeginnCode>
+ <base:BeginnText>Reisedokument anlegen</base:BeginnText>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:GemeindeNr>09999</base:GemeindeNr>
+ </base:Organisation>
+ <base:Benutzer>test@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ </zmr:Staatsangehoerigkeit>
+ </zmr:NatuerlichePerson>
+ </zmr:PersonErgebnis>
+ </zmr:Personendaten>
+ <zmr:Meldedaten>
+ <!-- Historienliste einer Meldung. Nur ein MeldungErgebnis-Element, wenn nur aktuelle Daten -->
+ <zmr:MeldungErgebnis>
+ <base:ErgebnissatzInfo>
+ <!-- letzter Änderungs-Zeitpunkt des Meldung-Gesamtdatensatzes (mit Auskunftssperren, ...)-->
+ <base:LetzteAenderung>2004-01-26T00:00:00.000</base:LetzteAenderung>
+ </base:ErgebnissatzInfo>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>00000002</base:EntityID>
+ <!-- letzter Änderungs-Zeitpunkt der Meldung-Entity (ohne Auskunftssperren, ...)-->
+ <base:LetzteAenderung>2004-01-26T00:00:00.000</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2004-01-26T00:00:00.000</base:Von>
+ <base:BeginnCode>WSANM</base:BeginnCode>
+ <base:BeginnText>Wohnsitz anmelden</base:BeginnText>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:BehoerdenNr>099999</base:BehoerdenNr>
+ </base:Organisation>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <zmr:Wohnsitz>
+ <zmr:PostAdresse>
+ <Postleitzahl>1245</Postleitzahl>
+ <Gemeinde>Testgemeinde</Gemeinde>
+ <Gemeindekennziffer>09999</Gemeindekennziffer>
+ <Ortschaft>Testort</Ortschaft>
+ <zmr:Zustelladresse>
+ <Strassenname>Teststrasse</Strassenname>
+ <Orientierungsnummer>1</Orientierungsnummer>
+ <Wohnsitzqualitaet>H</Wohnsitzqualitaet>
+ </zmr:Zustelladresse>
+ </zmr:PostAdresse>
+ <base:Adressstatus>XXX000</base:Adressstatus>
+ </zmr:Wohnsitz>
+ <base:GemeldetVon>2004-01-26T00:00:00.000</base:GemeldetVon>
+ <base:PeriodeCode>WSANM</base:PeriodeCode>
+ <base:PeriodeText>Wohnsitz anmelden</base:PeriodeText>
+ </zmr:MeldungErgebnis>
+ </zmr:Meldedaten>
+ </zmr:PersonErgebnisSatz>
+ </zmr:PersonenAbfrageErgebnis>
+ </zmr:PersonenAbfrageResponse>
+ </base:Response>
+ </soap:Body>
+</soap:Envelope>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/personensuche/blaetternrequest.xml b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/personensuche/blaetternrequest.xml
new file mode 100644
index 00000000..4458527e
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/personensuche/blaetternrequest.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:zmr="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#" xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#" xmlns="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ ../../soapenv.xsd http://bmi.gv.at/namespace/zmr-su/base/20040201# ../../../xsd/allgemein/Service.xsd http://bmi.gv.at/namespace/zmr-su/zmr/20040201# ../../../xsd/zmr/ZMRProxy.xsd">
+<soap:Body>
+ <base:Request>
+ <base:WorkflowInfoClient>
+ <base:ProzessName>GP_Person_suchen_Meldevorgang</base:ProzessName>
+ <base:ProzessInstanzID>1234</base:ProzessInstanzID>
+ <!-- Die InstanzID der laufenden Prozesses muss hier übermittelt werden, um die Suche fortzusetzen (aus WorkflowInfoServer des ersten Suchergebnisses-->
+ <base:SequenzID>00034</base:SequenzID>
+ <base:VorgangName>ZPR_VO_Person_suchen_Meldevorgang</base:VorgangName>
+ </base:WorkflowInfoClient>
+ <base:ClientInfo>
+ <base:Organisation>
+ <base:BehoerdenNr>000000</base:BehoerdenNr>
+ </base:Organisation>
+ <base:Client>Test</base:Client>
+ </base:ClientInfo>
+ <base:BlaetternRequest>
+ <base:BlaetternInfo>
+ <base:Richtung>Vor</base:Richtung>
+ <base:AnzahlSaetze>3</base:AnzahlSaetze>
+ </base:BlaetternInfo>
+ </base:BlaetternRequest>
+ </base:Request>
+ </soap:Body>
+</soap:Envelope>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/personensuche/blaetternresponse.xml b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/personensuche/blaetternresponse.xml
new file mode 100644
index 00000000..f082c3cc
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/personensuche/blaetternresponse.xml
@@ -0,0 +1,210 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:zmr="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#" xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#" xmlns="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ ../../soapenv.xsd http://bmi.gv.at/namespace/zmr-su/base/20040201# ../../../xsd/allgemein/Service.xsd http://bmi.gv.at/namespace/zmr-su/zmr/20040201# ../../../xsd/zmr/ZMRProxy.xsd">
+<soap:Body>
+ <base:Response>
+ <base:WorkflowInfoServer>
+ <base:ProzessName>GP_Person_suchen_Meldevorgang</base:ProzessName>
+ <base:ProzessInstanzID>1234</base:ProzessInstanzID>
+ <base:ProzessStatus>A</base:ProzessStatus>
+ <base:SequenzID>00034</base:SequenzID>
+ <base:Subprozess>
+ <base:VorgangName>ZPR_VO_Person_suchen_Meldevorgang</base:VorgangName>
+ <base:VorgangStatus>A</base:VorgangStatus>
+ <base:Required>false</base:Required>
+ <base:Visible>true</base:Visible>
+ </base:Subprozess>
+ </base:WorkflowInfoServer>
+ <base:ServerInfo>
+ <base:GeneriertVon>ZMR Server</base:GeneriertVon>
+ <base:GeneriertAm>2004-01-26T00:00:00.000</base:GeneriertAm>
+ <base:ServerTransaktionNr>1234567</base:ServerTransaktionNr>
+ </base:ServerInfo>
+ <zmr:PersonenAbfrageResponse>
+ <zmr:PersonenAbfrageAnfrage>
+ <zmr:PersonenAbfrageInfo>
+ <base:Bezugsfeld>Test</base:Bezugsfeld>
+ <zmr:Suchkriterien>
+ <base:InclusivHistorie>false</base:InclusivHistorie>
+ <base:Formalisiert>false</base:Formalisiert>
+ </zmr:Suchkriterien>
+ <zmr:Ergebniskriterien>
+ <base:InclusivHistorie>true</base:InclusivHistorie>
+ </zmr:Ergebniskriterien>
+ <base:AnzahlSaetze>10</base:AnzahlSaetze>
+ </zmr:PersonenAbfrageInfo>
+ <NatuerlichePerson>
+ <PersonenName>
+ <Vorname>Max</Vorname>
+ <Familienname>Mustermann</Familienname>
+ </PersonenName>
+ </NatuerlichePerson>
+ </zmr:PersonenAbfrageAnfrage>
+ <base:Message>
+ <base:Number>0003</base:Number>
+ <base:Text>Es wurde 1 Personen im ZMR gefunden</base:Text>
+ </base:Message>
+ <zmr:PersonenAbfrageErgebnis>
+ <base:GefundeneSaetze>4</base:GefundeneSaetze>
+ <base:SaetzeVon>3</base:SaetzeVon>
+ <!-- Es wurde weitergeblättert - der letzte Satz wird geliefert -->
+ <base:SaetzeBis>4</base:SaetzeBis>
+ <zmr:PersonErgebnisSatz>
+ <!-- 1. gelieferte Person im Suchergebnis (Personendaten + Meldedaten, historisch und aktuell) -->
+ <zmr:Personendaten>
+ <!-- Historienliste der Personendaten. Nur ein PersonErgebnis-Element, wenn nur aktuelle Daten -->
+ <zmr:PersonErgebnis>
+ <!-- aktueller Personendaten Gesamtdatensatz -->
+ <base:ErgebnissatzInfo>
+ <!-- letzter Änderungs-Zeitpunkt des Person-Gesamtdatensatzes (mit Staatsangehörigkeiten, ...)-->
+ <base:LetzteAenderung>2004-01-26T00:00:00.000</base:LetzteAenderung>
+ </base:ErgebnissatzInfo>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>0000001</base:EntityID>
+ <!-- letzter Änderungs-Zeitpunkt der Person-Entity (ohne Staatsangehörigkeiten, ...)-->
+ <base:LetzteAenderung>2004-01-26T00:00:00.000</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2004-01-26T00:00:00.000</base:Von>
+ <base:BeginnCode>AMKOR</base:BeginnCode>
+ <base:BeginnText>Amtliche Korrektur</base:BeginnText>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:GemeindeNr>09999</base:GemeindeNr>
+ </base:Organisation>
+ <base:Benutzer>test@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <base:ZMRZahl>000111111111</base:ZMRZahl>
+ <zmr:NatuerlichePerson>
+ <zmr:PersonenName>
+ <Vorname>Maximilian</Vorname>
+ <Familienname>Mustermann</Familienname>
+ </zmr:PersonenName>
+ <Geschlecht>männlich</Geschlecht>
+ <Geburtsdatum>2001-05-07</Geburtsdatum>
+ <Geburtsort>Wien</Geburtsort>
+ <Geburtsbundesland>Wien</Geburtsbundesland>
+ <Geburtsstaat>Österreich</Geburtsstaat>
+ <zmr:Staatsangehoerigkeit>
+ <ISOCode3>AUT</ISOCode3>
+ <StaatsnameDE>Österreich</StaatsnameDE>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>0000001</base:EntityID>
+ <base:LetzteAenderung>2003-01-01T00:00:00.000</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2003-01-01T00:00:00.000</base:Von>
+ <base:BeginnCode>REISEDOK_ANLEGEN</base:BeginnCode>
+ <base:BeginnText>Reisedokument anlegen</base:BeginnText>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:GemeindeNr>09999</base:GemeindeNr>
+ </base:Organisation>
+ <base:Benutzer>test@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ </zmr:Staatsangehoerigkeit>
+ </zmr:NatuerlichePerson>
+ </zmr:PersonErgebnis>
+ <zmr:PersonErgebnis>
+ <!-- historischer Personendaten Gesamtdatensatz (durch Vornamen-Änderung entstanden. Die Staatsagehörigkeit wurde nicht geändert und ist somit mit der im aktuellen Satz identisch-->
+ <base:ErgebnissatzInfo>
+ <base:LetzteAenderung>2004-01-26T00:00:00.000</base:LetzteAenderung>
+ </base:ErgebnissatzInfo>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>0000001</base:EntityID>
+ <base:LetzteAenderung>2004-01-26T00:00:00.000</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2003-01-01T00:00:00.000</base:Von>
+ <base:BeginnCode>GEBURT</base:BeginnCode>
+ <base:BeginnText>Geburt</base:BeginnText>
+ <base:Bis>2004-01-26T00:00:00.000</base:Bis>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:GemeindeNr>09999</base:GemeindeNr>
+ </base:Organisation>
+ <base:Benutzer>test@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <base:ZMRZahl>000111111111</base:ZMRZahl>
+ <zmr:NatuerlichePerson>
+ <zmr:PersonenName>
+ <Vorname>Hans</Vorname>
+ <Familienname>Mustermann</Familienname>
+ </zmr:PersonenName>
+ <Geschlecht>männlich</Geschlecht>
+ <Geburtsdatum>2001-05-07</Geburtsdatum>
+ <Geburtsort>Wien</Geburtsort>
+ <Geburtsbundesland>Wien</Geburtsbundesland>
+ <Geburtsstaat>Österreich</Geburtsstaat>
+ <zmr:Staatsangehoerigkeit>
+ <ISOCode3>AUT</ISOCode3>
+ <StaatsnameDE>Österreich</StaatsnameDE>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>0000001</base:EntityID>
+ <base:LetzteAenderung>2003-01-01T00:00:00.000</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2003-01-01T00:00:00.000</base:Von>
+ <base:BeginnCode>REISEDOK_ANLEGEN</base:BeginnCode>
+ <base:BeginnText>Reisedokument anlegen</base:BeginnText>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:GemeindeNr>09999</base:GemeindeNr>
+ </base:Organisation>
+ <base:Benutzer>test@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ </zmr:Staatsangehoerigkeit>
+ </zmr:NatuerlichePerson>
+ </zmr:PersonErgebnis>
+ </zmr:Personendaten>
+ <zmr:Meldedaten>
+ <!-- Historienliste einer Meldung. Nur ein MeldungErgebnis-Element, wenn nur aktuelle Daten -->
+ <zmr:MeldungErgebnis>
+ <base:ErgebnissatzInfo>
+ <!-- letzter Änderungs-Zeitpunkt des Meldung-Gesamtdatensatzes (mit Auskunftssperren, ...)-->
+ <base:LetzteAenderung>2004-01-26T00:00:00.000</base:LetzteAenderung>
+ </base:ErgebnissatzInfo>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>00000002</base:EntityID>
+ <!-- letzter Änderungs-Zeitpunkt der Meldung-Entity (ohne Auskunftssperren, ...)-->
+ <base:LetzteAenderung>2004-01-26T00:00:00.000</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2004-01-26T00:00:00.000</base:Von>
+ <base:BeginnCode>WSANM</base:BeginnCode>
+ <base:BeginnText>Wohnsitz anmelden</base:BeginnText>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:BehoerdenNr>099999</base:BehoerdenNr>
+ </base:Organisation>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <zmr:Wohnsitz>
+ <zmr:PostAdresse>
+ <Postleitzahl>1245</Postleitzahl>
+ <Gemeinde>Testgemeinde</Gemeinde>
+ <Gemeindekennziffer>09999</Gemeindekennziffer>
+ <Ortschaft>Testort</Ortschaft>
+ <zmr:Zustelladresse>
+ <Strassenname>Teststrasse</Strassenname>
+ <Orientierungsnummer>1</Orientierungsnummer>
+ <Wohnsitzqualitaet>H</Wohnsitzqualitaet>
+ </zmr:Zustelladresse>
+ </zmr:PostAdresse>
+ <base:Adressstatus>XXX000</base:Adressstatus>
+ </zmr:Wohnsitz>
+ <base:GemeldetVon>2004-01-26T00:00:00.000</base:GemeldetVon>
+ <base:PeriodeCode>WSANM</base:PeriodeCode>
+ <base:PeriodeText>Wohnsitz anmelden</base:PeriodeText>
+ </zmr:MeldungErgebnis>
+ </zmr:Meldedaten>
+ </zmr:PersonErgebnisSatz>
+ </zmr:PersonenAbfrageErgebnis>
+ </zmr:PersonenAbfrageResponse>
+ </base:Response>
+ </soap:Body>
+</soap:Envelope>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/personensuche/personensucherequest.xml b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/personensuche/personensucherequest.xml
new file mode 100644
index 00000000..ca8bf47e
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/personensuche/personensucherequest.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:zmr="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#" xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#" xmlns="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ ../../soapenv.xsd http://bmi.gv.at/namespace/zmr-su/base/20040201# ../../../xsd/allgemein/Service.xsd http://bmi.gv.at/namespace/zmr-su/zmr/20040201# ../../../xsd/zmr/ZMRProxy.xsd">
+<soap:Body>
+ <base:Request>
+ <base:WorkflowInfoClient>
+ <base:ProzessName>GP_Person_suchen_Meldevorgang</base:ProzessName>
+ <base:VorgangName>ZPR_VO_Person_suchen_Meldevorgang</base:VorgangName>
+ </base:WorkflowInfoClient>
+ <base:ClientInfo>
+ <base:Organisation>
+ <base:BehoerdenNr>000000</base:BehoerdenNr>
+ </base:Organisation>
+ <base:Client>Test</base:Client>
+ </base:ClientInfo>
+ <zmr:PersonSuchenRequest>
+ <zmr:PersonensucheInfo>
+ <base:Bezugsfeld>Test</base:Bezugsfeld>
+ <zmr:Suchkriterien>
+ <base:InclusivHistorie>false</base:InclusivHistorie>
+ <base:Formalisiert>false</base:Formalisiert>
+ </zmr:Suchkriterien>
+ <zmr:Ergebniskriterien>
+ <base:InclusivHistorie>true</base:InclusivHistorie>
+ </zmr:Ergebniskriterien>
+ <base:AnzahlSaetze>10</base:AnzahlSaetze>
+ </zmr:PersonensucheInfo>
+ <NatuerlichePerson>
+ <PersonenName>
+ <Vorname>Max</Vorname>
+ <Familienname>Mustermann</Familienname>
+ </PersonenName>
+ </NatuerlichePerson>
+ </zmr:PersonSuchenRequest>
+ </base:Request>
+ </soap:Body>
+</soap:Envelope> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/personensuche/personensucheresponse.xml b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/personensuche/personensucheresponse.xml
new file mode 100644
index 00000000..5a2526fa
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/personensuche/personensucheresponse.xml
@@ -0,0 +1,209 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:zmr="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#" xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#" xmlns="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ ../../soapenv.xsd http://bmi.gv.at/namespace/zmr-su/base/20040201# ../../../xsd/allgemein/Service.xsd http://bmi.gv.at/namespace/zmr-su/zmr/20040201# ../../../xsd/zmr/ZMRProxy.xsd">
+<soap:Body>
+ <base:Response>
+ <base:WorkflowInfoServer>
+ <base:ProzessName>GP_Person_suchen_Meldevorgang</base:ProzessName>
+ <base:ProzessInstanzID>1234</base:ProzessInstanzID>
+ <base:ProzessStatus>A</base:ProzessStatus>
+ <base:SequenzID>00034</base:SequenzID>
+ <base:Subprozess>
+ <base:VorgangName>ZPR_VO_Person_suchen_Meldevorgang</base:VorgangName>
+ <base:VorgangStatus>A</base:VorgangStatus>
+ <base:Required>false</base:Required>
+ <base:Visible>true</base:Visible>
+ </base:Subprozess>
+ </base:WorkflowInfoServer>
+ <base:ServerInfo>
+ <base:GeneriertVon>ZMR Server</base:GeneriertVon>
+ <base:GeneriertAm>2004-01-26T00:00:00.000</base:GeneriertAm>
+ <base:ServerTransaktionNr>1234567</base:ServerTransaktionNr>
+ </base:ServerInfo>
+ <zmr:PersonSuchenResponse>
+ <zmr:PersonensucheAnfrage>
+ <zmr:PersonensucheInfo>
+ <base:Bezugsfeld>Test</base:Bezugsfeld>
+ <zmr:Suchkriterien>
+ <base:InclusivHistorie>false</base:InclusivHistorie>
+ <base:Formalisiert>false</base:Formalisiert>
+ </zmr:Suchkriterien>
+ <zmr:Ergebniskriterien>
+ <base:InclusivHistorie>true</base:InclusivHistorie>
+ </zmr:Ergebniskriterien>
+ <base:AnzahlSaetze>10</base:AnzahlSaetze>
+ </zmr:PersonensucheInfo>
+ <NatuerlichePerson>
+ <PersonenName>
+ <Vorname>Max</Vorname>
+ <Familienname>Mustermann</Familienname>
+ </PersonenName>
+ </NatuerlichePerson>
+ </zmr:PersonensucheAnfrage>
+ <base:Message>
+ <base:Number>0003</base:Number>
+ <base:Text>Es wurde 1 Personen im ZMR gefunden</base:Text>
+ </base:Message>
+ <zmr:Personensuchergebnis>
+ <base:GefundeneSaetze>1</base:GefundeneSaetze>
+ <base:SaetzeVon>0</base:SaetzeVon>
+ <base:SaetzeBis>1</base:SaetzeBis>
+ <zmr:PersonErgebnisSatz>
+ <!-- 1. gelieferte Person im Suchergebnis (Personendaten + Meldedaten, historisch und aktuell) -->
+ <zmr:Personendaten>
+ <!-- Historienliste der Personendaten. Nur ein PersonErgebnis-Element, wenn nur aktuelle Daten -->
+ <zmr:PersonErgebnis>
+ <!-- aktueller Personendaten Gesamtdatensatz -->
+ <base:ErgebnissatzInfo>
+ <!-- letzter Änderungs-Zeitpunkt des Person-Gesamtdatensatzes (mit Staatsangehörigkeiten, ...)-->
+ <base:LetzteAenderung>2004-01-26T00:00:00.000</base:LetzteAenderung>
+ </base:ErgebnissatzInfo>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>0000001</base:EntityID>
+ <!-- letzter Änderungs-Zeitpunkt der Person-Entity (ohne Staatsangehörigkeiten, ...)-->
+ <base:LetzteAenderung>2004-01-26T00:00:00.000</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2004-01-26T00:00:00.000</base:Von>
+ <base:BeginnCode>AMKOR</base:BeginnCode>
+ <base:BeginnText>Amtliche Korrektur</base:BeginnText>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:GemeindeNr>09999</base:GemeindeNr>
+ </base:Organisation>
+ <base:Benutzer>test@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <base:ZMRZahl>000111111111</base:ZMRZahl>
+ <zmr:NatuerlichePerson>
+ <zmr:PersonenName>
+ <Vorname>Maximilian</Vorname>
+ <Familienname>Mustermann</Familienname>
+ </zmr:PersonenName>
+ <Geschlecht>männlich</Geschlecht>
+ <Geburtsdatum>2001-05-07</Geburtsdatum>
+ <Geburtsort>Wien</Geburtsort>
+ <Geburtsbundesland>Wien</Geburtsbundesland>
+ <Geburtsstaat>Österreich</Geburtsstaat>
+ <zmr:Staatsangehoerigkeit>
+ <ISOCode3>AUT</ISOCode3>
+ <StaatsnameDE>Österreich</StaatsnameDE>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>0000001</base:EntityID>
+ <base:LetzteAenderung>2003-01-01T00:00:00.000</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2003-01-01T00:00:00.000</base:Von>
+ <base:BeginnCode>REISEDOK_ANLEGEN</base:BeginnCode>
+ <base:BeginnText>Reisedokument anlegen</base:BeginnText>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:GemeindeNr>09999</base:GemeindeNr>
+ </base:Organisation>
+ <base:Benutzer>test@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ </zmr:Staatsangehoerigkeit>
+ </zmr:NatuerlichePerson>
+ </zmr:PersonErgebnis>
+ <zmr:PersonErgebnis>
+ <!-- historischer Personendaten Gesamtdatensatz (durch Vornamen-Änderung entstanden. Die Staatsagehörigkeit wurde nicht geändert und ist somit mit der im aktuellen Satz identisch-->
+ <base:ErgebnissatzInfo>
+ <base:LetzteAenderung>2004-01-26T00:00:00.000</base:LetzteAenderung>
+ </base:ErgebnissatzInfo>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>0000001</base:EntityID>
+ <base:LetzteAenderung>2004-01-26T00:00:00.000</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2003-01-01T00:00:00.000</base:Von>
+ <base:BeginnCode>GEBURT</base:BeginnCode>
+ <base:BeginnText>Geburt</base:BeginnText>
+ <base:Bis>2004-01-26T00:00:00.000</base:Bis>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:GemeindeNr>09999</base:GemeindeNr>
+ </base:Organisation>
+ <base:Benutzer>test@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <base:ZMRZahl>000111111111</base:ZMRZahl>
+ <zmr:NatuerlichePerson>
+ <zmr:PersonenName>
+ <Vorname>Hans</Vorname>
+ <Familienname>Mustermann</Familienname>
+ </zmr:PersonenName>
+ <Geschlecht>männlich</Geschlecht>
+ <Geburtsdatum>2001-05-07</Geburtsdatum>
+ <Geburtsort>Wien</Geburtsort>
+ <Geburtsbundesland>Wien</Geburtsbundesland>
+ <Geburtsstaat>Österreich</Geburtsstaat>
+ <zmr:Staatsangehoerigkeit>
+ <ISOCode3>AUT</ISOCode3>
+ <StaatsnameDE>Österreich</StaatsnameDE>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>0000001</base:EntityID>
+ <base:LetzteAenderung>2003-01-01T00:00:00.000</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2003-01-01T00:00:00.000</base:Von>
+ <base:BeginnCode>REISEDOK_ANLEGEN</base:BeginnCode>
+ <base:BeginnText>Reisedokument anlegen</base:BeginnText>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:GemeindeNr>09999</base:GemeindeNr>
+ </base:Organisation>
+ <base:Benutzer>test@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ </zmr:Staatsangehoerigkeit>
+ </zmr:NatuerlichePerson>
+ </zmr:PersonErgebnis>
+ </zmr:Personendaten>
+ <zmr:Meldedaten>
+ <!-- Historienliste einer Meldung. Nur ein MeldungErgebnis-Element, wenn nur aktuelle Daten -->
+ <zmr:MeldungErgebnis>
+ <base:ErgebnissatzInfo>
+ <!-- letzter Änderungs-Zeitpunkt des Meldung-Gesamtdatensatzes (mit Auskunftssperren, ...)-->
+ <base:LetzteAenderung>2004-01-26T00:00:00.000</base:LetzteAenderung>
+ </base:ErgebnissatzInfo>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>00000002</base:EntityID>
+ <!-- letzter Änderungs-Zeitpunkt der Meldung-Entity (ohne Auskunftssperren, ...)-->
+ <base:LetzteAenderung>2004-01-26T00:00:00.000</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2004-01-26T00:00:00.000</base:Von>
+ <base:BeginnCode>WSANM</base:BeginnCode>
+ <base:BeginnText>Wohnsitz anmelden</base:BeginnText>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:BehoerdenNr>099999</base:BehoerdenNr>
+ </base:Organisation>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <zmr:Wohnsitz>
+ <zmr:PostAdresse>
+ <Postleitzahl>1245</Postleitzahl>
+ <Gemeinde>Testgemeinde</Gemeinde>
+ <Gemeindekennziffer>09999</Gemeindekennziffer>
+ <Ortschaft>Testort</Ortschaft>
+ <zmr:Zustelladresse>
+ <Strassenname>Teststrasse</Strassenname>
+ <Orientierungsnummer>1</Orientierungsnummer>
+ <Wohnsitzqualitaet>H</Wohnsitzqualitaet>
+ </zmr:Zustelladresse>
+ </zmr:PostAdresse>
+ <base:Adressstatus>XXX000</base:Adressstatus>
+ </zmr:Wohnsitz>
+ <base:GemeldetVon>2004-01-26T00:00:00.000</base:GemeldetVon>
+ <base:PeriodeCode>WSANM</base:PeriodeCode>
+ <base:PeriodeText>Wohnsitz anmelden</base:PeriodeText>
+ </zmr:MeldungErgebnis>
+ </zmr:Meldedaten>
+ </zmr:PersonErgebnisSatz>
+ </zmr:Personensuchergebnis>
+ </zmr:PersonSuchenResponse>
+ </base:Response>
+ </soap:Body>
+</soap:Envelope>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/persontrennen/persontrennenrequest.xml b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/persontrennen/persontrennenrequest.xml
new file mode 100644
index 00000000..82643121
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/persontrennen/persontrennenrequest.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:zmr="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#" xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#" xmlns="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ ../../soapenv.xsd http://bmi.gv.at/namespace/zmr-su/base/20040201# ../../../xsd/allgemein/Service.xsd http://bmi.gv.at/namespace/zmr-su/zmr/20040201# ../../../xsd/zmr/ZMRProxy.xsd">
+<soap:Body>
+ <base:Request>
+ <base:WorkflowInfoClient>
+ <base:ProzessName>GP_Person_trennen</base:ProzessName>
+ <base:ProzessInstanzID>1234</base:ProzessInstanzID>
+ <!-- Die InstanzID der laufenden Prozesses muss hier übermittelt werden, um die Suche fortzusetzen (aus WorkflowInfoServer des ersten Suchergebnisses-->
+ <base:SequenzID>11111</base:SequenzID>
+ <base:VorgangName>ZPR_VO_Person_trennen_durchfuehren</base:VorgangName>
+ </base:WorkflowInfoClient>
+ <base:ClientInfo>
+ <base:Organisation>
+ <base:BehoerdenNr>000000</base:BehoerdenNr>
+ </base:Organisation>
+ <base:Client>Test</base:Client>
+ </base:ClientInfo>
+ <zmr:PersonTrennenRequest>
+ <zmr:PersonReferenz>
+ <base:Technisch>
+ <base:EntityID>123</base:EntityID>
+ <base:LetzteAenderung>2004-01-01T00:00:00.000</base:LetzteAenderung>
+ </base:Technisch>
+ <base:ZMRZahl>000111111111</base:ZMRZahl>
+ </zmr:PersonReferenz>
+ <zmr:MeldungReferenz>
+ <base:Technisch>
+ <base:EntityID>1234</base:EntityID>
+ <base:LetzteAenderung>2004-01-01T00:00:00.000</base:LetzteAenderung>
+ </base:Technisch>
+ <Wohnsitzqualitaet>N</Wohnsitzqualitaet>
+ </zmr:MeldungReferenz>
+ </zmr:PersonTrennenRequest>
+ </base:Request>
+ </soap:Body>
+</soap:Envelope> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/persontrennen/persontrennensucherequest.xml b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/persontrennen/persontrennensucherequest.xml
new file mode 100644
index 00000000..2ab231dd
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/persontrennen/persontrennensucherequest.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:zmr="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#" xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#" xmlns="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ ../../soapenv.xsd http://bmi.gv.at/namespace/zmr-su/base/20040201# ../../../xsd/allgemein/Service.xsd http://bmi.gv.at/namespace/zmr-su/zmr/20040201# ../../../xsd/zmr/ZMRProxy.xsd">
+<soap:Body>
+ <base:Request>
+ <base:WorkflowInfoClient>
+ <base:ProzessName>GP_Person_trennen</base:ProzessName>
+ <base:VorgangName>ZPR_VO_Person_trennen_darstellen</base:VorgangName>
+ </base:WorkflowInfoClient>
+ <base:ClientInfo>
+ <base:Organisation>
+ <base:BehoerdenNr>000000</base:BehoerdenNr>
+ </base:Organisation>
+ <base:Client>Test</base:Client>
+ </base:ClientInfo>
+ <zmr:PersonTrennenSucheRequest>
+ <base:ZMRZahl>000111111111</base:ZMRZahl>
+ </zmr:PersonTrennenSucheRequest>
+ </base:Request>
+ </soap:Body>
+</soap:Envelope> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/personzusammenfuehren/personzusammenfuehrenrequest.xml b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/personzusammenfuehren/personzusammenfuehrenrequest.xml
new file mode 100644
index 00000000..0442b0e0
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/personzusammenfuehren/personzusammenfuehrenrequest.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:zmr="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#" xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#" xmlns="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ ../../soapenv.xsd http://bmi.gv.at/namespace/zmr-su/base/20040201# ../../../xsd/allgemein/Service.xsd http://bmi.gv.at/namespace/zmr-su/zmr/20040201# ../../../xsd/zmr/ZMRProxy.xsd">
+<soap:Body>
+ <base:Request>
+ <base:WorkflowInfoClient>
+ <base:ProzessName>GP_Person_zusammenfuehren</base:ProzessName>
+ <base:ProzessInstanzID>1234</base:ProzessInstanzID>
+ <!-- Die InstanzID der laufenden Prozesses muss hier übermittelt werden, um die Suche fortzusetzen (aus WorkflowInfoServer des ersten Suchergebnisses-->
+ <base:SequenzID>11111</base:SequenzID>
+ <base:VorgangName>ZPR_VO_Person_zusammenfuehren_durchfuehren</base:VorgangName>
+ </base:WorkflowInfoClient>
+ <base:ClientInfo>
+ <base:Organisation>
+ <base:BehoerdenNr>000000</base:BehoerdenNr>
+ </base:Organisation>
+ <base:Client>Test</base:Client>
+ </base:ClientInfo>
+ <zmr:PersonZusammenfuehrenRequest>
+ <zmr:QuellpersonReferenz>
+ <base:Technisch>
+ <base:EntityID>123</base:EntityID>
+ <base:LetzteAenderung>2004-01-01T00:00:00.000</base:LetzteAenderung>
+ </base:Technisch>
+ <base:ZMRZahl>000111111111</base:ZMRZahl>
+ </zmr:QuellpersonReferenz>
+ <zmr:ZielpersonReferenz>
+ <base:Technisch>
+ <base:EntityID>222</base:EntityID>
+ <base:LetzteAenderung>2004-02-01T00:00:00.000</base:LetzteAenderung>
+ </base:Technisch>
+ <base:ZMRZahl>000222222222</base:ZMRZahl>
+ </zmr:ZielpersonReferenz>
+ </zmr:PersonZusammenfuehrenRequest>
+ </base:Request>
+ </soap:Body>
+</soap:Envelope> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/personzusammenfuehren/personzusammenfuehrensucherequest.xml b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/personzusammenfuehren/personzusammenfuehrensucherequest.xml
new file mode 100644
index 00000000..be5b38ba
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/personzusammenfuehren/personzusammenfuehrensucherequest.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:zmr="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#" xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#" xmlns="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ ../../soapenv.xsd http://bmi.gv.at/namespace/zmr-su/base/20040201# ../../../xsd/allgemein/Service.xsd http://bmi.gv.at/namespace/zmr-su/zmr/20040201# ../../../xsd/zmr/ZMRProxy.xsd">
+<soap:Body>
+ <base:Request>
+ <base:WorkflowInfoClient>
+ <base:ProzessName>GP_Person_zusammenfuehren</base:ProzessName>
+ <base:VorgangName>ZPR_VO_Person_zusammenfuehren_darstellen</base:VorgangName>
+ </base:WorkflowInfoClient>
+ <base:ClientInfo>
+ <base:Organisation>
+ <base:BehoerdenNr>000000</base:BehoerdenNr>
+ </base:Organisation>
+ <base:Client>Test</base:Client>
+ </base:ClientInfo>
+ <zmr:PersonZusammenfuehrenSucheRequest>
+ <zmr:QuellpersonZMRZahl>000111111111</zmr:QuellpersonZMRZahl>
+ <zmr:ZielpersonZMRZahl>000222222222</zmr:ZielpersonZMRZahl>
+ </zmr:PersonZusammenfuehrenSucheRequest>
+ </base:Request>
+ </soap:Body>
+</soap:Envelope> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/wohnsitzabmelden/wohnsitzabmeldenrequest.xml b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/wohnsitzabmelden/wohnsitzabmeldenrequest.xml
new file mode 100644
index 00000000..69675bd3
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/wohnsitzabmelden/wohnsitzabmeldenrequest.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:zmr="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#" xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#" xmlns="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ ../../soapenv.xsd http://bmi.gv.at/namespace/zmr-su/base/20040201# ../../../xsd/allgemein/Service.xsd http://bmi.gv.at/namespace/zmr-su/zmr/20040201# ../../../xsd/zmr/ZMRProxy.xsd">
+<soap:Body>
+ <base:Request>
+ <base:WorkflowInfoClient>
+ <base:ProzessName>GP_Wohnsitz_abmelden</base:ProzessName>
+ <base:VorgangName>ZMR_VO_Wohnsitz_abmelden</base:VorgangName>
+ </base:WorkflowInfoClient>
+ <base:ClientInfo>
+ <base:Organisation>
+ <base:BehoerdenNr>000000</base:BehoerdenNr>
+ </base:Organisation>
+ <base:Client>Test</base:Client>
+ </base:ClientInfo>
+ <zmr:WohnsitzAbmeldenRequest>
+ <zmr:WohnsitzAbmeldenInfo>
+ <!-- Fachlicher Zeitpunkt der Abmeldung -->
+ <base:Von>2004-01-26T00:00:00.000</base:Von>
+ <base:GrundCode>WSABM</base:GrundCode>
+ </zmr:WohnsitzAbmeldenInfo>
+ <zmr:PersonReferenz>
+ <base:Technisch>
+ <base:EntityID>0000001</base:EntityID>
+ <base:LetzteAenderung>2003-01-01T00:00:00.000</base:LetzteAenderung>
+ </base:Technisch>
+ <base:ZMRZahl>000111111111</base:ZMRZahl>
+ </zmr:PersonReferenz>
+ <zmr:MeldungReferenz>
+ <base:Technisch>
+ <base:EntityID>0000002</base:EntityID>
+ <base:LetzteAenderung>2003-01-01T00:00:00.000</base:LetzteAenderung>
+ </base:Technisch>
+ <Wohnsitzqualitaet>H</Wohnsitzqualitaet>
+ </zmr:MeldungReferenz>
+ </zmr:WohnsitzAbmeldenRequest>
+ </base:Request>
+ </soap:Body>
+</soap:Envelope> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/wohnsitzabmelden/wohnsitzabmeldenresponse.xml b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/wohnsitzabmelden/wohnsitzabmeldenresponse.xml
new file mode 100644
index 00000000..a1f2a361
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/wohnsitzabmelden/wohnsitzabmeldenresponse.xml
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:zmr="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#" xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#" xmlns="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ ../../soapenv.xsd http://bmi.gv.at/namespace/zmr-su/base/20040201# ../../../xsd/allgemein/Service.xsd http://bmi.gv.at/namespace/zmr-su/zmr/20040201# ../../../xsd/zmr/ZMRProxy.xsd">
+<soap:Body>
+ <base:Response>
+ <base:WorkflowInfoServer>
+ <base:ProzessName>GP_Wohnsitz_abmelden</base:ProzessName>
+ <base:ProzessInstanzID>1234</base:ProzessInstanzID>
+ <base:ProzessStatus>C</base:ProzessStatus>
+ <base:SequenzID>00034</base:SequenzID>
+ <base:Subprozess>
+ <base:VorgangName>ZMR_VO_Wohnsitz_abmelden</base:VorgangName>
+ <base:VorgangStatus>C</base:VorgangStatus>
+ <base:Required>false</base:Required>
+ <base:Visible>true</base:Visible>
+ </base:Subprozess>
+ </base:WorkflowInfoServer>
+ <base:ServerInfo>
+ <base:GeneriertVon>ZMR Server</base:GeneriertVon>
+ <base:GeneriertAm>2004-01-26T00:00:00.000</base:GeneriertAm>
+ <base:ServerTransaktionNr>1234567</base:ServerTransaktionNr>
+ </base:ServerInfo>
+ <zmr:WohnsitzAbmeldenResponse>
+ <base:Message>
+ <base:Number>1234</base:Number>
+ <base:Text>Der Wohnsitz wurde abgemeldet</base:Text>
+ </base:Message>
+ <zmr:PersonReferenz>
+ <base:Technisch>
+ <base:EntityID>0000001</base:EntityID>
+ <base:LetzteAenderung>2003-01-01T00:00:00.000</base:LetzteAenderung>
+ </base:Technisch>
+ <base:ZMRZahl>000111111111</base:ZMRZahl>
+ </zmr:PersonReferenz>
+ <zmr:MeldungErgebnis>
+ <base:ErgebnissatzInfo>
+ <base:LetzteAenderung>2004-01-26T00:00:00.000</base:LetzteAenderung>
+ </base:ErgebnissatzInfo>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>0000002</base:EntityID>
+ <base:LetzteAenderung>2004-01-26T00:00:00.000</base:LetzteAenderung>
+ </base:Technisch>
+ <!-- Nulldauersatz der abgemeldeten Meldung -->
+ <base:Von>2004-01-26T00:00:00.000</base:Von>
+ <base:BeginnCode>WSABM</base:BeginnCode>
+ <base:BeginnText>Wohnsitz abmelden</base:BeginnText>
+ <base:Bis>2004-01-26T00:00:00.000</base:Bis>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:BehoerdenNr>099999</base:BehoerdenNr>
+ </base:Organisation>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <zmr:Wohnsitz>
+ <zmr:PostAdresse>
+ <Postleitzahl>1245</Postleitzahl>
+ <Gemeinde>Testgemeinde</Gemeinde>
+ <Gemeindekennziffer>09999</Gemeindekennziffer>
+ <Ortschaft>Testort</Ortschaft>
+ <zmr:Zustelladresse>
+ <Strassenname>Teststrasse</Strassenname>
+ <Orientierungsnummer>1</Orientierungsnummer>
+ <Wohnsitzqualitaet>H</Wohnsitzqualitaet>
+ </zmr:Zustelladresse>
+ </zmr:PostAdresse>
+ <base:Adressstatus>XXX000</base:Adressstatus>
+ </zmr:Wohnsitz>
+ <base:GemeldetVon>2003-01-01T00:00:00.000</base:GemeldetVon>
+ <base:PeriodeCode>WSABM</base:PeriodeCode>
+ <base:PeriodeText>Wohnsitz abmelden</base:PeriodeText>
+ <base:GemeldetBis>2004-01-26T00:00:00.000</base:GemeldetBis>
+ </zmr:MeldungErgebnis>
+ </zmr:WohnsitzAbmeldenResponse>
+ </base:Response>
+ </soap:Body>
+</soap:Envelope>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/wohnsitzanmelden/wohnsitzanmeldenrequest.xml b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/wohnsitzanmelden/wohnsitzanmeldenrequest.xml
new file mode 100644
index 00000000..44ebbb56
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/wohnsitzanmelden/wohnsitzanmeldenrequest.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:zmr="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#" xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#" xmlns="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ ../../soapenv.xsd http://bmi.gv.at/namespace/zmr-su/base/20040201# ../../../xsd/allgemein/Service.xsd http://bmi.gv.at/namespace/zmr-su/zmr/20040201# ../../../xsd/zmr/ZMRProxy.xsd">
+<soap:Body>
+ <base:Request>
+ <base:WorkflowInfoClient>
+ <base:ProzessName>GP_Wohnsitz_anmelden</base:ProzessName>
+ <base:VorgangName>ZMR_VO_Wohnsitz_anmelden</base:VorgangName>
+ </base:WorkflowInfoClient>
+ <base:ClientInfo>
+ <base:Organisation>
+ <base:BehoerdenNr>000000</base:BehoerdenNr>
+ </base:Organisation>
+ <base:Client>Test</base:Client>
+ </base:ClientInfo>
+ <zmr:WohnsitzAnmeldenRequest>
+ <zmr:WohnsitzAnmeldenInfo>
+ <!-- Fachlicher Zeitpunkt der Anmeldung -->
+ <base:Von>2004-01-26T00:00:00.000</base:Von>
+ <base:GrundCode>WSANM</base:GrundCode>
+ </zmr:WohnsitzAnmeldenInfo>
+ <zmr:PersonReferenz>
+ <base:Technisch>
+ <base:EntityID>0000001</base:EntityID>
+ <base:LetzteAenderung>2003-01-01T00:00:00.000</base:LetzteAenderung>
+ </base:Technisch>
+ <base:ZMRZahl>000111111111</base:ZMRZahl>
+ </zmr:PersonReferenz>
+ <zmr:MeldungAnlage>
+ <zmr:Wohnsitz>
+ <zmr:PostAdresse>
+ <Gemeindekennziffer>09999</Gemeindekennziffer>
+ <zmr:Zustelladresse>
+ <Wohnsitzqualitaet>H</Wohnsitzqualitaet>
+ <zmr:AdressRegisterEintrag>
+ <Adresscode>1234567</Adresscode>
+ <Subcode>111</Subcode>
+ <Objektnummer>1111111</Objektnummer>
+ </zmr:AdressRegisterEintrag>
+ <!-- Offizielle Adresse, es müssen nur die Adresscodes geschickt werden-->
+ </zmr:Zustelladresse>
+ </zmr:PostAdresse>
+ </zmr:Wohnsitz>
+ </zmr:MeldungAnlage>
+ </zmr:WohnsitzAnmeldenRequest>
+ </base:Request>
+ </soap:Body>
+</soap:Envelope>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/wohnsitzanmelden/wohnsitzanmeldenresponse.xml b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/wohnsitzanmelden/wohnsitzanmeldenresponse.xml
new file mode 100644
index 00000000..ccbc350d
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/wohnsitzanmelden/wohnsitzanmeldenresponse.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:zmr="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#" xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#" xmlns="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ ../../soapenv.xsd http://bmi.gv.at/namespace/zmr-su/base/20040201# ../../../xsd/allgemein/Service.xsd http://bmi.gv.at/namespace/zmr-su/zmr/20040201# ../../../xsd/zmr/ZMRProxy.xsd">
+<soap:Body>
+ <base:Response>
+ <base:WorkflowInfoServer>
+ <base:ProzessName>GP_Wohnsitz_anmelden</base:ProzessName>
+ <base:ProzessInstanzID>1234</base:ProzessInstanzID>
+ <base:ProzessStatus>C</base:ProzessStatus>
+ <base:SequenzID>00034</base:SequenzID>
+ <base:Subprozess>
+ <base:VorgangName>ZMR_VO_Wohnsitz_anmelden</base:VorgangName>
+ <base:VorgangStatus>C</base:VorgangStatus>
+ <base:Required>false</base:Required>
+ <base:Visible>true</base:Visible>
+ </base:Subprozess>
+ </base:WorkflowInfoServer>
+ <base:ServerInfo>
+ <base:GeneriertVon>ZMR Server</base:GeneriertVon>
+ <base:GeneriertAm>2004-01-26T00:00:00.000</base:GeneriertAm>
+ <base:ServerTransaktionNr>1234567</base:ServerTransaktionNr>
+ </base:ServerInfo>
+ <zmr:WohnsitzAnmeldenResponse>
+ <base:Message>
+ <base:Number>1234</base:Number>
+ <base:Text>Der Wohnsitz wurde angemeldet</base:Text>
+ </base:Message>
+ <zmr:PersonReferenz>
+ <base:Technisch>
+ <base:EntityID>0000001</base:EntityID>
+ <base:LetzteAenderung>2003-01-01T00:00:00.000</base:LetzteAenderung>
+ </base:Technisch>
+ <base:ZMRZahl>000111111111</base:ZMRZahl>
+ </zmr:PersonReferenz>
+ <zmr:MeldungErgebnis>
+ <base:ErgebnissatzInfo>
+ <base:LetzteAenderung>2004-01-26T00:00:00.000</base:LetzteAenderung>
+ </base:ErgebnissatzInfo>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>00000002</base:EntityID>
+ <base:LetzteAenderung>2004-01-26T00:00:00.000</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2004-01-26T00:00:00.000</base:Von>
+ <base:BeginnCode>WSANM</base:BeginnCode>
+ <base:BeginnText>Wohnsitz anmelden</base:BeginnText>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:BehoerdenNr>099999</base:BehoerdenNr>
+ </base:Organisation>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <zmr:Wohnsitz>
+ <zmr:PostAdresse>
+ <Postleitzahl>1245</Postleitzahl>
+ <Gemeinde>Testgemeinde</Gemeinde>
+ <Gemeindekennziffer>09999</Gemeindekennziffer>
+ <Ortschaft>Testort</Ortschaft>
+ <zmr:Zustelladresse>
+ <Strassenname>Teststrasse</Strassenname>
+ <Orientierungsnummer>1</Orientierungsnummer>
+ <Wohnsitzqualitaet>H</Wohnsitzqualitaet>
+ <zmr:AdressRegisterEintrag>
+ <Adresscode>1234567</Adresscode>
+ <Subcode>111</Subcode>
+ <Objektnummer>1111111</Objektnummer>
+ </zmr:AdressRegisterEintrag>
+ </zmr:Zustelladresse>
+ </zmr:PostAdresse>
+ <base:Adressstatus>XXX000</base:Adressstatus>
+ </zmr:Wohnsitz>
+ <base:GemeldetVon>2004-01-26T00:00:00.000</base:GemeldetVon>
+ <base:PeriodeCode>WSANM</base:PeriodeCode>
+ <base:PeriodeText>Wohnsitz anmelden</base:PeriodeText>
+ </zmr:MeldungErgebnis>
+ </zmr:WohnsitzAnmeldenResponse>
+ </base:Response>
+ </soap:Body>
+</soap:Envelope>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/wohnsitzummelden/wohnsitzummeldenrequest.xml b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/wohnsitzummelden/wohnsitzummeldenrequest.xml
new file mode 100644
index 00000000..039626bb
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/wohnsitzummelden/wohnsitzummeldenrequest.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:zmr="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#" xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#" xmlns="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ ../../soapenv.xsd http://bmi.gv.at/namespace/zmr-su/base/20040201# ../../../xsd/allgemein/Service.xsd http://bmi.gv.at/namespace/zmr-su/zmr/20040201# ../../../xsd/zmr/ZMRProxy.xsd">
+<soap:Body>
+ <base:Request>
+ <base:WorkflowInfoClient>
+ <base:ProzessName>GP_Wohnsitz_ummelden</base:ProzessName>
+ <base:VorgangName>ZMR_VO_Wohnsitz_ummelden</base:VorgangName>
+ </base:WorkflowInfoClient>
+ <base:ClientInfo>
+ <base:Organisation>
+ <base:BehoerdenNr>000000</base:BehoerdenNr>
+ </base:Organisation>
+ <base:Client>Test</base:Client>
+ </base:ClientInfo>
+ <zmr:WohnsitzUmmeldenRequest>
+ <zmr:WohnsitzUmmeldenInfo>
+ <base:Von>2004-01-26T00:00:00.000</base:Von>
+ <zmr:UmmeldungAktion>HWS_NWS_HWS</zmr:UmmeldungAktion>
+ </zmr:WohnsitzUmmeldenInfo>
+ <zmr:PersonReferenz>
+ <base:Technisch>
+ <base:EntityID>0000001</base:EntityID>
+ <base:LetzteAenderung>2003-01-01T00:00:00.000</base:LetzteAenderung>
+ </base:Technisch>
+ <base:ZMRZahl>000111111111</base:ZMRZahl>
+ </zmr:PersonReferenz>
+ <zmr:UMMVorgang1>
+ <!-- Hauptwohnsitz wird abgemeldet -->
+ <zmr:MeldungReferenz>
+ <base:Technisch>
+ <base:EntityID>0000003</base:EntityID>
+ <base:LetzteAenderung>2003-01-01T00:00:00.000</base:LetzteAenderung>
+ </base:Technisch>
+ <Wohnsitzqualitaet>H</Wohnsitzqualitaet>
+ </zmr:MeldungReferenz>
+ </zmr:UMMVorgang1>
+ <zmr:UMMVorgang2>
+ <!-- neuer Hauptwohnsitz wird angemeldet -->
+ <zmr:MeldungAnlage>
+ <zmr:Wohnsitz>
+ <zmr:PostAdresse>
+ <Gemeindekennziffer>09999</Gemeindekennziffer>
+ <zmr:Zustelladresse>
+ <Wohnsitzqualitaet>H</Wohnsitzqualitaet>
+ <zmr:AdressRegisterEintrag>
+ <Adresscode>1234567</Adresscode>
+ <Subcode>111</Subcode>
+ <Objektnummer>1111111</Objektnummer>
+ </zmr:AdressRegisterEintrag>
+ <!-- Offizielle Adresse, es müssen nur die Adresscodes geschickt werden-->
+ </zmr:Zustelladresse>
+ </zmr:PostAdresse>
+ </zmr:Wohnsitz>
+ </zmr:MeldungAnlage>
+ </zmr:UMMVorgang2>
+ </zmr:WohnsitzUmmeldenRequest>
+ </base:Request>
+ </soap:Body>
+</soap:Envelope>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/wohnsitzummelden/wohnsitzummeldenresponse.xml b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/wohnsitzummelden/wohnsitzummeldenresponse.xml
new file mode 100644
index 00000000..1af5a374
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/wohnsitzummelden/wohnsitzummeldenresponse.xml
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:zmr="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#" xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#" xmlns="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ ../../soapenv.xsd http://bmi.gv.at/namespace/zmr-su/base/20040201# ../../../xsd/allgemein/Service.xsd http://bmi.gv.at/namespace/zmr-su/zmr/20040201# ../../../xsd/zmr/ZMRProxy.xsd">
+<soap:Body>
+ <base:Response>
+ <base:WorkflowInfoServer>
+ <base:ProzessName>GP_Wohnsitz_ummelden</base:ProzessName>
+ <base:ProzessInstanzID>1234</base:ProzessInstanzID>
+ <base:ProzessStatus>C</base:ProzessStatus>
+ <base:SequenzID>00034</base:SequenzID>
+ <base:Subprozess>
+ <base:VorgangName>ZMR_VO_Wohnsitz_ummelden</base:VorgangName>
+ <base:VorgangStatus>C</base:VorgangStatus>
+ <base:Required>false</base:Required>
+ <base:Visible>true</base:Visible>
+ </base:Subprozess>
+ </base:WorkflowInfoServer>
+ <base:ServerInfo>
+ <base:GeneriertVon>ZMR Server</base:GeneriertVon>
+ <base:GeneriertAm>2004-01-26T00:00:00.000</base:GeneriertAm>
+ <base:ServerTransaktionNr>1234567</base:ServerTransaktionNr>
+ </base:ServerInfo>
+ <zmr:WohnsitzUmmeldenResponse>
+ <base:Message>
+ <base:Number>1234</base:Number>
+ <base:Text>Ummeldung erfolgreich durchgeführt</base:Text>
+ </base:Message>
+ <zmr:PersonReferenz>
+ <base:Technisch>
+ <base:EntityID>0000001</base:EntityID>
+ <base:LetzteAenderung>2003-01-01T00:00:00.000</base:LetzteAenderung>
+ </base:Technisch>
+ <base:ZMRZahl>000111111111</base:ZMRZahl>
+ </zmr:PersonReferenz>
+ <zmr:UMMErgebnis1>
+ <!-- Nulldauersatz des abgemelden Hauptwohnsitzes -->
+ <base:ErgebnissatzInfo>
+ <base:LetzteAenderung>2004-01-26T00:00:00.000</base:LetzteAenderung>
+ </base:ErgebnissatzInfo>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>0000003</base:EntityID>
+ <base:LetzteAenderung>2004-01-26T00:00:00.000</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2004-01-26T00:00:00.000</base:Von>
+ <base:BeginnCode>HWS_ABM_HWS</base:BeginnCode>
+ <base:BeginnText>Hauptwohnsitz wird abgemeldet, neuer Hauptwohnsitz</base:BeginnText>
+ <base:Bis>2004-01-26T00:00:00.000</base:Bis>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:BehoerdenNr>099999</base:BehoerdenNr>
+ </base:Organisation>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <zmr:Wohnsitz>
+ <zmr:PostAdresse>
+ <Postleitzahl>1245</Postleitzahl>
+ <Gemeinde>Testgemeinde</Gemeinde>
+ <Gemeindekennziffer>09999</Gemeindekennziffer>
+ <Ortschaft>Testort</Ortschaft>
+ <zmr:Zustelladresse>
+ <Strassenname>Teststrasse</Strassenname>
+ <Orientierungsnummer>2</Orientierungsnummer>
+ <Wohnsitzqualitaet>H</Wohnsitzqualitaet>
+ <zmr:AdressRegisterEintrag>
+ <Adresscode>1111111</Adresscode>
+ <Subcode>111</Subcode>
+ <Objektnummer>1111111</Objektnummer>
+ </zmr:AdressRegisterEintrag>
+ </zmr:Zustelladresse>
+ </zmr:PostAdresse>
+ <base:Adressstatus>XXX000</base:Adressstatus>
+ </zmr:Wohnsitz>
+ <base:GemeldetVon>2003-01-01T00:00:00.000</base:GemeldetVon>
+ <base:PeriodeCode>HWS_ABM_HWS</base:PeriodeCode>
+ <base:PeriodeText>Hauptwohnsitz wird abgemeldet, neuer Hauptwohnsitz</base:PeriodeText>
+ <base:GemeldetBis>2004-01-26T00:00:00.000</base:GemeldetBis>
+ </zmr:UMMErgebnis1>
+ <zmr:UMMErgebnis2>
+ <!-- Neu angemelder Hauptwohnsitz -->
+ <base:ErgebnissatzInfo>
+ <base:LetzteAenderung>2004-01-26T00:00:00.000</base:LetzteAenderung>
+ </base:ErgebnissatzInfo>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>0000012</base:EntityID>
+ <base:LetzteAenderung>2004-01-26T00:00:00.000</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2004-01-26T00:00:00.000</base:Von>
+ <base:BeginnCode>HWS_ABM_HWS</base:BeginnCode>
+ <base:BeginnText>Hauptwohnsitz wird abgemeldet, neuer Hauptwohnsitz</base:BeginnText>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:BehoerdenNr>099999</base:BehoerdenNr>
+ </base:Organisation>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <zmr:Wohnsitz>
+ <zmr:PostAdresse>
+ <Postleitzahl>1245</Postleitzahl>
+ <Gemeinde>Testgemeinde</Gemeinde>
+ <Gemeindekennziffer>09999</Gemeindekennziffer>
+ <Ortschaft>Testort</Ortschaft>
+ <zmr:Zustelladresse>
+ <Strassenname>Teststrasse</Strassenname>
+ <Orientierungsnummer>1</Orientierungsnummer>
+ <Wohnsitzqualitaet>H</Wohnsitzqualitaet>
+ <zmr:AdressRegisterEintrag>
+ <Adresscode>1234567</Adresscode>
+ <Subcode>111</Subcode>
+ <Objektnummer>1111111</Objektnummer>
+ </zmr:AdressRegisterEintrag>
+ </zmr:Zustelladresse>
+ </zmr:PostAdresse>
+ <base:Adressstatus>XXX000</base:Adressstatus>
+ </zmr:Wohnsitz>
+ <base:GemeldetVon>2004-01-26T00:00:00.000</base:GemeldetVon>
+ <base:PeriodeCode>HWS_ABM_HWS</base:PeriodeCode>
+ <base:PeriodeText>Hauptwohnsitz wird abgemeldet, neuer Hauptwohnsitz</base:PeriodeText>
+ </zmr:UMMErgebnis2>
+ </zmr:WohnsitzUmmeldenResponse>
+ </base:Response>
+ </soap:Body>
+</soap:Envelope>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/zuzugsbestaetigung/zuzugsbestaetigungrequest.xml b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/zuzugsbestaetigung/zuzugsbestaetigungrequest.xml
new file mode 100644
index 00000000..35dae59d
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/zuzugsbestaetigung/zuzugsbestaetigungrequest.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:zmr="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#" xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#" xmlns="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ ../../soapenv.xsd http://bmi.gv.at/namespace/zmr-su/base/20040201# ../../../xsd/allgemein/Service.xsd http://bmi.gv.at/namespace/zmr-su/zmr/20040201# ../../../xsd/zmr/ZMRProxy.xsd">
+<soap:Body>
+ <base:Request>
+ <base:WorkflowInfoClient>
+ <base:ProzessName>GP_Zuzugsbestaetigung_anfordern</base:ProzessName>
+ <base:VorgangName>ZMR_VO_Zuzugsbestaetigung_anfordern</base:VorgangName>
+ </base:WorkflowInfoClient>
+ <base:ClientInfo>
+ <base:Organisation>
+ <base:BehoerdenNr>000000</base:BehoerdenNr>
+ </base:Organisation>
+ <base:Client>Test</base:Client>
+ </base:ClientInfo>
+ <zmr:ZuzugsbestaetigungRequest>
+ <zmr:ZuzugsbestaetigungInfo>
+ <base:GemeindeNr>09999</base:GemeindeNr>
+ <zmr:ZuzugsbestaetigungVon>2004-01-01T00:00:00.000</zmr:ZuzugsbestaetigungVon>
+ <zmr:ZuzugsbestaetigungBis>2004-01-05T00:00:00.000</zmr:ZuzugsbestaetigungBis>
+ </zmr:ZuzugsbestaetigungInfo>
+ </zmr:ZuzugsbestaetigungRequest>
+ </base:Request>
+ </soap:Body>
+</soap:Envelope> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/zuzugsbestaetigung/zuzugsbestaetigungresponse.xml b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/zuzugsbestaetigung/zuzugsbestaetigungresponse.xml
new file mode 100644
index 00000000..a9ef5a38
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/testxml/zmr/zuzugsbestaetigung/zuzugsbestaetigungresponse.xml
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:zmr="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#" xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#" xmlns="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ ../../soapenv.xsd http://bmi.gv.at/namespace/zmr-su/base/20040201# ../../../xsd/allgemein/Service.xsd http://bmi.gv.at/namespace/zmr-su/zmr/20040201# ../../../xsd/zmr/ZMRProxy.xsd">
+<soap:Body>
+ <base:Response>
+ <base:WorkflowInfoServer>
+ <base:ProzessName>GP_Zuzugsbestaetigung_anfordern</base:ProzessName>
+ <base:ProzessInstanzID>1234</base:ProzessInstanzID>
+ <base:ProzessStatus>C</base:ProzessStatus>
+ <base:SequenzID>00034</base:SequenzID>
+ <base:Subprozess>
+ <base:VorgangName>ZMR_VO_Zuzugsbestaetigung_anfordern</base:VorgangName>
+ <base:VorgangStatus>C</base:VorgangStatus>
+ <base:Required>false</base:Required>
+ <base:Visible>true</base:Visible>
+ </base:Subprozess>
+ </base:WorkflowInfoServer>
+ <base:ServerInfo>
+ <base:GeneriertVon>ZMR Server</base:GeneriertVon>
+ <base:GeneriertAm>2004-01-26T00:00:00.000</base:GeneriertAm>
+ <base:ServerTransaktionNr>1234567</base:ServerTransaktionNr>
+ </base:ServerInfo>
+ <zmr:ZuzugsbestaetigungResponse>
+ <zmr:ZuzugsbestaetigungAnfrage>
+ <zmr:ZuzugsbestaetigungInfo>
+ <base:GemeindeNr>09999</base:GemeindeNr>
+ <zmr:ZuzugsbestaetigungVon>2004-01-01T00:00:00.000</zmr:ZuzugsbestaetigungVon>
+ <zmr:ZuzugsbestaetigungBis>2004-01-05T00:00:00.000</zmr:ZuzugsbestaetigungBis>
+ </zmr:ZuzugsbestaetigungInfo>
+ </zmr:ZuzugsbestaetigungAnfrage>
+ <base:Message>
+ <base:Number>0012</base:Number>
+ <base:Text>Die Zuzugsdaten wurden erzeugt</base:Text>
+ </base:Message>
+ <zmr:Zuzugsbestaetigung>
+ <base:GefundeneSaetze>100</base:GefundeneSaetze>
+ <base:AnzahlSaetze>2</base:AnzahlSaetze>
+ <zmr:ZuzugsbestaetigungSatz>
+ <zmr:ZugezogenPerson>
+ <base:ZMRZahl>000111111111</base:ZMRZahl>
+ <Familienname>Mustermann</Familienname>
+ <Vorname>Max</Vorname>
+ <Geburtsdatum>2000-01-01</Geburtsdatum>
+ </zmr:ZugezogenPerson>
+ <zmr:ZugezogenAm>2004-01-01T00:00:00.000</zmr:ZugezogenAm>
+ <zmr:ZugezogenGemeindeNr>09999</zmr:ZugezogenGemeindeNr>
+ <zmr:ZugezogenGemeinde>Testgemeinde</zmr:ZugezogenGemeinde>
+ </zmr:ZuzugsbestaetigungSatz>
+ <zmr:ZuzugsbestaetigungSatz>
+ <zmr:ZugezogenPerson>
+ <base:ZMRZahl>000111111112</base:ZMRZahl>
+ <Familienname>Mustermann</Familienname>
+ <Vorname>Ida</Vorname>
+ <Geburtsdatum>2001-01-01</Geburtsdatum>
+ </zmr:ZugezogenPerson>
+ <zmr:ZugezogenAm>2004-01-02T00:00:00.000</zmr:ZugezogenAm>
+ <zmr:ZugezogenGemeindeNr>09999</zmr:ZugezogenGemeindeNr>
+ <zmr:ZugezogenGemeinde>Testgemeinde</zmr:ZugezogenGemeinde>
+ </zmr:ZuzugsbestaetigungSatz>
+ </zmr:Zuzugsbestaetigung>
+ </zmr:ZuzugsbestaetigungResponse>
+ </base:Response>
+ </soap:Body>
+</soap:Envelope>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/wsdl/Messages.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/wsdl/Messages.xsd
new file mode 100644
index 00000000..112598a4
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/wsdl/Messages.xsd
@@ -0,0 +1,215 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: Messages.xsd
+Zweck: Definiert die Message-Datentypen fuer Services Request und Response (siehe Service.wsdl)
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2010-09-29 teo: Schnittstellen-Liste aktualisiert
+2005-05-24 tsch: BPKPruefung hinzugefuegt
+2005-02-02 tsch: QKZBearbeiten, QKZAuswertung hinzugefuegt
+2005-01-14 tsch: Aviso aktivieren entfernt, Gleichstzungtabelle Warten hinzugefuegt
+2004-11-26 tsch: Adoption, Steuerfahndung, Aviso freischalten/aktivieren hinzugefuegt
+2004-11-22 tsch: Gerichtskommissaerabfrage hinzugefuegt
+2004-09-28 tsch: Wehrfplichtigenanfrage, ablaufende Auskunfssperren-Suche hinzugefuegt
+2004-09-27 tsch: Storno/Korrektur hinzugefuegt
+2004-09-09 tsch: SZR-Vorgaenge sowie Person trennen/zusammenfuehren hinzugefuegt
+2004-07-30 tsch: Erstellung
+-->
+
+<xsd:schema targetNamespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:zmr="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:include schemaLocation="../xsd/eingebunden/EingebundenProxy.xsd"/>
+ <xsd:include schemaLocation="../xsd/allgemein/GeschaeftsprozesseAuflisten.xsd"/>
+ <xsd:include schemaLocation="../xsd/allgemein/Benutzereinstellungen.xsd"/>
+ <xsd:include schemaLocation="../xsd/allgemein/Organisationseinstellungen.xsd"/>
+ <xsd:include schemaLocation="../xsd/allgemein/Auswertungen.xsd"/>
+ <xsd:include schemaLocation="../xsd/allgemein/BasTabelleAbfrage.xsd"/>
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#" schemaLocation="../xsd/zmr/ZMRProxy.xsd"/>
+
+
+ <xsd:complexType name="RequestType">
+ <xsd:sequence>
+ <xsd:element ref="base:WorkflowInfoClient"/>
+ <xsd:element ref="base:ClientInfo"/>
+ <xsd:choice>
+ <xsd:element ref="base:BlaetternRequest"/>
+ <xsd:element ref="base:WorkflowsAuflistenRequest"/>
+ <xsd:element ref="base:BenutzereinstellungenAbfragenRequest"/>
+ <xsd:element ref="base:BenutzereinstellungenAendernRequest"/>
+ <xsd:element ref="base:OrganisationseinstellungenAendernRequest"/>
+ <xsd:element ref="base:AuswertungenAuflistenRequest"/>
+ <xsd:element ref="base:AuswertungAbgeholtRequest"/>
+ <xsd:element ref="base:BasTabelleAbfrageRequest"/>
+ <xsd:element ref="zmr:PersonSuchenRequest"/>
+ <xsd:element ref="zmr:PersonAnlegenRequest"/>
+ <xsd:element ref="zmr:PersonAendernRequest"/>
+ <xsd:element ref="zmr:AdresssucheRequest"/>
+ <xsd:element ref="zmr:WohnsitzAnmeldenRequest"/>
+ <xsd:element ref="zmr:WohnsitzAbmeldenRequest"/>
+ <xsd:element ref="zmr:WohnsitzUmmeldenRequest"/>
+ <xsd:element ref="zmr:MeldebestaetigungRequest"/>
+ <xsd:element ref="zmr:MeldeauskunftRequest"/>
+ <xsd:element ref="zmr:DatenabgleichRequest"/>
+ <xsd:element ref="zmr:AvisosucheRequest"/>
+ <xsd:element ref="zmr:AvisoAnlegenRequest"/>
+ <xsd:element ref="zmr:AvisoAendernRequest"/>
+ <xsd:element ref="zmr:AvisoBeendenRequest"/>
+ <xsd:element ref="zmr:AvisoFreigebenSucheRequest"/>
+ <xsd:element ref="zmr:AvisoFreigebenRequest"/>
+ <xsd:element ref="zmr:BPAbfrageRequest"/>
+ <xsd:element ref="zmr:BPAbfrageErweitertRequest"/>
+ <xsd:element ref="zmr:BusinesspartnerAnfrageRequest"/>
+ <xsd:element ref="zmr:BehoerdenabfrageRequest"/>
+ <xsd:element ref="zmr:BestandsaenderungenRequest"/>
+ <xsd:element ref="zmr:FremdenabfrageRequest"/>
+ <xsd:element ref="zmr:HauseigentuemerAbfrageRequest"/>
+ <xsd:element ref="zmr:HauseigentuemerAbfrageDruckRequest"/>
+ <xsd:element ref="zmr:PersonenAbfrageRequest"/>
+ <xsd:element ref="zmr:PersonenAbfrageDruckRequest"/>
+ <xsd:element ref="zmr:ZuzugsbestaetigungRequest"/>
+ <xsd:element ref="zmr:PersonTrennenSucheRequest"/>
+ <xsd:element ref="zmr:PersonTrennenRequest"/>
+ <xsd:element ref="zmr:PersonZusammenfuehrenSucheRequest"/>
+ <xsd:element ref="zmr:PersonZusammenfuehrenRequest"/>
+ <xsd:element ref="zmr:SZRPersonenbindungRequest"/>
+ <xsd:element ref="zmr:SzrAbfrageRequest"/>
+ <xsd:element ref="zmr:SZRPersonensucheRequest"/>
+ <xsd:element ref="zmr:SZREinzelabfrageRequest"/>
+ <xsd:element ref="zmr:BehoerdenattributeAendernRequest"/>
+ <xsd:element ref="zmr:StornoDarstellenRequest"/>
+ <xsd:element ref="zmr:StornoRequest"/>
+ <xsd:element ref="zmr:PersonKorrigierenRequest"/>
+ <xsd:element ref="zmr:WohnsitzKorrigierenRequest"/>
+ <xsd:element ref="zmr:WehrpflichtigeAbfragenRequest"/>
+ <xsd:element ref="zmr:AblaufendeAuskunftssperrenSucheRequest"/>
+ <xsd:element ref="zmr:GerichtskommissaerabfrageRequest"/>
+ <xsd:element ref="zmr:ObjektsucheSteuerfahndungRequest"/>
+ <xsd:element ref="zmr:ObjektsucheMindestsicherungRequest"/>
+ <xsd:element ref="zmr:AdoptionRequest"/>
+ <xsd:element ref="zmr:GleichsetzungAbfragenRequest"/>
+ <xsd:element ref="zmr:GleichsetzungAnlegenRequest"/>
+ <xsd:element ref="zmr:GleichsetzungLoeschenRequest"/>
+ <xsd:element ref="zmr:QKZBearbeitenRequest"/>
+ <xsd:element ref="zmr:QKZAuswertungRequest"/>
+ <xsd:element ref="zmr:BPKPruefungRequest"/>
+ <xsd:element ref="zmr:MeldungHistKorrigierenRequest"/>
+ <xsd:element ref="zmr:MeldebestaetigungenAnfordernRequest"/>
+ <xsd:element ref="zmr:TechnischeAnsichtRequest"/>
+ <xsd:element ref="zmr:AuskunftssperreAendernRequest"/>
+ <xsd:element ref="zmr:UmmSrvAbfrageRequest"/>
+ <xsd:element ref="zmr:GISSucheRequest"/>
+ <xsd:element ref="zmr:PersonenListenRequest"/>
+ <xsd:element ref="zmr:AnwendungsintegrationRequest"/>
+ <xsd:element ref="zmr:AnwendungsintegrationWiederholungRequest"/>
+ <xsd:element ref="zmr:ORFGISAnforderungRequest"/>
+ <xsd:element ref="zmr:IAPPersonenUeberblickRequest"/>
+ <xsd:element ref="zmr:IAPPersonenDetailRequest"/>
+ <xsd:element ref="zmr:ErnpRequest"/>
+ <xsd:element ref="zmr:BuergerPersonensucheRequest"/>
+ <xsd:element ref="zmr:BuergerMitbewohnersucheRequest"/>
+ <xsd:element ref="zmr:BuergerWohnsitzAnmeldenRequest"/>
+ <xsd:element ref="zmr:BuergerWohnsitzAbmeldenRequest"/>
+ <xsd:element ref="zmr:BuergerWohnsitzUmmeldenRequest"/>
+ <xsd:element ref="zmr:GemeindeeinstellungenRequest"/>
+ <xsd:element ref="zmr:GemeindeeinstellungenAendernRequest"/>
+ <xsd:element ref="zmr:SperrlisteRequest"/>
+ <xsd:element ref="zmr:SperrlisteAnlegenRequest"/>
+ <xsd:element ref="zmr:SperrlisteLoeschenRequest"/>
+ </xsd:choice>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="ResponseType">
+ <xsd:sequence>
+ <xsd:element ref="base:WorkflowInfoServer"/>
+ <xsd:element ref="base:ServerInfo"/>
+ <xsd:choice>
+ <xsd:element ref="base:WorkflowsAuflistenResponse"/>
+ <xsd:element ref="base:BenutzereinstellungenAbfragenResponse"/>
+ <xsd:element ref="base:BenutzereinstellungenAendernResponse"/>
+ <xsd:element ref="base:OrganisationseinstellungenAendernResponse"/>
+ <xsd:element ref="base:AuswertungenAuflistenResponse"/>
+ <xsd:element ref="base:AuswertungAbgeholtResponse"/>
+ <xsd:element ref="base:BasTabelleAbfrageResponse"/>
+ <xsd:element ref="zmr:PersonSuchenResponse"/>
+ <xsd:element ref="zmr:PersonAnlegenResponse"/>
+ <xsd:element ref="zmr:PersonAendernResponse"/>
+ <xsd:element ref="zmr:AdresssucheResponse"/>
+ <xsd:element ref="zmr:WohnsitzAnmeldenResponse"/>
+ <xsd:element ref="zmr:WohnsitzAbmeldenResponse"/>
+ <xsd:element ref="zmr:WohnsitzUmmeldenResponse"/>
+ <xsd:element ref="zmr:MeldebestaetigungResponse"/>
+ <xsd:element ref="zmr:MeldeauskunftResponse"/>
+ <xsd:element ref="zmr:DatenabgleichResponse"/>
+ <xsd:element ref="zmr:AvisosucheResponse"/>
+ <xsd:element ref="zmr:AvisoAnlegenResponse"/>
+ <xsd:element ref="zmr:AvisoAendernResponse"/>
+ <xsd:element ref="zmr:AvisoBeendenResponse"/>
+ <xsd:element ref="zmr:AvisoFreigebenSucheResponse"/>
+ <xsd:element ref="zmr:AvisoFreigebenResponse"/>
+ <xsd:element ref="zmr:BPAbfrageResponse"/>
+ <xsd:element ref="zmr:BPAbfrageErweitertResponse"/>
+ <xsd:element ref="zmr:BusinesspartnerAnfrageResponse"/>
+ <xsd:element ref="zmr:BehoerdenabfrageResponse"/>
+ <xsd:element ref="zmr:BestandsaenderungenResponse"/>
+ <xsd:element ref="zmr:FremdenabfrageResponse"/>
+ <xsd:element ref="zmr:HauseigentuemerAbfrageResponse"/>
+ <xsd:element ref="zmr:HauseigentuemerAbfrageDruckResponse"/>
+ <xsd:element ref="zmr:PersonenAbfrageResponse"/>
+ <xsd:element ref="zmr:PersonenAbfrageDruckResponse"/>
+ <xsd:element ref="zmr:ZuzugsbestaetigungResponse"/>
+ <xsd:element ref="zmr:PersonTrennenSucheResponse"/>
+ <xsd:element ref="zmr:PersonTrennenResponse"/>
+ <xsd:element ref="zmr:PersonZusammenfuehrenSucheResponse"/>
+ <xsd:element ref="zmr:PersonZusammenfuehrenResponse"/>
+ <xsd:element ref="zmr:SZRPersonenbindungResponse"/>
+ <xsd:element ref="zmr:SzrAbfrageResponse"/>
+ <xsd:element ref="zmr:SZRPersonensucheResponse"/>
+ <xsd:element ref="zmr:BehoerdenattributeAendernResponse"/>
+ <xsd:element ref="zmr:StornoDarstellenResponse"/>
+ <xsd:element ref="zmr:StornoResponse"/>
+ <xsd:element ref="zmr:PersonKorrigierenResponse"/>
+ <xsd:element ref="zmr:WohnsitzKorrigierenResponse"/>
+ <xsd:element ref="zmr:WehrpflichtigeAbfragenResponse"/>
+ <xsd:element ref="zmr:AblaufendeAuskunftssperrenSucheResponse"/>
+ <xsd:element ref="zmr:GerichtskommissaerabfrageResponse"/>
+ <xsd:element ref="zmr:ObjektsucheSteuerfahndungResponse"/>
+ <xsd:element ref="zmr:ObjektsucheMindestsicherungResponse"/>
+ <xsd:element ref="zmr:AdoptionResponse"/>
+ <xsd:element ref="zmr:GleichsetzungAbfragenResponse"/>
+ <xsd:element ref="zmr:GleichsetzungAnlegenResponse"/>
+ <xsd:element ref="zmr:GleichsetzungLoeschenResponse"/>
+ <xsd:element ref="zmr:QKZBearbeitenResponse"/>
+ <xsd:element ref="zmr:QKZAuswertungResponse"/>
+ <xsd:element ref="zmr:BPKPruefungResponse"/>
+ <xsd:element ref="zmr:MeldungHistKorrigierenResponse"/>
+ <xsd:element ref="zmr:MeldebestaetigungenAnfordernResponse"/>
+ <xsd:element ref="zmr:TechnischeAnsichtResponse"/>
+ <xsd:element ref="zmr:AuskunftssperreAendernResponse"/>
+ <xsd:element ref="zmr:UmmSrvAbfrageResponse"/>
+ <xsd:element ref="zmr:GISSucheResponse"/>
+ <xsd:element ref="zmr:PersonenListenResponse"/>
+ <xsd:element ref="zmr:AnwendungsintegrationResponse"/>
+ <xsd:element ref="zmr:AnwendungsintegrationWiederholungResponse"/>
+ <xsd:element ref="zmr:ORFGISAnforderungResponse"/>
+ <xsd:element ref="zmr:IAPPersonenUeberblickResponse"/>
+ <xsd:element ref="zmr:IAPPersonenDetailResponse"/>
+ <xsd:element ref="zmr:ErnpResponse"/>
+ <xsd:element ref="zmr:BuergerPersonensucheResponse"/>
+ <xsd:element ref="zmr:BuergerMitbewohnersucheResponse"/>
+ <xsd:element ref="zmr:BuergerWohnsitzserviceResponse"/>
+ <xsd:element ref="zmr:GemeindeeinstellungenResponse"/>
+ <xsd:element ref="zmr:GemeindeeinstellungenAendernResponse"/>
+ <xsd:element ref="zmr:SperrlisteResponse"/>
+ <xsd:element ref="zmr:SperrlisteUpdateResponse"/>
+ </xsd:choice>
+ </xsd:sequence>
+ </xsd:complexType>
+
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/wsdl/Service.wsdl b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/wsdl/Service.wsdl
new file mode 100644
index 00000000..3dbeabc7
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/wsdl/Service.wsdl
@@ -0,0 +1,62 @@
+<definitions xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:wsse="http://schemas.xmlsoap.org/ws/2002/04/secext"
+ xmlns="http://schemas.xmlsoap.org/wsdl/"
+ targetNamespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" name="Service">
+ <types>
+ <xsd:schema xmlns="http://bmi.gv.at/namespace/zmr-su/base/20040201#" targetNamespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#">
+ <xsd:import namespace="http://schemas.xmlsoap.org/ws/2002/04/secext" schemaLocation="secext.xsd"/>
+ <xsd:include schemaLocation="Messages.xsd"/>
+ <xsd:element name="Request" type="RequestType"/>
+ <xsd:element name="Response" type="ResponseType"/>
+ <xsd:element name="ServiceFault">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="ErrorCode"/>
+ <xsd:element ref="ErrorMessage"/>
+ <xsd:element ref="ServerTransaktionNr"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:schema>
+ </types>
+ <message name="ServiceRequest">
+ <part name="in" element="base:Request"/>
+ <part name="WSSEHeader" element="wsse:Security"/>
+ </message>
+ <message name="ServiceResponse">
+ <part name="out" element="base:Response"/>
+ </message>
+ <message name="ServiceFault">
+ <part name="servicefault" element="base:ServiceFault"/>
+ </message>
+ <portType name="ServicePort">
+ <operation name="service">
+ <input message="base:ServiceRequest"/>
+ <output message="base:ServiceResponse"/>
+ <fault name="servicefault" message="base:ServiceFault"/>
+ </operation>
+ </portType>
+ <binding name="ServiceBinding" type="base:ServicePort">
+ <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
+ <operation name="service">
+ <soap:operation style="document"/>
+ <input>
+ <soap:header message="base:ServiceRequest" part="WSSEHeader" use="literal"/>
+ <soap:body use="literal" parts="in"/>
+ </input>
+ <output>
+ <soap:body use="literal"/>
+ </output>
+ <fault name="servicefault">
+ <soap:fault name="servicefault" use="literal"/>
+ </fault>
+ </operation>
+ </binding>
+ <service name="Service">
+ <port name="Service" binding="base:ServiceBinding">
+ <soap:address location="https://pvawp.bmi.gv.at/bmi.gv.at/soap/zmr/soap/ZMRService"/>
+ </port>
+ </service>
+</definitions>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/wsdl/secext.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/wsdl/secext.xsd
new file mode 100644
index 00000000..1005b12a
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/wsdl/secext.xsd
@@ -0,0 +1,150 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Legal Disclaimer
+
+The presentation, distribution or other dissemination of the information
+contained in this specification is not a license, either expressly or impliedly,
+to any intellectual property owned or controlled by IBM or Microsoft and\or any other
+third party. IBM and Microsoft and\or any other third party may have patents, patent
+applications, trademarks, copyrights, or other intellectual property rights
+covering subject matter in this document. The furnishing of this document
+does not give you any license to IBM's and Microsoft's or any other third party's patents,
+trademarks, copyrights, or other intellectual property.
+
+This specification and the information contained herein is provided on an "AS IS"
+ basis and to the maximum extent permitted by applicable law, IBM and Microsoft provides
+the document AS IS AND WITH ALL FAULTS, and hereby disclaims all other warranties
+and conditions, either express, implied or statutory, including, but not limited
+to, any (if any) implied warranties, duties or conditions of merchantability, of
+fitness for a particular purpose, of accuracy or completeness of responses, of
+results, of workmanlike effort, of lack of viruses, and of lack of negligence,
+all with regard to the document. ALSO, THERE IS NO WARRANTY OR CONDITION OF
+TITLE, QUIET ENJOYMENT, QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR
+NON-INFRINGEMENT OF ANY INTELLECTUAL PROPERTY RIGHTS WITH REGARD TO THE DOCUMENT.
+
+IN NO EVENT WILL IBM or MICROSOFT BE LIABLE TO ANY OTHER PARTY FOR THE COST OF PROCURING
+SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS OF USE, LOSS OF DATA, OR ANY
+INCIDENTAL, CONSEQUENTIAL, DIRECT, INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER
+CONTRACT, TORT, WARRANTY, OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY
+OTHER AGREEMENT RELATING TO THIS DOCUMENT, WHETHER OR NOT SUCH PARTY HAD ADVANCE
+NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+
+Copyright Notice
+
+Copyright 2001, 2002 IBM Corporation and Microsoft Corporation. All rights reserved.
+-->
+<xsd:schema targetNamespace="http://schemas.xmlsoap.org/ws/2002/04/secext" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsse="http://schemas.xmlsoap.org/ws/2002/04/secext" xmlns="http://schemas.xmlsoap.org/ws/2002/04/secext" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" elementFormDefault="qualified" attributeFormDefault="unqualified" version="0.2">
+ <xsd:element name="Security">
+ <xsd:annotation>
+ <xsd:documentation>
+ This element defines header block to use for security-relevant data directed at a specific SOAP actor.
+ </xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:any processContents="lax" minOccurs="0" maxOccurs="unbounded">
+ <xsd:annotation>
+ <xsd:documentation>
+ The use of "any" is to allow extensibility and different forms of security data.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:any>
+ </xsd:sequence>
+ <xsd:anyAttribute processContents="lax"/>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="UsernameToken">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="Username"/>
+ <xsd:element ref="Password" minOccurs="0"/>
+ </xsd:sequence>
+ <xsd:attribute name="Id" type="xsd:ID"/>
+ <xsd:anyAttribute namespace="##other"/>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="Username">
+ <xsd:complexType>
+ <xsd:simpleContent>
+ <xsd:extension base="xsd:string">
+ <xsd:anyAttribute namespace="##other"/>
+ </xsd:extension>
+ </xsd:simpleContent>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="Password">
+ <xsd:complexType>
+ <xsd:simpleContent>
+ <xsd:extension base="xsd:string">
+ <xsd:attribute name="Type" type="xsd:QName"/>
+ <xsd:anyAttribute namespace="##other"/>
+ </xsd:extension>
+ </xsd:simpleContent>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="BinarySecurityToken">
+ <xsd:annotation>
+ <xsd:documentation>A security token that is encoded in binary</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:simpleContent>
+ <xsd:extension base="xsd:string">
+ <xsd:attribute name="Id" type="xsd:ID"/>
+ <xsd:attribute name="ValueType" type="xsd:QName"/>
+ <xsd:attribute name="EncodingType" type="xsd:QName"/>
+ <xsd:anyAttribute namespace="##other" processContents="strict"/>
+ </xsd:extension>
+ </xsd:simpleContent>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="SecurityTokenReference">
+ <xsd:annotation>
+ <xsd:documentation>
+ This element is used reference a security token.
+ </xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:choice minOccurs="0" maxOccurs="unbounded">
+ <xsd:element ref="Reference"/>
+ <xsd:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:choice>
+ <xsd:attribute name="Id" type="xsd:ID"/>
+ <xsd:anyAttribute namespace="##other" processContents="lax"/>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="Reference">
+ <xsd:complexType>
+ <xsd:attribute name="URI" type="xsd:anyURI"/>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:simpleType name="PasswordTypeEnum">
+ <xsd:restriction base="xsd:QName">
+ <xsd:enumeration value="wsse:PasswordText"/>
+ <xsd:enumeration value="wsse:PasswordDigest"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="ValueTypeEnum">
+ <xsd:restriction base="xsd:QName">
+ <xsd:enumeration value="wsse:X509v3"/>
+ <xsd:enumeration value="wsse:Kerberosv5TGT"/>
+ <xsd:enumeration value="wsse:Kerberosv5ST"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="EncodingTypeEnum">
+ <xsd:restriction base="xsd:QName">
+ <xsd:enumeration value="wsse:Base64Binary"/>
+ <xsd:enumeration value="wsse:HexBinary"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="FaultcodeEnum">
+ <xsd:restriction base="xsd:QName">
+ <xsd:enumeration value="wsse:UnsupportedSecurityToken"/>
+ <xsd:enumeration value="wsse:UnsupportedAlgorithm"/>
+ <xsd:enumeration value="wsse:InvalidSecurity"/>
+ <xsd:enumeration value="wsse:InvalidSecurityToken"/>
+ <xsd:enumeration value="wsse:FailedAuthentication"/>
+ <xsd:enumeration value="wsse:FailedCheck"/>
+ <xsd:enumeration value="wsse:SecurityTokenUnavailable"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/wsdl/secext_pvp.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/wsdl/secext_pvp.xsd
new file mode 100644
index 00000000..24896b99
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/wsdl/secext_pvp.xsd
@@ -0,0 +1,152 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Legal Disclaimer
+
+The presentation, distribution or other dissemination of the information
+contained in this specification is not a license, either expressly or impliedly,
+to any intellectual property owned or controlled by IBM or Microsoft and\or any other
+third party. IBM and Microsoft and\or any other third party may have patents, patent
+applications, trademarks, copyrights, or other intellectual property rights
+covering subject matter in this document. The furnishing of this document
+does not give you any license to IBM's and Microsoft's or any other third party's patents,
+trademarks, copyrights, or other intellectual property.
+
+This specification and the information contained herein is provided on an "AS IS"
+ basis and to the maximum extent permitted by applicable law, IBM and Microsoft provides
+the document AS IS AND WITH ALL FAULTS, and hereby disclaims all other warranties
+and conditions, either express, implied or statutory, including, but not limited
+to, any (if any) implied warranties, duties or conditions of merchantability, of
+fitness for a particular purpose, of accuracy or completeness of responses, of
+results, of workmanlike effort, of lack of viruses, and of lack of negligence,
+all with regard to the document. ALSO, THERE IS NO WARRANTY OR CONDITION OF
+TITLE, QUIET ENJOYMENT, QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR
+NON-INFRINGEMENT OF ANY INTELLECTUAL PROPERTY RIGHTS WITH REGARD TO THE DOCUMENT.
+
+IN NO EVENT WILL IBM or MICROSOFT BE LIABLE TO ANY OTHER PARTY FOR THE COST OF PROCURING
+SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS OF USE, LOSS OF DATA, OR ANY
+INCIDENTAL, CONSEQUENTIAL, DIRECT, INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER
+CONTRACT, TORT, WARRANTY, OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY
+OTHER AGREEMENT RELATING TO THIS DOCUMENT, WHETHER OR NOT SUCH PARTY HAD ADVANCE
+NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+
+Copyright Notice
+
+Copyright 2001, 2002 IBM Corporation and Microsoft Corporation. All rights reserved.
+-->
+<xsd:schema targetNamespace="http://schemas.xmlsoap.org/ws/2002/04/secext" xmlns:pvp="http://egov.gv.at/pvp1.xsd" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsse="http://schemas.xmlsoap.org/ws/2002/04/secext" xmlns="http://schemas.xmlsoap.org/ws/2002/04/secext" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" elementFormDefault="qualified" attributeFormDefault="unqualified" version="0.2">
+ <xsd:import namespace="http://egov.gv.at/pvp1.xsd" schemaLocation="../xsd/eingebunden/pvp1.xsd"/>
+ <xsd:element name="Security">
+ <xsd:annotation>
+ <xsd:documentation>
+ This element defines header block to use for security-relevant data directed at a specific SOAP actor.
+ </xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="pvp:pvpToken" minOccurs="0"/>
+ <xsd:any processContents="lax" minOccurs="0" maxOccurs="unbounded">
+ <xsd:annotation>
+ <xsd:documentation>
+ The use of "any" is to allow extensibility and different forms of security data.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:any>
+ </xsd:sequence>
+ <xsd:anyAttribute processContents="lax"/>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="UsernameToken">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="Username"/>
+ <xsd:element ref="Password" minOccurs="0"/>
+ </xsd:sequence>
+ <xsd:attribute name="Id" type="xsd:ID"/>
+ <xsd:anyAttribute namespace="##other"/>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="Username">
+ <xsd:complexType>
+ <xsd:simpleContent>
+ <xsd:extension base="xsd:string">
+ <xsd:anyAttribute namespace="##other"/>
+ </xsd:extension>
+ </xsd:simpleContent>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="Password">
+ <xsd:complexType>
+ <xsd:simpleContent>
+ <xsd:extension base="xsd:string">
+ <xsd:attribute name="Type" type="xsd:QName"/>
+ <xsd:anyAttribute namespace="##other"/>
+ </xsd:extension>
+ </xsd:simpleContent>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="BinarySecurityToken">
+ <xsd:annotation>
+ <xsd:documentation>A security token that is encoded in binary</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:simpleContent>
+ <xsd:extension base="xsd:string">
+ <xsd:attribute name="Id" type="xsd:ID"/>
+ <xsd:attribute name="ValueType" type="xsd:QName"/>
+ <xsd:attribute name="EncodingType" type="xsd:QName"/>
+ <xsd:anyAttribute namespace="##other" processContents="strict"/>
+ </xsd:extension>
+ </xsd:simpleContent>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="SecurityTokenReference">
+ <xsd:annotation>
+ <xsd:documentation>
+ This element is used reference a security token.
+ </xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:choice minOccurs="0" maxOccurs="unbounded">
+ <xsd:element ref="Reference"/>
+ <xsd:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:choice>
+ <xsd:attribute name="Id" type="xsd:ID"/>
+ <xsd:anyAttribute namespace="##other" processContents="lax"/>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="Reference">
+ <xsd:complexType>
+ <xsd:attribute name="URI" type="xsd:anyURI"/>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:simpleType name="PasswordTypeEnum">
+ <xsd:restriction base="xsd:QName">
+ <xsd:enumeration value="wsse:PasswordText"/>
+ <xsd:enumeration value="wsse:PasswordDigest"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="ValueTypeEnum">
+ <xsd:restriction base="xsd:QName">
+ <xsd:enumeration value="wsse:X509v3"/>
+ <xsd:enumeration value="wsse:Kerberosv5TGT"/>
+ <xsd:enumeration value="wsse:Kerberosv5ST"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="EncodingTypeEnum">
+ <xsd:restriction base="xsd:QName">
+ <xsd:enumeration value="wsse:Base64Binary"/>
+ <xsd:enumeration value="wsse:HexBinary"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="FaultcodeEnum">
+ <xsd:restriction base="xsd:QName">
+ <xsd:enumeration value="wsse:UnsupportedSecurityToken"/>
+ <xsd:enumeration value="wsse:UnsupportedAlgorithm"/>
+ <xsd:enumeration value="wsse:InvalidSecurity"/>
+ <xsd:enumeration value="wsse:InvalidSecurityToken"/>
+ <xsd:enumeration value="wsse:FailedAuthentication"/>
+ <xsd:enumeration value="wsse:FailedCheck"/>
+ <xsd:enumeration value="wsse:SecurityTokenUnavailable"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/allgemein/Auswertungen.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/allgemein/Auswertungen.xsd
new file mode 100644
index 00000000..c5efb2f6
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/allgemein/Auswertungen.xsd
@@ -0,0 +1,200 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: Auswertungen.xsd
+Zweck: Definiert Datentypen zum Auflisten und Abholen von Auswertungen aus dem ZMR
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2007-12-19 teo: +NurAbgeholte in AuswertungenAuflistenRequest (CR442)
+2005-05-17 tsch: AuswertungErzeugt hinzugefuegt
+2005-04-30 tsch: EntityID einer speziellen Auswertung optional zur Organisation
+2005-04-30 tsch: Feld GeneriertBis hinzugefuegt (Schätzung der Bereitstellungszeit, falls Auswertungsgenerierung in Arbeit)
+2005-04-29 tsch: Es können mehrere Auswertungen zugleich gelöscht werden
+2004-11-09 tsch: Auswertung-Langtext hinzugefuegt
+2004-09-27 tsch: Vom ZMR-Namespace nach BASE verschoben
+2004-06-24 tsch: Erstellung
+-->
+
+<xsd:schema targetNamespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:include schemaLocation="../eingebunden/EingebundenProxy.xsd"/>
+
+ <xsd:element name="AuswertungenAuflistenRequest">
+ <xsd:annotation>
+ <xsd:documentation>
+ Request zum Auflisten der im ZMR für eine Organisation erzeugten Auswertungen
+ Ist InclusiveAbgeholte='true', werden auch die Auswerungen geliefert, die schon abgeholt wurden.
+ </xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:choice>
+ <xsd:element ref="Organisation"/>
+ <xsd:element ref="EntityID"/>
+ </xsd:choice>
+ <xsd:element name="InclusiveAbgeholte" type="xsd:boolean"/>
+ <xsd:element name="NurAbgeholte" type="xsd:boolean" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="AuswertungenAuflistenResponse">
+ <xsd:annotation>
+ <xsd:documentation>
+ In der Response werden die für die Organisation erzeugten Auswertungen als Liste geliefert.
+ Die Auswertungen sind nach GeneriertAm aufsteigend sortiert
+ </xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="Message"/>
+ <xsd:choice>
+ <xsd:element ref="Organisation"/>
+ <xsd:element ref="EntityID"/>
+ </xsd:choice>
+ <xsd:element ref="Auswertung" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="AuswertungAbgeholtRequest">
+ <xsd:annotation>
+ <xsd:documentation>
+ Wenn alle Teile (Auswertungsdaten) einer Auswertung abgeholt (mittels HTTP-Get) und erfolgreich
+ verarbeitet wurden, muss dieser Request zum 'Abschliessen' der Auswertung geschickt werden.
+ Abgeholte Auswertungen werden nur nuch dann geliefert, wenn InclusiveAbgeholte='true' gesetzt ist.
+ Es muss die EntityID der abgeholten Auswertung geschickt werden.
+ </xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="EntityID" minOccurs="1" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="AuswertungAbgeholtResponse">
+ <xsd:annotation>
+ <xsd:documentation>
+ Response mit EntityID der abgeholten Auswertung
+ </xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="Message"/>
+ <xsd:element ref="EntityID" minOccurs="1" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="AuswertungErzeugtRequest">
+ <xsd:annotation>
+ <xsd:documentation>
+ Sobald eine Auswertung erzeugt wurde, kann über diese Schnittstelle der Empfänger aktiv verständigt werden (PUSH-Mechanismus)
+ </xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="Organisation"/>
+ <xsd:element ref="Auswertung"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="AuswertungErzeugtResponse">
+ <xsd:annotation>
+ <xsd:documentation>
+ Bestätigung des Empfängers, die Verstänfigung erhalten zu haben
+ </xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="Message"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="Auswertung">
+ <xsd:annotation>
+ <xsd:documentation>
+ Innerhalb einer Auswertung werden die geteilten Files aufsteigend durchnummeriert geliefert.
+ Als erster Schüssel der Sortierung dient der Datentyp, als zweiter die Nummerierung
+ </xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="Code">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="20"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="Langtext">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="50"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element ref="EntityID"/>
+ <xsd:choice>
+ <xsd:sequence>
+ <xsd:element ref="GeneriertAm"/>
+ <xsd:element ref="AuswertungAbgeholt" minOccurs="0"/>
+ <xsd:element ref="Auswertungsdaten" minOccurs="1" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:sequence>
+ <xsd:element name="BearbeitungsBeginn" type="TimestampType"/>
+ </xsd:sequence>
+ </xsd:choice>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="Auswertungsdaten">
+ <xsd:annotation>
+ <xsd:documentation>
+ Das File mit dem Auswertungsteil ist über den angegebenen (zur ZMR-Applikationsroot)
+ relativen URL referenziert und kann mittels HTTP-GET abgeholt werden.
+ </xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="Langtext">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="50"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="URL" type="xsd:string"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="AuswertungAbgeholt">
+ <xsd:annotation>
+ <xsd:documentation>
+ Falls die Auswertung schon einmal abgeholt wurde, wird dieser Datenteil mit den
+ Informationen zur Abholung (Organisation, Zeitpunkt) geliefert.
+ </xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="AbgeholtAm" type="TimestampType"/>
+ <xsd:element ref="DurchgefuehrtVon"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/allgemein/BasTabelleAbfrage.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/allgemein/BasTabelleAbfrage.xsd
new file mode 100644
index 00000000..ca78a990
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/allgemein/BasTabelleAbfrage.xsd
@@ -0,0 +1,193 @@
+<?xml version="1.0" encoding="UTF-8"?>
+ <!--
+Name: BasTabellenAbfrage.xsd
+Zweck: Definiert Abfragerequest und -responses für die BAS-Tabellenabfrage
+Author(s): Fürnweger Andreas, ZMR-SU
+
+Aenderungshistorie:
+2012-08-08 xfu: Erstellt
+-->
+
+<xsd:schema targetNamespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#" elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+ <xsd:include schemaLocation="../eingebunden/EingebundenProxy.xsd" />
+
+ <xsd:simpleType name="TabelleType">
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="AKADGRAD" />
+ <xsd:enumeration value="STAAT" />
+ <xsd:enumeration value="DOMAINCODE" />
+ <xsd:enumeration value="GEMNRBEHKZ" />
+ <xsd:enumeration value="TGEM" />
+ <xsd:enumeration value="GESCHAEFTSPROLLE" />
+ <xsd:enumeration value="RELIGION" />
+ </xsd:restriction>
+ </xsd:simpleType>
+
+ <xsd:element name="BasTabelleAbfrageRequest">
+ <xsd:annotation>
+ <xsd:documentation>
+ Definiert welche Tabelle mit welchen Suchkriterien aufgelistet werden soll.
+ InclusivHistorie: bestimmt ob nur aktuelle oder auch (fachlich) historische Einträge aufgelistet werden sollen
+ LetzteAenderungNach: Gibt man hier ein Datum an, werden nur Einträge gelistet, deren LetzteAenderung Datum nach diesem ist
+ </xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="Tabelle" type="base:TabelleType" />
+ <xsd:element ref="base:InclusivHistorie" />
+ <xsd:element name="LetzteAenderungNach" type="base:TimestampType" minOccurs="0" />
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="BasTabelleAbfrageResponse">
+ <xsd:annotation>
+ <xsd:documentation>Enthält alle gefunden Einträge der entsprechenden BAS-Tabelle</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:choice>
+ <xsd:element ref="base:BasStaat" minOccurs="0" maxOccurs="unbounded" />
+ <xsd:element ref="base:BasAkadGrad" minOccurs="0" maxOccurs="unbounded" />
+ <xsd:element ref="base:BasDomainCode" minOccurs="0" maxOccurs="unbounded" />
+ <xsd:element ref="base:GemnrBehkz" minOccurs="0" maxOccurs="unbounded" />
+ <xsd:element ref="base:BasTgem" minOccurs="0" maxOccurs="unbounded" />
+ <xsd:element ref="base:Rolle" minOccurs="0" maxOccurs="unbounded" />
+ <xsd:element ref="base:ReligionCode" minOccurs="0" maxOccurs="unbounded" />
+ </xsd:choice>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="BasStaat">
+ <xsd:complexType>
+ <xsd:annotation>
+ <xsd:documentation>Ein BAS.STAAT Eintrag mit den üblichen technischen und allen fachlichen Informationen</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="base:EntityErgebnisReferenz" />
+ <xsd:element name="ISOCode2" type="xsd:string" minOccurs="0" />
+ <xsd:element name="ISOCode3" type="xsd:string" minOccurs="0" />
+ <xsd:element name="StaatAnerkannt" type="xsd:boolean" minOccurs="0" />
+ <xsd:element name="Staatsbuerger" type="xsd:boolean" minOccurs="0" /> <!-- ZMR-2864 Staatsbuergerschaft -->
+ <xsd:element name="GebStaat" type="xsd:boolean" minOccurs="0" />
+ <xsd:element name="UmzugStaat" type="xsd:boolean" minOccurs="0" />
+ <xsd:element name="ReisedokStaat" type="xsd:boolean" minOccurs="0" />
+ <xsd:element name="ZugehoerigStaat" type="xsd:string" minOccurs="0" />
+ <xsd:element name="EwrStaat" type="xsd:boolean" minOccurs="0" />
+ <xsd:element name="EuStaat" type="xsd:boolean" minOccurs="0" />
+ <xsd:element name="EuStaatOffiziell" type="xsd:boolean" minOccurs="0" />
+ <xsd:element name="StaatName" type="xsd:string" minOccurs="0" />
+ <xsd:element name="StaatNameEinf" type="xsd:string" minOccurs="0" />
+ <xsd:element name="StaatNameLang" type="xsd:string" minOccurs="0" />
+ <xsd:element name="StaatNameNorm" type="xsd:string" minOccurs="0" />
+ <xsd:element name="StaatNummer" type="xsd:int" minOccurs="0" />
+ <xsd:element name="StaatKFZ" type="xsd:string" minOccurs="0" />
+ <xsd:element name="StaatEnglisch" type="xsd:string" minOccurs="0" />
+ <xsd:element name="UnStaat" type="xsd:boolean" minOccurs="0" />
+ <xsd:element name="PostStaat" type="xsd:boolean" minOccurs="0" />
+ <xsd:element name="PlzStaat" type="xsd:string" minOccurs="0" />
+ <xsd:element name="Kontinent" type="xsd:string" minOccurs="0" />
+ <xsd:element name="Region" type="xsd:string" minOccurs="0" />
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="BasAkadGrad">
+ <xsd:complexType>
+ <xsd:annotation>
+ <xsd:documentation>Ein BAS.AKADGRAD Eintrag mit den üblichen technischen und allen fachlichen Informationen</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="base:EntityErgebnisReferenz" />
+ <xsd:element ref="base:AkadGradStellung" minOccurs="0" />
+ <xsd:element ref="base:AkadGradReihung" minOccurs="0" />
+ <xsd:element name="Art" type="xsd:string" minOccurs="0" />
+ <xsd:element ref="base:AkadGradLang" minOccurs="0" />
+ <xsd:element ref="base:AkadGradKurz" minOccurs="0" />
+ <xsd:element name="ISOCode3" type="xsd:string" minOccurs="0" />
+ <xsd:element name="AkadGradNorm" type="xsd:string" minOccurs="0" />
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="BasDomainCode">
+ <xsd:complexType>
+ <xsd:annotation>
+ <xsd:documentation>Ein BAS.DOMAINCODE Eintrag mit den fürs ZMR3 relevanten Feldern</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element name="Bereich" type="xsd:string" />
+ <xsd:element name="Code" type="xsd:string" />
+ <xsd:element name="CodeText" type="xsd:string" />
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="GemnrBehkz">
+ <xsd:complexType>
+ <xsd:annotation>
+ <xsd:documentation>Ein BAS.GEMNRBEHKZ Eintrag mit den fürs ZMR3 relevanten Feldern</xsd:documentation>
+ </xsd:annotation>
+ <xsd:attribute name="gem" type="xsd:int" />
+ <xsd:attribute name="beh" type="xsd:int" />
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="BasTgem">
+ <xsd:complexType>
+ <xsd:annotation>
+ <xsd:documentation>Ein GW2.TGEM Eintrag mit den fürs ZMR3 relevanten Feldern</xsd:documentation>
+ </xsd:annotation>
+ <xsd:attribute name="name" type="xsd:string" />
+ <xsd:attribute name="nr" type="xsd:int" />
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="Rolle">
+ <xsd:complexType>
+ <xsd:annotation>
+ <xsd:documentation>Eine Rolle mit den erlaubten Geschäftsprozessen</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="base:Geschaeftsprozess" minOccurs="0" maxOccurs="unbounded" />
+ </xsd:sequence>
+ <xsd:attribute name="Name" type="xsd:string" />
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="ReligionCode">
+ <xsd:complexType>
+ <xsd:annotation>
+ <xsd:documentation>Ein SMI.RELIGIONCODE Eintrag mit den fürs ZMR3 relevanten Feldern</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element name="Bezeichnung" type="xsd:string"/>
+ <xsd:element name="Code" type="xsd:string"/>
+ <xsd:element name="KurzBez" type="xsd:string"/>
+ <xsd:element name="MigGueltig" type="xsd:string"/>
+ <xsd:element name="ReferenzNr" type="xsd:long"/>
+ <xsd:element name="Religionart" type="xsd:string"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="Geschaeftsprozess">
+ <xsd:complexType>
+ <xsd:annotation>
+ <xsd:documentation>Ein Geschäftsprozess zu einer Rolle mit optionaler Einschränkung auf bestimmte Vorgänge</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="base:Vorgang" minOccurs="0" maxOccurs="unbounded" />
+ </xsd:sequence>
+ <xsd:attribute name="Name" type="xsd:string" />
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="Vorgang">
+ <xsd:complexType>
+ <xsd:annotation>
+ <xsd:documentation>Ein Geschäftsprozess zu einer Rolle mit optionaler Einschränkung auf bestimmte Vorgänge</xsd:documentation>
+ </xsd:annotation>
+ <xsd:attribute name="Name" type="xsd:string" />
+ </xsd:complexType>
+ </xsd:element>
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/allgemein/Benutzereinstellungen.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/allgemein/Benutzereinstellungen.xsd
new file mode 100644
index 00000000..45bb9795
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/allgemein/Benutzereinstellungen.xsd
@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: Benutzereinstellungen.xsd
+Zweck: Definiert Datentypen für Benutzereinstellungen -Abfragen und Änderungen im ZMR
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2011-04-29 rp: LMR-905: +DefaultGemeindeNrSucheInclLMR
+2011-01-11 teo: LMR-837 Farbgestaltung Menü
+2010-01-27 teo: Suche mit Teilnamen (ZMR-1334)
+2009-12-10 mp: Suche inkl. LMR hinzugefügt (LMR-677)
+2008-04-08 xglettl: DruckOrtschaft und DruckPostort hinzu
+2006-08-24 tsch:
+2006-08-16 tsch: EingeschraenkteHistorie hinzugefügt
+2004-09-28 tsch: BehoerdenNr entfernt
+2004-09-08 tsch: BenutzerName hinzugefügt
+2004-08-17 tsch: Erstellung
+-->
+
+<xsd:schema targetNamespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:cio="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+
+ <xsd:include schemaLocation="../eingebunden/EingebundenProxy.xsd"/>
+ <xsd:include schemaLocation="Organisationseinstellungen.xsd"/>
+ <xsd:import namespace="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" schemaLocation="../eingebunden/PersonDataZMR.xsd"/>
+
+ <xsd:element name="BenutzereinstellungenAbfragenRequest">
+ <xsd:complexType>
+ <xsd:annotation>
+ <xsd:documentation>Leerer Request, die Identifikation des Benutzers wird aus den Logindaten gewonnen</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="BenutzereinstellungenAbfragenResponse">
+ <xsd:annotation>
+ <xsd:documentation>Benutzereinstellungsdaten des abfragenden Benutzers.</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="Benutzereinstellungen" minOccurs="1"/>
+ <xsd:element ref="Organisationseinstellungen" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="BenutzereinstellungenAendernRequest">
+ <xsd:complexType>
+ <xsd:annotation>
+ <xsd:documentation>geaenderte Benutzereinstellungen</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="Benutzereinstellungen" minOccurs="1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="BenutzereinstellungenAendernResponse">
+ <xsd:annotation>
+ <xsd:documentation>Benutzereinstellungsdaten des abfragenden Benutzers.</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="Benutzereinstellungen" minOccurs="1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="Benutzereinstellungen">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="Benutzer" minOccurs="0"/>
+ <xsd:element name="BenutzerName" type="BenutzerNameType" minOccurs="0"/>
+ <xsd:element ref="GemeindeNr" minOccurs="0"/>
+ <xsd:element ref="AnzahlSaetze" minOccurs="0"/>
+ <xsd:element name="SucheInclusivHistorie" type="xsd:boolean" minOccurs="0"/>
+ <xsd:element name="SucheFormalisiert" type="xsd:boolean" minOccurs="0"/>
+ <xsd:element name="SucheInclusivERnP" type="xsd:boolean" minOccurs="0"/>
+ <xsd:element name="SucheInclusivZMR" type="xsd:boolean" minOccurs="0"/>
+ <xsd:element name="SucheInclusivLMR" type="xsd:boolean" minOccurs="0"/>
+ <xsd:element name="SucheMitTeilnamen" type="xsd:boolean" minOccurs="0"/>
+ <xsd:element name="ErgebnisInclusivHistorie" type="xsd:boolean" minOccurs="0"/>
+ <xsd:element name="EingeschraenkteHistorie" type="xsd:boolean" minOccurs="0"/>
+ <xsd:element name="DruckOrtschaft" type="xsd:boolean" minOccurs="0"/>
+ <xsd:element name="DruckPostort" type="xsd:boolean" minOccurs="0"/>
+ <xsd:element ref="DruckZusatztext" minOccurs="0" maxOccurs="20"/>
+ <xsd:element ref="cio:ISOCode3" minOccurs="0" maxOccurs="2"/>
+ <xsd:element name="FarbigesMenue" type="xsd:boolean" minOccurs="0"/>
+ <xsd:element name="DefaultGemeindeNrSucheInclLMR" type="GemeindeNrType" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/allgemein/GeschaeftsprozesseAuflisten.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/allgemein/GeschaeftsprozesseAuflisten.xsd
new file mode 100644
index 00000000..34f8354c
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/allgemein/GeschaeftsprozesseAuflisten.xsd
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: GeschaeftsprozesseAuflisten.xsd
+Zweck: Definiert Datentypen die Abfrage der im ZMR für den aktuellen User verfügbaren Geschaeftsprozesse
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2015-05-20 xwelzl: ZMR-2194 Application-BuildID online abrufbar
+2008-12-11 teo: NCR-493 Anzeige der Versionen für das Deployment
+2004-09-09 tsch: VorgangRestriction hinzugefügt
+2004-08-17 tsch: Erstellung
+-->
+
+<xsd:schema targetNamespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:cio="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+
+ <xsd:include schemaLocation="../eingebunden/EingebundenProxy.xsd"/>
+
+ <xsd:element name="WorkflowsAuflistenRequest">
+ <xsd:annotation>
+ <xsd:documentation>
+ Request zum Auflisten der für den aktiven User verfügbaren Geschäftsprozesse.
+ Dieses Feld wird, genauso wie z.B. PersonSuchenRequest, innerhalb eines base:Request geschickt.
+ </xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="WorkflowsAuflistenResponse">
+ <xsd:annotation>
+ <xsd:documentation>
+ Enthält die Liste mit den für den User verfügbaren Geschäftsprozessen, sowie deren Sub-Prozesse (Vorgänge)
+ als Baumstruktur aufgebaut. Ein eintrag in der Liste enspricht einem Geschäftsprozess.
+ </xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="Workflow" minOccurs="0" maxOccurs="unbounded">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="ProzessName" />
+ <xsd:element ref="ProzessAnzeigeName" minOccurs="0" />
+ <xsd:element ref="ProzessStatus" />
+ <xsd:element ref="VorgangRestriction" minOccurs="0" maxOccurs="unbounded" />
+ <xsd:element ref="Subprozess" minOccurs="1" maxOccurs="unbounded" />
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="WorkflowCreated" type="TimestampType" minOccurs="0" />
+ <xsd:element name="WorkflowLastUpdate" type="TimestampType" minOccurs="0" />
+ <xsd:element name="ApplicationBuildID" type="xsd:string" minOccurs="0" maxOccurs="unbounded" />
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/allgemein/Messages.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/allgemein/Messages.xsd
new file mode 100644
index 00000000..47dcda53
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/allgemein/Messages.xsd
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: Messages.xsd
+Zweck: Definiert die Message-Datentypen fuer Services Request und Response (siehe Service.wsdl)
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2012-08-09 xfu: +BasTabelleAbfrage.xsd
+2004-02-18 tsch: Erstellung
+-->
+
+<xsd:schema targetNamespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:include schemaLocation="../eingebunden/InfoTechnisch.xsd"/>
+ <xsd:include schemaLocation="../eingebunden/Workflow.xsd"/>
+ <xsd:include schemaLocation="Benutzereinstellungen.xsd"/>
+ <xsd:include schemaLocation="Organisationseinstellungen.xsd"/>
+ <xsd:include schemaLocation="GeschaeftsprozesseAuflisten.xsd"/>
+ <xsd:include schemaLocation="Auswertungen.xsd"/>
+ <xsd:include schemaLocation="BasTabelleAbfrage.xsd"/>
+
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/allgemein/Organisationseinstellungen.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/allgemein/Organisationseinstellungen.xsd
new file mode 100644
index 00000000..b5058e1b
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/allgemein/Organisationseinstellungen.xsd
@@ -0,0 +1,151 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: Organisationseinstellungen.xsd
+Zweck: Definiert Datentypen für Organisationseinstellungen -Abfragen und Änderungen im ZMR
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2009-06-18 teo: Einstellungen für Messenger hinzugefügt
+2005-02-10 tsch: Feld ParameterCode hinzugefügt
+2004-08-17 tsch: Erstellung
+-->
+
+<xsd:schema targetNamespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:cio="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+
+ <xsd:include schemaLocation="../eingebunden/EingebundenProxy.xsd"/>
+
+ <xsd:element name="OrganisationseinstellungenAendernRequest">
+ <xsd:complexType>
+ <xsd:annotation>
+ <xsd:documentation>geaenderte Benutzereinstellungen</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="Organisationseinstellungen" minOccurs="1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="OrganisationseinstellungenAendernResponse">
+ <xsd:annotation>
+ <xsd:documentation>Benutzereinstellungsdaten des abfragenden Benutzers.</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="Organisationseinstellungen" minOccurs="1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="Organisationseinstellungen">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="BehoerdenNr" minOccurs="0"/>
+ <xsd:element name="KontaktOrganisation" minOccurs="0">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="KontaktPerson" minOccurs="0"/>
+ <xsd:element ref="KontaktEmail" minOccurs="0"/>
+ <xsd:element ref="KontaktTelefon" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="KontaktTechnisch" minOccurs="0">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="KontaktPerson" minOccurs="0"/>
+ <xsd:element ref="KontaktEmail" minOccurs="0"/>
+ <xsd:element ref="KontaktTelefon" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="Softwarepartner" minOccurs="0">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="45"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element ref="DruckZusatztext" minOccurs="0" maxOccurs="20"/>
+ <xsd:element name="AbgleichZMR" type="xsd:boolean" minOccurs="0"/>
+ <xsd:element name="AbgleichZMR2" type="xsd:boolean" minOccurs="0"/>
+ <xsd:element ref="Batchvorgaben" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element name="MessengerEinstellungen" minOccurs="0">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="ZugriffUeberAuswertungen" type="xsd:boolean" minOccurs="0"/>
+ <xsd:element name="Empfaenger" type="BenutzerType" minOccurs="0" maxOccurs="3"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+
+ <xsd:element name="Batchvorgaben" type="BatchvorgabenType"/>
+ <xsd:complexType name="BatchvorgabenType">
+ <xsd:sequence>
+ <xsd:element name="Batchname">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="20"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="Filegroesse" type="IntegerType" minOccurs="0"/>
+ <xsd:element name="FileformatXML" type="xsd:boolean" minOccurs="0"/>
+ <xsd:element name="FileformatCSV" type="xsd:boolean" minOccurs="0"/>
+ <xsd:element name="FileformatPDF" type="xsd:boolean" minOccurs="0"/>
+ <xsd:element name="FileformatXLS" type="xsd:boolean" minOccurs="0"/>
+ <xsd:element ref="BatchParameter" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="BatchParameter" type="BatchParameterType"/>
+ <xsd:complexType name="BatchParameterType">
+ <xsd:sequence>
+ <xsd:element name="ParameterTyp" type="xsd:string" minOccurs="0"/>
+ <xsd:element name="ParameterCode" type="xsd:string"/>
+ <xsd:element name="ParameterName" type="xsd:string"/>
+ <xsd:element name="ParameterWert" type="xsd:string"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="KontaktPerson">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="45"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="KontaktEmail">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="45"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="KontaktTelefon">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="18"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/allgemein/Service.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/allgemein/Service.xsd
new file mode 100644
index 00000000..81cd3e80
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/allgemein/Service.xsd
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Name: Service.xsd
+Zweck: Definiert die Serviceroot - Elemente base:Request und base:Response global
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2008-07-25 teo: +PDFResponse (optional! ZMR setzt dieses Feld bisher nicht!)
+2004-08-19 tsch: Erstellung
+-->
+
+<xsd:schema xmlns="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:include schemaLocation="Messages.xsd"/>
+ <xsd:include schemaLocation="../eingebunden/EingebundenProxy.xsd"/>
+
+ <xsd:element name="Request">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="WorkflowInfoClient"/>
+ <xsd:element ref="ClientInfo"/>
+ <xsd:any processContents="lax"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="Response">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="WorkflowInfoServer"/>
+ <xsd:element name="PDFResponse" type="xsd:base64Binary" minOccurs="0"/>
+ <xsd:element ref="ServerInfo"/>
+ <xsd:any processContents="lax"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/AbfrageMuster.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/AbfrageMuster.xsd
new file mode 100644
index 00000000..c7163abe
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/AbfrageMuster.xsd
@@ -0,0 +1,140 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: AbfrageParameter.xsd
+Zweck: Definiert Datentypen für generische Suchabfragen mit simplen Operatoren
+Author(s): Tschurtschenthaler Thomas (basierend auf suchmuster.xsd von DI Heinz Töfferl - Comm-Unity Software Development GmbH & Co KG)
+Aenderungshistorie:
+2005-03-30 tsch: Erstellung
+-->
+<xsd:schema xmlns="http://bmi.gv.at/namespace/zmr-su/base/20040201#" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+ <xsd:element name="AbfrageMuster">
+ <xsd:annotation>
+ <xsd:documentation>Daten zu einem Suchmuster (Ausdruck)</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:choice>
+ <xsd:sequence>
+ <xsd:element ref="FeldAbfrage"/>
+ <xsd:element ref="SubFeldAbfrage" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:sequence>
+ <xsd:annotation>
+ <xsd:documentation>
+ Dient zur Klammerung von Suchmuster-Ausdrücken.
+ Muss erst dann unterstützt werden, wenn eine Klammerung nötig wird.
+ </xsd:documentation>
+ </xsd:annotation>
+ <xsd:element ref="AbfrageMuster"/>
+ <xsd:element ref="SubAbfrageMuster" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:choice>
+ <xsd:attribute name="AbfrageName" type="xsd:string" use="optional"/>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="FeldAbfrage">
+ <xsd:annotation>
+ <xsd:documentation>Eine Sucheinschränkung (= Einschränkung für ein Feld)</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="Feld" type="xsd:string"/>
+ <xsd:element ref="Relation"/>
+ <xsd:element name="Wert" type="xsd:string"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="Operation" block="restriction" default="UND">
+ <xsd:annotation>
+ <xsd:documentation>Verknüpfung mit der nächsten Zeile (Default: AND)</xsd:documentation>
+ </xsd:annotation>
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:NMTOKEN">
+ <xsd:enumeration value="UND"/>
+ <xsd:enumeration value="ODER"/>
+ <xsd:enumeration value="ODER_SELF"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="Relation">
+ <xsd:annotation>
+ <xsd:documentation>Mögliche Vergleichsoperatoren.</xsd:documentation>
+ </xsd:annotation>
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="IST"/>
+ <xsd:enumeration value="IST NICHT"/>
+ <xsd:enumeration value="BEGINNT MIT"/>
+ <xsd:enumeration value="BEGINNT NICHT MIT"/>
+ <xsd:enumeration value="ENDET MIT"/>
+ <xsd:enumeration value="ENDET NICHT MIT"/>
+ <xsd:enumeration value="GRÖSSER ALS"/>
+ <xsd:enumeration value="GRÖSSER GLEICH"/>
+ <xsd:enumeration value="KLEINER ALS"/>
+ <xsd:enumeration value="KLEINER GLEICH"/>
+ <xsd:enumeration value="ENTHÄLT"/>
+ <xsd:enumeration value="ENTHÄLT NICHT"/>
+ <xsd:enumeration value="IST LEER"/>
+ <xsd:enumeration value="IST NICHT LEER"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="AbfrageSortierung">
+ <xsd:annotation>
+ <xsd:documentation>Daten zur Sortierung einer Abfrage</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="SortSchluessel" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="SortSchluessel">
+ <xsd:annotation>
+ <xsd:documentation>Sortierungsschluessel einer Abfrage</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="Feld" type="xsd:string"/>
+ <xsd:element name="Absteigend" type="xsd:boolean"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="SubFeldAbfrage">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="Operation"/>
+ <xsd:element ref="FeldAbfrage"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="SubAbfrageMuster">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="Operation"/>
+ <xsd:element ref="AbfrageMuster"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="AbfrageParameter">
+ <xsd:annotation>
+ <xsd:documentation>Daten zur Parametrisierung einer Abfrage</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="Parameter" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="Parameter">
+ <xsd:annotation>
+ <xsd:documentation>Ein einzelner Abfrageparameter</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="Name" type="xsd:string"/>
+ <xsd:element name="Wert" type="xsd:string"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+</xsd:schema>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/AkademischerGradFelder.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/AkademischerGradFelder.xsd
new file mode 100644
index 00000000..da73c389
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/AkademischerGradFelder.xsd
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: AkademischerGradFelder.xsd
+Zweck: Definiert allgemein nutzbare Felder für akademische Grade
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2004-12-15 tsch: AkadGradReihung - Wertebereich erweitert
+2004-06-20 tsch: Erstellung
+-->
+
+<xsd:schema xmlns="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ targetNamespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:include schemaLocation="SimpleTypes.xsd"/>
+
+ <xsd:element name="AkadGradStellung">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="VOR"/>
+ <xsd:enumeration value="NACH"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="AkadGradReihung">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="0"/>
+ <xsd:enumeration value="1"/>
+ <xsd:enumeration value="2"/>
+ <xsd:enumeration value="2/3"/>
+ <xsd:enumeration value="3"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="AkadGradLang">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="90"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="AkadGradKurz">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="30"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="AkadGradKey" type="IDType"/>
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/Blaettern.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/Blaettern.xsd
new file mode 100644
index 00000000..943439b8
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/Blaettern.xsd
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: Blaettern.xsd
+Zweck: Definiert Request-Typen für das allgemeine Blättern; Die Response hängt vom Workflow-Vorgang ab (Personensuchergebnis, Avisosuchergebnis, ...)
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2006-04-19 toef: Richtungswerte 'Anfang' und 'Ende' hinzugefügt
+2005-09-20 tsch: Richtungswert 'Aktualisieren' hinzugefügt
+2004-06-14 tsch: Organisation nach ClientInfo verschoben
+2004-04-07 tsch: Erstellung
+-->
+
+<xsd:schema xmlns="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ targetNamespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+ <xsd:include schemaLocation="InfoFachlich.xsd"/>
+
+ <xsd:element name="BlaetternRequest">
+ <xsd:annotation>
+ <xsd:documentation>
+ Für Suchvorgänge, in deren Ergebnisliste geblättert werden kann, stellt dieser Request
+ eine generische Schnittstelle zum Blättern dar. Er wird mit demselben Vorgang-Namen in der
+ Workflowschnittstelle geschickt, wie der ursprüngliche Suche-Request. Als Ergebnis wird
+ das Suchergebnis des ensprechenden Suchvorgangs analog zur rsprünglichen Suche-Response geliefert.
+ </xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="BlaetternInfo"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="BlaetternInfo">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="ErgebnislisteName" type="xsd:string" minOccurs="0"/>
+ <xsd:element name="Richtung">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="Vor"/>
+ <xsd:enumeration value="Zurueck"/>
+ <xsd:enumeration value="Aktualisieren"/>
+ <xsd:enumeration value="Anfang"/>
+ <xsd:enumeration value="Ende"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element ref="AnzahlSaetze"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/DokumentFelder.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/DokumentFelder.xsd
new file mode 100644
index 00000000..0c38ec09
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/DokumentFelder.xsd
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: DokumentFelder.xsd
+Zweck: Definiert allgemein nutzbare Felder für Dokumente/Reisedokumente
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2005-09-26 tsch: DokumentName hinzugefügt
+2004-09-29 tsch: Felder für Standard-Dokumente hinzugefügt
+2004-06-24 tsch: AusstellDatum: Timestamp wird xsd:date
+2004-01-22 tsch: Erstellung
+-->
+
+<xsd:schema xmlns="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ targetNamespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:include schemaLocation="SimpleTypes.xsd"/>
+
+ <xsd:element name="DokumentArt">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="55"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="DokumentNummer">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="256"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="EintragungsNummer">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="45"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="DokumentName">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="54"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="AusstellDatum" type="xsd:date"/>
+ <xsd:element name="AblaufDatum" type="xsd:date"/>
+ <xsd:element name="SterbeDatum" type="xsd:date"/>
+ <xsd:element name="SterbeUhrzeit" type="xsd:time"/>
+ <xsd:element name="AusstellBehoerde">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="90"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="Ausstellungsstaat" type="StaatenNameType"/>
+ <xsd:element name="DokumentGiltBis" type="TimestampType"/>
+
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/EingebundenProxy.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/EingebundenProxy.xsd
new file mode 100644
index 00000000..de80a94f
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/EingebundenProxy.xsd
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Name: EingebundenProxy.xsd
+Zweck: Fasst XSD-Files zusammen, die oft eingebunden werden
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2009-07-07 teo: +PersonExport
+2003-12-10 tsch: Erstellung
+-->
+
+<xsd:schema xmlns="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:include schemaLocation="InfoFachlich.xsd"/>
+ <xsd:include schemaLocation="InfoTechnisch.xsd"/>
+ <xsd:include schemaLocation="MeldungFelder.xsd"/>
+ <xsd:include schemaLocation="PersonFelder.xsd"/>
+ <xsd:include schemaLocation="DokumentFelder.xsd"/>
+ <xsd:include schemaLocation="Workflow.xsd"/>
+ <xsd:include schemaLocation="Blaettern.xsd"/>
+ <xsd:include schemaLocation="AkademischerGradFelder.xsd"/>
+ <xsd:include schemaLocation="AbfrageMuster.xsd"/>
+ <xsd:include schemaLocation="PersonExport.xsd"/>
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/Entity.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/Entity.xsd
new file mode 100644
index 00000000..a5fbac59
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/Entity.xsd
@@ -0,0 +1,135 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: Entity.xsd
+Zweck: Definiert allgemeine Datentypen für Entities (Person, Meldung, ...) der Register
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2012-08-09 xfu: Beginncode und -text ist optional
+2004-10-27 tsch: Behoerdenschluessel hinzugefügt
+2004-09-28 tsch: OrgBezeichnung hinzugefügt
+2004-06-21 tsch: EntityReferenz ohne LetzteAenderung
+2004-06-18 tsch: BeginnText hinzugefügt
+2004-01-22 tsch: EntityErgebnisReferenz statt Entity abstract
+2003-11-16 tsch: Erstellung
+-->
+<xsd:schema xmlns="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ targetNamespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:include schemaLocation="SimpleTypes.xsd"/>
+
+ <xsd:element name="EntityErgebnisReferenz" type="EntityErgebnisReferenzType"/>
+ <xsd:complexType name="EntityErgebnisReferenzType">
+ <xsd:annotation>
+ <xsd:documentation>Referenziert eine Entity in der Datenbank für Suchergebnisse</xsd:documentation>
+ </xsd:annotation>
+
+ <xsd:sequence>
+ <xsd:sequence>
+ <xsd:element ref="Technisch"/>
+ <xsd:group ref="ErgebnisFachlichGroup"/>
+ </xsd:sequence>
+ </xsd:sequence>
+
+ </xsd:complexType>
+
+ <xsd:element name="EntityReferenz" type="EntityReferenzType"/>
+ <xsd:complexType name="EntityReferenzType">
+ <xsd:annotation>
+ <xsd:documentation>Referenziert eine Entity in der Datenbank für Aenderungen (immer die aktuellste, das heisst jüngstes 'Von')</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="EntityID"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="Technisch">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="EntityID"/>
+ <xsd:element ref="LetzteAenderung"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:group name="ErgebnisFachlichGroup">
+ <xsd:sequence>
+ <xsd:element ref="Von"/>
+ <xsd:element ref="BeginnCode" minOccurs="0"/> <!-- Einträge in BAS.STAAT und BAS.AKADGRAD haben keinen Beginncode (werden aber in BasTabelleAbfrage.xsd abgerufen) -->
+ <xsd:element ref="BeginnText" minOccurs="0"/>
+ <xsd:element ref="BeginnFreitext" minOccurs="0"/>
+ <xsd:element ref="Bis" minOccurs="0"/>
+ <xsd:element ref="DurchgefuehrtVon"/>
+ </xsd:sequence>
+ </xsd:group>
+
+ <xsd:element name="Von" type="TimestampType"/>
+ <xsd:element name="Bis" type="TimestampType"/>
+ <xsd:element name="BeginnCode" type="GrundCodeType"/>
+ <xsd:element name="BeginnText" type="GrundTextType"/>
+ <xsd:element name="BeginnFreitext" type="GrundFreitextType"/>
+ <xsd:element name="EntityID" type="ENTITYIDType"/>
+ <xsd:element name="LetzteAenderung" type="TimestampType"/>
+ <xsd:element name="DurchgefuehrtVon" type="DurchgefuehrtVonType"/>
+ <xsd:complexType name="DurchgefuehrtVonType">
+ <xsd:sequence>
+ <xsd:element ref="Organisation"/>
+ <xsd:element ref="Benutzer" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="Organisation">
+ <xsd:complexType>
+ <xsd:annotation>
+ <xsd:documentation>
+ Die derzeit bekannten Organisationen sind strikt definiert (BehoerdenNr, GemeindeNr, KundenNr);
+ neue, noch nicht definierte Organiationen, können mittels eines (Orgtyp, OrgCode)-Paares übermittelt werden.
+ </xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:choice>
+ <xsd:choice>
+ <xsd:element ref="BehoerdenNr"/>
+ <xsd:element ref="GemeindeNr"/>
+ <xsd:element ref="KundenNr"/>
+ <xsd:element ref="Behoerdenschluessel"/>
+ </xsd:choice>
+ <xsd:sequence>
+ <xsd:element ref="OrgTyp"/>
+ <xsd:element ref="OrgCode"/>
+ </xsd:sequence>
+ </xsd:choice>
+ <xsd:element ref="OrgBezeichnung" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="BehoerdenNr" type="BehoerdenNrType"/>
+ <xsd:element name="Behoerdenschluessel" type="BehoerdenschluesselType"/>
+ <xsd:element name="GemeindeNr" type="GemeindeNrType"/>
+ <xsd:element name="KundenNr" type="KundenNrType"/>
+ <xsd:element name="OrgTyp" type="OrgTypType"/>
+ <xsd:element name="OrgCode" type="OrgCodeType"/>
+ <xsd:element name="Benutzer" type="BenutzerType"/>
+ <xsd:element name="OrgBezeichnung">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="80"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="BehoerdenBezeichnung">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="80"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+</xsd:schema>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/InfoFachlich.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/InfoFachlich.xsd
new file mode 100644
index 00000000..20212cc2
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/InfoFachlich.xsd
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: InfoFachlich.xsd
+Zweck: Definiert Typen für allgemeine fachliche Informationen der Usecases
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2006-08-08 tsch: Feld EingeschraenkteHistorie hinzugefügt
+2004-09-09 tsch: Register hinzugefügt
+2004-07-07 tsch: InfoFachlichType.Von optional, InfoFachlichType.GrundCode Mussfeld
+2004-06-22 tsch: SaetzeVon, SaetzeBis hinzugefügt
+2004-06-18 tsch: ErgebnissatzInfo, Beendigung hinzugefügt
+2004-04-17 tsch: Organisation entfernt
+2004-04-13 tsch: InfoFachlichType - GrundCode optional
+2003-11-16 tsch: Erstellung
+-->
+
+<xsd:schema xmlns="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ targetNamespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:cio="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+ <xsd:include schemaLocation="SimpleTypes.xsd"/>
+ <xsd:include schemaLocation="Entity.xsd"/>
+ <xsd:import namespace="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" schemaLocation="PersonDataZMR.xsd"/>
+
+ <xsd:element name="ErgebnissatzInfo" type ="ErgebnissatzInfoType"/>
+ <xsd:complexType name="ErgebnissatzInfoType">
+ <xsd:sequence>
+ <xsd:annotation>
+ <xsd:documentation>
+ Letze-Änderung-Timestamp des Gesamt-Satzes (Jüngster Timestamp aller Entities im Satz),
+ Muss bei einem Änderungsvorgang als Letzte-Änderung-Timestamp geschickt werden.
+ </xsd:documentation>
+ </xsd:annotation>
+ <xsd:element ref="LetzteAenderung"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="Message">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="Number"/>
+ <xsd:element ref="Text"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="Number" type="IntegerType"/>
+ <xsd:element name="Text">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="250"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:complexType name="InfoFachlichType" abstract="true">
+ <xsd:annotation>
+ <xsd:documentation>allgemeine fachliche Informationen</xsd:documentation>
+ </xsd:annotation>
+
+ <xsd:sequence>
+ <xsd:element ref="Von" minOccurs="0"/>
+ <xsd:element name="GrundCode" type="GrundCodeType"/>
+ <xsd:element ref="GrundFreitext" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="BPKPersonInfo" type="BPKPersonInfoType"/>
+ <xsd:complexType name="BPKPersonInfoType">
+ <xsd:annotation>
+ <xsd:documentation>Bereichspezifische Bürgerkarten-Information einer Person</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="cio:NatuerlichePerson"/>
+ <xsd:element ref="Bereichskennung"/>
+ <xsd:element ref="BPK"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="Beendigung" type="xsd:boolean"/>
+ <xsd:element name="Bezugsfeld" type="BezugsfeldType"/>
+
+ <xsd:element name="Stichtag" type="TimestampType"/>
+ <xsd:element name="InclusivHistorie" type="xsd:boolean"/>
+ <xsd:element name="EingeschraenkteHistorie" type="xsd:boolean"/>
+ <xsd:element name="Formalisiert" type="xsd:boolean"/>
+ <xsd:element name="ErstellePDF" type="xsd:boolean"/>
+ <xsd:element name="InclusivAusgeblendeteSaetze" type="xsd:boolean"/>
+ <xsd:element name="InclusivNameVorErsterEhe" type="xsd:boolean"/>
+ <xsd:element name="GefundeneSaetze" type="IntegerType"/>
+ <xsd:element name="AnzahlSaetze" type="IntegerType"/>
+ <xsd:element name="SaetzeVon" type="IntegerType"/>
+ <xsd:element name="SaetzeBis" type="IntegerType"/>
+ <xsd:element name="GrundFreitext" type="GrundFreitextType"/>
+ <xsd:element name="Bereichskennung" type="xsd:string"/>
+ <xsd:element name="BPK" type="xsd:string"/>
+ <xsd:element name="Register" type="RegisterType"/>
+
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/InfoTechnisch.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/InfoTechnisch.xsd
new file mode 100644
index 00000000..e23ff4fe
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/InfoTechnisch.xsd
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: InfoTechnisch.xsd
+Zweck: Definiert Typen für allgemeine technische Informationen der Usecases
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2004-09-09 tsch: ErrorCode, ErrorMessage hinzugefügt
+2004-06-24 tsch: UserInfo als Message definiert
+2004-05-17 tsch: Organisation, Client dazugefügt; Softwarehaus, ClientVersion entfernt
+2003-11-16 tsch: Erstellung
+-->
+
+<xsd:schema targetNamespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+ <xsd:include schemaLocation="InfoFachlich.xsd"/>
+
+ <xsd:element name="ClientInfo" type="ClientInfoType"/>
+
+ <xsd:complexType name="ClientInfoType">
+ <xsd:annotation>
+ <xsd:documentation>Technische Client-Informationen</xsd:documentation>
+ </xsd:annotation>
+
+ <xsd:sequence>
+ <xsd:element ref="Organisation"/>
+ <xsd:element ref="Client">
+ <xsd:annotation>
+ <xsd:documentation>Herstellername der Client-Software inklusive Version (Bsp.: ZMRHTMLClient V3.0)</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="Client">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="18"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+
+ <xsd:element name="ServerInfo" type="ServerInfoType"/>
+
+ <xsd:complexType name="ServerInfoType">
+ <xsd:annotation>
+ <xsd:documentation>Technische Server-Informationen</xsd:documentation>
+ </xsd:annotation>
+
+ <xsd:sequence>
+ <xsd:element ref="GeneriertVon">
+ <xsd:annotation>
+ <xsd:documentation>Applikationsname und -version</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element ref="GeneriertAm">
+ <xsd:annotation>
+ <xsd:documentation>Generierung Timestamp</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element ref="ServerTransaktionNr">
+ <xsd:annotation>
+ <xsd:documentation>Transaktionsnummer des Servers</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element ref="UserInfo" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ Enthält neue User-Information (wie z.B. Information über Wartungarbeiten am ZMR)
+ Diese Info kann dem User am Bildschirm angezeigt werden.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="GeneriertVon">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="50"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="GeneriertAm" type="TimestampType"/>
+ <xsd:element name="ErrorCode" type="xsd:string"/>
+ <xsd:element name="ErrorMessage" type="xsd:string"/>
+ <xsd:element name="ServerTransaktionNr" type="IDType"/>
+ <xsd:element name="UserInfo">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="Message"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/MeldungFelder.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/MeldungFelder.xsd
new file mode 100644
index 00000000..2179baaf
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/MeldungFelder.xsd
@@ -0,0 +1,283 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: MeldungFelder.xsd
+Zweck: Definiert allgemein nutzbare Felder für Meldedaten
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2010-11-24 mp: +Infotext (ZMR-1513)
+2009-11-20 mp: Gebäudeeigenschaft und Nutzungsart hinzugefügt
+2006-06-26 tsch: OrientierungsnummerBis hinzugefügt
+2005-12-06 tsch: Detailfelder für GWR-Tueren hinzugefügt
+2004-12-09 tsch: OKZ und SKZ alphanumerisch
+2004-08-16 tsch: Bezirkskennung, DruckZusatztext hinzugefügt
+2004-08-02 tsch: PeriodeCode, PeriodeText, PeriodeFreitext hinzugefügt
+2004-07-30 tsch: HauptIdentadresse->HauptIdent; AdressZusatz enfernt; +OKZ; +SKZ; +Adressschluessel; +InfoMeldewesen
+2004-06-24 tsch: GBRRefkey, Postleitzahlgebiet hinzugefügt
+2004-01-27 tsch: Erstellung
+-->
+
+<xsd:schema xmlns="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ targetNamespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+ <xsd:include schemaLocation="SimpleTypes.xsd"/>
+
+
+ <xsd:element name="GemeldetVon" type="TimestampType"/>
+ <xsd:element name="GemeldetBis" type="TimestampType"/>
+
+ <xsd:element name="PeriodeCode" type="GrundCodeType"/>
+ <xsd:element name="PeriodeText" type="GrundTextType"/>
+ <xsd:element name="PeriodeFreitext" type="GrundFreitextType"/>
+
+ <xsd:element name="Unterkunftgeber">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="250"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="ADRRefkey">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="12"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="GBRRefkey">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="12"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="HauptIdent">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="H"/>
+ <xsd:enumeration value="I"/>
+ <xsd:enumeration value="B"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="OKZ">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:pattern value="[0-9;A-Z]{5}"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="SKZ">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:pattern value="[0-9;A-Z]{6}"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="Adressstatus">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="9"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="Hofname">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="50"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="StrasseZweisprachig">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="108"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="Gebaeudeunterscheidung">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="60"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="Postleitzahlgebiet">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="54"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="InfoMeldewesen">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="100"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="GBDUntteil" type="xsd:boolean"/>
+
+ <xsd:element name="NameZuteil" type="xsd:boolean"/>
+
+ <xsd:element name="Adressschluessel">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="OKZ" minOccurs="0"/>
+ <xsd:element ref="SKZ" minOccurs="0"/>
+ <xsd:element ref="ADRRefkey" minOccurs="0"/>
+ <xsd:element ref="GBRRefkey" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="Bezirkskennung">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:pattern value="[0-9]{3}"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="DruckZusatztext">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="230"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="Infotext">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="230"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="TuerNr">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="25"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="TopNr">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="25"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="Lagebeschreibung">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="25"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="NtzLage">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="1"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="NtzStock">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="3"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="NtzAdrart">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="1"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="OrientierungsnummerBis">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="32"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="GbdEigenschaft">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="2"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="NtzArt">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="2"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/PersonDataZMR.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/PersonDataZMR.xsd
new file mode 100644
index 00000000..d5d2df47
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/PersonDataZMR.xsd
@@ -0,0 +1,741 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: PersonDataZMR.xsd
+Zweck: Striktere Redefinition des Generischen Schemas zum Speichern und Austauschen von Personendaten des Chief Information Office Austria, Stabsstelle IKT-Strategie des Bundes, BMÖLS
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2012-04-12 ee : element "Adresse" entfernt, substitutionGroups darauf entfernt
+ -> mit wsdl2java wieder kompilierbar, sonst "Adresse is referenced but not defined." error
+2010-07-09 rp : LMR-783: +GueltigVon, GueltigBis bei Staatsangehoerigkeit
+2009-11-25 teo : ZMR-1296 Anpassungen aufgrund Bundesgesetz über die eingetragene Partnerschaft (EPG)
+2006-04-18 woeg: Familienstand
+2005-09-26 tsch: Internetadresse, Telefonadresse übernommen, Postleitzahl alphanumerisch
+2004-01-31 tsch: maximale Feldlänge für Geburtsbundesland auf 72 erhöht, minimale auf 0.
+2004-12-09 tsch: Adresscode und Objektnummer alphanumerisch, Postleitzahl mit führender Null
+2004-11-02 tsch: Elemenent Affix in PersonenNameTyp Unbounded
+2004-08-24 tsch: Element PersonenDaten übernommen
+2004-07-30 tsch: Anpassungen von Personrecord-Feldern: +Adresszeile; Gebaeudeteil->Gebaeude; Nutzungseinheitnummer->Nutzungseinheit; NTZLNR->Nutzungseinheitlaufnummer; +Postfach; AdressRegEintrag->AdressRegisterEintrag;Gemeindekennzahl->Gemeindekennziffer
+2004-07-20 tsch: Staatsangehörigkeit-Felder optional
+2004-07-08 tsch: Region (Postleitzahlgebiet) hinzugefügt
+2004-06-24 tsch: StaatsCode, StaatsName in Postadresse übernommen
+2004-01-28 tsch: Adaptionen an neuen CIO-PersonDataDE Record
+2004-01-27 tsch: ZMRAdresse wird PostAdresse
+2004-01-15 tsch: Erstellung
+-->
+
+<xsd:schema targetNamespace="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" xmlns="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+ <xsd:import namespace="http://www.w3.org/2000/09/xmldsig#" schemaLocation="W3C-XMLDSig.xsd"/>
+ <xsd:annotation>
+ <xsd:documentation>This version of person deploys only global elements. All types derived from abstract types have been replaced by substitution groups</xsd:documentation>
+ </xsd:annotation>
+
+ <xsd:element name="Identification" type="IdentificationType">
+ <xsd:annotation>
+ <xsd:documentation>unique identification entities</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:complexType name="IdentificationType">
+ <xsd:annotation>
+ <xsd:documentation>unique identifier</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element name="Value" type="xsd:string">
+ <xsd:annotation>
+ <xsd:documentation>actual value of the identifier.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element name="Type" type="xsd:anyURI">
+ <xsd:annotation>
+ <xsd:documentation>type of value (eg 'ZMR', 'SV-Nummer', 'Martrikelnummer', database identification, ...)</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded">
+ <xsd:annotation>
+ <xsd:documentation>zusätzliche felder</xsd:documentation>
+ </xsd:annotation>
+ </xsd:any>
+ </xsd:sequence>
+ </xsd:complexType>
+
+
+ <xsd:element name="PersonenDaten" type="PersonenDatenTyp">
+ <xsd:annotation>
+ <xsd:documentation>Personendatenstruktur</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:complexType name="PersonenDatenTyp">
+ <xsd:sequence>
+ <xsd:element ref="NatuerlichePerson"/>
+ <xsd:element ref="PostAdresse" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+
+ <xsd:element name="NatuerlichePerson" type="NatuerlichePersonTyp" substitutionGroup="Person">
+ <xsd:annotation>
+ <xsd:documentation>element of physical person type</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element name="Person" type="AbstractPersonType">
+ <xsd:annotation>
+ <xsd:documentation>element of person type</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:complexType name="AbstractPersonType" abstract="true">
+ <xsd:annotation>
+ <xsd:documentation>main structure of person data</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence minOccurs="0">
+ <xsd:element name="Identification" type="IdentificationType" minOccurs="0" maxOccurs="unbounded">
+ <xsd:annotation>
+ <xsd:documentation>unique identification entities</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ </xsd:sequence>
+ <xsd:attribute name="Id" type="xsd:ID" use="optional"/>
+ <xsd:anyAttribute namespace="##other"/>
+ </xsd:complexType>
+
+ <xsd:complexType name="NatuerlichePersonTyp">
+ <xsd:annotation>
+ <xsd:documentation>physical person</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexContent>
+ <xsd:extension base="AbstractPersonType">
+ <xsd:sequence minOccurs="0">
+ <xsd:element ref="PersonenName" minOccurs="0"/>
+ <xsd:element ref="AlternativName" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element ref="Familienstand" minOccurs="0"/>
+ <xsd:element ref="Geschlecht" minOccurs="0"/>
+ <xsd:element ref="Geburtsdatum" minOccurs="0"/>
+ <xsd:element ref="Geburtsort" minOccurs="0"/>
+ <xsd:element ref="Geburtsbundesland" minOccurs="0"/>
+ <xsd:element ref="Geburtsstaat" minOccurs="0"/>
+ <xsd:element ref="Sterbedatum" minOccurs="0"/>
+ <xsd:element ref="Staatsangehoerigkeit" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded">
+ <xsd:annotation>
+ <xsd:documentation>any additional properties</xsd:documentation>
+ </xsd:annotation>
+ </xsd:any>
+ </xsd:sequence>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="AlternativName">
+ <xsd:annotation>
+ <xsd:documentation>Former name, Artist name, changes of Given name ... type of name is given as attribute - choose from list or define new type</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="Familienname">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="108"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ </xsd:sequence>
+ <xsd:attribute name="Type" type="DefinierterAlternativNamensTypTyp" use="required"/>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:simpleType name="DefinierterAlternativNamensTypTyp">
+ <xsd:annotation>
+ <xsd:documentation>known types of alternative names</xsd:documentation>
+ </xsd:annotation>
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="Kuenstlername"/>
+ <xsd:enumeration value="Spitzname"/>
+ <xsd:enumeration value="FruehererName"/>
+ <xsd:enumeration value="Alias"/>
+ <xsd:enumeration value="NameVorErsterEhe"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+
+ <xsd:element name="PersonenName" type="PersonenNameTyp"/>
+
+ <xsd:complexType name="PersonenNameTyp">
+ <xsd:sequence>
+ <xsd:element ref="Vorname" minOccurs="0"/>
+ <xsd:element ref="Familienname" minOccurs="0"/>
+ <xsd:element ref="Affix" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+
+ <xsd:element name="Familienname">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="108"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="Vorname" nillable="true">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="108"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="Affix">
+ <xsd:complexType>
+ <xsd:simpleContent>
+ <xsd:extension base="xsd:string">
+ <xsd:attribute name="typ" use="required">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="akademischerGrad"/>
+ <xsd:enumeration value="Adelstitel"/>
+ <xsd:enumeration value="FamiliennamenSuffix"/>
+ <xsd:enumeration value="Anrede"/>
+ <xsd:enumeration value="Generation"/>
+ <xsd:enumeration value="Qualifikation"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:attribute>
+ <xsd:attribute name="position" use="required">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="prefix"/>
+ <xsd:enumeration value="suffix"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:attribute>
+ </xsd:extension>
+ </xsd:simpleContent>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="Sterbedatum">
+ <xsd:simpleType>
+ <xsd:annotation>
+ <xsd:documentation>simple type for dates (union), which may omit day and/or month</xsd:documentation>
+ </xsd:annotation>
+ <xsd:union memberTypes="xsd:date xsd:gYearMonth xsd:gYear"/>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="Geburtsdatum">
+ <xsd:simpleType>
+ <xsd:annotation>
+ <xsd:documentation>simple type for dates (union), which may omit day and/or month</xsd:documentation>
+ </xsd:annotation>
+ <xsd:union memberTypes="xsd:date xsd:gYearMonth xsd:gYear"/>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="Familienstand">
+ <xsd:simpleType>
+ <xsd:annotation>
+ <xsd:documentation>simple type for marital status of a person</xsd:documentation>
+ </xsd:annotation>
+ <xsd:restriction base="xsd:token">
+ <xsd:enumeration value="ledig"/>
+ <xsd:enumeration value="verheiratet"/>
+ <xsd:enumeration value="in eingetragener Partnerschaft lebend"/>
+ <xsd:enumeration value="geschieden"/>
+ <xsd:enumeration value="eingetragene Partnerschaft aufgelöst oder für nichtig erklärt"/>
+<!-- <xsd:enumeration value="aufgelöste eingetragene Partnerschaft"/> -->
+ <xsd:enumeration value="verwitwet"/>
+ <xsd:enumeration value="hinterbliebener eingetragener Partner"/>
+ <xsd:enumeration value="Ehe aufgehoben oder für nichtig erklärt"/>
+ <xsd:enumeration value="unbekannt"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="Geschlecht">
+ <xsd:simpleType>
+ <xsd:annotation>
+ <xsd:documentation>simple type for sex (gender) of person</xsd:documentation>
+ </xsd:annotation>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="50"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="Geburtsort">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="54"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="Geburtsstaat">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="54"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="Geburtsbundesland">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="72"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="Staatsangehoerigkeit">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="ISOCode3" minOccurs="0"/>
+ <xsd:element ref="StaatsnameDE" minOccurs="0"/>
+ <xsd:element ref="StaatsnameEN" minOccurs="0"/>
+ <xsd:element ref="StaatsnameFR" minOccurs="0"/>
+ <xsd:element name="GueltigVon" type="xsd:date" minOccurs="0"/>
+ <xsd:element name="GueltigBis" type="xsd:date" minOccurs="0"/>
+ <xsd:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded">
+ <xsd:annotation>
+ <xsd:documentation>any additional properties</xsd:documentation>
+ </xsd:annotation>
+ </xsd:any>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="StaatsnameDE">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="54"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="StaatsnameEN">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="54"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="StaatsnameFR">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="54"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="PostAdresse" type="PostAdresseTyp" >
+ <xsd:annotation>
+ <xsd:documentation>Post oder ZMR Adresse, entspricht PostalAddress</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:complexType name="AbstractAddressType" abstract="true">
+ <xsd:annotation>
+ <xsd:documentation>main structure of address data</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence minOccurs="0">
+ <xsd:element name="Identification" type="IdentificationType" minOccurs="0" maxOccurs="unbounded">
+ <xsd:annotation>
+ <xsd:documentation>unique identification entities</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ </xsd:sequence>
+ <xsd:attribute name="Id" type="xsd:ID" use="optional"/>
+ <xsd:anyAttribute namespace="##other"/>
+ </xsd:complexType>
+ <xsd:complexType name="PostAdresseTyp">
+ <xsd:annotation>
+ <xsd:documentation>postal address</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexContent>
+ <xsd:extension base="AbstractAddressType">
+ <xsd:sequence>
+ <xsd:element ref="Staatscode" minOccurs="0"/>
+ <xsd:element ref="Staatsname" minOccurs="0"/>
+
+ <xsd:element ref="Postleitzahl" minOccurs="0"/>
+ <xsd:element ref="Region" minOccurs="0"/>
+ <xsd:element ref="Bundesland" minOccurs="0"/>
+ <xsd:element ref="Gemeinde" minOccurs="0"/>
+ <xsd:element ref="Gemeindekennziffer" minOccurs="0"/>
+ <xsd:element ref="Ortschaft" minOccurs="0"/>
+ <xsd:element ref="OrtschaftZweisprachig" minOccurs="0"/>
+ <xsd:element name="Zustelladresse" type="ZustelladresseTyp" minOccurs="0"/>
+
+ <xsd:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded">
+ <xsd:annotation>
+ <xsd:documentation>any additional properties</xsd:documentation>
+ </xsd:annotation>
+ </xsd:any>
+ </xsd:sequence>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:complexType name="ZustelladresseTyp">
+ <xsd:sequence>
+ <xsd:element ref="Adresszeile" minOccurs="0"/>
+ <xsd:element ref="Strassenname" minOccurs="0"/>
+ <xsd:element ref="Orientierungsnummer" minOccurs="0"/>
+ <xsd:element ref="Gebaeude" minOccurs="0"/>
+ <xsd:element ref="Nutzungseinheit" minOccurs="0"/>
+ <xsd:element ref="Postfach" minOccurs="0"/>
+ <xsd:element ref="Wohnsitzqualitaet" minOccurs="0"/>
+ <xsd:element ref="Abgabestelle" minOccurs="0"/>
+ <xsd:element ref="Nutzungseinheitlaufnummer" minOccurs="0"/>
+ <xsd:element name="AdressRegisterEintrag" minOccurs="0">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="Adresscode" minOccurs="0"/>
+ <xsd:element ref="Subcode" minOccurs="0"/>
+ <xsd:element ref="Objektnummer" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="InternetAdresse" type="InternetAdresseTyp" >
+ <xsd:annotation>
+ <xsd:documentation>Entspricht InternetAddress</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element name="TelefonAdresse" type="TelefonAdresseTyp" >
+ <xsd:annotation>
+ <xsd:documentation>Container für Telefonnummern, entspricht TelephoneAddress</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:complexType name="InternetAdresseTyp">
+ <xsd:annotation>
+ <xsd:documentation>internet based communication</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexContent>
+ <xsd:extension base="AbstractAddressType">
+ <xsd:sequence minOccurs="0">
+ <xsd:element ref="dsig:KeyInfo" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>certificate for secure communication</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element name="Adresse">
+ <xsd:annotation>
+ <xsd:documentation>eURI: mail-Adresse, Web, FTP, LDAP, ..., entspricht Address</xsd:documentation>
+ </xsd:annotation>
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:anyURI">
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="60"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded">
+ <xsd:annotation>
+ <xsd:documentation>any additional properties</xsd:documentation>
+ </xsd:annotation>
+ </xsd:any>
+ </xsd:sequence>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:complexType name="TelefonAdresseTyp">
+ <xsd:annotation>
+ <xsd:documentation>phone numbers</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexContent>
+ <xsd:extension base="AbstractAddressType">
+ <xsd:sequence>
+ <xsd:element name="Typ">
+ <xsd:annotation>
+ <xsd:documentation>type of phononumber - category (eg 'Festnetz', 'Mobile', 'fax', ...)</xsd:documentation>
+ </xsd:annotation>
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="Festnetz"/>
+ <xsd:enumeration value="Mobil"/>
+ <xsd:enumeration value="Fax"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="Nummer" type="TelekomNummerTyp">
+ <xsd:annotation>
+ <xsd:documentation>phonenumber</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded">
+ <xsd:annotation>
+ <xsd:documentation>any additional properties</xsd:documentation>
+ </xsd:annotation>
+ </xsd:any>
+ </xsd:sequence>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:complexType name="TelekomNummerTyp">
+ <xsd:choice>
+ <xsd:element ref="FormatierteNummer"/>
+ <xsd:group ref="TelekomNummernGruppe"/>
+ </xsd:choice>
+ </xsd:complexType>
+
+ <xsd:group name="TelekomNummernGruppe">
+ <xsd:sequence>
+ <xsd:element ref="InternationalerLaendercode" minOccurs="0"/>
+ <xsd:element ref="NationalNummer" minOccurs="0"/>
+ <xsd:element ref="Vorwahl" minOccurs="0"/>
+ <xsd:element ref="Anschlussnummer"/>
+ <xsd:element ref="Klappe" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:group>
+
+ <xsd:element name="InternationalerLaendercode" type="xsd:string">
+ <xsd:annotation>
+ <xsd:documentation>entspricht InternationalCountryCode</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element name="NationalNummer" type="xsd:string">
+ <xsd:annotation>
+ <xsd:documentation>entspricht NationalNumber</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element name="Vorwahl" type="xsd:string">
+ <xsd:annotation>
+ <xsd:documentation>entspricht AreaCityCode</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element name="Anschlussnummer" type="xsd:string">
+ <xsd:annotation>
+ <xsd:documentation>entspricht SubscriberNumber</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element name="FormatierteNummer">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="25"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="Klappe" type="xsd:string">
+ <xsd:annotation>
+ <xsd:documentation>entspricht Extension</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+
+ <xsd:element name="Abgabestelle" type="xsd:boolean"/>
+
+ <xsd:element name="Wohnsitzqualitaet">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="H"/>
+ <xsd:enumeration value="N"/>
+ <xsd:enumeration value="O"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="ISOCode3">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:pattern value="[A-Z]{3}"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="Staatscode">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:pattern value="[A-Z]{3}"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="Staatsname">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="54"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="Postleitzahl">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="10"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="Region">
+ <xsd:annotation>
+ <xsd:documentation>entspricht Region</xsd:documentation>
+ </xsd:annotation>
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="54"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="Bundesland">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="Wien"/>
+ <xsd:enumeration value="Niederösterreich"/>
+ <xsd:enumeration value="Burgenland"/>
+ <xsd:enumeration value="Oberösterreich"/>
+ <xsd:enumeration value="Steiermark"/>
+ <xsd:enumeration value="Salzburg"/>
+ <xsd:enumeration value="Kärnten"/>
+ <xsd:enumeration value="Tirol"/>
+ <xsd:enumeration value="Vorarlberg"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="Gemeinde">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="54"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="Gemeindekennziffer">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:pattern value="[0-9]{5}"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="Ortschaft">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="54"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="OrtschaftZweisprachig">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="45"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="Adresscode">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:pattern value="[0-9;A-Z]{7}"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="Subcode">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:pattern value="[0-9]{3}"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="Nutzungseinheitlaufnummer">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:pattern value="[0-9]{4}"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="Objektnummer">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:pattern value="[0-9;A-Z]{7}"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="Strassenname">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="54"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="Orientierungsnummer">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="32"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="Gebaeude">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="75"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="Nutzungseinheit">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="40"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="Adresszeile">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="54"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="Postfach">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="20"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/PersonExport.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/PersonExport.xsd
new file mode 100644
index 00000000..5987d099
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/PersonExport.xsd
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Name: PersonExport.xsd
+ Zweck: Definiert allgemein nutzbare Export-Schnittstelle um eine Liste von Personen abzubilden.
+ Author(s): Ehrenmüller Oliver, ZMR-SU
+
+ Aenderungshistorie:
+ 2009-07-20 teo: Überarbeitung PersonExportElementType
+ 2009-07-08 teo: erstellt
+-->
+
+<xsd:schema xmlns="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ targetNamespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+ <xsd:annotation>
+ <xsd:documentation>Definiert allgemein nutzbare Export-Schnittstelle um eine Liste von Personen abzubilden.</xsd:documentation>
+ </xsd:annotation>
+ <xsd:include schemaLocation="InfoFachlich.xsd"/>
+
+ <xsd:element name="PersonExport" type="PersonExportType">
+ <xsd:annotation>
+ <xsd:documentation>Root-Element des Personenexports.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:complexType name="PersonExportType">
+ <xsd:annotation>
+ <xsd:documentation>Root-Element des Personenexports.</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="Message"/>
+ <xsd:element ref="Stichtag"/>
+ <xsd:element name="Database">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="20"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="Person" type="PersonExportElementType" minOccurs="0" maxOccurs="unbounded">
+ <xsd:annotation>
+ <xsd:documentation>
+ Gruppiert nach Personen werden alle Elemente in dieser
+ Liste abgebildet.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="PersonExportElementType">
+ <xsd:annotation>
+ <xsd:documentation>Dieser Type beinhaltet alle Elemente die zu einer Person gehören.</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element name="ID" type="ENTITYIDType"/>
+ <xsd:element name="Typ" type="xsd:string"/>
+ <xsd:element name="Satz" type="PersonExportSatzType" minOccurs="0" maxOccurs="unbounded">
+ <xsd:annotation>
+ <xsd:documentation>
+ Diese Liste beinhaltet alle Sätze die zu einer
+ Person gehören. Unabhängig von der Tabelle oder
+ Strang-Historie.
+ Fehlt die Liste, ist die Entity zu löschen.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="PersonExportSatzType">
+ <xsd:annotation>
+ <xsd:documentation>
+ Dieser Type beinhaltet alle Elemente die sich auf einen Eintrag
+ in einer beliebigen Tabelle beziehen.
+ </xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element name="Tabelle">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="20"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element ref="EntityID"/>
+ <xsd:element name="RecID" type="ENTITYIDType"/>
+ <xsd:element name="Created" type="TimestampType"/>
+ <xsd:element name="Feld" type="PersonExportFeldType" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="PersonExportFeldType">
+ <xsd:annotation>
+ <xsd:documentation>Generiersche Name/Wert-Paare für Export</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element name="Name" type="xsd:string"/>
+ <xsd:element name="Wert" type="xsd:string"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/PersonFelder.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/PersonFelder.xsd
new file mode 100644
index 00000000..600e01c3
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/PersonFelder.xsd
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: PersonFelder.xsd
+Zweck: Definiert allgemein nutzbare Felder für Personendaten
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2006-06-26 tsch: GeburtsdatumBis hinzugefügt
+2005-08-30 tsch: OrdnungsZahlType hinzugefügt
+2004-01-15 tsch: SVNummer hinzugefügt
+2004-06-24 tsch: OrdnungsZahl, Titel hinzugefügt
+2004-01-27 tsch: Erstellung
+-->
+
+<xsd:schema xmlns="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ targetNamespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+ <xsd:include schemaLocation="SimpleTypes.xsd"/>
+
+ <xsd:annotation>
+ <xsd:documentation>Personendaten-Felder</xsd:documentation>
+ </xsd:annotation>
+ <xsd:element name="ZMRZahl" type="ZMRZahlType"/>
+
+ <xsd:simpleType name="ZMRZahlType">
+ <xsd:restriction base="xsd:string">
+ <xsd:pattern value="[0-9]{12}"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+
+ <xsd:element name="OrdnungsZahl" type="OrdnungsZahlType"/>
+
+ <xsd:simpleType name="OrdnungsZahlType">
+ <xsd:restriction base="xsd:string">
+ <xsd:pattern value="[0-9]{12}"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+
+ <xsd:element name="SVNummer">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:pattern value="[0-9]{10}"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="Titel">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="45"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="StaatZugezogen" type="StaatenNameType"/>
+ <xsd:element name="StaatVerzogen" type="StaatenNameType"/>
+
+ <xsd:element name="GeburtsdatumBis">
+ <xsd:simpleType>
+ <xsd:annotation>
+ <xsd:documentation>simple type for dates (union), which may omit day and/or month</xsd:documentation>
+ </xsd:annotation>
+ <xsd:union memberTypes="xsd:date xsd:gYearMonth xsd:gYear"/>
+ </xsd:simpleType>
+ </xsd:element>
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/Protokollierung.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/Protokollierung.xsd
new file mode 100644
index 00000000..c9bc3b1a
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/Protokollierung.xsd
@@ -0,0 +1,496 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/Protokoll"
+ xmlns:prot="http://bmi.gv.at/namespace/zmr-su/protokoll/20091125#" elementFormDefault="qualified"
+ attributeFormDefault="qualified">
+
+ <element name="sprotokoll" type="prot:SProtokollType" />
+ <complexType name="SProtokollType">
+ <sequence>
+ <element ref="prot:header" />
+ <element ref="prot:user" />
+ <element ref="prot:application" />
+ </sequence>
+ </complexType>
+
+ <element name="dienststelle" type="prot:DienststelleType" />
+ <complexType name="DienststelleType">
+ <annotation>
+ <documentation>Das Element Dienststelle identifiziert die Dienststelle mit den verschiedenen definierten
+ Codes und Kennzeichen.</documentation>
+ </annotation>
+ <sequence>
+ <element name="dstcode" minOccurs="0">
+ <annotation>
+ <documentation>3-Stelliger Dienststellencode. Wird im neuen Portal wegfallen???
+ </documentation>
+ </annotation>
+ <simpleType>
+ <restriction base="string">
+ <length value="3" />
+ </restriction>
+ </simpleType>
+ </element>
+
+ <element name="dstname" type="string" minOccurs="0">
+ <annotation>
+ <documentation>Klartextname der durchfuehrenden Dienststelle. PVP.ou</documentation>
+ </annotation>
+ </element>
+
+ <element name="mail" minOccurs="0">
+ <annotation>
+ <documentation>Emailadresse der Organisationseinheit/Dienststelle</documentation>
+ </annotation>
+ <complexType>
+ <simpleContent>
+ <extension base="string">
+ <attribute name="art">
+ <simpleType>
+ <restriction base="string">
+ <enumeration value="organisationseinheit" />
+ </restriction>
+ </simpleType>
+ </attribute>
+ </extension>
+ </simpleContent>
+ </complexType>
+ </element>
+ <element name="participant_id" type="string">
+ <annotation>
+ <documentation>Verwaltungskennzeichen (VKZ) der durchfuehrenden Dienststelle
+ (PVP-Header). Kunde fuer Verrechnung</documentation>
+ </annotation>
+ </element>
+ <element name="gvouid" type="string" minOccurs="0">
+ <annotation>
+ <documentation>Bundesweite eindeutige ID der Dienststelle (vom Portal) fuer Verrechnung.
+ PVP.gvOuId - bleibt das?</documentation>
+ </annotation>
+ </element>
+ <element name="kostcenter_id" type="string" minOccurs="0">
+ <annotation>
+ <documentation>Verwaltungskennzeichen (VKZ) der Kostenstelle des Users aus
+ PVP-Header normalerweise der Kunde (BMI Kundennummer) fuer Verrechnung. PVP.CostCenterId</documentation>
+ </annotation>
+ </element>
+ <element name="invoice_receipt_id" type="string" minOccurs="0">
+ <annotation>
+ <documentation>Verwaltungskennzeichen (VKZ) des Rechnungsempfaengers aus PVP-Header
+ Provider fuer Verrechnung. PVP.invoiceReceiptId</documentation>
+ </annotation>
+ </element>
+ <element name="charge_code" type="string" minOccurs="0">
+ <annotation>
+ <documentation>Liste von Codes aus PVP-Header fuer Verrechnung. PVP.ChargeCode</documentation>
+ </annotation>
+ </element>
+ </sequence>
+ </complexType>
+
+ <element name="header" type="prot:HeaderType" />
+ <complexType name="HeaderType">
+ <sequence>
+ <element name="protdatum" type="prot:DatumRedType"></element>
+ <element name="protzeit" type="prot:TimeRedType"></element>
+ <element name="application" type="string">
+ <annotation>
+ <documentation>Applikationskurzzeichen, Beispiel: "X02"</documentation>
+ </annotation>
+ </element>
+ <element name="applicationVersion" type="string">
+ <annotation>
+ <documentation>Versionsnummer wie sie auch im GUI angezeigt wird</documentation>
+ </annotation>
+ </element>
+
+ <element name="verarbeitungsart" type="string">
+ <annotation>
+ <documentation>Applikationskurzzeichen-Verarbeitungsbezeichnung
+ </documentation>
+ </annotation>
+ </element>
+
+ <element name="kzanfrage">
+ <annotation>
+ <documentation>If (Anfrage oder Auskunft)="1" Else="0" </documentation>
+ </annotation>
+ <simpleType>
+ <restriction base="string">
+ <pattern value="[01]" />
+ </restriction>
+ </simpleType>
+ </element>
+
+ <element name="kzupdate" minOccurs="0">
+ <annotation>
+ <documentation>If Update="1" Else "0"</documentation>
+ </annotation>
+ <simpleType>
+ <restriction base="string">
+ <pattern value="[01]" />
+ </restriction>
+ </simpleType>
+ </element>
+
+ <element name="fundstellen" type="integer" minOccurs="0">
+ <annotation>
+ <documentation>Summe der Anzahl der Treffer</documentation>
+ </annotation>
+ </element>
+
+ <element name="ergebnis" minOccurs="0">
+ <annotation>
+ <documentation>If Treffer="P", If Kein Treffer="N", If Treffer mit abweichenden Personendaten="I"
+ </documentation>
+ </annotation>
+ <simpleType>
+ <restriction base="string">
+ <pattern value="[INP]" />
+ </restriction>
+ </simpleType>
+ </element>
+
+ <element name="trancode" minOccurs="0">
+ <annotation>
+ <documentation>z.B.: "X02A" "X02B" analog zu den Hosttransaktionen</documentation>
+ </annotation>
+ <simpleType>
+ <restriction base="string">
+ <pattern value="[0-9A-Z _\-]{4}" />
+ </restriction>
+ </simpleType>
+ </element>
+
+ <element name="trannr" type="string" minOccurs="0">
+ <annotation>
+ <documentation>Transaktionsnummer</documentation>
+ </annotation>
+ </element>
+
+ <element name="behoerde" type="string" minOccurs="0">
+ <annotation>
+ <documentation>Behoerdenschluessel der durchfuehrenden Behoerde. Wenn in Applikation
+ geprueft, dann MUSS es vorhanden sein, sonst 000000</documentation>
+ </annotation>
+ </element>
+
+ <element name="systemid" type="string" minOccurs="0">
+ <annotation>
+ <documentation>Entiwcklungsumgebung=WEBS, Testumgebung=WEBT,
+ Produktionsumgebung=WEBP</documentation>
+ </annotation>
+ </element>
+ </sequence>
+ </complexType>
+
+ <element name="user" type="prot:UserType" />
+ <complexType name="UserType">
+ <annotation>
+ <documentation>Das Element User identifiziert den User, der den Request ausgelöst hat und die
+ Dienststelle, welcher der Request zuzuordnen ist.</documentation>
+ </annotation>
+ <sequence>
+ <element name="globalid" type="string" minOccurs="0">
+ <annotation>
+ <documentation>gvgid im Sinne des Portalverbundes, Wert der "OPK". PVP.gvGid</documentation>
+ </annotation>
+ </element>
+ <element name="commname" type="string" minOccurs="0">
+ <annotation>
+ <documentation>Familienname und Vorname. PVP.cn</documentation>
+ </annotation>
+ </element>
+ <element name="userid" type="string">
+ <annotation>
+ <documentation>Anmeldename des durchführenden Benutzers. PVP.userId</documentation>
+ </annotation>
+ </element>
+ <element name="mail" minOccurs="0">
+ <annotation>
+ <documentation>Emailadresse des Users aus PVP-Header. PVP.mail</documentation>
+ </annotation>
+ <complexType>
+ <simpleContent>
+ <extension base="string">
+ <attribute name="art">
+ <simpleType>
+ <restriction base="string">
+ <enumeration value="user"></enumeration>
+ </restriction>
+ </simpleType>
+ </attribute>
+ </extension>
+ </simpleContent>
+ </complexType>
+ </element>
+ <element ref="prot:dienststelle">
+ <annotation>
+ <documentation>Dienststelle</documentation>
+ </annotation>
+ </element>
+ </sequence>
+ </complexType>
+
+ <complexType name="ReferenzType">
+ <annotation>
+ <documentation>Vordefinierte Werte für Referenzarten:
+ * edv_zahl
+ * dastazahl
+ * numerator_nr
+ * geschaeftszahl</documentation>
+ </annotation>
+ <sequence>
+ <element name="transactionid" type="string">
+ <annotation>
+ <documentation>Transaktionsnummer</documentation>
+ </annotation>
+ </element>
+ </sequence>
+ </complexType>
+
+ <element name="application" type="prot:ApplicationType" />
+ <complexType name="ApplicationType">
+ <sequence>
+
+ <element name="bezug" type="string">
+ <annotation>
+ <documentation>String-Begruendung der Anfrage fuer den User "hilfreich" bei
+ DS-Rueckfrage. Manuelle Eingabe oder Vorgangsbeschreibung.</documentation>
+ </annotation>
+ </element>
+
+ <element ref="prot:person" minOccurs="0" />
+
+ <element name="referenzen" type="prot:ReferenzType" minOccurs="0" maxOccurs="unbounded">
+ <annotation>
+ <documentation>Protokoll:Referenz</documentation>
+ </annotation>
+ </element>
+
+ <element name="request" type="string" minOccurs="0">
+ <annotation>
+ <documentation>SOAP Request im Fall von Abfragen, Suchen. Parameter wenn es sich um eine
+ Batchanforderung handelt, sonst leer.
+ Weitere applikationsspezifische Daten, allenfalls notwendige Tags
+ sind mit IV/2 abzustimmen.
+ Datumselemente: Art ist mit IV/2 abzustimmen.</documentation>
+ </annotation>
+ </element>
+
+ </sequence>
+ </complexType>
+
+ <element name="person" type="prot:PersonType" />
+ <complexType name="PersonType">
+ <annotation>
+ <documentation>Zurueckgelieferte Person.</documentation>
+ </annotation>
+ <sequence>
+ <element name="rolle" type="prot:RolleType">
+ <annotation>
+ <documentation>im ZMR: "ZMR-Meldung", "Meldepflichtiger". ERnP??? Definition???
+ Attribute
+ art="personenrolle"</documentation>
+ </annotation>
+ </element>
+ <element name="familienname" type="string" minOccurs="0">
+ <annotation>
+ <documentation>Familienname der Person. ZPR.famname</documentation>
+ </annotation>
+ </element>
+ <element name="vorname" type="string" minOccurs="0">
+ <annotation>
+ <documentation>Vorname der Person. ZPR.vorname</documentation>
+ </annotation>
+ </element>
+ <element name="geburtsort" type="string" minOccurs="0">
+ <annotation>
+ <documentation>Geburtsort</documentation>
+ </annotation>
+ </element>
+ <element ref="prot:geburtsdaten" minOccurs="0" />
+ <element name="akademischer_grad" type="string" minOccurs="0">
+ <annotation>
+ <documentation>Zu klären:
+ * was vom Akademischen Grad
+ * welche Grade
+ * Reihenfolge
+ * Kurzform, nur
+ vorangestellte?</documentation>
+ </annotation>
+ </element>
+ <element name="geschlecht" type="prot:GeschlechtType" minOccurs="0">
+ <annotation>
+ <documentation>Kennzeichen Geschlecht.</documentation>
+ </annotation>
+ </element>
+ <element name="geburtsstaat" type="string" minOccurs="0">
+ <annotation>
+ <documentation>Geburtsstaat. Normierung?</documentation>
+ </annotation>
+ </element>
+ <element name="speicherdatum" type="string" minOccurs="0">
+ <annotation>
+ <documentation>JJJJMMTT created: Letztes Aenderungsdatum der Person.</documentation>
+ </annotation>
+ </element>
+ <element name="zmrzahl" minOccurs="0">
+ <annotation>
+ <documentation>zmrzahl</documentation>
+ </annotation>
+ <simpleType>
+ <restriction base="string">
+ <length value="12"></length>
+ </restriction>
+ </simpleType>
+ </element>
+ <element ref="prot:adressen" minOccurs="0" />
+ </sequence>
+ </complexType>
+
+ <element name="adressen" type="prot:AdressenType" />
+ <complexType name="AdressenType">
+ <annotation>
+ <documentation>Liste von Adressen. Es wird nur eine Adresse ausgegeben (bisherige Logik)
+ </documentation>
+ </annotation>
+ <sequence>
+ <element ref="prot:adresse" maxOccurs="unbounded" />
+ </sequence>
+ </complexType>
+
+ <element name="adresse" type="prot:AdresseType"/>
+ <complexType name="AdresseType">
+ <sequence>
+ <element name="plz" type="string" minOccurs="0">
+ <annotation>
+ <documentation>Postleitzahl. Meldung.plz</documentation>
+ </annotation>
+ </element>
+ <element name="ortname" type="string" minOccurs="0">
+ <annotation>
+ <documentation>Ortname (vereinfacht?). Meldung.ortname</documentation>
+ </annotation>
+ </element>
+ <element name="strasse" type="string" minOccurs="0">
+ <annotation>
+ <documentation>Strassenname. Meldung.strname</documentation>
+ </annotation>
+ </element>
+ <element name="hausnummer" type="string" minOccurs="0">
+ <annotation>
+ <documentation>Hausnummer. Meldung.hausnummer</documentation>
+ </annotation>
+ </element>
+ </sequence>
+ </complexType>
+
+ <complexType name="GeburtsdatenType">
+ <choice>
+ <element name="geburtsdatum" type="prot:DatumRedType">
+ <annotation>
+ <documentation>JJJJMMTT: Gebdatum</documentation>
+ </annotation>
+ </element>
+ <sequence>
+ <element name="geburtsdatum_von" type="string" minOccurs="0">
+ <annotation>
+ <documentation>JJJJMMTT: Suche mit unvollständigem Datum (Jahr)</documentation>
+ </annotation>
+ </element>
+ <element name="geburtsdatum_bis" type="string" minOccurs="0">
+ <annotation>
+ <documentation>JJJJMMTT: Suche mit unvollständigem Datum (Jahr)</documentation>
+ </annotation>
+ </element>
+ </sequence>
+ </choice>
+ </complexType>
+
+ <element name="geburtsdaten" type="prot:GeburtsdatenType">
+ <annotation>
+ <documentation>Geburstsdatum oder Suchintervall</documentation>
+ </annotation>
+ </element>
+
+
+ <simpleType name="DatumRedType">
+ <annotation>
+ <documentation>
+ DatumRedType: Format JJJJMMTT richtet sich nach
+ xsd:date, '00' bei Monat und Tag erlaubt.
+ Keine
+ Trennzeichen
+ </documentation>
+ </annotation>
+ <restriction base="string">
+ <pattern value="[2-9][0-9]{3}[01][0-9][0-3][0-9]" />
+ </restriction>
+ </simpleType>
+
+ <simpleType name="TimeRedType">
+ <annotation>
+ <documentation>
+ TimeRedType: Format (mindestens HHMMSS) richtet sich
+ nach xsd:dateTime, ohne Datumsanteil und
+ ohne
+ Trennzeichen. 0 bis 3 Nachkommastellen sind zulaessig
+ </documentation>
+ </annotation>
+ <restriction base="string">
+ <pattern value="[0-2][0-9][0-6][0-9][0-6][0-9][0-9]{0,3}" />
+ </restriction>
+ </simpleType>
+
+ <simpleType name="GeschlechtType">
+ <annotation>
+ <documentation>Maennlich="1", Weiblich="2", Unbekannt="3", Juristische Person="4".
+ "Juristische Person" ist nur in enstprechenden Anwendungen/Anwendungsfaellen zulaessig.</documentation>
+ </annotation>
+ <restriction base="string">
+ <enumeration value="1">
+ <annotation>
+ <documentation>maennlich</documentation>
+ </annotation>
+ </enumeration>
+ <enumeration value="2">
+ <annotation>
+ <documentation>weiblich</documentation>
+ </annotation>
+ </enumeration>
+ <enumeration value="3">
+ <annotation>
+ <documentation>unbekannt</documentation>
+ </annotation>
+ </enumeration>
+ <enumeration value="4">
+ <annotation>
+ <documentation>juristische Person</documentation>
+ </annotation>
+ </enumeration>
+ </restriction>
+ </simpleType>
+
+ <complexType name="RolleType">
+ <annotation>
+ <documentation>im ZMR: "ZMR-Meldung", "Meldepflichtiger". ERnP???
+ Definition??? Attribute
+ art="personenrolle"</documentation>
+ </annotation>
+ <simpleContent>
+ <extension base="string">
+ <attribute name="art" type="string"></attribute>
+ </extension>
+ </simpleContent>
+ </complexType>
+
+ <attribute name="mailAttribute">
+ <simpleType>
+ <restriction base="string">
+ <enumeration value="user"></enumeration>
+ <enumeration value="organisationseinheit"></enumeration>
+ </restriction>
+ </simpleType>
+ </attribute>
+
+</schema>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/SimpleTypes.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/SimpleTypes.xsd
new file mode 100644
index 00000000..77b3e59e
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/SimpleTypes.xsd
@@ -0,0 +1,173 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: SimpleTypes.xsd
+Zweck: Definiert allgemein nutzbare simple Datentypen
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+2010-08-25 teo: ZMR-339: ID 343 - USERID DB-Feld erweitern
+2006-05-03 tsch: KGNummerType hinzugefügt
+2004-10-27 tsch: BehoerdenschluesselType hinzugefügt
+2004-09-09 tsch: RegisterType hinzugefügt
+2004-09-08 tsch: BenutzerNameType hinzugefügt
+2004-08-17 tsch: GemeindeNrType hinzugefügt
+2004-06-18 tsch: GrundTextType hinzugefügt
+-->
+
+<xsd:schema xmlns="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ targetNamespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:simpleType name="IntegerType">
+ <xsd:annotation>
+ <xsd:documentation>IntegerType: nicht negativer Integer mit Maximalwert 2^31-1 (Beschränkung durch Datenbank)</xsd:documentation>
+ </xsd:annotation>
+ <xsd:restriction base="xsd:nonNegativeInteger">
+ <xsd:maxExclusive value="2147483648"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+
+ <xsd:simpleType name="DatumType">
+ <xsd:annotation>
+ <xsd:documentation>DatumType: Format richtet sich nach xsd:date, '00' bei Monat und Tag erlaubt</xsd:documentation>
+ </xsd:annotation>
+ <xsd:restriction base="xsd:string">
+ <xsd:pattern value="[0-9]{4}[\-][0-9]{2}[\-][0-9]{2}"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+
+
+ <xsd:simpleType name="TimestampType">
+ <xsd:annotation>
+ <xsd:documentation>TimestampType: Format richtet sich nach xsd:dateTime, Angabe der Millisekunden ist Pflicht, Zeitzone nicht erlaubt</xsd:documentation>
+ </xsd:annotation>
+ <xsd:restriction base="xsd:dateTime">
+ <xsd:pattern value="[0-9]{4}[\-][0-9]{2}[\-][0-9]{2}[T][0-9]{2}[:][0-9]{2}[:][0-9]{2}[.][0-9]{3}"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+
+ <xsd:simpleType name="IDType">
+ <xsd:annotation>
+ <xsd:documentation>IDs</xsd:documentation>
+ </xsd:annotation>
+ <xsd:restriction base="xsd:unsignedLong">
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="ENTITYIDType">
+ <xsd:annotation>
+ <xsd:documentation>Entity-IDs (können auch alphanumerisch sein, z.B. alte edvzahlen)</xsd:documentation>
+ </xsd:annotation>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="64"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+
+ <xsd:simpleType name="StaatenNameType">
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="45"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+
+ <xsd:simpleType name="GrundCodeType">
+ <xsd:restriction base="xsd:string" >
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="20"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="GrundTextType">
+ <xsd:restriction base="xsd:string">
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="50"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="GrundFreitextType">
+ <xsd:restriction base="xsd:string">
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="228"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+
+ <xsd:simpleType name="BehoerdenNrType">
+ <xsd:restriction base="xsd:string">
+ <xsd:pattern value="[0-9]{6}"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="BehoerdenschluesselType">
+ <xsd:restriction base="xsd:string">
+ <xsd:pattern value="[0-9]{6}|C[0-9]{5}"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="GemeindeNrType">
+ <xsd:restriction base="xsd:string">
+ <xsd:pattern value="[0-9]{5}"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="KGNummerType">
+ <xsd:restriction base="xsd:string">
+ <xsd:minLength value="5"/>
+ <xsd:maxLength value="5"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="GemeindenameType">
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="54"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="KundenNrType">
+ <xsd:restriction base="xsd:string">
+ <xsd:pattern value="[0-9]{5,6}"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="OrgTypType">
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="20"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="OrgCodeType">
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="20"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="BezugsfeldType">
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="50"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="BenutzerType">
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="100"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="BenutzerNameType">
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="45"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="RegisterType">
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="ZMR"/>
+ <xsd:enumeration value="EGR"/>
+ <xsd:enumeration value="LMR"/>
+ <xsd:enumeration value="ZPR"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/W3C-XMLDSig.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/W3C-XMLDSig.xsd
new file mode 100644
index 00000000..63440043
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/W3C-XMLDSig.xsd
@@ -0,0 +1,274 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- PUBLIC "-//W3C//DTD XMLSchema 200102//EN" "http://www.w3.org/2001/XMLSchema.dtd"
+ -->
+<!--<!DOCTYPE schema
+ [
+ <!ATTLIST schema
+ xmlns:ds CDATA #FIXED "http://www.w3.org/2000/09/xmldsig#"
+>
+ <!ENTITY dsig 'http://www.w3.org/2000/09/xmldsig#'>
+ <!ENTITY % p ''>
+ <!ENTITY % s ''>
+]> -->
+<!-- Schema for XML Signatures
+ http://www.w3.org/2000/09/xmldsig#
+ $Revision: 1.1 $ on $Date: 2002/11/11 16:24:27 $ by $Author: Linauer $
+
+ Copyright 2001 The Internet Society and W3C (Massachusetts Institute
+ of Technology, Institut National de Recherche en Informatique et en
+ Automatique, Keio University). All Rights Reserved.
+ http://www.w3.org/Consortium/Legal/
+
+ This document is governed by the W3C Software License [1] as described
+ in the FAQ [2].
+
+ [1] http://www.w3.org/Consortium/Legal/copyright-software-19980720
+ [2] http://www.w3.org/Consortium/Legal/IPR-FAQ-20000620.html#DTD
+-->
+<schema targetNamespace="http://www.w3.org/2000/09/xmldsig#" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" version="0.1">
+ <!-- Basic Types Defined for Signatures -->
+ <!-- modified to ensure that whiteSpace is preserved
+<simpleType name="CryptoBinary">
+ <restriction base="base64Binary">
+ </restriction>
+</simpleType>
+ -->
+ <simpleType name="CryptoBinary">
+ <restriction base="string">
+ <whiteSpace value="preserve"/>
+ <pattern value="[A-Za-z0-9\+/=\n\r\t ]*"/>
+ </restriction>
+ </simpleType>
+ <!-- Start Signature -->
+ <element name="Signature" type="ds:SignatureType"/>
+ <complexType name="SignatureType">
+ <sequence>
+ <element ref="ds:SignedInfo"/>
+ <element ref="ds:SignatureValue"/>
+ <element ref="ds:KeyInfo" minOccurs="0"/>
+ <element ref="ds:Object" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="Id" type="ID" use="optional"/>
+ </complexType>
+ <element name="SignatureValue" type="ds:SignatureValueType"/>
+ <complexType name="SignatureValueType">
+ <simpleContent>
+ <extension base="ds:CryptoBinary">
+ <attribute name="Id" type="ID" use="optional"/>
+ </extension>
+ </simpleContent>
+ </complexType>
+ <!-- Start SignedInfo -->
+ <element name="SignedInfo" type="ds:SignedInfoType"/>
+ <complexType name="SignedInfoType">
+ <sequence>
+ <element ref="ds:CanonicalizationMethod"/>
+ <element ref="ds:SignatureMethod"/>
+ <element ref="ds:Reference" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="Id" type="ID" use="optional"/>
+ </complexType>
+ <element name="CanonicalizationMethod" type="ds:CanonicalizationMethodType"/>
+ <complexType name="CanonicalizationMethodType" mixed="true">
+ <sequence>
+ <any namespace="##any" minOccurs="0" maxOccurs="unbounded"/>
+ <!-- (0,unbounded) elements from (1,1) namespace -->
+ </sequence>
+ <attribute name="Algorithm" type="anyURI" use="required"/>
+ </complexType>
+ <element name="SignatureMethod" type="ds:SignatureMethodType"/>
+ <complexType name="SignatureMethodType" mixed="true">
+ <sequence>
+ <element name="HMACOutputLength" type="ds:HMACOutputLengthType" minOccurs="0"/>
+ <any namespace="##other" minOccurs="0" maxOccurs="unbounded"/>
+ <!-- (0,unbounded) elements from (1,1) external namespace -->
+ </sequence>
+ <attribute name="Algorithm" type="anyURI" use="required"/>
+ </complexType>
+ <!-- Start Reference -->
+ <element name="Reference" type="ds:ReferenceType"/>
+ <complexType name="ReferenceType">
+ <sequence>
+ <element ref="ds:Transforms" minOccurs="0"/>
+ <element ref="ds:DigestMethod"/>
+ <element ref="ds:DigestValue"/>
+ </sequence>
+ <attribute name="Id" type="ID" use="optional"/>
+ <attribute name="URI" type="anyURI" use="optional"/>
+ <attribute name="Type" type="anyURI" use="optional"/>
+ </complexType>
+ <element name="Transforms" type="ds:TransformsType"/>
+ <complexType name="TransformsType">
+ <sequence>
+ <element ref="ds:Transform" maxOccurs="unbounded"/>
+ </sequence>
+ </complexType>
+ <element name="Transform" type="ds:TransformType"/>
+ <complexType name="TransformType" mixed="true">
+ <choice minOccurs="0" maxOccurs="unbounded">
+ <any namespace="##other" processContents="lax"/>
+ <element name="XPath" type="string"/>
+ <!-- (1,1) elements from (0,unbounded) namespaces -->
+ </choice>
+ <attribute name="Algorithm" type="anyURI" use="required"/>
+ </complexType>
+ <!-- End Reference -->
+ <element name="DigestMethod" type="ds:DigestMethodType"/>
+ <complexType name="DigestMethodType" mixed="true">
+ <sequence>
+ <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="Algorithm" type="anyURI" use="required"/>
+ </complexType>
+ <element name="DigestValue" type="ds:DigestValueType"/>
+ <simpleType name="DigestValueType">
+ <restriction base="ds:CryptoBinary"/>
+ </simpleType>
+ <!-- End SignedInfo -->
+ <!-- Start KeyInfo -->
+ <element name="KeyInfo" type="ds:KeyInfoType"/>
+ <complexType name="KeyInfoType" mixed="true">
+ <choice maxOccurs="unbounded">
+ <element ref="ds:KeyName"/>
+ <element ref="ds:KeyValue"/>
+ <element ref="ds:RetrievalMethod"/>
+ <element ref="ds:X509Data"/>
+ <element ref="ds:PGPData"/>
+ <element ref="ds:SPKIData"/>
+ <element ref="ds:MgmtData"/>
+ <any namespace="##other" processContents="lax"/>
+ <!-- (1,1) elements from (0,unbounded) namespaces -->
+ </choice>
+ <attribute name="Id" type="ID" use="optional"/>
+ </complexType>
+ <element name="KeyName" type="string"/>
+ <element name="MgmtData" type="string"/>
+ <element name="KeyValue" type="ds:KeyValueType"/>
+ <complexType name="KeyValueType" mixed="true">
+ <choice>
+ <element ref="ds:DSAKeyValue"/>
+ <element ref="ds:RSAKeyValue"/>
+ <any namespace="##other" processContents="lax"/>
+ </choice>
+ </complexType>
+ <element name="RetrievalMethod" type="ds:RetrievalMethodType"/>
+ <complexType name="RetrievalMethodType">
+ <sequence>
+ <element name="Transforms" type="ds:TransformsType" minOccurs="0"/>
+ </sequence>
+ <attribute name="URI" type="anyURI"/>
+ <attribute name="Type" type="anyURI" use="optional"/>
+ </complexType>
+ <!-- Start X509Data -->
+ <element name="X509Data" type="ds:X509DataType"/>
+ <complexType name="X509DataType">
+ <sequence maxOccurs="unbounded">
+ <choice>
+ <element name="X509IssuerSerial" type="ds:X509IssuerSerialType"/>
+ <element name="X509SKI" type="ds:CryptoBinary"/>
+ <element name="X509SubjectName" type="string"/>
+ <element name="X509Certificate" type="ds:CryptoBinary"/>
+ <element name="X509CRL" type="ds:CryptoBinary"/>
+ <any namespace="##other" processContents="lax"/>
+ </choice>
+ </sequence>
+ </complexType>
+ <complexType name="X509IssuerSerialType">
+ <sequence>
+ <element name="X509IssuerName" type="string"/>
+ <element name="X509SerialNumber" type="integer"/>
+ </sequence>
+ </complexType>
+ <!-- End X509Data -->
+ <!-- Begin PGPData -->
+ <element name="PGPData" type="ds:PGPDataType"/>
+ <complexType name="PGPDataType">
+ <choice>
+ <sequence>
+ <element name="PGPKeyID" type="ds:CryptoBinary"/>
+ <element name="PGPKeyPacket" type="ds:CryptoBinary" minOccurs="0"/>
+ <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <sequence>
+ <element name="PGPKeyPacket" type="ds:CryptoBinary"/>
+ <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ </choice>
+ </complexType>
+ <!-- End PGPData -->
+ <!-- Begin SPKIData -->
+ <element name="SPKIData" type="ds:SPKIDataType"/>
+ <complexType name="SPKIDataType">
+ <sequence maxOccurs="unbounded">
+ <element name="SPKISexp" type="ds:CryptoBinary"/>
+ <any namespace="##other" processContents="lax" minOccurs="0"/>
+ </sequence>
+ </complexType>
+ <!-- End SPKIData -->
+ <!-- End KeyInfo -->
+ <!-- Start Object (Manifest, SignatureProperty) -->
+ <element name="Object" type="ds:ObjectType"/>
+ <complexType name="ObjectType" mixed="true">
+ <sequence minOccurs="0" maxOccurs="unbounded">
+ <any namespace="##any" processContents="lax"/>
+ </sequence>
+ <attribute name="Id" type="ID" use="optional"/>
+ <attribute name="MimeType" type="string" use="optional"/>
+ <attribute name="Encoding" type="anyURI" use="optional"/>
+ <!-- add a grep facet -->
+ </complexType>
+ <element name="Manifest" type="ds:ManifestType"/>
+ <complexType name="ManifestType">
+ <sequence>
+ <element ref="ds:Reference" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="Id" type="ID" use="optional"/>
+ </complexType>
+ <element name="SignatureProperties" type="ds:SignaturePropertiesType"/>
+ <complexType name="SignaturePropertiesType">
+ <sequence>
+ <element ref="ds:SignatureProperty" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="Id" type="ID" use="optional"/>
+ </complexType>
+ <element name="SignatureProperty" type="ds:SignaturePropertyType"/>
+ <complexType name="SignaturePropertyType" mixed="true">
+ <choice maxOccurs="unbounded">
+ <any namespace="##other" processContents="lax"/>
+ <!-- (1,1) elements from (1,unbounded) namespaces -->
+ </choice>
+ <attribute name="Target" type="anyURI" use="required"/>
+ <attribute name="Id" type="ID" use="optional"/>
+ </complexType>
+ <!-- End Object (Manifest, SignatureProperty) -->
+ <!-- Start Algorithm Parameters -->
+ <simpleType name="HMACOutputLengthType">
+ <restriction base="integer"/>
+ </simpleType>
+ <!-- Start KeyValue Element-types -->
+ <element name="DSAKeyValue" type="ds:DSAKeyValueType"/>
+ <complexType name="DSAKeyValueType">
+ <sequence>
+ <sequence minOccurs="0">
+ <element name="P" type="ds:CryptoBinary"/>
+ <element name="Q" type="ds:CryptoBinary"/>
+ </sequence>
+ <element name="J" type="ds:CryptoBinary" minOccurs="0"/>
+ <element name="G" type="ds:CryptoBinary" minOccurs="0"/>
+ <element name="Y" type="ds:CryptoBinary"/>
+ <sequence minOccurs="0">
+ <element name="Seed" type="ds:CryptoBinary"/>
+ <element name="PgenCounter" type="ds:CryptoBinary"/>
+ </sequence>
+ </sequence>
+ </complexType>
+ <element name="RSAKeyValue" type="ds:RSAKeyValueType"/>
+ <complexType name="RSAKeyValueType">
+ <sequence>
+ <element name="Modulus" type="ds:CryptoBinary"/>
+ <element name="Exponent" type="ds:CryptoBinary"/>
+ </sequence>
+ </complexType>
+ <!-- End KeyValue Element-types -->
+ <!-- End Signature -->
+</schema>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/Workflow.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/Workflow.xsd
new file mode 100644
index 00000000..729b61ee
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/Workflow.xsd
@@ -0,0 +1,200 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: Workflow.xsd
+Zweck: Definiert Datentypen für die Geschäftsprozesssteuerung der Usecases
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2004-08-02 tsch: Vorgang WorkflowsAuflisten hinzugefügt
+2004-06-29 tsch: Subprozess Struktur vereinfacht
+2004-06-14 tsch: ProzessAnzeigeenamen hinzugefügt
+2004-06-14 tsch: Optionale VerlassenerProzessInstanzID hinzugefügt
+2004-05-19 tsch: SequenceID hinzugefügt, Umbenennung Process->Prozess
+2004-05-17 tsch: Umbenennungen: Activity nach Vorgang, Workflowitems nach Subprozesse
+2004-05-04 tsch: ProcessID->ProcessName, ActivityID->ActivityName
+2003-12-12 tsch: Erstellung
+-->
+
+<xsd:schema targetNamespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:include schemaLocation="SimpleTypes.xsd"/>
+
+
+ <xsd:element name="WorkflowInfoClient">
+ <xsd:annotation>
+ <xsd:documentation>Workflowinformationen des Clients</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="ProzessName"/>
+ <xsd:sequence minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ Wenn der Geschäftsprozess aus mehreren Vorgängen besteht,
+ müssen die ProzessinstanzID und SequenzID aus der letzten
+ Server-Response vom Client geschickt werden.
+ Beim ersten Vorgang eines neuen Geschäftsprozesses dürfen die beiden
+ Felder nicht geschickt werden.
+ Bei Beginn einen neuen Geschäftsprozesses SOLLTE die InstanzID des letztzen
+ Prozesses als VerlassenerProzessInstanzID mitgeschickt werden
+ </xsd:documentation>
+ </xsd:annotation>
+ <xsd:element ref="ProzessInstanzID"/>
+ <xsd:element ref="VerlassenerProzessInstanzID" minOccurs="0"/>
+ <xsd:element ref="SequenzID"/>
+ </xsd:sequence>
+ <xsd:element ref="VorgangName"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="WorkflowInfoServer">
+ <xsd:annotation>
+ <xsd:documentation>Workflowinformationen des Servers</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:annotation>
+ <xsd:documentation>
+ Der Prozessname dient zur technischen Identifikation des Prozesses, der ProzessAnzeigeName
+ kann zur Anzeige auf der Benutzeroberfläche verwendet werden.
+ </xsd:documentation>
+ </xsd:annotation>
+ <xsd:element ref="ProzessName"/>
+ <xsd:element ref="ProzessAnzeigeName" minOccurs="0"/>
+ <xsd:element ref="ProzessInstanzID"/>
+ <xsd:element ref="ProzessStatus"/>
+ <xsd:element ref="SequenzID"/>
+ <xsd:element ref="Subprozess" minOccurs="1" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:complexType name="SubprozessType">
+ <xsd:sequence>
+ <xsd:annotation>
+ <xsd:documentation>
+ Der VorgangName dient zur technischen Identifikation des Vorgangs, der VorgangAnzeigeName
+ kann zur Anzeige auf der Benutzeroberfläche verwendet werden.
+ Die Elemente VorgangRestriction und VorgangConditions werden in näherer Zukunft nicht implementiert
+ und können ignoriert werden (werden nicht befüllt).
+ </xsd:documentation>
+ </xsd:annotation>
+ <xsd:element ref="VorgangName"/>
+ <xsd:element ref="VorgangAnzeigeName" minOccurs="0"/>
+ <xsd:element ref="VorgangStatus"/>
+ <xsd:element ref="VorgangRestriction" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element ref="VorgangConditions" minOccurs="0"/>
+ <xsd:element name="Required" type="xsd:boolean"/>
+ <xsd:element name="Visible" type="xsd:boolean"/>
+ <xsd:element ref="Subprozess" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="Subprozess" type="SubprozessType"/>
+
+ <xsd:element name="ProzessInstanzID" type="IDType"/>
+ <xsd:element name="VerlassenerProzessInstanzID" type="IDType"/>
+ <xsd:element name="SequenzID" type="IDType"/>
+
+ <xsd:element name="ProzessName">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="90"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="ProzessAnzeigeName">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="90"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="ProzessStatus">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="O"/>
+ <xsd:enumeration value="A"/>
+ <xsd:enumeration value="C"/>
+ <xsd:enumeration value="E"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="VorgangName">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="90"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="VorgangAnzeigeName">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="90"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="VorgangStatus">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="O"/>
+ <xsd:enumeration value="A"/>
+ <xsd:enumeration value="C"/>
+ <xsd:enumeration value="E"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="VorgangRestriction">
+ <xsd:annotation>
+ <xsd:documentation>regionale Restriktion, die fuer den Vorgang gilt (z.B. Gemeindenummer, fuer die Personen angemeldet werden duerfen.</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="RestrictionType" type="xsd:string"/>
+ <xsd:element name="RestrictionValue" type="xsd:string"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+
+ <xsd:element name="VorgangConditions">
+ <xsd:annotation>
+ <xsd:documentation>Liste von Bedingungen, unter denen das Item aktiv wird.</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="SelectedItems" minOccurs="1" maxOccurs="unbounded">
+ <xsd:annotation>
+ <xsd:documentation>Liste von alternativen Voraussetzungen (ODER) für die Anwählbarkeit der Activity. Ein Eintrag repräsentiert eine Reihe von Objekten, die im Suchergebnis ausgewählt sein müssen (UND).</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="SelectedItem" type="xsd:string" minOccurs="1" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+</xsd:schema>
+ \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/gis-schnittstelle.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/gis-schnittstelle.xsd
new file mode 100644
index 00000000..4228c88f
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/gis-schnittstelle.xsd
@@ -0,0 +1,171 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://bmi.gv.at/namespace/zmr-su/gis/20070725#" xmlns="http://bmi.gv.at/namespace/zmr-su/gis/20070725#" elementFormDefault="qualified">
+
+ <xsd:element name="GISListe">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="GISDaten" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="GISDaten" type="GISDatenType"/>
+ <xsd:complexType name="GISDatenType">
+ <xsd:sequence>
+ <xsd:element ref="Erstellungsdatum" minOccurs="0"/>
+ <xsd:element ref="Stichtagsdatum" minOccurs="0"/>
+ <xsd:element ref="Filter" minOccurs="0"/>
+ <xsd:element ref="Gemeindekennziffer" minOccurs="0"/>
+ <xsd:element ref="Ortkennziffer" minOccurs="0"/>
+ <xsd:element ref="Strassekennziffer" minOccurs="0"/>
+ <xsd:element ref="Adresscode" minOccurs="0"/>
+ <xsd:element ref="Subcode" minOccurs="0"/>
+ <xsd:element ref="AdresscodeSubcode" minOccurs="0"/>
+ <xsd:element ref="Objektnummer" minOccurs="0"/>
+ <xsd:element ref="Nutzungseinheitlaufnummer" minOccurs="0"/>
+ <xsd:element ref="Grundstuecknummer" minOccurs="0"/>
+ <xsd:element ref="GisMeridian" minOccurs="0"/>
+ <xsd:element name="KoordinatenADRCD" type="KoordinatenType" minOccurs="0"/>
+ <xsd:element name="KoordinatenSUBCD" type="KoordinatenType" minOccurs="0"/>
+ <xsd:element ref="Postleitzahl" minOccurs="0"/>
+ <xsd:element ref="Strassenname" minOccurs="0"/>
+ <xsd:element ref="Hausnummer" minOccurs="0"/>
+ <xsd:element ref="Stiege" minOccurs="0"/>
+ <xsd:element ref="Tuer" minOccurs="0"/>
+ <xsd:element ref="ErweitertesAttribut" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="Erstellungsdatum" type="xsd:date"/>
+ <xsd:element name="Stichtagsdatum" type="xsd:date"/>
+ <xsd:element name="Filter" type="xsd:string"/>
+
+ <xsd:element name="Gemeindekennziffer">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:pattern value="[0-9]{5}"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="Ortkennziffer">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:pattern value="[0-9]{5}"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="Strassekennziffer">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:pattern value="[0-9]{6}"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="Adresscode">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:pattern value="[0-9;A-Z]{7}"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="Subcode">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:pattern value="[0-9]{3}"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="AdresscodeSubcode">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:pattern value="[0-9;A-Z]{7}[0-9]{3}"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="Objektnummer">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:pattern value="[0-9;A-Z]{7}"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="Nutzungseinheitlaufnummer">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:pattern value="[0-9]{4}"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="Grundstuecknummer">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="Katastralgemnr" type="xsd:string"/>
+ <xsd:element name="Haupt" type="xsd:string"/>
+ <xsd:element name="Sub" type="xsd:string"/>
+ <xsd:element name="Punkt" type="xsd:string"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="GisMeridian" type="xsd:string"/>
+ <xsd:complexType name="KoordinatenType">
+ <xsd:sequence>
+ <xsd:element name="X" type="xsd:float"/>
+ <xsd:element name="Y" type="xsd:float"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ <xsd:element name="Postleitzahl">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="10"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="Strassenname">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="54"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="Hausnummer">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="54"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="Stiege">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="54"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="Tuer">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="54"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="ErweitertesAttribut">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="Code" type="xsd:string"/>
+ <xsd:element name="Beschreibung" type="xsd:string"/>
+ <xsd:element name="Wert" type="xsd:string"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/pvp1.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/pvp1.xsd
new file mode 100644
index 00000000..68a1115d
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/pvp1.xsd
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema targetNamespace="http://egov.gv.at/pvp1.xsd" xmlns="http://egov.gv.at/pvp1.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
+ <xs:element name="pvpToken">
+ <xs:complexType>
+ <xs:complexContent>
+ <xs:extension base="pvpTokenType" />
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+ <xs:complexType name="pvpTokenType">
+ <xs:sequence>
+ <xs:element name="authenticate">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="participantId" type="xs:string" />
+ <xs:element name="gvOuDomain" type="xs:string" minOccurs="0" maxOccurs="1" />
+ <xs:choice>
+ <xs:element name="userPrincipal">
+ <xs:complexType>
+ <xs:complexContent>
+ <xs:extension base="pvpPrincipalType">
+ <xs:sequence>
+ <xs:element name="gvGid" type="xs:string" />
+ <xs:element name="mail" type="xs:string" minOccurs="0" maxOccurs="1" />
+ <xs:element name="tel" type="xs:string" minOccurs="0" maxOccurs="1" />
+ <xs:element name="bpk" type="xs:string" minOccurs="0" maxOccurs="1" />
+ <xs:element name="gvFunction" type="xs:string" minOccurs="0" maxOccurs="1" />
+ </xs:sequence>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="systemPrincipal" type="pvpPrincipalType" />
+ </xs:choice>
+ <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded">
+ <xs:annotation>
+ <xs:documentation>additional authentication properties</xs:documentation>
+ </xs:annotation>
+ </xs:any>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="authorize" minOccurs="0" maxOccurs="1">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:sequence minOccurs="0">
+ <xs:element name="gvOuId" type="xs:string" />
+ <xs:element name="ou" type="xs:string" />
+ </xs:sequence>
+ <xs:element name="role" maxOccurs="unbounded">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="param" minOccurs="0" maxOccurs="unbounded">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="key" type="xs:string" />
+ <xs:element name="value" type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ </xs:sequence>
+ <xs:attribute name="value" type="xs:string" use="required" />
+ </xs:complexType>
+ </xs:element>
+ <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded">
+ <xs:annotation>
+ <xs:documentation>additional authorization properties</xs:documentation>
+ </xs:annotation>
+ </xs:any>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="accounting" minOccurs="0">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="invoiceRecptId" type="xs:string" />
+ <xs:element name="CostCenterId" maxOccurs="unbounded">
+ <xs:complexType>
+ <xs:simpleContent>
+ <xs:extension base="xs:string">
+ <xs:attribute name="default" type="xs:boolean" use="optional" default="false" />
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="ChargeCode" maxOccurs="unbounded">
+ <xs:complexType>
+ <xs:simpleContent>
+ <xs:extension base="xs:string">
+ <xs:attribute name="default" type="xs:boolean" use="optional" default="false" />
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
+ </xs:element>
+ <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded">
+ <xs:annotation>
+ <xs:documentation>additional properties</xs:documentation>
+ </xs:annotation>
+ </xs:any>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="pvpChainedToken" type="pvpTokenType" minOccurs="0" />
+ <xs:element name="pvpExtension" block="extension" minOccurs="0">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="orig-host" minOccurs="0" maxOccurs="1">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="scheme" type="xs:string" />
+ <xs:element name="hostinfo" type="xs:string" />
+ <xs:element name="uri" type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="debug-ticket" minOccurs="0" maxOccurs="1">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="txid" type="xs:string" />
+ <xs:element name="log-level" type="logLevelType" minOccurs="0" maxOccurs="1" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:any namespace="##any" processContents="lax" maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ </xs:sequence>
+ <xs:attribute name="version" type="gvVersionType" use="required" />
+ <xs:anyAttribute namespace="##any" processContents="lax" />
+ </xs:complexType>
+ <xs:complexType name="pvpPrincipalType">
+ <xs:sequence>
+ <xs:element name="userId" type="xs:string" />
+ <xs:element name="cn" type="xs:string" />
+ <xs:element name="gvOuId" type="xs:string" />
+ <xs:element name="ou" type="xs:string" />
+ <xs:element name="gvSecClass" type="gvSecClassType" minOccurs="0" />
+ <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded">
+ <xs:annotation>
+ <xs:documentation>additional principal attributes</xs:documentation>
+ </xs:annotation>
+ </xs:any>
+ </xs:sequence>
+ <xs:anyAttribute namespace="##any" processContents="lax" />
+ </xs:complexType>
+ <xs:simpleType name="gvSecClassType">
+ <xs:restriction base="xs:integer">
+ <xs:enumeration value="0" />
+ <xs:enumeration value="1" />
+ <xs:enumeration value="2" />
+ <xs:enumeration value="3" />
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="gvVersionType">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="1.0" />
+ <xs:enumeration value="1.1" />
+ <xs:enumeration value="1.2" />
+ <xs:enumeration value="1.8" />
+ <xs:enumeration value="1.9" />
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="logLevelType">
+ <xs:restriction base="xs:integer">
+ <xs:enumeration value="0" />
+ <xs:enumeration value="1" />
+ <xs:enumeration value="2" />
+ <xs:enumeration value="3" />
+ <xs:enumeration value="4" />
+ <xs:enumeration value="5" />
+ </xs:restriction>
+ </xs:simpleType>
+</xs:schema>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/secext.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/secext.xsd
new file mode 100644
index 00000000..1005b12a
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/secext.xsd
@@ -0,0 +1,150 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Legal Disclaimer
+
+The presentation, distribution or other dissemination of the information
+contained in this specification is not a license, either expressly or impliedly,
+to any intellectual property owned or controlled by IBM or Microsoft and\or any other
+third party. IBM and Microsoft and\or any other third party may have patents, patent
+applications, trademarks, copyrights, or other intellectual property rights
+covering subject matter in this document. The furnishing of this document
+does not give you any license to IBM's and Microsoft's or any other third party's patents,
+trademarks, copyrights, or other intellectual property.
+
+This specification and the information contained herein is provided on an "AS IS"
+ basis and to the maximum extent permitted by applicable law, IBM and Microsoft provides
+the document AS IS AND WITH ALL FAULTS, and hereby disclaims all other warranties
+and conditions, either express, implied or statutory, including, but not limited
+to, any (if any) implied warranties, duties or conditions of merchantability, of
+fitness for a particular purpose, of accuracy or completeness of responses, of
+results, of workmanlike effort, of lack of viruses, and of lack of negligence,
+all with regard to the document. ALSO, THERE IS NO WARRANTY OR CONDITION OF
+TITLE, QUIET ENJOYMENT, QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR
+NON-INFRINGEMENT OF ANY INTELLECTUAL PROPERTY RIGHTS WITH REGARD TO THE DOCUMENT.
+
+IN NO EVENT WILL IBM or MICROSOFT BE LIABLE TO ANY OTHER PARTY FOR THE COST OF PROCURING
+SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS OF USE, LOSS OF DATA, OR ANY
+INCIDENTAL, CONSEQUENTIAL, DIRECT, INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER
+CONTRACT, TORT, WARRANTY, OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY
+OTHER AGREEMENT RELATING TO THIS DOCUMENT, WHETHER OR NOT SUCH PARTY HAD ADVANCE
+NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.
+
+Copyright Notice
+
+Copyright 2001, 2002 IBM Corporation and Microsoft Corporation. All rights reserved.
+-->
+<xsd:schema targetNamespace="http://schemas.xmlsoap.org/ws/2002/04/secext" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsse="http://schemas.xmlsoap.org/ws/2002/04/secext" xmlns="http://schemas.xmlsoap.org/ws/2002/04/secext" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" elementFormDefault="qualified" attributeFormDefault="unqualified" version="0.2">
+ <xsd:element name="Security">
+ <xsd:annotation>
+ <xsd:documentation>
+ This element defines header block to use for security-relevant data directed at a specific SOAP actor.
+ </xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:any processContents="lax" minOccurs="0" maxOccurs="unbounded">
+ <xsd:annotation>
+ <xsd:documentation>
+ The use of "any" is to allow extensibility and different forms of security data.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:any>
+ </xsd:sequence>
+ <xsd:anyAttribute processContents="lax"/>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="UsernameToken">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="Username"/>
+ <xsd:element ref="Password" minOccurs="0"/>
+ </xsd:sequence>
+ <xsd:attribute name="Id" type="xsd:ID"/>
+ <xsd:anyAttribute namespace="##other"/>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="Username">
+ <xsd:complexType>
+ <xsd:simpleContent>
+ <xsd:extension base="xsd:string">
+ <xsd:anyAttribute namespace="##other"/>
+ </xsd:extension>
+ </xsd:simpleContent>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="Password">
+ <xsd:complexType>
+ <xsd:simpleContent>
+ <xsd:extension base="xsd:string">
+ <xsd:attribute name="Type" type="xsd:QName"/>
+ <xsd:anyAttribute namespace="##other"/>
+ </xsd:extension>
+ </xsd:simpleContent>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="BinarySecurityToken">
+ <xsd:annotation>
+ <xsd:documentation>A security token that is encoded in binary</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:simpleContent>
+ <xsd:extension base="xsd:string">
+ <xsd:attribute name="Id" type="xsd:ID"/>
+ <xsd:attribute name="ValueType" type="xsd:QName"/>
+ <xsd:attribute name="EncodingType" type="xsd:QName"/>
+ <xsd:anyAttribute namespace="##other" processContents="strict"/>
+ </xsd:extension>
+ </xsd:simpleContent>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="SecurityTokenReference">
+ <xsd:annotation>
+ <xsd:documentation>
+ This element is used reference a security token.
+ </xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:choice minOccurs="0" maxOccurs="unbounded">
+ <xsd:element ref="Reference"/>
+ <xsd:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:choice>
+ <xsd:attribute name="Id" type="xsd:ID"/>
+ <xsd:anyAttribute namespace="##other" processContents="lax"/>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="Reference">
+ <xsd:complexType>
+ <xsd:attribute name="URI" type="xsd:anyURI"/>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:simpleType name="PasswordTypeEnum">
+ <xsd:restriction base="xsd:QName">
+ <xsd:enumeration value="wsse:PasswordText"/>
+ <xsd:enumeration value="wsse:PasswordDigest"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="ValueTypeEnum">
+ <xsd:restriction base="xsd:QName">
+ <xsd:enumeration value="wsse:X509v3"/>
+ <xsd:enumeration value="wsse:Kerberosv5TGT"/>
+ <xsd:enumeration value="wsse:Kerberosv5ST"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="EncodingTypeEnum">
+ <xsd:restriction base="xsd:QName">
+ <xsd:enumeration value="wsse:Base64Binary"/>
+ <xsd:enumeration value="wsse:HexBinary"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="FaultcodeEnum">
+ <xsd:restriction base="xsd:QName">
+ <xsd:enumeration value="wsse:UnsupportedSecurityToken"/>
+ <xsd:enumeration value="wsse:UnsupportedAlgorithm"/>
+ <xsd:enumeration value="wsse:InvalidSecurity"/>
+ <xsd:enumeration value="wsse:InvalidSecurityToken"/>
+ <xsd:enumeration value="wsse:FailedAuthentication"/>
+ <xsd:enumeration value="wsse:FailedCheck"/>
+ <xsd:enumeration value="wsse:SecurityTokenUnavailable"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/soapenv.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/soapenv.xsd
new file mode 100644
index 00000000..a5db77f5
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/eingebunden/soapenv.xsd
@@ -0,0 +1,129 @@
+<?xml version='1.0' encoding='UTF-8' ?>
+
+<!-- Schema for the SOAP/1.1 envelope
+
+ This schema has been produced using W3C's SOAP Version 1.2 schema
+ found at:
+
+ http://www.w3.org/2001/06/soap-envelope
+
+ Copyright 2001 Martin Gudgin, Developmentor.
+
+ Changes made are the following:
+ - reverted namespace to http://schemas.xmlsoap.org/soap/envelope/
+ - reverted mustUnderstand to only allow 0 and 1 as lexical values
+ - made encodingStyle a global attribute 20020825
+
+ Further changes:
+
+ - removed default value from mustUnderstand attribute declaration - 20030314
+
+ Original copyright:
+
+ Copyright 2001 W3C (Massachusetts Institute of Technology,
+ Institut National de Recherche en Informatique et en Automatique,
+ Keio University). All Rights Reserved.
+ http://www.w3.org/Consortium/Legal/
+
+ This document is governed by the W3C Software License [1] as
+ described in the FAQ [2].
+
+ [1] http://www.w3.org/Consortium/Legal/copyright-software-19980720
+ [2] http://www.w3.org/Consortium/Legal/IPR-FAQ-20000620.html#DTD
+-->
+
+<!--
+2004-12-13 tsch: Content-Validierung im Body-Element von lax auf strict geändert (Element MUSS bekannt sein)
+-->
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ xmlns:tns="http://schemas.xmlsoap.org/soap/envelope/"
+ targetNamespace="http://schemas.xmlsoap.org/soap/envelope/" >
+
+
+ <!-- Envelope, header and body -->
+ <xs:element name="Envelope" type="tns:Envelope" />
+ <xs:complexType name="Envelope" >
+ <xs:sequence>
+ <xs:element ref="tns:Header" minOccurs="0" />
+ <xs:element ref="tns:Body" minOccurs="1" />
+ <xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="lax" />
+ </xs:sequence>
+ <xs:anyAttribute namespace="##other" processContents="lax" />
+ </xs:complexType>
+
+ <xs:element name="Header" type="tns:Header" />
+ <xs:complexType name="Header" >
+ <xs:sequence>
+ <xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="lax" />
+ </xs:sequence>
+ <xs:anyAttribute namespace="##other" processContents="lax" />
+ </xs:complexType>
+
+ <xs:element name="Body" type="tns:Body" />
+ <xs:complexType name="Body" >
+ <xs:sequence>
+ <xs:any namespace="##any" minOccurs="0" maxOccurs="unbounded" processContents="strict" />
+ </xs:sequence>
+ <xs:anyAttribute namespace="##any" processContents="lax" >
+ <xs:annotation>
+ <xs:documentation>
+ Prose in the spec does not specify that attributes are allowed on the Body element
+ </xs:documentation>
+ </xs:annotation>
+ </xs:anyAttribute>
+ </xs:complexType>
+
+
+ <!-- Global Attributes. The following attributes are intended to be usable via qualified attribute names on any complex type referencing them. -->
+ <xs:attribute name="mustUnderstand" >
+ <xs:simpleType>
+ <xs:restriction base='xs:boolean'>
+ <xs:pattern value='0|1' />
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="actor" type="xs:anyURI" />
+
+ <xs:simpleType name="encodingStyle" >
+ <xs:annotation>
+ <xs:documentation>
+ 'encodingStyle' indicates any canonicalization conventions followed in the contents of the containing element. For example, the value 'http://schemas.xmlsoap.org/soap/encoding/' indicates the pattern described in SOAP specification
+ </xs:documentation>
+ </xs:annotation>
+ <xs:list itemType="xs:anyURI" />
+ </xs:simpleType>
+
+ <xs:attribute name="encodingStyle" type="tns:encodingStyle" />
+ <xs:attributeGroup name="encodingStyle" >
+ <xs:attribute ref="tns:encodingStyle" />
+ </xs:attributeGroup>
+
+ <xs:element name="Fault" type="tns:Fault" />
+ <xs:complexType name="Fault" final="extension" >
+ <xs:annotation>
+ <xs:documentation>
+ Fault reporting structure
+ </xs:documentation>
+ </xs:annotation>
+ <xs:sequence>
+ <xs:element name="faultcode" type="xs:QName" />
+ <xs:element name="faultstring" type="xs:string" />
+ <xs:element name="faultactor" type="xs:anyURI" minOccurs="0" />
+ <xs:element name="detail" type="tns:detail" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="detail">
+ <xs:sequence>
+ <xs:any namespace="##any" minOccurs="0" maxOccurs="unbounded" processContents="lax" />
+ </xs:sequence>
+ <xs:anyAttribute namespace="##any" processContents="lax" />
+ </xs:complexType>
+
+</xs:schema>
+
+
+
+
+
+
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/AblaufendeAuskunftssperrenSuche.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/AblaufendeAuskunftssperrenSuche.xsd
new file mode 100644
index 00000000..cf5a661e
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/AblaufendeAuskunftssperrenSuche.xsd
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: AblaufendeAuskunftssperrenSuche.xsd
+Zweck: Definiert Datentypen für die Suche nach Personen mit ablaufenden Auskunftssperren im ZMR
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2005-02-07 tsch: AnzahlSaetze hinzugefügt
+2004-09-28 tsch: Erstellung
+-->
+
+<xsd:schema xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:cio="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+ targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../eingebunden/EingebundenProxy.xsd"/>
+ <xsd:import namespace="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" schemaLocation="../eingebunden/PersonDataZMR.xsd"/>
+ <xsd:include schemaLocation="Personenabfrage.xsd"/>
+
+ <xsd:element name="AblaufendeAuskunftssperrenSucheRequest">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="SperreBis"/>
+ <xsd:element ref="base:AnzahlSaetze"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="AblaufendeAuskunftssperrenSucheResponse">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="AblaufendeAuskunftssperrenSucheAnfrage"/>
+ <xsd:element ref="base:Message"/>
+ <xsd:element ref="AblaufendeAuskunftssperreErgebnis" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="AblaufendeAuskunftssperrenSucheAnfrage">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="SperreBis"/>
+ <xsd:element ref="base:AnzahlSaetze"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="AblaufendeAuskunftssperreErgebnis" type="AblaufendeAuskunftssperreErgebnisType"/>
+ <xsd:complexType name="AblaufendeAuskunftssperreErgebnisType">
+ <xsd:annotation>
+ <xsd:documentation>Enthält je einen 'PersonErgebnisSatz' pro gefundener Person. Wird keine Person gefunden, befindet sich eine entprechende Text-Message in 'PersonensucheMsg'</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="base:GefundeneSaetze">
+ <xsd:annotation>
+ <xsd:documentation>Gesamtanzahl der in der Datenbank gefundenen Personen</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element ref="base:SaetzeVon">
+ <xsd:annotation>
+ <xsd:documentation>Beginn-Index dieser Ergebnisliste im Gesamtergebnis (bei Blaettern); Start mit 1</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element ref="base:SaetzeBis">
+ <xsd:annotation>
+ <xsd:documentation>Ende-Index dieser Ergebnisliste im Gesamtergebnis (bei Blaettern)</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element name="PersonErgebnisSatz" type="PAbfrageErgebnisSatzType" minOccurs="1" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Adoption.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Adoption.xsd
new file mode 100644
index 00000000..81a29052
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Adoption.xsd
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: Adoption.xsd
+Zweck: Definiert Datentypen für Adoption einer Person im ZMR
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2005-02-07 tsch: AdoptionInfo optional
+2004-11-25 tsch: Erstellt
+-->
+
+<xsd:schema xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:cio="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+ targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../eingebunden/EingebundenProxy.xsd"/>
+ <xsd:import namespace="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" schemaLocation="../eingebunden/PersonDataZMR.xsd"/>
+ <xsd:include schemaLocation="../zmr/entities/Person.xsd"/>
+
+ <xsd:element name="AdoptionRequest">
+ <xsd:annotation>
+ <xsd:documentation>Es können die Person und deren abhängige Entities (z.B. Staatsangehoerigkeit) unabhängig geändert werden. Felder, die nicht geschickt werden, bleiben unverändert, leer geschickte Felder werden gelöscht.</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="AdoptionInfo" minOccurs="0"/>
+ <xsd:element ref="PersonReferenz"/>
+ <xsd:element ref="cio:Familienname"/>
+ <xsd:element ref="cio:AlternativName" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="AdoptionResponse">
+ <xsd:annotation>
+ <xsd:documentation>Server-Antwort zur Adoption</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="base:Message"/>
+ <xsd:element ref="PersonErgebnis">
+ <xsd:annotation>
+ <xsd:documentation>Gesamtdatensatz der geänderten (adoptierten) Person (mit EntityIDs der Person und deren abhängigen Entities)</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="AdoptionInfo" type="AdoptionInfoType"/>
+ <xsd:complexType name="AdoptionInfoType">
+ <xsd:annotation>
+ <xsd:documentation>allgemeine Fachliche Informationen zur Adoption</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="base:Von" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Adresssuche.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Adresssuche.xsd
new file mode 100644
index 00000000..41dab2e2
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Adresssuche.xsd
@@ -0,0 +1,128 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: Adresssuche.xsd
+Zweck: Definiert Datentypen für die Suche nach offiziellen STATA-Adressen im ZMR
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2009-11-20 mp: +Gebäudeeigenschaft, +Nutzungsart
+2005-06-15 pwag: CQ1370: Suchart ADRESSPRUEFUNG hinzugefügt
+2004-11-15 tsch: Detailgrad Gemeinde hinzugefügt
+2004-07-30 tsch: HauptIdentadresse->HauptIdent; Felder hinzu: Adressstatus, Adressschlüssel, HauptIdent, Hofname, Gebaeudeunterscheidung, GBDUntteil, InfoMeldewesen
+2004-07-08 tsch: Felder Adresszusatz, HauptIdentadresse hinzugefügt
+2004-06-24 tsch: GBRRefkey hinzugefügt
+2004-05-17 tsch: Organisation entfernt
+2004-01-27 tsch: Erstellung
+-->
+
+<xsd:schema targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:cio="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../eingebunden/EingebundenProxy.xsd"/>
+ <xsd:import namespace="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" schemaLocation="../eingebunden/PersonDataZMR.xsd"/>
+
+ <xsd:element name="AdresssucheRequest">
+ <xsd:annotation>
+ <xsd:documentation>Suchdaten für die STATA - Adresssuche im ZMR</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="AdresssucheInfo"/>
+ <xsd:element ref="Adressdaten"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="AdresssucheResponse">
+ <xsd:annotation>
+ <xsd:documentation>Anfragedaten, sowie Suchergebnis oder Text-Meldung (falls nichts gefunden)</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="AdresssucheAnfrage"/>
+ <xsd:element ref="base:Message"/>
+ <!-- gibt an, ob Klaerungsadressen erlaubt sind oder nicht -->
+ <xsd:element name="inclKlaerungsadressen" type="xsd:boolean" minOccurs="0"/>
+ <xsd:element ref="Adresssuchergebnis"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="AdresssucheAnfrage">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="AdresssucheInfo"/>
+ <xsd:element ref="Adressdaten"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="AdresssucheInfo" type="AdresssucheInfoType"/>
+ <xsd:complexType name="AdresssucheInfoType">
+ <xsd:annotation>
+ <xsd:documentation>Fachliche Informationen zur Adresssuche</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element name="Suchart">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="ADRESSSUCHE"/>
+ <xsd:enumeration value="IDENTEADRESSENSUCHE"/>
+ <xsd:enumeration value="ADRESSPRUEFUNG"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="Adresssuchergebnis" type="AdresssuchergebnisType"/>
+ <xsd:complexType name="AdresssuchergebnisType">
+ <xsd:sequence>
+ <xsd:element name="Detailgrad">
+ <xsd:annotation>
+ <xsd:documentation>Gibt der Detailgrad der Adressen im Suchergebnis an</xsd:documentation>
+ </xsd:annotation>
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="Gemeinde"/>
+ <xsd:enumeration value="Ortschaft"/>
+ <xsd:enumeration value="Strassenname"/>
+ <xsd:enumeration value="Orientierungsnummer"/>
+ <xsd:enumeration value="Gebaeudeteil"/>
+ <xsd:enumeration value="Tuer"/>
+ <xsd:enumeration value="Gesamtadresse"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element ref="base:GefundeneSaetze">
+ <xsd:annotation>
+ <xsd:documentation>Gesamtanzahl der gefundenen Sätze</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element ref="Adressdaten" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="Adressdaten">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="cio:PostAdresse" minOccurs="0"/>
+ <xsd:element ref="base:Adressstatus" minOccurs="0"/>
+ <xsd:element ref="base:Adressschluessel" minOccurs="0"/>
+ <xsd:element ref="base:HauptIdent" minOccurs="0"/>
+ <xsd:element ref="base:NameZuteil" minOccurs="0"/>
+ <xsd:element ref="base:Hofname" minOccurs="0"/>
+ <xsd:element ref="base:Gebaeudeunterscheidung" minOccurs="0"/>
+ <xsd:element ref="base:GBDUntteil" minOccurs="0"/>
+ <xsd:element ref="base:InfoMeldewesen" minOccurs="0"/>
+ <xsd:element ref="base:GbdEigenschaft" minOccurs="0"/>
+ <xsd:element ref="base:NtzArt" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Anwendungsintegration.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Anwendungsintegration.xsd
new file mode 100644
index 00000000..4bdd43c5
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Anwendungsintegration.xsd
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: Anwendungsintegration.xsd
+Zweck: Definiert Datentypen für den Usecase "ZMR Anwendungsintegration" im ZMR
+Author(s): Ehrenmüller Oliver, ZMR-SU
+
+Aenderungshistorie:
+2007-09-04 teo: erstellt.
+-->
+
+<xsd:schema targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:cio="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../eingebunden/EingebundenProxy.xsd"/>
+ <xsd:import namespace="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" schemaLocation="../eingebunden/PersonDataZMR.xsd"/>
+
+ <xsd:include schemaLocation="Personensuche.xsd"/>
+ <xsd:include schemaLocation="Behoerdenabfrage.xsd"/>
+
+ <xsd:element name="AnwendungsintegrationRequest">
+ <xsd:annotation>
+ <xsd:documentation>Suchkriterien für die Anwendungsintegration im ZMR/ERnP (Personendaten + Adressdaten)</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="AnwendungsintegrationInfo"/>
+ <xsd:element ref="PersonKey" minOccurs="0"/>
+ <xsd:element ref="cio:NatuerlichePerson" minOccurs="0"/>
+ <xsd:element ref="cio:PostAdresse" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="AnwendungsintegrationResponse">
+ <xsd:annotation>
+ <xsd:documentation>In der Response werden die Anfragedaten aus dem Request, und das Suchergebnis bzw. eine Text-Meldung geliefert (Falls keine Person gefunden)</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="AnwendungsintegrationAnfrage"/>
+ <xsd:element ref="base:Message"/>
+ <xsd:element ref="AnwendungsintegrationUeberblick" minOccurs="0"/>
+ <xsd:element ref="AnwendungsintegrationDetail" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="AnwendungsintegrationInfo">
+ <xsd:complexType>
+ <xsd:annotation>
+ <xsd:documentation>Fachliche Informationen zur Anwendungsintegration</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="base:Bezugsfeld"/>
+ <xsd:element name="BezugsfeldDokumente">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="BUERGERZUSTIMMUNG"/>
+ <xsd:enumeration value="BUNDESGESETZ"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="Geburtsurkunde" type="xsd:boolean" minOccurs="0"/>
+ <xsd:element name="Heiratsurkunde" type="xsd:boolean" minOccurs="0"/>
+ <xsd:element name="Staatsbuergerschaftsnachweis" type="xsd:boolean" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="AnwendungsintegrationUeberblick">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="base:AnzahlSaetze"/>
+ <xsd:element ref="PersonUeberblick" minOccurs="1" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="AnwendungsintegrationAnfrage">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="AnwendungsintegrationInfo"/>
+ <xsd:element ref="PersonKey" minOccurs="0"/>
+ <xsd:element ref="cio:NatuerlichePerson" minOccurs="0"/>
+ <xsd:element ref="cio:PostAdresse" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="AnwendungsintegrationDetail" type="PersonErgebnisSatzType"/>
+
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/AnwendungsintegrationWiederholung.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/AnwendungsintegrationWiederholung.xsd
new file mode 100644
index 00000000..6bbd038d
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/AnwendungsintegrationWiederholung.xsd
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: AnwendungsintegrationWiederholung.xsd
+Zweck: Definiert Datentypen für den Usecase "ZMR Anwendungsintegration Wiederholungsanfrage" im ZMR
+Author(s): Ehrenmüller Oliver, ZMR-SU
+
+Aenderungshistorie:
+2007-11-28 teo: erstellt.
+-->
+
+<xsd:schema targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:cio="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../eingebunden/EingebundenProxy.xsd"/>
+ <xsd:import namespace="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" schemaLocation="../eingebunden/PersonDataZMR.xsd"/>
+
+ <xsd:include schemaLocation="Anwendungsintegration.xsd"/>
+
+ <xsd:element name="AnwendungsintegrationWiederholungRequest">
+ <xsd:annotation>
+ <xsd:documentation>Sammel-Token für die AnwendungsintegrationWiederholung im ZMR/ERnP (Personendaten + Adressdaten)</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="AnwendungsintegrationWiederholungInfo"/>
+ <xsd:element ref="AnwendungsintegrationWiederholungAbfrage" maxOccurs="10"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="AnwendungsintegrationWiederholungInfo">
+ <xsd:complexType>
+ <xsd:annotation>
+ <xsd:documentation>Fachliche Informationen zur AnwendungsintegrationWiederholung</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="base:Bezugsfeld"/>
+ <xsd:element name="Ergebnisoption">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="PERSONENDATEN"/>
+ <xsd:enumeration value="PERSONENDATENBPK"/>
+ <xsd:enumeration value="BPK"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="Verfahrensbereich" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>Verfahrensbereich inkl. Prefix für den die bPK errechnet werden soll (zb. urn:publicid:gv.at:cdid+PV)</xsd:documentation>
+ </xsd:annotation>
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="26"/>
+ <xsd:maxLength value="29"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="Fremdbereich" minOccurs="0" maxOccurs="10">
+ <xsd:annotation>
+ <xsd:documentation>Fremd-bPKs die miterzeugt werden sollen. (zb. urn:publicid:gv.at:ecdid+BMI+ZP)</xsd:documentation>
+ </xsd:annotation>
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="28"/>
+ <xsd:maxLength value="50"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="AnwendungsintegrationWiederholungAbfrage">
+ <xsd:annotation>
+ <xsd:documentation>Suchkriterien für die Anwendungsintegration/Wiederholungsabfrage im ZMR/ERnP (Personendaten + Adressdaten)</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="cio:NatuerlichePerson" minOccurs="0"/>
+ <xsd:element ref="cio:PostAdresse" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+
+ <xsd:element name="AnwendungsintegrationWiederholungResponse">
+ <xsd:annotation>
+ <xsd:documentation>In der Response werden die Anfragedaten aus dem Request, und das Suchergebnis bzw. eine Text-Meldung geliefert (Falls keine Person gefunden)</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="AnwendungsintegrationWiederholungAnfrage"/>
+ <xsd:element ref="base:Message"/>
+ <xsd:element ref="AnwendungsintegrationWiederholungDetail" minOccurs="0" maxOccurs="10"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="AnwendungsintegrationWiederholungAnfrage">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="AnwendungsintegrationWiederholungInfo"/>
+ <xsd:element ref="AnwendungsintegrationWiederholungAbfrage" maxOccurs="10"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="AnwendungsintegrationWiederholungDetail" type="PersonErgebnisSatzType"/>
+
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/AuskunftssperreAendern.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/AuskunftssperreAendern.xsd
new file mode 100644
index 00000000..9e29f2f2
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/AuskunftssperreAendern.xsd
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: AuskunftssperreAendern.xsd
+Zweck: Definiert Datentypen für den Usecase "Wohnsitz Auskunftssperre Ändern" im ZMR
+Author(s): Ehrenmüller Oliver, ZMR-SU
+
+Aenderungshistorie:
+2009-08-06 teo: Erstellt
+-->
+
+<xsd:schema targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:cio="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../eingebunden/EingebundenProxy.xsd"/>
+ <xsd:import namespace="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" schemaLocation="../eingebunden/PersonDataZMR.xsd"/>
+ <xsd:include schemaLocation="../zmr/entities/Person.xsd"/>
+ <xsd:include schemaLocation="../zmr/entities/Meldung.xsd"/>
+ <xsd:include schemaLocation="../zmr/entities/Auskunftssperre.xsd"/>
+
+ <xsd:element name="AuskunftssperreAendernRequest">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="PersonReferenz"/>
+ <xsd:element ref="MeldungReferenz"/>
+ <xsd:element ref="AuskunftssperreAenderung" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element ref="AuskunftssperreAnlage" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="AuskunftssperreAendernResponse">
+ <xsd:complexType>
+ <xsd:annotation>
+ <xsd:documentation>Server-Antwort zur Änderung von Auskunftssperren auf Meldungen</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="base:Message"/>
+ <xsd:sequence minOccurs="0">
+ <xsd:element ref="PersonReferenz"/>
+ <xsd:element ref="MeldungErgebnis">
+ <xsd:annotation>
+ <xsd:documentation>Gesamtdatensatz der korrigierten Meldung (mit EntityIDs der Meldung und deren abhängigen Entities)</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ </xsd:sequence>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/AvisoAendern.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/AvisoAendern.xsd
new file mode 100644
index 00000000..37a3ac98
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/AvisoAendern.xsd
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: AvisoAendern.xsd
+Zweck: Definiert Datentypen für die Änderung von Avisi
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2004-11-26 tsch: Avisotreffer, AvisoBeenden hinzugefügt
+2004-04-13 tsch: Erstellung
+-->
+
+<xsd:schema targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:cio="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:include schemaLocation="../zmr/entities/Aviso.xsd"/>
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../eingebunden/EingebundenProxy.xsd"/>
+
+ <xsd:element name="AvisoAendernRequest">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="AvisoAendernInfo"/>
+ <xsd:element ref="AvisoReferenz"/>
+ <xsd:choice>
+ <xsd:sequence>
+ <xsd:element ref="AvisoAenderung"/>
+ <xsd:element ref="AvisoTrefferAenderung" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:sequence>
+ <xsd:element ref="AvisoTrefferAenderung" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:choice>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="AvisoAendernResponse">
+ <xsd:annotation>
+ <xsd:documentation>Server-Antwort zur Avisonänderung</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="base:Message"/>
+ <xsd:element ref="AvisoErgebnis">
+ <xsd:annotation>
+ <xsd:documentation>Gesamtdatensatz des geänderten Aviso</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="AvisoBeendenRequest">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="AvisoReferenz" minOccurs="1" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="AvisoBeendenResponse">
+ <xsd:annotation>
+ <xsd:documentation>Server-Antwort zur Avisobeendugung</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="base:Message"/>
+ <xsd:element ref="AvisoErgebnis" minOccurs="1" maxOccurs="unbounded">
+ <xsd:annotation>
+ <xsd:documentation>Gesamtdatensätze der beendeten Avisi</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="AvisoAendernInfo" type="AvisoAendernInfoType"/>
+ <xsd:complexType name="AvisoAendernInfoType">
+ <xsd:annotation>
+ <xsd:documentation>Fachliche Informationen zur Avisoaenderung</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexContent>
+ <xsd:extension base="base:InfoFachlichType">
+
+ </xsd:extension>
+ </xsd:complexContent>
+
+ </xsd:complexType>
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/AvisoAnlegen.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/AvisoAnlegen.xsd
new file mode 100644
index 00000000..92c37432
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/AvisoAnlegen.xsd
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: AvisoAnlegen.xsd
+Zweck: Definiert Datentypen für die Anlage von Avisi
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2004-04-13 tsch: Erstellung
+-->
+
+<xsd:schema targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:cio="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:include schemaLocation="../zmr/entities/Aviso.xsd"/>
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../eingebunden/EingebundenProxy.xsd"/>
+
+ <xsd:element name="AvisoAnlegenRequest">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="AvisoAnlegenInfo"/>
+ <xsd:element ref="AvisoAnlage"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="AvisoAnlegenResponse">
+ <xsd:annotation>
+ <xsd:documentation>Server-Antwort zur Avisonanlage</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="base:Message"/>
+ <xsd:element ref="AvisoErgebnis">
+ <xsd:annotation>
+ <xsd:documentation>Gesamtdatensatz des im ZMR angelegten Aviso</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="AvisoAnlegenInfo" type="AvisoAnlegenInfoType"/>
+ <xsd:complexType name="AvisoAnlegenInfoType">
+ <xsd:annotation>
+ <xsd:documentation>Fachliche Informationen zur Avisoanlage</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexContent>
+ <xsd:extension base="base:InfoFachlichType">
+
+ </xsd:extension>
+ </xsd:complexContent>
+
+ </xsd:complexType>
+
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/AvisoFreigeben.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/AvisoFreigeben.xsd
new file mode 100644
index 00000000..6291dd58
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/AvisoFreigeben.xsd
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: AvisoFreigeben.xsd
+Zweck: Definiert Datentypen für die Freigabe von Avisi durch die Meldebehörde
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2005-01-14 tsch: Freigabe Suche erweitert
+2004-11-26 tsch: Erstellung
+-->
+
+<xsd:schema targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:cio="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../eingebunden/EingebundenProxy.xsd"/>
+ <xsd:include schemaLocation="../zmr/Avisosuche.xsd"/>
+
+ <xsd:element name="AvisoFreigebenSucheRequest">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="base:AnzahlSaetze"/>
+ <xsd:element ref="AvisoSuche" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="AvisoFreigebenSucheResponse">
+ <xsd:annotation>
+ <xsd:documentation>Server-Antwort mit den zu aktivierenden Avisi</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="base:Message"/>
+ <xsd:element ref="Avisosuchergebnis" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="AvisoFreigebenRequest">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="Freigegeben" type="xsd:boolean"/>
+ <xsd:element ref="AvisoReferenz" minOccurs="1" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="AvisoFreigebenResponse">
+ <xsd:annotation>
+ <xsd:documentation>Server-Antwort zur Aviso-Aktivierung</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="base:Message"/>
+ <xsd:element ref="AvisoErgebnis" minOccurs="1" maxOccurs="unbounded">
+ <xsd:annotation>
+ <xsd:documentation>Gesamtdatensätze der freigegebenen/abgelehnten Avisi</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Avisosuche.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Avisosuche.xsd
new file mode 100644
index 00000000..82e48c49
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Avisosuche.xsd
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: Avisosuche.xsd
+Zweck: Definiert Datentypen für die Avisosuche
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2005-01-14 tsch: Feld NurHistorische hinzugefügt
+2004-11-26 tsch: Erweiterung um Avisotreffer
+2004-06-22 tsch: SaetzeVon und SaetzeBis im Ergebnis
+2004-05-17 tsch: Organisation entfernt
+2004-04-06 tsch: Erstellung
+-->
+
+<xsd:schema targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:cio="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:include schemaLocation="../zmr/entities/Aviso.xsd"/>
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../eingebunden/EingebundenProxy.xsd"/>
+ <xsd:import namespace="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" schemaLocation="../eingebunden/PersonDataZMR.xsd"/>
+
+ <xsd:element name="AvisosucheRequest">
+ <xsd:annotation>
+ <xsd:documentation>Suchedaten fuer die Suche nach existierenden Avisi, sowie nach Personen im ZPR</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="AvisosucheInfo"/>
+ <xsd:element ref="AvisoSuche" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="AvisosucheResponse">
+ <xsd:annotation>
+ <xsd:documentation>Anfragedaten, sowie Suchergebnis oder Text-Meldung (falls nichts gefunden)</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="AvisosucheAnfrage"/>
+ <xsd:element ref="base:Message"/>
+ <xsd:element ref="Avisosuchergebnis" minOccurs="0"/>
+ <xsd:element ref="PersonenAbfrageErgebnis" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="AvisosucheAnfrage">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="AvisosucheInfo"/>
+ <xsd:element ref="AvisoSuche" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="AvisosucheInfo" type="AvisosucheInfoType"/>
+ <xsd:complexType name="AvisosucheInfoType">
+ <xsd:annotation>
+ <xsd:documentation>Fachliche Informationen zur Avisosuche</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="base:InclusivHistorie"/>
+ <xsd:element ref="base:Formalisiert"/>
+ <xsd:element name="InclusivSucheZMR" type="xsd:boolean"/>
+ <xsd:element name="NurAvisoTreffer" type="xsd:boolean"/>
+ <xsd:element name="UnbearbeiteteAnzeigen" type="xsd:boolean"/>
+ <xsd:element name="NurHistorische" type="xsd:boolean"/>
+ <xsd:element ref="base:AnzahlSaetze"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="AvisoSuche" type="AvisoSucheType"/>
+ <xsd:complexType name="AvisoSucheType">
+ <xsd:annotation>
+ <xsd:documentation>Aviso-Struktur für die Suche nach Avisi bzw. Personen</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="AvisoAktenzahl" minOccurs="0"/>
+ <xsd:element ref="base:BehoerdenNr" minOccurs="0"/>
+ <xsd:element ref="AvisoZahl" minOccurs="0"/>
+ <xsd:element ref="AvisoSuchdaten" minOccurs="0"/>
+ <xsd:element ref="AvisoStatus" minOccurs="0"/>
+ <xsd:element name="AblaufZeitraum" minOccurs="0">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="Von" type="base:TimestampType"/>
+ <xsd:element name="Bis" type="base:TimestampType"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="Avisosuchergebnis" type="AvisosuchergebnisType"/>
+ <xsd:complexType name="AvisosuchergebnisType">
+ <xsd:annotation>
+ <xsd:documentation>Aviso-Struktur für Neuanlagen von Avisi im ZMR</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="base:GefundeneSaetze">
+ <xsd:annotation>
+ <xsd:documentation>Gesamtanzahl der in der Datenbank gefundenen Avisi</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element ref="base:SaetzeVon">
+ <xsd:annotation>
+ <xsd:documentation>Beginn-Index dieser Ergebnisliste im Gesamtergebnis (bei Blaettern); Start mit 1</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element ref="base:SaetzeBis">
+ <xsd:annotation>
+ <xsd:documentation>Ende-Index dieser Ergebnisliste im Gesamtergebnis (bei Blaettern)</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element ref="AvisoErgebnis" minOccurs="1" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/BKMeldeauskunft.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/BKMeldeauskunft.xsd
new file mode 100644
index 00000000..b82fae63
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/BKMeldeauskunft.xsd
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: BKMeldeauskunft.xsd
+Zweck: Definiert Datentypen für die Meldeauskunft mit Bür aus dem ZMR
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2004-10-27 tsch: Meldeauskunft aus Mussfeld im Ergebnis
+2004-05-17 tsch: ZMR-Zahl hinzugefügt
+2004-04-01 tsch: Erstellung
+-->
+
+<xsd:schema xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:cio="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+ targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../eingebunden/EingebundenProxy.xsd"/>
+ <xsd:import namespace="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" schemaLocation="../eingebunden/PersonDataZMR.xsd"/>
+
+ <xsd:include schemaLocation="Meldeauskunft.xsd"/>
+
+ <xsd:element name="BKMeldeauskunftRequest">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="BKMeldeauskunftInfo"/>
+ <xsd:element ref="base:ZMRZahl" minOccurs="0"/>
+ <xsd:element ref="cio:NatuerlichePerson"/>
+ <xsd:element ref="cio:PostAdresse" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="BKMeldeauskunftResponse">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="BKMeldeauskunftAnfrage"/>
+ <xsd:element ref="base:Message"/>
+ <xsd:element ref="Meldeauskunft" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="BKMeldeauskunftAnfrage">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="BKMeldeauskunftInfo"/>
+ <xsd:element ref="base:ZMRZahl" minOccurs="0"/>
+ <xsd:element ref="cio:NatuerlichePerson" minOccurs="0"/>
+ <xsd:element ref="cio:PostAdresse" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="BKMeldeauskunftInfo" type="BKMeldeauskunftInfoType"/>
+ <xsd:complexType name="BKMeldeauskunftInfoType">
+ <xsd:annotation>
+ <xsd:documentation>allgemeine Fachliche Informationen für die Meldeauskunft</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="base:Bezugsfeld"/>
+ <xsd:element ref="base:BPKPersonInfo"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/BPKPruefung.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/BPKPruefung.xsd
new file mode 100644
index 00000000..eb9b3798
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/BPKPruefung.xsd
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: BPKPruefung.xsd
+Zweck: Definiert Datentypen für die BPK-Prüfung im ZMR
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2005-05-24 tsch: Erstellung
+-->
+
+<xsd:schema xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:cio="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+ targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../eingebunden/EingebundenProxy.xsd"/>
+ <xsd:import namespace="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" schemaLocation="../eingebunden/PersonDataZMR.xsd"/>
+
+
+ <xsd:element name="BPKPruefungRequest">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="BPKPruefungInfo"/>
+ <xsd:element ref="base:Bereichskennung"/>
+ <xsd:element ref="base:BPK"/>
+ <xsd:element ref="cio:NatuerlichePerson"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="BPKPruefungResponse">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="BPKPruefungAnfrage"/>
+ <xsd:element ref="base:Message"/>
+ <xsd:element ref="BPKPruefungErgebnis" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="BPKPruefungAnfrage">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="BPKPruefungInfo"/>
+ <xsd:element ref="base:Bereichskennung"/>
+ <xsd:element ref="base:BPK"/>
+ <xsd:element ref="cio:NatuerlichePerson"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="BPKPruefungInfo" type="BPKPruefungInfoType"/>
+ <xsd:complexType name="BPKPruefungInfoType">
+ <xsd:annotation>
+ <xsd:documentation>allgemeine Fachliche Informationen für die BPK-Pruefung</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="base:Bezugsfeld"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+
+ <xsd:element name="BPKPruefungErgebnis">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="cio:NatuerlichePerson" minOccurs="0"/>
+ <xsd:element ref="cio:PostAdresse" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element name="AktMeldesatz" type="xsd:boolean"/>
+ <xsd:element ref="base:GemeldetBis" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Behoerdenabfrage.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Behoerdenabfrage.xsd
new file mode 100644
index 00000000..6e764562
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Behoerdenabfrage.xsd
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: Behoerdenabfrage.xsd
+Zweck: Definiert Datentypen für die Behoerdenabfrage des ZMR
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2005-01-04 tsch: Feld Personendaten in BehoerdenabfrageDetail optional für Negativdruckauskunft
+2004-12-13 tsch: StandarddokumenteLiefern hinzugefügt
+2004-08-02 tsch: Erstellung
+-->
+
+<xsd:schema xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:cio="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+ targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../eingebunden/EingebundenProxy.xsd"/>
+ <xsd:import namespace="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" schemaLocation="../eingebunden/PersonDataZMR.xsd"/>
+
+ <xsd:include schemaLocation="Personensuche.xsd"/>
+
+ <xsd:element name="BehoerdenabfrageRequest">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="BehoerdenabfrageInfo"/>
+ <xsd:element ref="PersonKey" minOccurs="0"/>
+ <xsd:element ref="base:ZMRZahl" minOccurs="0"/>
+ <xsd:element ref="cio:NatuerlichePerson" minOccurs="0"/>
+ <xsd:element ref="cio:PostAdresse" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="BehoerdenabfrageResponse">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="BehoerdenabfrageAnfrage"/>
+ <xsd:element ref="base:Message"/>
+ <xsd:choice minOccurs="0">
+ <xsd:element ref="BehoerdenabfrageUeberblick"/>
+ <xsd:element ref="BehoerdenabfrageDetail"/>
+ </xsd:choice>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="BehoerdenabfrageAnfrage">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="BehoerdenabfrageInfo"/>
+ <xsd:element ref="PersonKey" minOccurs="0"/>
+ <xsd:element ref="base:ZMRZahl" minOccurs="0"/>
+ <xsd:element ref="cio:NatuerlichePerson" minOccurs="0"/>
+ <xsd:element ref="cio:PostAdresse" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="BehoerdenabfrageInfo" type="BehoerdenabfrageInfoType"/>
+ <xsd:complexType name="BehoerdenabfrageInfoType">
+ <xsd:annotation>
+ <xsd:documentation>allgemeine Fachliche Informationen für die Behördenabfrage</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="base:Bezugsfeld" minOccurs="0"/>
+ <xsd:element name="BehoerdenabfrageAction">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="BUNDGESETZ"/>
+ <xsd:enumeration value="SONSTIGES"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="StandarddokumenteLiefern" minOccurs="0">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="BUERGER"/>
+ <xsd:enumeration value="GESETZ"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element ref="base:InclusivHistorie"/>
+ <xsd:element ref="base:Formalisiert"/>
+ <xsd:element ref="base:ErstellePDF" minOccurs="0"/>
+ <xsd:element name="berechneBpk" type="xsd:boolean" default="false" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="BehoerdenabfrageUeberblick">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="base:AnzahlSaetze"/>
+ <xsd:element ref="PersonUeberblick" minOccurs="1" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="PersonUeberblick">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="PersonKey" />
+ <xsd:element ref="cio:Geburtsdatum" />
+ <xsd:element ref="cio:Geburtsort" minOccurs="0" />
+ <xsd:element ref="cio:Postleitzahl" minOccurs="0" />
+ <xsd:element ref="cio:Ortschaft" minOccurs="0" />
+ <xsd:element ref="cio:Gemeinde" minOccurs="0" />
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="BehoerdenabfrageDetail">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="Personendaten" minOccurs="0"/>
+ <xsd:element ref="Meldedaten" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element name="PDFDaten" type="xsd:base64Binary"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="PersonKey" type="base:IDType"/>
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/BehoerdenattributeAendern.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/BehoerdenattributeAendern.xsd
new file mode 100644
index 00000000..aa4b2bbf
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/BehoerdenattributeAendern.xsd
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: BehoerdenattributeAendern.xsd
+Zweck: Definiert Datentypen für Änderungen an den Behördenattribute der Meldungen im ZMR
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2004-09-27 tsch: Erstellt
+-->
+
+<xsd:schema xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:cio="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+ targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../eingebunden/EingebundenProxy.xsd"/>
+ <xsd:include schemaLocation="../zmr/entities/Person.xsd"/>
+ <xsd:include schemaLocation="../zmr/entities/Meldung.xsd"/>
+
+ <xsd:element name="BehoerdenattributeAendernRequest">
+ <xsd:annotation>
+ <xsd:documentation>
+ Referenz-Daten der betroffenen Person und der Meldung, sowie die geänderten Behördenattribute.
+ Nicht übermittelte Felder bleiben unverändert, Felder, die als Leer-Tags geschickt werden, werden gelöscht.
+ </xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="BehoerdenattributeAendernInfo"/>
+ <xsd:element ref="PersonReferenz"/>
+ <xsd:element ref="MeldungReferenz"/>
+ <xsd:element name="BehoerdenattributeSetzen" type="BehoerdenattributeSetzenType"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="BehoerdenattributeAendernResponse">
+ <xsd:annotation>
+ <xsd:documentation>Server-Antwort zum Änderungsvorgang</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="base:Message"/>
+ <xsd:element ref="PersonReferenz"/>
+ <xsd:element ref="MeldungErgebnis">
+ <xsd:annotation>
+ <xsd:documentation>Gesamtdatensatz der geänderten Meldung (geänderte Behördenattribute)</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="BehoerdenattributeAendernInfo" type="BehoerdenattributeAendernInfoType"/>
+ <xsd:complexType name="BehoerdenattributeAendernInfoType">
+ <xsd:annotation>
+ <xsd:documentation>allgemeine Fachliche Informationen zur Änderung der Behördenattribute</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexContent>
+ <xsd:extension base="base:InfoFachlichType">
+
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Bestandsaenderungen.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Bestandsaenderungen.xsd
new file mode 100644
index 00000000..8abbbedf
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Bestandsaenderungen.xsd
@@ -0,0 +1,140 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: Zuzugsbestaetigung.xsd
+Zweck: Definiert Datentypen für die Zuzugsbetätigungen aus dem ZMR
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2005-01-11 tsch: Feld InclusiveAdressen hinzugefügt
+2004-08-23 tsch: Kapselung der Bestandsänderungssätze im Element Bestandsaenderung
+2004-08-20 tsch: GeburtsdatumVon, GeburtsdatumBis, Geschlecht in Anforderung optional
+2004-08-17 tsch: Erstellung
+-->
+
+<xsd:schema targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:cio="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../eingebunden/EingebundenProxy.xsd"/>
+ <xsd:import namespace="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" schemaLocation="../eingebunden/PersonDataZMR.xsd"/>
+
+ <xsd:element name="BestandsaenderungenRequest">
+ <xsd:annotation>
+ <xsd:documentation>Anfragedaten der Bestandsaenderungen-Anforderung</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="BestandsaenderungenInfo"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="BestandsaenderungenResponse">
+ <xsd:annotation>
+ <xsd:documentation>In der Response werden die Anfragedaten aus dem Request und das Abgleichergebnis geliefert.</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="BestandsaenderungenAnfrage"/>
+ <xsd:element ref="base:Message"/>
+ <xsd:element ref="Bestandsaenderungen" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="BestandsaenderungenInfo" type="BestandsaenderungenInfoType"/>
+
+ <xsd:complexType name="BestandsaenderungenInfoType">
+ <xsd:sequence>
+ <xsd:element name="AenderungenVon" type="base:TimestampType"/>
+ <xsd:element name="AenderungenBis" type="base:TimestampType"/>
+ <xsd:element name="InclusiveAdressen" type="xsd:boolean"/>
+ <xsd:element name="GeburtsdatumVon" type="base:DatumType" minOccurs="0"/>
+ <xsd:element name="GeburtsdatumBis" type="base:DatumType" minOccurs="0"/>
+ <xsd:element ref="cio:Geschlecht" minOccurs="0"/>
+ <xsd:element ref="Veraenderung" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="BestandsaenderungenAnfrage">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="BestandsaenderungenInfo"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="Bestandsaenderungen" type="BestandsaenderungenType"/>
+
+ <xsd:complexType name="BestandsaenderungenType">
+ <xsd:sequence>
+ <xsd:element ref="base:GefundeneSaetze">
+ <xsd:annotation>
+ <xsd:documentation>Gesamtanzahl der Bestandsaenderung-Saetze für diese Anfrage</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element ref="base:AnzahlSaetze">
+ <xsd:annotation>
+ <xsd:documentation>Anzahl der im File gelieferten Bestandsaenderung-Saetze</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element ref="BestandsaenderungSatz" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="BestandsaenderungSatz" type="BestandsaenderungSatzType"/>
+ <xsd:complexType name="BestandsaenderungSatzType">
+ <xsd:sequence>
+ <xsd:element name="Aenderungszeitpunkt" type="base:TimestampType"/>
+ <xsd:element ref="base:ZMRZahl"/>
+ <xsd:element ref="cio:Identification" minOccurs="0" maxOccurs="3"/>
+ <xsd:element ref="KitQuelleBpk" minOccurs="0"/>
+ <xsd:element ref="KitZielBpk" minOccurs="0"/>
+ <xsd:element ref="cio:Familienname"/>
+ <xsd:element ref="cio:Geburtsdatum"/>
+ <xsd:element ref="cio:Geschlecht"/>
+ <xsd:element ref="Bestandsaenderung" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="KitQuelleBpk">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="cio:Identification" minOccurs="0" maxOccurs="3"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="KitZielBpk">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="cio:Identification" minOccurs="0" maxOccurs="3"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="Veraenderung">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="50"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+
+ <xsd:element name="Bestandsaenderung">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="Veraenderung"/>
+ <xsd:element ref="cio:PostAdresse" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/BusinesspartnerAnfrage.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/BusinesspartnerAnfrage.xsd
new file mode 100644
index 00000000..249aa0c0
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/BusinesspartnerAnfrage.xsd
@@ -0,0 +1,131 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: BusinesspartnerAnfrage.xsd
+Zweck: Definiert Datentypen fuer alle BusinesspartnerAbfragen im ZMR
+ soll Businesspartnerabfrage.xsd und BusinesspartnerabfrageErweitert.xsd ersetzen
+Author(s): Richard Mayrhofer
+-->
+
+<xsd:schema xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:cio="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+ targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:include schemaLocation="../zmr/Businesspartnerabfrage.xsd"/>
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../eingebunden/EingebundenProxy.xsd"/>
+ <xsd:import namespace="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" schemaLocation="../eingebunden/PersonDataZMR.xsd"/>
+
+ <xsd:element name="BusinesspartnerAnfrageRequest">
+ <xsd:complexType>
+ <xsd:sequence minOccurs="1">
+ <xsd:element ref="BusinesspartnerAnfrage"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="BusinesspartnerAnfrage">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="AnfrageGrund" type="xsd:string" />
+ <xsd:element ref="AnfrageOptionen" minOccurs="1"/>
+ <xsd:element ref="AnfrageArgumente" minOccurs="1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="AnfrageArgumente">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="base:ZMRZahl" minOccurs="0"/>
+ <xsd:sequence minOccurs="0">
+ <xsd:element ref="base:Bereichskennung"/>
+ <xsd:element ref="base:BPK"/>
+ </xsd:sequence>
+ <xsd:element ref="cio:NatuerlichePerson"/>
+ <xsd:element ref="cio:PostAdresse" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="AnfrageOptionen">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="mitPDF" type="xsd:boolean" minOccurs="0"/>
+ <xsd:element ref="AnfrageRegister"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="AnfrageRegister">
+ <xsd:complexType>
+ <xsd:sequence minOccurs="1" maxOccurs="2">
+ <xsd:element name="Register" type="RegisterValues"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:simpleType name="RegisterValues">
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="ZMR"/>
+ <xsd:enumeration value="ZPS"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+
+ <xsd:element name="BusinesspartnerAnfrageResponse">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="BusinesspartnerAnfrage"/>
+ <xsd:element ref="base:Message"/>
+ <xsd:element ref="BusinesspartnerAnfrageErgebnis" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="BusinesspartnerAnfrageErgebnis">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="Person"/>
+ <xsd:element ref="Meldung" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element name="PDFDokument" type="xsd:base64Binary" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="Meldung">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="cio:PostAdresse"/>
+ <xsd:element ref="base:GemeldetVon" minOccurs="0"/>
+ <xsd:element ref="base:GemeldetBis" minOccurs="0"/>
+ <xsd:element name="istAktuell" type="xsd:boolean"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="Person">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="cio:NatuerlichePerson" minOccurs="0"/>
+ <xsd:element name="istAktuell" type="xsd:boolean"/>
+ <xsd:element ref="SterbeInfo" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="SterbeInfo">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="SterbeDatum" type="xsd:string" minOccurs="0"/>
+ <xsd:element name="SterbeZeit" type="xsd:string" minOccurs="0"/>
+ <xsd:element name="SterbeGemeinde" type="xsd:string" minOccurs="0"/>
+ <xsd:element name="SterbeGemeindekennzahl" type="xsd:string" minOccurs="0"/>
+ <xsd:element name="SterbeStaatsname" type="xsd:string" minOccurs="0"/>
+ <xsd:element name="SterbeStaatscode" type="xsd:string" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Businesspartnerabfrage.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Businesspartnerabfrage.xsd
new file mode 100644
index 00000000..2831a33d
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Businesspartnerabfrage.xsd
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: Businesspartnerabfrage.xsd
+Zweck: Definiert Datentypen fuer die Abfrage für Businesspartner im ZMR
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2004-12-15 tsch: NatuerlichePerson optional im Ergebnis (bei Negativauskunft)
+2004-08-02 tsch: Erstellung
+-->
+
+<xsd:schema xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:cio="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+ targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../eingebunden/EingebundenProxy.xsd"/>
+ <xsd:import namespace="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" schemaLocation="../eingebunden/PersonDataZMR.xsd"/>
+
+ <xsd:element name="BPAbfrageRequest">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="BPAbfrageInfo"/>
+ <xsd:sequence minOccurs="0">
+ <xsd:element ref="base:Bereichskennung"/>
+ <xsd:element ref="base:BPK"/>
+ </xsd:sequence>
+ <xsd:element ref="base:ZMRZahl" minOccurs="0"/>
+ <xsd:element ref="cio:NatuerlichePerson"/>
+ <xsd:element ref="cio:PostAdresse" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="BPAbfrageResponse">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="BPAbfrageAnfrage"/>
+ <xsd:element ref="base:Message"/>
+ <xsd:element ref="BPAbfrageErgebnis" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="BPAbfrageAnfrage">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="BPAbfrageInfo"/>
+ <xsd:sequence minOccurs="0">
+ <xsd:element ref="base:Bereichskennung"/>
+ <xsd:element ref="base:BPK"/>
+ </xsd:sequence>
+ <xsd:element ref="base:ZMRZahl" minOccurs="0"/>
+ <xsd:element ref="cio:NatuerlichePerson"/>
+ <xsd:element ref="cio:PostAdresse" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="BPAbfrageInfo" type="BPAbfrageInfoType"/>
+ <xsd:complexType name="BPAbfrageInfoType">
+ <xsd:annotation>
+ <xsd:documentation>allgemeine Fachliche Informationen für die BP-Abfrage</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="base:Bezugsfeld"/>
+ <xsd:element name="BPAbfrageAction">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="BEFREIT"/>
+ <xsd:enumeration value="SONSTIGES"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element ref="base:ErstellePDF" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+
+ <xsd:element name="BPAbfrageErgebnis">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="cio:NatuerlichePerson" minOccurs="0"/>
+ <xsd:element ref="cio:PostAdresse" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element name="AktMeldesatz" type="xsd:boolean"/>
+ <xsd:element ref="base:GemeldetBis" minOccurs="0"/>
+ <xsd:element name="PDFDaten" type="xsd:base64Binary"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+</xsd:schema>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/BusinesspartnerabfrageErweitert.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/BusinesspartnerabfrageErweitert.xsd
new file mode 100644
index 00000000..75daf516
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/BusinesspartnerabfrageErweitert.xsd
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: BusinesspartnerabfrageErweitert.xsd
+Zweck: Definiert Datentypen für die erweiterte Abfrage für Businesspartner im ZMR
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2005-08-31 tsch: Erstellung
+-->
+
+<xsd:schema xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:cio="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+ targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:include schemaLocation="../zmr/Businesspartnerabfrage.xsd"/>
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../eingebunden/EingebundenProxy.xsd"/>
+ <xsd:import namespace="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" schemaLocation="../eingebunden/PersonDataZMR.xsd"/>
+
+ <xsd:element name="BPAbfrageErweitertRequest">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="BPAbfrageInfo"/>
+ <xsd:sequence minOccurs="0">
+ <xsd:element ref="base:Bereichskennung"/>
+ <xsd:element ref="base:BPK"/>
+ </xsd:sequence>
+ <xsd:element ref="base:ZMRZahl" minOccurs="0"/>
+ <xsd:element ref="cio:NatuerlichePerson"/>
+ <xsd:element ref="cio:PostAdresse" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="BPAbfrageErweitertResponse">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="BPAbfrageAnfrage"/>
+ <xsd:element ref="base:Message"/>
+ <xsd:element ref="BPAbfrageErweitertErgebnis" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="BPAbfrageErweitertErgebnis">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="cio:NatuerlichePerson" minOccurs="0"/>
+ <xsd:element name="Meldung" minOccurs="0" maxOccurs="unbounded">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="cio:PostAdresse"/>
+ <xsd:element ref="base:GemeldetVon"/>
+ <xsd:element ref="base:GemeldetBis" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="AktMeldesatz" type="xsd:boolean"/>
+ <xsd:element ref="base:GemeldetBis" minOccurs="0"/>
+ <xsd:element name="PDFDaten" type="xsd:base64Binary"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Datenabgleich.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Datenabgleich.xsd
new file mode 100644
index 00000000..b953f052
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Datenabgleich.xsd
@@ -0,0 +1,280 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: Datenabgleich.xsd
+Zweck: Definiert Datentypen für den ZMR-Datenabgleich
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2006-02-16 tsch: ERnP-Personendaten hinzugefügt
+2005-03-24 tsch: Standarddokumente hinzugefügt
+2004-08-17 tsch: Grundsätzliche Änderung der Datenanlieferung: nicht mehr Gesamtdatensätze, sondern nur geänderte Sätze bei VON-BIS Anforderungen liefern
+2004-06-07 tsch: Erstellung
+-->
+
+<xsd:schema targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:cio="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:include schemaLocation="../zmr/entities/Meldung.xsd"/>
+ <xsd:include schemaLocation="../zmr/entities/Person.xsd"/>
+ <xsd:include schemaLocation="../zmr/entities/ERnPPerson.xsd"/>
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../eingebunden/EingebundenProxy.xsd"/>
+ <xsd:import namespace="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" schemaLocation="../eingebunden/PersonDataZMR.xsd"/>
+
+ <xsd:element name="DatenabgleichRequest">
+ <xsd:annotation>
+ <xsd:documentation>Anfragedaten des Datenabgleichs (täglich, von-bis oder aktuell)</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="DatenabgleichInfo"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="DatenabgleichResponse">
+ <xsd:annotation>
+ <xsd:documentation>In der Response werden die Anfragedaten aus dem Request und das Abgleichergebnis geliefert.</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="DatenabgleichAnfrage"/>
+ <xsd:element ref="base:Message"/>
+ <xsd:choice minOccurs="0">
+ <xsd:element ref="Datenabgleich"/>
+ <xsd:element ref="Wohnsitzverzeichnis"/>
+ </xsd:choice>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="DatenabgleichInfo" type="DatenabgleichInfoType"/>
+
+ <xsd:complexType name="DatenabgleichInfoType">
+ <xsd:sequence>
+ <xsd:element ref="base:GemeindeNr"/>
+ <xsd:element ref="DatenabgleichAction"/>
+ <xsd:sequence minOccurs="0">
+ <xsd:element name="AbgleichVon" type="base:TimestampType"/>
+ <xsd:element name="AbgleichBis" type="base:TimestampType"/>
+ </xsd:sequence>
+ <xsd:element ref="base:Stichtag" minOccurs="0"/>
+ <xsd:element ref="base:InclusivHistorie" minOccurs="0"/>
+ <xsd:element name="InclusivNWS" type="xsd:boolean" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="DatenabgleichAnfrage">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="DatenabgleichInfo"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="DatenabgleichAction">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="AENDERUNGEN"/>
+ <xsd:enumeration value="WOHNSITZVERZEICHNIS"/>
+ <xsd:enumeration value="GEMEINDEABZUG"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="Datenabgleich" type="DatenabgleichType"/>
+
+ <xsd:complexType name="DatenabgleichType">
+ <xsd:sequence>
+ <xsd:element ref="base:GefundeneSaetze">
+ <xsd:annotation>
+ <xsd:documentation>Gesamtanzahl der Abgleichsätze für diese Anfrage</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element ref="base:AnzahlSaetze">
+ <xsd:annotation>
+ <xsd:documentation>Anzahl der im File gelieferten Abgleichsätze</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element name="DatenabgleichSatz" type="DatenabgleichSatzType" minOccurs="1" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="DatenabgleichSatzType">
+ <xsd:sequence>
+ <xsd:element name="Aenderungszeitpunkt" type="base:TimestampType"/>
+ <xsd:element ref="PersonReferenz"/>
+ <xsd:element ref="cio:Familienname"/>
+ <xsd:element ref="cio:Vorname"/>
+ <xsd:element ref="cio:Geburtsdatum"/>
+ <xsd:element ref="PersonAbgleich" minOccurs="0"/>
+ <xsd:element ref="MeldungAbgleich" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element ref="ERnPPersonAbgleich" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="PersonAbgleich">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="DatenAktiv" type="PersonAbgleichdaten" minOccurs="0"/>
+ <xsd:element name="DatenGeloescht" type="PersonAbgleichdaten" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:complexType name="PersonAbgleichdaten">
+ <xsd:sequence>
+ <xsd:element name="Person" type="PersonAbgleichErgebnisType" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element name="Staatsangehoerigkeit" type="StaatsangehoerigkeitErgebnisType" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element name="Reisedokument" type="ReisedokumentErgebnisType" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element name="Behoerdenattribute" type="BehoerdenattributeErgebnisType" minOccurs="0"/>
+ <xsd:element name="Auskunftssperre" type="AuskunftssperreErgebnisType" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element name="Qualifikationskennzeichen" type="QualifikationskennzeichenErgebnisType" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element name="AkademischerGrad" type="AkademischerGradErgebnisType" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element name="Standarddokument" type="StandarddokumentErgebnisType" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="MeldungAbgleich">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="MeldungReferenz"/>
+ <xsd:element name="DatenAktiv" type="MeldungAbgleichdaten" minOccurs="0"/>
+ <xsd:element name="DatenGeloescht" type="MeldungAbgleichdaten" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:complexType name="MeldungAbgleichdaten">
+ <xsd:sequence>
+ <xsd:element name="Meldung" type="MeldungAbgleichErgebnisType" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element name="Behoerdenattribute" type="BehoerdenattributeErgebnisType" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element name="Auskunftssperre" type="AuskunftssperreErgebnisType" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element name="Qualifikationskennzeichen" type="QualifikationskennzeichenErgebnisType" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="Wohnsitzverzeichnis" type="WohnsitzverzeichnisType"/>
+
+ <xsd:complexType name="WohnsitzverzeichnisType">
+ <xsd:sequence>
+ <xsd:element ref="base:GefundeneSaetze">
+ <xsd:annotation>
+ <xsd:documentation>Gesamtanzahl der Abgleichsätze für diese Anfrage</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element ref="base:AnzahlSaetze">
+ <xsd:annotation>
+ <xsd:documentation>Anzahl der im File gelieferten Abgleichsätze</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element ref="SummeHWS"/>
+ <xsd:element ref="SummeNWS"/>
+ <xsd:element name="WohnsitzSatz" type="WohnsitzSatzType" minOccurs="1" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="WohnsitzSatzType">
+ <xsd:sequence>
+ <xsd:element ref="base:ZMRZahl"/>
+ <xsd:element ref="SummeHWS"/>
+ <xsd:element ref="SummeNWS"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ <xsd:element name="SummeHWS" type="base:IntegerType"/>
+ <xsd:element name="SummeNWS" type="base:IntegerType"/>
+
+
+ <xsd:complexType name="PersonAbgleichErgebnisType">
+ <xsd:annotation>
+ <xsd:documentation>Person-Struktur für Datenabgleich-Ergebnisse aus dem ZMR</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="base:EntityErgebnisReferenz"/>
+ <xsd:element ref="base:ZMRZahl"/>
+ <xsd:element name="NatuerlichePerson" type="NatuerlichePersonAbgleichErgebnisType"/>
+ <xsd:element ref="base:Titel" minOccurs="0"/>
+ <xsd:element ref="base:StaatZugezogen" minOccurs="0"/>
+ <xsd:element ref="base:StaatVerzogen" minOccurs="0"/>
+ <xsd:element name="ReferenziertePersonen" type="ReferenziertePersonenErgebnisType" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="NatuerlichePersonAbgleichErgebnisType">
+ <xsd:annotation>
+ <xsd:documentation>Natuerliche Person (Suchergebnis)</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexContent>
+ <xsd:extension base="cio:AbstractPersonType">
+ <xsd:sequence>
+ <xsd:element name="PersonenName">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="cio:Vorname"/>
+ <xsd:element ref="cio:Familienname"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element ref="cio:AlternativName" minOccurs="0"/>
+ <xsd:element ref="cio:Familienstand" minOccurs="0"/>
+ <xsd:element ref="cio:Geschlecht"/>
+ <xsd:element ref="cio:Geburtsdatum"/>
+ <xsd:element ref="cio:Geburtsort"/>
+ <xsd:element ref="cio:Geburtsbundesland" minOccurs="0"/>
+ <xsd:element ref="cio:Geburtsstaat"/>
+ <xsd:element ref="cio:Sterbedatum" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:complexType name="MeldungAbgleichErgebnisType">
+ <xsd:annotation>
+ <xsd:documentation>Meldung-Struktur für Suchergebnisse aus dem ZMR</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="base:EntityErgebnisReferenz"/>
+ <xsd:element name="Wohnsitz" type="WohnsitzErgebnisType"/>
+ <xsd:element ref="base:GemeldetVon"/>
+ <xsd:element ref="base:PeriodeCode"/>
+ <xsd:element ref="base:PeriodeText"/>
+ <xsd:element ref="base:PeriodeFreitext" minOccurs="0"/>
+ <xsd:element ref="base:GemeldetBis" minOccurs="0"/>
+ <xsd:element ref="base:Unterkunftgeber" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="ERnPPersonAbgleich">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="DatenAktiv" type="ERnPPersonAbgleichdaten" minOccurs="0"/>
+ <xsd:element name="DatenGeloescht" type="ERnPPersonAbgleichdaten" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:complexType name="ERnPPersonAbgleichdaten">
+ <xsd:sequence>
+ <xsd:element name="Person" type="ERnPPersonAbgleichErgebnisType" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element name="Staatsangehoerigkeit" type="StaatsangehoerigkeitErgebnisType" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element name="Reisedokument" type="ERnPReisedokumentErgebnisType" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element name="Dokument" type="ERnPDokumentErgebnisType" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element name="Anschrift" type="ERnPAnschriftErgebnisType" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="ERnPPersonAbgleichErgebnisType">
+ <xsd:annotation>
+ <xsd:documentation>Person-Struktur für Datenabgleich-Ergebnisse aus dem ZMR</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="base:EntityErgebnisReferenz"/>
+ <xsd:element ref="base:OrdnungsZahl"/>
+ <xsd:element name="NatuerlichePerson" type="NatuerlichePersonAbgleichErgebnisType"/>
+ </xsd:sequence>
+ </xsd:complexType>
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/ErnpAbfrage.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/ErnpAbfrage.xsd
new file mode 100644
index 00000000..12ecd771
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/ErnpAbfrage.xsd
@@ -0,0 +1,191 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: ErnpAbfrage.xsd
+Zweck: ersetzt Szr_Einzel und Kombi-Abfrage, wird aus Ernp3 aufgerufen
+Author(s): Richard Mayrhofer xmayrh2
+-->
+<xsd:schema targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:cio="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified"
+ version="1.0">
+
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../eingebunden/EingebundenProxy.xsd" />
+ <xsd:import namespace="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" schemaLocation="../eingebunden/PersonDataZMR.xsd" />
+
+ <xsd:include schemaLocation="Personenabfrage.xsd" />
+
+ <xsd:element name="ErnpRequest">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="ErnpAbfrageInfo"/>
+ <xsd:element name="ErnpSuchPerson" minOccurs="1" maxOccurs="100">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="base:ZMRZahl" minOccurs="0" />
+ <xsd:element ref="cio:NatuerlichePerson" minOccurs="0" />
+ <xsd:element ref="cio:PostAdresse" minOccurs="0" />
+ <xsd:element ref="DokumentSuchdaten" minOccurs="0" />
+ <xsd:element ref="Pre" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="Pre">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="Vn" type="xsd:string" minOccurs="0" nillable="true"/>
+ <xsd:element name="Fn" type="xsd:string" minOccurs="0" nillable="true"/>
+ <xsd:element name="Nve" type="xsd:string" minOccurs="0"/>
+ <xsd:element ref="Gd" minOccurs="0"/>
+ <xsd:element name="Go" type="xsd:string" minOccurs="0" nillable="true"/>
+ <xsd:element name="Ges" type="xsd:string" minOccurs="0" nillable="true"/>
+ <xsd:element name="Str" type="xsd:string" minOccurs="0" nillable="true"/>
+ <xsd:element name="Plz" type="xsd:string" minOccurs="0" nillable="true"/>
+ <xsd:element name="Ort" type="xsd:string" minOccurs="0" nillable="true"/>
+ <xsd:element name="Eid" type="xsd:long"/>
+ <xsd:element name="Bz" type="base:OrdnungsZahlType" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="Gd">
+ <xsd:simpleType>
+ <xsd:annotation>
+ <xsd:documentation>Geburtsdatum, simple type for dates (union), which may omit day and/or month</xsd:documentation>
+ </xsd:annotation>
+ <xsd:union memberTypes="xsd:date xsd:gYearMonth xsd:gYear"/>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="ErnpAbfrageInfo">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="ErnpRequestId" type="xsd:string" minOccurs="0" />
+ <xsd:element name="TrefferLimit" type="xsd:int"/>
+ <xsd:element ref="base:Bezugsfeld" />
+ <xsd:element name="Suchkriterien" type="SuchkriterienType"/>
+ <xsd:element name="Suchwizard" type="xsd:boolean" minOccurs="0"/>
+ <xsd:element ref="ErgebnisKriterienPerson"/>
+ <xsd:element ref="ErgebnisKriterienMeldung"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="ErgebnisKriterienPerson" >
+ <xsd:complexType>
+ <xsd:sequence>
+ <!-- OhneHistorie: default=true -->
+ <xsd:element name="InklusiveHistorische" type="xsd:boolean"/>
+ <!-- ohneSperren: wenn true, werden Auskunftssperren gefiltert -->
+ <xsd:element name="InklusiveAuskunftsgesperrte" type="xsd:boolean"/>
+ <!-- Kitverfolgung: sollen gekittete Personen bis zur aktuellsten Person verfolgt werden, default: true -->
+ <xsd:element name="Kitverfolgung" type="xsd:boolean"/>
+ <!-- Liste von auszufilternden BeginnCodes -->
+ <xsd:element name="ExklusiveBeginnCodes" type="BeginnCode"/>
+ <!-- Liste der zu liefernden Sub-Entitaeten einer Person -->
+ <xsd:element name="AbhaengigeEntitaeten" type="EntitaetenPerson"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="ErgebnisKriterienMeldung">
+ <xsd:complexType>
+ <xsd:sequence>
+ <!-- OhneHistorie: default=true -->
+ <xsd:element name="InklusiveHistorische" type="xsd:boolean"/>
+ <!-- ohneSperren: wenn true, werden Auskunftssperren gefiltert -->
+ <xsd:element name="InklusiveAuskunftsgesperrte" type="xsd:boolean"/>
+ <!-- wie werden die Wohnsitze gereiht (geliefert wird nur der erste) -->
+ <xsd:element name="WohnsitzPrioritaet" type="WohnsitzPrioritaet"/>
+ <!-- Liste der zu liefernden Sub-Entitaeten einer Meldung -->
+ <xsd:element name="AbhaengigeEntitaeten" type="EntitaetenMeldung"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:simpleType name="WohnsitzPrioritaet">
+ <xsd:restriction base="xsd:string">
+ <!-- nur aktuellster Hauptwohnsitz -->
+ <xsd:enumeration value="juengsterHWS" />
+ <!-- aktuellster Wohnsitz, Reihenfolge Haupt- oder Nebenwohnsitz oder Obdachlos -->
+ <xsd:enumeration value="juengsterHNO" />
+ </xsd:restriction>
+ </xsd:simpleType>
+
+ <xsd:simpleType name="BeginnCode">
+ <xsd:list itemType="xsd:string" />
+ </xsd:simpleType>
+
+ <!-- Liste der gewählten Sub-Entities einer Person -->
+ <xsd:simpleType name="EntitaetenMeldung">
+ <xsd:list itemType="EntitaetMeldung"/>
+ </xsd:simpleType>
+
+ <!-- Liste der moeglichen Sub-Entities einer Meldung -->
+ <xsd:simpleType name="EntitaetMeldung">
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="ORGFELD"/>
+ <xsd:enumeration value="AUSKUNFTSSPERRE"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+
+ <!-- Liste der gewählten Sub-Entities einer Person -->
+ <xsd:simpleType name="EntitaetenPerson">
+ <xsd:list itemType="EntitaetPerson"/>
+ </xsd:simpleType>
+
+ <!-- Liste der moeglichen Sub-Entities einer Person -->
+ <xsd:simpleType name="EntitaetPerson">
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="AKADGRAD" />
+ <xsd:enumeration value="QUALIFIKATIONSKENNZEICHEN" />
+ <xsd:enumeration value="REISEDOKUMENT" />
+ <xsd:enumeration value="STDDOKUMENT" />
+ <xsd:enumeration value="STAATSANGEHOERIGKEIT" />
+ <xsd:enumeration value="AUSKUNFTSSPERRE"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+
+ <xsd:element name="ErnpResponse">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="base:Message"/>
+ <xsd:element ref="base:ServerTransaktionNr"/>
+ <xsd:element ref="ErnpPersonResult" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="ErnpPersonResult">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="base:Message"/>
+ <xsd:choice>
+ <xsd:element ref="Ergebnissatz" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element name="ZMRZahlen" type="xsd:string" minOccurs="0" maxOccurs="unbounded" />
+ </xsd:choice>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="Ergebnissatz">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="StarRating" type="xsd:float" minOccurs="0"/>
+ <xsd:element name="Register" type="xsd:string" minOccurs="0"/>
+ <xsd:element name="PersonErgebnis" type="PersonErgebnisType" minOccurs="0"/>
+ <xsd:element name="AuskunftssperrePerson" type="xsd:boolean" default="false" minOccurs="0"/>
+ <xsd:element name="Meldedaten" type="MeldedatenType" minOccurs="0"/>
+ <xsd:element name="AuskunftssperreMeldung" type="xsd:boolean" default="false" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Fremdenabfrage.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Fremdenabfrage.xsd
new file mode 100644
index 00000000..e4a610ae
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Fremdenabfrage.xsd
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: Fremdenabfrage.xsd
+Zweck: Definiert Datentypen für die Fremdenabfrage im ZMR
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2004-08-16 tsch: Erstellung
+-->
+
+<xsd:schema xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:cio="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+ targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../eingebunden/EingebundenProxy.xsd"/>
+ <xsd:import namespace="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" schemaLocation="../eingebunden/PersonDataZMR.xsd"/>
+ <xsd:include schemaLocation="Personenabfrage.xsd"/>
+
+ <xsd:element name="FremdenabfrageRequest">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="FremdenabfrageInfo"/>
+ <xsd:element ref="base:ZMRZahl" minOccurs="0"/>
+ <xsd:element ref="cio:NatuerlichePerson" minOccurs="0"/>
+ <xsd:element ref="base:GemeldetVon" minOccurs="0"/>
+ <xsd:element ref="base:GemeldetBis" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="FremdenabfrageResponse">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="FremdenabfrageAnfrage"/>
+ <xsd:element ref="base:Message"/>
+ <xsd:element ref="FremdenabfrageErgebnis" minOccurs="0"/>
+ <xsd:element name="PDFDaten" type="xsd:base64Binary" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="FremdenabfrageAnfrage">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="FremdenabfrageInfo"/>
+ <xsd:element ref="base:ZMRZahl" minOccurs="0"/>
+ <xsd:element ref="cio:NatuerlichePerson" minOccurs="0"/>
+ <xsd:element ref="base:GemeldetVon" minOccurs="0"/>
+ <xsd:element ref="base:GemeldetBis" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="FremdenabfrageInfo" type="FremdenabfrageInfoType"/>
+ <xsd:complexType name="FremdenabfrageInfoType">
+ <xsd:annotation>
+ <xsd:documentation>allgemeine Fachliche Informationen für die Fremdenabfrage</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="base:Bezugsfeld"/>
+ <xsd:element ref="FremdenabfrageAction"/>
+ <xsd:element ref="base:Bezirkskennung"/>
+ <xsd:element ref="base:InclusivHistorie"/>
+ <xsd:element ref="base:Formalisiert"/>
+ <xsd:element name="AlsDruck" type="xsd:boolean"/>
+ <xsd:element ref="base:AnzahlSaetze"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="FremdenabfrageAction">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="NICHT_OESTERREICH"/>
+ <xsd:enumeration value="EU_OHNE_OESTERREICH"/>
+ <xsd:enumeration value="NICHT_EU"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="FremdenabfrageErgebnis" type="FremdenabfrageErgebnisType"/>
+ <xsd:complexType name="FremdenabfrageErgebnisType">
+ <xsd:annotation>
+ <xsd:documentation>Enthält je einen 'PersonErgebnisSatz' pro gefundener Person. Wird keine Person gefunden, befindet sich eine entprechende Text-Message in 'base:Message'</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="base:GefundeneSaetze">
+ <xsd:annotation>
+ <xsd:documentation>Gesamtanzahl der in der Datenbank gefundenen Personen</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element ref="base:SaetzeVon">
+ <xsd:annotation>
+ <xsd:documentation>Beginn-Index dieser Ergebnisliste im Gesamtergebnis (bei Blaettern); Start mit 0</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element ref="base:SaetzeBis">
+ <xsd:annotation>
+ <xsd:documentation>Ende-Index dieser Ergebnisliste im Gesamtergebnis (bei Blaettern)</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element name="PersonErgebnisSatz" type="PAbfrageErgebnisSatzType" minOccurs="1" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/GISAdressabfrage.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/GISAdressabfrage.xsd
new file mode 100644
index 00000000..3f5bbe7f
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/GISAdressabfrage.xsd
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: GISAdressabfrage.xsd
+Zweck: Definiert Datentypen für die GIS-Adressabfrage aus dem ZMR
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2004-08-24 tsch: Erstellung
+-->
+
+<xsd:schema xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:cio="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+ targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../eingebunden/EingebundenProxy.xsd"/>
+ <xsd:import namespace="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" schemaLocation="../eingebunden/PersonDataZMR.xsd"/>
+
+ <xsd:element name="GISAdressabfrageRequest">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="cio:PostAdresse" minOccurs="1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="GISAdressabfrageResponse">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="GISAdressabfrageAnfrage"/>
+ <xsd:element ref="base:Message"/>
+ <xsd:element ref="base:GefundeneSaetze"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="GISAdressabfrageDetailRequest">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="Bestaetigt" type="xsd:boolean"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="GISAdressabfrageDetailResponse">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="GISAdressabfrageAnfrage"/>
+ <xsd:element ref="base:Message"/>
+ <xsd:element ref="GISAdressabfrageErgebnis" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="GISAdressabfrageAnfrage">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="cio:PostAdresse" minOccurs="1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="GISAdressabfrageErgebnis">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="base:GefundeneSaetze">
+ <xsd:annotation>
+ <xsd:documentation>Gesamtanzahl der in der Datenbank gefundenen Personen</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element ref="cio:PersonenDaten" minOccurs="1" maxOccurs="unbounded"/>
+ <xsd:element name="PDFDaten" type="xsd:base64Binary"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/GISSuche.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/GISSuche.xsd
new file mode 100644
index 00000000..4989b13c
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/GISSuche.xsd
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: GISSuche.xsd
+Zweck: Schnittstelle für die Suche von Personen mittels GIS-Daten
+Author(s): Ehrenmüller Oliver
+
+Aenderungshistorie:
+2009-02-06 teo: +GISSucheInfo
+2009-01-21 teo: erstellt.
+-->
+
+<xsd:schema xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:gis="http://bmi.gv.at/namespace/zmr-su/gis/20070725#"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/gis/20070725#" schemaLocation="../eingebunden/gis-schnittstelle.xsd"/>
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../eingebunden/EingebundenProxy.xsd"/>
+ <xsd:include schemaLocation="Personensuche.xsd"/>
+
+ <xsd:element name="GISSucheRequest">
+ <xsd:annotation>
+ <xsd:documentation>Request zum Suchen von Personen mittels GIS-Daten</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="GISSucheInfo"/>
+ <xsd:element ref="GISSuche"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="GISSuche">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="gis:GISListe"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="GISSucheInfo">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="base:AnzahlSaetze"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="GISSucheAnfrage">
+ <xsd:annotation>
+ <xsd:documentation>Request zum Suchen von Personen mittels GIS-Daten</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="GISSucheInfo"/>
+ <xsd:element ref="GISSuche"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="GISSucheResponse">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="GISSucheAnfrage"/>
+ <xsd:element ref="base:Message"/>
+ <xsd:element ref="Personensuchergebnis" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Gemeindeeinstellungen.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Gemeindeeinstellungen.xsd
new file mode 100644
index 00000000..5096e120
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Gemeindeeinstellungen.xsd
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: Gemeindeeinstellungen
+Zweck: Definiert Requests/Responses und Datentypen für die Gemeindeeinstellungen und Adress-Sperrlisten.
+Author(s): Richie Mayrhofer, ZMR
+-->
+
+<xsd:schema targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:cio="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+ xmlns:dsig="http://www.w3.org/2000/09/xmldsig#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:include schemaLocation="../zmr/entities/Meldung.xsd"/>
+ <xsd:include schemaLocation="../zmr/entities/Person.xsd"/>
+ <xsd:include schemaLocation="../zmr/WohnsitzUmmelden.xsd"/>
+
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../eingebunden/EingebundenProxy.xsd"/>
+ <xsd:import namespace="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" schemaLocation="../eingebunden/PersonDataZMR.xsd"/>
+
+ <xsd:element name="GemeindeeinstellungenRequest">
+ <xsd:annotation>
+ <xsd:documentation>Lesen der Gemeindeeinstellungen</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="cio:Gemeindekennziffer"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="GemeindeeinstellungenResponse">
+ <xsd:annotation>
+ <xsd:documentation>Lesen der Gemeindeeinstellungen</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="base:Message"/>
+ <xsd:element ref="cio:Gemeindekennziffer"/>
+ <xsd:element name="inclKlaerung" type="xsd:boolean"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="GemeindeeinstellungenAendernRequest">
+ <xsd:annotation>
+ <xsd:documentation>Aendern der Gemeindeeinstellungen</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="cio:Gemeindekennziffer"/>
+ <xsd:element name="inclKlaerung" type="xsd:boolean"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="GemeindeeinstellungenAendernResponse">
+ <xsd:annotation>
+ <xsd:documentation>Aendern der Gemeindeeinstellungen Ergebnismeldung</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="base:Message"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Gerichtskommissaerabfrage.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Gerichtskommissaerabfrage.xsd
new file mode 100644
index 00000000..6eacf127
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Gerichtskommissaerabfrage.xsd
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: Gerichtskommissaerabfrage.xsd
+Zweck: Definiert Datentypen für die Gerichtskommissaerabfrage des ZMR
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2004-11-22 tsch: Erstellung
+-->
+
+<xsd:schema xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:cio="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+ targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../eingebunden/EingebundenProxy.xsd"/>
+ <xsd:import namespace="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" schemaLocation="../eingebunden/PersonDataZMR.xsd"/>
+
+ <xsd:include schemaLocation="Behoerdenabfrage.xsd"/>
+
+ <xsd:element name="GerichtskommissaerabfrageRequest">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="GerichtskommissaerabfrageInfo"/>
+ <xsd:element ref="PersonKey" minOccurs="0"/>
+ <xsd:element ref="base:ZMRZahl" minOccurs="0"/>
+ <xsd:element ref="cio:NatuerlichePerson" minOccurs="0"/>
+ <xsd:element ref="cio:PostAdresse" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="GerichtskommissaerabfrageResponse">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="GerichtskommissaerabfrageAnfrage"/>
+ <xsd:element ref="base:Message"/>
+ <xsd:choice minOccurs="0">
+ <xsd:element ref="GerichtskommissaerabfrageUeberblick"/>
+ <xsd:element ref="GerichtskommissaerabfrageDetail"/>
+ </xsd:choice>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="GerichtskommissaerabfrageAnfrage">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="GerichtskommissaerabfrageInfo"/>
+ <xsd:element ref="PersonKey" minOccurs="0"/>
+ <xsd:element ref="base:ZMRZahl" minOccurs="0"/>
+ <xsd:element ref="cio:NatuerlichePerson" minOccurs="0"/>
+ <xsd:element ref="cio:PostAdresse" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="GerichtskommissaerabfrageInfo" type="GerichtskommissaerabfrageInfoType"/>
+ <xsd:complexType name="GerichtskommissaerabfrageInfoType">
+ <xsd:annotation>
+ <xsd:documentation>allgemeine Fachliche Informationen für die Behördenabfrage</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="base:Bezugsfeld" minOccurs="0"/>
+ <xsd:element ref="base:InclusivHistorie"/>
+ <xsd:element ref="base:Formalisiert"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="GerichtskommissaerabfrageUeberblick">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="base:AnzahlSaetze"/>
+ <xsd:element ref="PersonUeberblick" minOccurs="1" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+
+ <xsd:element name="GerichtskommissaerabfrageDetail">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="Personendaten" minOccurs="0"/>
+ <xsd:element ref="Meldedaten" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element name="PDFDaten" type="xsd:base64Binary"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/GleichsetzungstabelleWarten.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/GleichsetzungstabelleWarten.xsd
new file mode 100644
index 00000000..f5cd55cd
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/GleichsetzungstabelleWarten.xsd
@@ -0,0 +1,185 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: GleichsetzungstabelleWarten.xsd
+Zweck: Definiert Datentypen für die Wartung der Gleichstzungstabelle im ZMR
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2005-01-14 tsch: Erstellung
+-->
+
+<xsd:schema targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:cio="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../eingebunden/EingebundenProxy.xsd"/>
+
+ <xsd:element name="GleichsetzungAbfragenRequest">
+ <xsd:annotation>
+ <xsd:documentation>Suchedaten fuer die Suche nach Einträgen in der Gleichsetzungstabelle</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="GleichsetzungAbfragenInfo"/>
+ <xsd:choice>
+ <xsd:element ref="base:ZMRZahl"/>
+ <xsd:element ref="base:SVNummer"/>
+ </xsd:choice>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="GleichsetzungAbfragenResponse">
+ <xsd:annotation>
+ <xsd:documentation>Anfragedaten, sowie Suchergebnis oder Text-Meldung (falls nichts gefunden)</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="GleichsetzungAbfragenAnfrage"/>
+ <xsd:element ref="base:Message"/>
+ <xsd:element ref="Gleichsetzungabfrageergebnis" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="GleichsetzungAnlegenRequest">
+ <xsd:annotation>
+ <xsd:documentation>Suchedaten fuer die Suche nach Einträgen in der Gleichsetzungstabelle</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="GleichsetzungAnlegenInfo"/>
+ <xsd:element ref="base:ZMRZahl"/>
+ <xsd:element ref="base:SVNummer"/>
+ <xsd:element ref="Zuordnungsqualitaet" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="GleichsetzungAnlegenResponse">
+ <xsd:annotation>
+ <xsd:documentation>Daten der angelegeten Gleichsetzung, sowie Erfolgsmeldung</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="base:Message"/>
+ <xsd:element ref="GleichsetzungErgebnis"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="GleichsetzungLoeschenRequest">
+ <xsd:annotation>
+ <xsd:documentation>Suchedaten fuer die Suche nach Einträgen in der Gleichsetzungstabelle</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="GleichsetzungLoeschenInfo"/>
+ <xsd:element ref="base:EntityReferenz"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="GleichsetzungLoeschenResponse">
+ <xsd:annotation>
+ <xsd:documentation>Daten der angelegeten Gleichsetzung, sowie Erfolgsmeldung</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="base:Message"/>
+ <xsd:element ref="GleichsetzungErgebnis"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="GleichsetzungAbfragenAnfrage">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="GleichsetzungAbfragenInfo"/>
+ <xsd:choice>
+ <xsd:element ref="base:ZMRZahl"/>
+ <xsd:element ref="base:SVNummer"/>
+ </xsd:choice>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="GleichsetzungAbfragenInfo" type="GleichsetzungAbfragenInfoType"/>
+ <xsd:complexType name="GleichsetzungAbfragenInfoType">
+ <xsd:annotation>
+ <xsd:documentation>Fachliche Informationen zur Gleichsetzungstabelle - Abfrage</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="base:InclusivHistorie"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="Gleichsetzungabfrageergebnis" type="GleichsetzungabfrageergebnisType"/>
+ <xsd:complexType name="GleichsetzungabfrageergebnisType">
+ <xsd:annotation>
+ <xsd:documentation>Gleichsetzungstabelle - Suchereggebnis</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="base:GefundeneSaetze">
+ <xsd:annotation>
+ <xsd:documentation>Gesamtanzahl der in der Datenbank gefundenen Einträge</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element ref="GleichsetzungErgebnis" minOccurs="1" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="GleichsetzungErgebnis" type="GleichsetzungErgebnisType"/>
+ <xsd:complexType name="GleichsetzungErgebnisType">
+ <xsd:annotation>
+ <xsd:documentation>Gleichsetzungstabelleneintrag</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="base:EntityErgebnisReferenz"/>
+ <xsd:element ref="base:ZMRZahl"/>
+ <xsd:element ref="base:SVNummer"/>
+ <xsd:element ref="Zuordnungsqualitaet" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="Zuordnungsqualitaet">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="45"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="GleichsetzungAnlegenInfo" type="GleichsetzungAnlegenInfoType"/>
+ <xsd:complexType name="GleichsetzungAnlegenInfoType">
+ <xsd:annotation>
+ <xsd:documentation>Fachliche Informationen einer Anlage in der Gleichsetzungstabelle</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexContent>
+ <xsd:extension base="base:InfoFachlichType">
+
+ </xsd:extension>
+ </xsd:complexContent>
+
+ </xsd:complexType>
+
+ <xsd:element name="GleichsetzungLoeschenInfo" type="GleichsetzungLoeschenInfoType"/>
+ <xsd:complexType name="GleichsetzungLoeschenInfoType">
+ <xsd:annotation>
+ <xsd:documentation>Fachliche Informationen für das Löschen eines Eintrages der Gleichsetzungstabelle</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexContent>
+ <xsd:extension base="base:InfoFachlichType">
+
+ </xsd:extension>
+ </xsd:complexContent>
+
+ </xsd:complexType>
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Hauseigentuemerabfrage.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Hauseigentuemerabfrage.xsd
new file mode 100644
index 00000000..b72bea37
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Hauseigentuemerabfrage.xsd
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: Hauseigentuemerabfrage.xsd
+Zweck: Definiert Datentypen für die Hauseigentuemerabfrage im ZMR
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2006-09-27 tsch: AlleDrucken hinzugefügt
+2004-08-18 tsch: Erstellung
+-->
+
+<xsd:schema xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:cio="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+ targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../eingebunden/EingebundenProxy.xsd"/>
+ <xsd:import namespace="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" schemaLocation="../eingebunden/PersonDataZMR.xsd"/>
+ <xsd:include schemaLocation="Personenabfrage.xsd"/>
+
+ <xsd:element name="HauseigentuemerAbfrageRequest">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="HauseigentuemerAbfrageInfo"/>
+ <xsd:element ref="cio:PostAdresse"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="HauseigentuemerAbfrageResponse">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="HauseigentuemerAbfrageAnfrage"/>
+ <xsd:element ref="base:Message"/>
+ <xsd:element ref="HauseigentuemerAbfrageErgebnis" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="HauseigentuemerAbfrageDruckRequest">
+ <xsd:annotation>
+ <xsd:documentation>Hauseigentuemerabfrage-Druckrequest (muss nach einer Hauseigentuemerabfrage mit derselben ProzessInstanzID aufgerufen werden)</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:annotation>
+ <xsd:documentation>Liste der EntityIDs der zu druckenden Meldungen (aus der vorangegangenen Hauseigentuemerabfrage)</xsd:documentation>
+ </xsd:annotation>
+ <xsd:choice>
+ <xsd:element name="AlleDrucken" type="xsd:boolean"/>
+ <xsd:element ref="base:EntityID" minOccurs="1" maxOccurs="unbounded"/>
+ </xsd:choice>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="HauseigentuemerAbfrageDruckResponse">
+ <xsd:annotation>
+ <xsd:documentation>In der Response werden die Anfragedaten aus dem Request, und das Suchergebnis bzw. eine Text-Meldung geliefert (Falls keine Person gefunden)</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="HauseigentuemerAbfrageAnfrage"/>
+ <xsd:element ref="base:Message"/>
+ <xsd:element name="PDFDaten" type="xsd:base64Binary"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="HauseigentuemerAbfrageAnfrage">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="HauseigentuemerAbfrageInfo"/>
+ <xsd:element ref="cio:PostAdresse"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="HauseigentuemerAbfrageInfo" type="HauseigentuemerAbfrageInfoType"/>
+ <xsd:complexType name="HauseigentuemerAbfrageInfoType">
+ <xsd:annotation>
+ <xsd:documentation>allgemeine Fachliche Informationen für die Hauseigentuemerabfrage</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="base:Bezugsfeld" minOccurs="0"/>
+ <xsd:element name="InclusiveAuskunftsgesperrt" type="xsd:boolean"/>
+ <xsd:element ref="base:AnzahlSaetze"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="HauseigentuemerAbfrageErgebnis" type="HauseigentuemerAbfrageErgebnisType"/>
+ <xsd:complexType name="HauseigentuemerAbfrageErgebnisType">
+ <xsd:annotation>
+ <xsd:documentation>Enthält je einen 'PersonErgebnisSatz' pro gefundener Person. Wird keine Person gefunden, befindet sich eine entprechende Text-Message in 'base:Message'</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="base:GefundeneSaetze">
+ <xsd:annotation>
+ <xsd:documentation>Gesamtanzahl der in der Datenbank gefundenen Personen</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element ref="base:SaetzeVon">
+ <xsd:annotation>
+ <xsd:documentation>Beginn-Index dieser Ergebnisliste im Gesamtergebnis (bei Blaettern); Start mit 1</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element ref="base:SaetzeBis">
+ <xsd:annotation>
+ <xsd:documentation>Ende-Index dieser Ergebnisliste im Gesamtergebnis (bei Blaettern)</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element name="PersonErgebnisSatz" type="PAbfrageErgebnisSatzType" minOccurs="1" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/IAPPersonenabfrage.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/IAPPersonenabfrage.xsd
new file mode 100644
index 00000000..26165d66
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/IAPPersonenabfrage.xsd
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: IAPPersonenabfrage.xsd
+Zweck: Erweitert die Datentypen für den Usecase "Personenabfrage" im ZMR
+Author(s): Richard Mayrhofer xmayrh2
+-->
+<xsd:schema targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:cio="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified"
+ version="1.0">
+
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../eingebunden/EingebundenProxy.xsd" />
+ <xsd:import namespace="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" schemaLocation="../eingebunden/PersonDataZMR.xsd" />
+
+ <xsd:include schemaLocation="Personenabfrage.xsd" />
+ <xsd:include schemaLocation="Behoerdenabfrage.xsd" />
+
+ <xsd:element name="IAPPersonenUeberblickRequest">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="PersonenAbfrageInfo" />
+ <xsd:element ref="base:ZMRZahl" minOccurs="0" />
+ <xsd:element ref="cio:NatuerlichePerson" minOccurs="0" />
+ <xsd:element ref="cio:PostAdresse" minOccurs="0" />
+ <xsd:element ref="IAPRequestExtension" />
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="IAPRequestExtension">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="IAPTyp">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="KURZAUSKUNFT" />
+ <xsd:enumeration value="VOLLAUSKUNFT" />
+ <xsd:enumeration value="NEGATIVAUSKUNFT" />
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="IAPFormat" minOccurs="0">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="HTML" />
+ <xsd:enumeration value="PDF" />
+ <xsd:enumeration value="XML" />
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="IAPPersonenUeberblickResponse">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="IAPRequestExtension" />
+ <xsd:element ref="base:Message" />
+ <xsd:element ref="IAPPersonAbfrageUeberblick" minOccurs="0" maxOccurs="1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="IAPPersonAbfrageUeberblick">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="base:AnzahlSaetze" />
+ <xsd:element ref="IAPPersonUeberblick" minOccurs="1" maxOccurs="1000"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="IAPPersonUeberblick">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="PersonKey" />
+ <xsd:element ref="cio:Geburtsdatum"/>
+ <xsd:element ref="cio:Familienname"/>
+ <xsd:element ref="cio:Vorname"/>
+ <xsd:element ref="cio:Geschlecht"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="IAPPersonenDetailRequest">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="PersonKey" minOccurs="0" maxOccurs="1"/>
+ <xsd:element ref="IAPRequestExtension" />
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="IAPPersonenDetailResponse">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="IAPRequestExtension" />
+ <xsd:element ref="base:Message" />
+ <xsd:element ref="IAPXmlResponse" minOccurs="0" />
+ <xsd:element ref="IAPHtmlResponse" minOccurs="0" />
+ <xsd:element ref="PDFDaten" minOccurs="0" />
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="IAPXmlResponse">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="PersonenAbfrageResponse" />
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="IAPHtmlResponse" type="xsd:string" />
+ <xsd:element name="PDFDaten" type="xsd:base64Binary" />
+
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Meldeauskunft.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Meldeauskunft.xsd
new file mode 100644
index 00000000..df262baf
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Meldeauskunft.xsd
@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: Meldeauskunft.xsd
+Zweck: Definiert Datentypen für die Meldeauskunft aus dem ZMR
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2010-11-24 mp: ZMR-1513 Aufdruck einer zusätzlichen Zeile auf Meldebestätigung und Meldeauskunft
+2010-04-02 teo: ZMR-1373 CLM-1505 Meldedruck Erweiterungstext
+2004-10-27 tsch: Meldeauskunft aus Mussfeld im Ergebnis, cio:NatuerlichePerson optional
+2004-08-17 tsch: Druckzusatztext aus Base-Namespace referenziert
+2004-05-17 tsch: Organisation entfernt, ZMR-Zahl hinzugefügt
+2004-04-13 tsch: AktHistMeldesatz, GemeldetBis hinzugefügt
+2004-04-01 tsch: Erstellung
+-->
+
+<xsd:schema xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:cio="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+ targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../eingebunden/EingebundenProxy.xsd"/>
+ <xsd:import namespace="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" schemaLocation="../eingebunden/PersonDataZMR.xsd"/>
+
+
+ <xsd:element name="MeldeauskunftRequest">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="MeldeauskunftInfo"/>
+ <xsd:sequence minOccurs="0">
+ <xsd:element ref="base:Bereichskennung"/>
+ <xsd:element ref="base:BPK"/>
+ </xsd:sequence>
+ <xsd:element ref="base:ZMRZahl" minOccurs="0"/>
+ <xsd:element ref="cio:NatuerlichePerson"/>
+ <xsd:element ref="cio:PostAdresse" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="MeldeauskunftResponse">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="MeldeauskunftAnfrage"/>
+ <xsd:element ref="base:Message"/>
+ <xsd:element ref="Meldeauskunft"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="MeldeauskunftAnfrage">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="MeldeauskunftInfo"/>
+ <xsd:sequence minOccurs="0">
+ <xsd:element ref="base:Bereichskennung"/>
+ <xsd:element ref="base:BPK"/>
+ </xsd:sequence>
+ <xsd:element ref="base:ZMRZahl" minOccurs="0"/>
+ <xsd:element ref="cio:NatuerlichePerson"/>
+ <xsd:element ref="cio:PostAdresse" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="MeldeauskunftInfo" type="MeldeauskunftInfoType"/>
+ <xsd:complexType name="MeldeauskunftInfoType">
+ <xsd:annotation>
+ <xsd:documentation>allgemeine Fachliche Informationen für die Meldeauskunft</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="base:Bezugsfeld"/>
+ <xsd:element ref="Ergebnisdaten"/>
+ <xsd:element ref="base:DruckZusatztext" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element ref="base:Infotext" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="Ergebnisdaten">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="AlleAktuellenWohnsitze" type="xsd:boolean"/>
+ <xsd:element name="OhneGeburtsdatum" type="xsd:boolean"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="Meldeauskunft">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="cio:NatuerlichePerson" minOccurs="0"/>
+ <xsd:element ref="cio:PostAdresse" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element name="AktMeldesatz" type="xsd:boolean"/>
+ <xsd:element ref="base:GemeldetBis" minOccurs="0"/>
+ <xsd:element name="PDFDaten" type="xsd:base64Binary"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Meldebestaetigung.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Meldebestaetigung.xsd
new file mode 100644
index 00000000..4f8b6f93
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Meldebestaetigung.xsd
@@ -0,0 +1,127 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: Meldebestaetigung.xsd
+Zweck: Definiert Datentypen für Meldebestaetigungen aus dem ZMR
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Achtung: Es sollte bedacht werden, dass diese Datei fast 1:1 nach LMR/MeldebestaetigungFamilie.xsd kopiert wurde
+ und Anpassungen in dieser Datei evtl. dort nachgezogen werden müssen! Dies ist vor allem der Fall, wenn
+ es sich um oberflächenrelevante Änderungen handelt.
+
+Aenderungshistorie:
+2010-11-24 mp: ZMR-1513 Aufdruck einer zusätzlichen Zeile auf Meldebestätigung und Meldeauskunft
+2010-04-20 teo: ZMR-1374 CLM-1900 Meldebestätigung für Rechtsanwälte
+2010-04-02 teo: ZMR-1373 CLM-1505 Meldedruck Erweiterungstext
+2009-04-28 teo: +MeldebestaetigungUmmeldeservice
+2008-03-19 teo: CQ#3013: +Druckoption für Ortanzeige
+2004-11-02 tsch: GemeindeNr entfernt
+2004-08-17 tsch: Druckzusatztext aus Base-Namespace referenziert
+2004-05-17 tsch: Organisation entfernt
+2004-04-15 tsch: Erstellung
+-->
+<xsd:schema targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#" xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#" xmlns:cio="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../eingebunden/EingebundenProxy.xsd"/>
+ <xsd:import namespace="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" schemaLocation="../eingebunden/PersonDataZMR.xsd"/>
+ <xsd:element name="MeldebestaetigungRequest">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="MeldebestaetigungInfo"/>
+ <xsd:element ref="base:ZMRZahl"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="MeldebestaetigungResponse">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="MeldebestaetigungAnfrage"/>
+ <xsd:element ref="base:Message"/>
+ <xsd:element ref="Meldebestaetigung" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="MeldebestaetigungAnfrage">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="MeldebestaetigungInfo"/>
+ <xsd:element ref="base:ZMRZahl"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="MeldebestaetigungInfo" type="MeldebestaetigungInfoType"/>
+ <xsd:complexType name="MeldebestaetigungInfoType">
+ <xsd:annotation>
+ <xsd:documentation>allgemeine Fachliche Informationen für die Meldebestaetigung</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="base:Bezugsfeld" minOccurs="0"/>
+ <xsd:element ref="MeldebestaetigungArt"/>
+ <xsd:element ref="base:DruckZusatztext" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element ref="base:Infotext" minOccurs="0"/>
+ <xsd:element ref="MeldebestaetigungDruckoptionOrt" minOccurs="0"/>
+ <xsd:element ref="MeldebestaetigungUmmeldeservice" minOccurs="0"/>
+ <xsd:element name="ZeitraumVon" type="base:TimestampType" minOccurs="0"/>
+ <xsd:element name="ZeitraumBis" type="base:TimestampType" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ <xsd:element name="MeldebestaetigungArt">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="AKTLETZT"/>
+ <xsd:enumeration value="GEM_AKT"/>
+ <xsd:enumeration value="GEM_AKTHIST"/>
+ <xsd:enumeration value="GEM_ZEITRAUM"/>
+ <xsd:enumeration value="GES_AKT"/>
+ <xsd:enumeration value="GES_BETR"/>
+ <xsd:enumeration value="GES_AKTHIST"/>
+ <xsd:enumeration value="GES_AKTHIST_Z"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="MeldebestaetigungUmmeldeservice">
+ <xsd:complexType>
+ <xsd:annotation>
+ <xsd:documentation>allgemeine Fachliche Informationen für die Meldebestaetigung</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element name="ServiceCode">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="20"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element ref="base:ServerTransaktionNr"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="MeldebestaetigungDruckoptionOrt">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="ORTSNAME"/>
+ <xsd:enumeration value="POSTORT"/>
+ <xsd:enumeration value="ALLE"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="Meldebestaetigung">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="base:ZMRZahl"/>
+ <xsd:element ref="cio:NatuerlichePerson"/>
+ <xsd:element name="Meldung" type="MeldungMeldebestaetigungType" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element name="AktMeldesatz" type="xsd:boolean"/>
+ <xsd:element ref="base:GemeldetBis" minOccurs="0"/>
+ <xsd:element name="PDFDaten" type="xsd:base64Binary"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:complexType name="MeldungMeldebestaetigungType">
+ <xsd:sequence>
+ <xsd:element ref="cio:PostAdresse"/>
+ <xsd:element ref="base:GemeldetVon"/>
+ <xsd:element ref="base:GemeldetBis" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+</xsd:schema>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/MeldebestaetigungenAnfordern.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/MeldebestaetigungenAnfordern.xsd
new file mode 100644
index 00000000..0e08efd2
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/MeldebestaetigungenAnfordern.xsd
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: MeldebestaetigungenAnfordern.xsd
+Zweck: Definiert Datentypen für das Anfordern von Massen-Meldebestätigungen innerhalb einer Gemeinde
+Author(s): Ehrenmüller Oliver, ZMR-SU
+
+Aenderungshistorie:
+2010-02-01 Erstellt
+-->
+
+<xsd:schema xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:cio="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+ targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../eingebunden/EingebundenProxy.xsd"/>
+
+ <xsd:element name="MeldebestaetigungenAnfordernRequest">
+ <xsd:annotation>
+ <xsd:documentation>Meldebestätigungen für alle Personen in der angegebenen Gemeinde.</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="base:GemeindeNr"/>
+ <xsd:element name="StichtagVon" type="base:TimestampType" minOccurs="0"/>
+ <xsd:element name="StichtagBis" type="base:TimestampType" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="MeldebestaetigungenAnfordernAnfrage">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="base:GemeindeNr"/>
+ <xsd:element name="StichtagVon" type="base:TimestampType" minOccurs="0"/>
+ <xsd:element name="StichtagBis" type="base:TimestampType" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="MeldebestaetigungenAnfordernResponse">
+ <xsd:annotation>
+ <xsd:documentation>Server-Antwort zur Anforderung von Massen-Meldebestätigungen</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="MeldebestaetigungenAnfordernAnfrage"/>
+ <xsd:element ref="base:Message"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/MeldungHistKorrigieren.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/MeldungHistKorrigieren.xsd
new file mode 100644
index 00000000..b322b1b0
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/MeldungHistKorrigieren.xsd
@@ -0,0 +1,112 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: MeldungHistKorrigieren.xsd.xsd
+Zweck: Definiert Datentypen für den Usecase "Historische Meldung korrigieren" im ZMR
+Author(s): Ehrenmüller Oliver, ZMR-SU
+
+Aenderungshistorie:
+2011-03-23 mp: ZMR-1568: Zuzugs-/Verzugsstaat vorerst auskommentiert
+2011-01-24 mp: Meldungreferenz optional (für hist. Wohnsitzanmeldung)
+2011-01-17 mp: Angepasst für hist. Wohnsitzanlage
+2010-03-10 mp: Meldung im Response nun optional (notw. für Strang löschen)
+2010-03-09 mp: Personreferenz im Response auf Personergebnis geändert
+2010-03-09 mp: Umbenannt auf MeldungHistKorrigieren, um Verwechslungen zu vermeiden
+2010-03-08 teo: erstellt
+-->
+
+<xsd:schema targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:cio="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../eingebunden/EingebundenProxy.xsd"/>
+ <xsd:import namespace="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" schemaLocation="../eingebunden/PersonDataZMR.xsd"/>
+ <xsd:include schemaLocation="../zmr/entities/Person.xsd"/>
+ <xsd:include schemaLocation="../zmr/entities/Meldung.xsd"/>
+ <xsd:include schemaLocation="../zmr/entities/Behoerdenattribute.xsd"/>
+ <xsd:include schemaLocation="../zmr/entities/Auskunftssperre.xsd"/>
+
+ <xsd:element name="MeldungHistKorrigierenRequest">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="MeldungHistKorrigierenInfo"/>
+ <xsd:element ref="PersonReferenz"/>
+ <xsd:element ref="MeldungReferenz" minOccurs="0"/>
+ <xsd:element name="Wohnsitz" type="WohnsitzAnlageType" minOccurs="0"/>
+ <xsd:element ref="base:GemeldetVon" minOccurs="0"/>
+ <xsd:element ref="base:GemeldetBis" minOccurs="0"/>
+ <xsd:element ref="base:Unterkunftgeber" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="MeldungHistKorrigierenResponse">
+ <xsd:complexType>
+ <xsd:annotation>
+ <xsd:documentation>Server-Antwort zur Meldungkorrektur</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="MeldungHistKorrigierenAnfrage"/>
+ <xsd:element ref="base:Message"/>
+ <xsd:sequence minOccurs="0">
+ <xsd:element ref="PersonErgebnis"/>
+ <xsd:element ref="MeldungErgebnis" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>Gesamtdatensatz der korrigierten Meldung (mit EntityIDs der Meldung und deren abhängigen Entities)</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ </xsd:sequence>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="MeldungHistKorrigierenAnfrage">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="MeldungHistKorrigierenInfo"/>
+ <xsd:element ref="PersonReferenz"/>
+ <xsd:element ref="MeldungReferenz" minOccurs="0"/>
+ <xsd:element name="Wohnsitz" type="WohnsitzAnlageType" minOccurs="0"/>
+ <xsd:element ref="base:GemeldetVon" minOccurs="0"/>
+ <xsd:element ref="base:GemeldetBis" minOccurs="0"/>
+ <xsd:element ref="base:Unterkunftgeber" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="MeldungHistKorrigierenInfo" type="MeldungHistKorrigierenInfoType"/>
+ <xsd:complexType name="MeldungHistKorrigierenInfoType">
+ <xsd:annotation>
+ <xsd:documentation>Meta-Informationen zur Meldungkorrektur</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexContent>
+ <xsd:extension base="base:InfoFachlichType">
+ <xsd:sequence>
+ <xsd:element name="MeldungHistKorrigierenBezug" type="MeldungHistKorrigierenBezugType"/>
+ <!-- ZMR-1568
+ <xsd:element ref="base:StaatZugezogen" minOccurs="0"/>
+ <xsd:element ref="base:StaatVerzogen" minOccurs="0"/>
+ -->
+ </xsd:sequence>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:simpleType name="MeldungHistKorrigierenBezugType">
+ <xsd:annotation>
+ <xsd:documentation>mögliche Korrekturen für eine historische Meldung</xsd:documentation>
+ </xsd:annotation>
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="GemeldetPeriode"/>
+ <xsd:enumeration value="Unterkunftgeber"/>
+ <xsd:enumeration value="Adressaenderung"/>
+ <xsd:enumeration value="StrangLoeschen"/>
+ <xsd:enumeration value="SatzLoeschen"/>
+ <xsd:enumeration value="HistWohnsitzanlage"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/ORFGISAnforderung.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/ORFGISAnforderung.xsd
new file mode 100644
index 00000000..90e6d34a
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/ORFGISAnforderung.xsd
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: ORFGISAnforderung.xsd
+Zweck: Definiert Datentypen für den ZMR-ORFGISAnforderung
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2006-11-06 tsch: Erstellung
+-->
+
+<xsd:schema targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:cio="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../eingebunden/EingebundenProxy.xsd"/>
+ <xsd:import namespace="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" schemaLocation="../eingebunden/PersonDataZMR.xsd"/>
+
+ <xsd:element name="ORFGISAnforderungRequest">
+ <xsd:annotation>
+ <xsd:documentation>Anfragedaten der ORFGISAnforderung</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="ORFGISAnforderungInfo"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="ORFGISAnforderungResponse">
+ <xsd:annotation>
+ <xsd:documentation>In der Response werden die Anfragedaten aus dem Request und die Meldung geliefert, dass die Daten bereit gestellt werden.</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="ORFGISAnforderungAnfrage"/>
+ <xsd:element ref="base:Message"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="ORFGISAnforderungInfo" type="ORFGISAnforderungInfoType"/>
+
+ <xsd:complexType name="ORFGISAnforderungInfoType">
+ <xsd:sequence>
+ <xsd:element name="Gemeindenummern" type="xsd:string" />
+ <xsd:element name="DurchfuehrungsZeitpunkt"
+ type="base:TimestampType" minOccurs="0" />
+ <xsd:element name="AnmeldungenAb" type="base:TimestampType"
+ minOccurs="0" />
+ <xsd:element name="Ortskennzeichen" type="xsd:boolean"></xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="ORFGISAnforderungAnfrage">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="ORFGISAnforderungInfo"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/ObjektsucheMindestsicherung.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/ObjektsucheMindestsicherung.xsd
new file mode 100644
index 00000000..2e91cacf
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/ObjektsucheMindestsicherung.xsd
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: ObjektsucheMindestsicherung.xsd
+Zweck: Definiert Datentypen für die Mindestsicherung - Objektsuche im ZMR
+Author(s): Polster Martin, ZMR-SU
+
+Aenderungshistorie:
+2011-02-09 mp: ObjektsucheMindestsicherungInfo optional
+2010-07-29 mp: Erweitert um Adressstatus
+2010-07-27 mp: Erstellung
+-->
+
+<xsd:schema xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:cio="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+ targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../eingebunden/EingebundenProxy.xsd"/>
+ <xsd:import namespace="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" schemaLocation="../eingebunden/PersonDataZMR.xsd"/>
+
+ <xsd:include schemaLocation="Personensuche.xsd"/>
+
+ <xsd:element name="ObjektsucheMindestsicherungRequest">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="ObjektsucheMindestsicherungInfo" minOccurs="0"/>
+ <xsd:element ref="cio:PostAdresse"/>
+ <xsd:element ref="base:Adressstatus"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="ObjektsucheMindestsicherungResponse">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="ObjektsucheMindestsicherungAnfrage"/>
+ <xsd:element ref="base:Message"/>
+ <xsd:element ref="ObjektsucheMindestsicherungErgebnis" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="ObjektsucheMindestsicherungAnfrage">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="ObjektsucheMindestsicherungInfo" minOccurs="0"/>
+ <xsd:element ref="cio:PostAdresse"/>
+ <xsd:element ref="base:Adressstatus"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="ObjektsucheMindestsicherungInfo">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="base:Stichtag" minOccurs="0"/>
+ <xsd:element ref="base:AnzahlSaetze" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="ObjektsucheMindestsicherungErgebnis">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="base:GefundeneSaetze">
+ <xsd:annotation>
+ <xsd:documentation>Gesamtanzahl der in der Datenbank gefundenen Personen</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element ref="base:SaetzeVon">
+ <xsd:annotation>
+ <xsd:documentation>Beginn-Index dieser Ergebnisliste im Gesamtergebnis (bei Blaettern); Start mit 0</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element ref="base:SaetzeBis">
+ <xsd:annotation>
+ <xsd:documentation>Ende-Index dieser Ergebnisliste im Gesamtergebnis (bei Blaettern)</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element name="PersonErgebnisSatz" type="PersonErgebnisSatzType" minOccurs="1" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/ObjektsucheSteuerfahndung.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/ObjektsucheSteuerfahndung.xsd
new file mode 100644
index 00000000..0e0e5355
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/ObjektsucheSteuerfahndung.xsd
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: ObjektsucheSteuerfahndung.xsd
+Zweck: Definiert Datentypen für die Steuerfahndungs - Objektsuche im ZMR
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2004-11-25 tsch: Erstellung
+-->
+
+<xsd:schema xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:cio="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+ targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../eingebunden/EingebundenProxy.xsd"/>
+ <xsd:import namespace="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" schemaLocation="../eingebunden/PersonDataZMR.xsd"/>
+
+ <xsd:element name="ObjektsucheSteuerfahndungRequest">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="ObjektsucheSteuerfahndungInfo"/>
+ <xsd:element ref="cio:PostAdresse" minOccurs="0"/>
+ <xsd:element ref="base:Unterkunftgeber" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="ObjektsucheSteuerfahndungResponse">
+ <xsd:annotation>
+ <xsd:documentation>
+ Es wir entweder das Feld PDFDaten (Anforderung als Druck) mit allen gefundenen Datensätzen,
+ oder ObjektsucheSteuerfahndungErgebnis mit der aktuell geblätterten Seite geliefert.
+ </xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="ObjektsucheSteuerfahndungAnfrage"/>
+ <xsd:element ref="base:Message"/>
+ <xsd:element ref="ObjektsucheSteuerfahndungErgebnis" minOccurs="0"/>
+ <xsd:element name="PDFDaten" type="xsd:base64Binary" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="ObjektsucheSteuerfahndungAnfrage">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="ObjektsucheSteuerfahndungInfo"/>
+ <xsd:element ref="cio:PostAdresse" minOccurs="0"/>
+ <xsd:element ref="base:Unterkunftgeber" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="ObjektsucheSteuerfahndungInfo">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="base:Formalisiert"/>
+ <xsd:element name="AlsDruck" type="xsd:boolean"/>
+ <xsd:element ref="base:AnzahlSaetze" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="ObjektsucheSteuerfahndungErgebnis">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="base:GefundeneSaetze">
+ <xsd:annotation>
+ <xsd:documentation>Gesamtanzahl der in der Datenbank gefundenen Personen</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element ref="base:SaetzeVon">
+ <xsd:annotation>
+ <xsd:documentation>Beginn-Index dieser Ergebnisliste im Gesamtergebnis (bei Blaettern); Start mit 0</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element ref="base:SaetzeBis">
+ <xsd:annotation>
+ <xsd:documentation>Ende-Index dieser Ergebnisliste im Gesamtergebnis (bei Blaettern)</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element ref="cio:PersonenDaten" minOccurs="1" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/PersonAendern.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/PersonAendern.xsd
new file mode 100644
index 00000000..c29e8e06
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/PersonAendern.xsd
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: PersonAendern.xsd
+Zweck: Definiert Datentypen für Personendaten-Änderungen im ZMR
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2004-09-29 tsch: Standarddokumente hinzugefügt
+2004-06-24 tsch: akademische Grade hinzugefügt, PersonAendernMsg entfernt
+2004-06-14 tsch: Behördenattribute hinzugefügt
+2004-01-28 tsch: Gesamtdatensatz der geaenderten Person in der Response-Message
+-->
+
+<xsd:schema xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:cio="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+ targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../eingebunden/EingebundenProxy.xsd"/>
+ <xsd:include schemaLocation="../zmr/entities/Person.xsd"/>
+
+ <xsd:element name="PersonAendernRequest">
+ <xsd:annotation>
+ <xsd:documentation>Es können die Person und deren abhängige Entities (z.B. Staatsangehoerigkeit) unabhängig geändert werden. Felder, die nicht geschickt werden, bleiben unverändert, leer geschickte Felder werden gelöscht.</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="PersonAendernInfo"/>
+ <xsd:element ref="PersonReferenz"/>
+ <xsd:element ref="PersonAenderung" minOccurs="0"/>
+ <xsd:element ref="StaatsangehoerigkeitAenderung" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element ref="StaatsangehoerigkeitAnlage" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element ref="ReisedokumentAenderung" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element ref="ReisedokumentAnlage" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element name="BehoerdenattributeSetzen" type="BehoerdenattributeSetzenType" minOccurs="0"/>
+ <xsd:element ref="AuskunftssperreAenderung" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element ref="AuskunftssperreAnlage" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element ref="AkademischerGradAenderung" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element ref="AkademischerGradAnlage" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element ref="StandarddokumentAenderung" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element ref="StandarddokumentAnlage" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element ref="EidasIdentitaetAenderung" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element ref="EidasIdentitaetAnlage" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="PersonAendernResponse">
+ <xsd:annotation>
+ <xsd:documentation>Server-Antwort zur Personenänderung</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="base:Message"/>
+ <xsd:element ref="PersonErgebnis">
+ <xsd:annotation>
+ <xsd:documentation>Gesamtdatensatz der geänderten Person (mit EntityIDs der Person und deren abhängigen Entities)</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="PersonAendernInfo" type="PersonAendernInfoType"/>
+ <xsd:complexType name="PersonAendernInfoType">
+ <xsd:annotation>
+ <xsd:documentation>allgemeine Fachliche Informationen zur Personenänderung</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexContent>
+ <xsd:extension base="base:InfoFachlichType">
+
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/PersonAnlegen.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/PersonAnlegen.xsd
new file mode 100644
index 00000000..e3131165
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/PersonAnlegen.xsd
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: PersonAnlegen.xsd
+Zweck: Definiert Datentypen für den Usecase "Person anlegen" im ZMR
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2004-06-24 tsch: PersonAnlegenMsg entfernt
+2004-01-28 tsch: Gesamtdatensatz der neuen Person in der Response-Message
+-->
+
+<xsd:schema targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:cio="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:include schemaLocation="../zmr/entities/Person.xsd"/>
+ <xsd:include schemaLocation="WohnsitzAnmelden.xsd"/>
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../eingebunden/EingebundenProxy.xsd"/>
+
+ <xsd:element name="PersonAnlegenRequest">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="PersonAnlegenInfo"/>
+ <xsd:element ref="PersonAnlage"/>
+ <xsd:element ref="MeldungAnlage"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="PersonAnlegenResponse">
+ <xsd:complexType>
+ <xsd:annotation>
+ <xsd:documentation>Server-Antwort zur Personenanlage</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="base:Message"/>
+ <xsd:element ref="PersonErgebnis">
+ <xsd:annotation>
+ <xsd:documentation>Gesamtdatensatz der im ZMR angelegten Person (mit EntityIDs der Person und deren abhängigen Entities)</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element ref="MeldungErgebnis">
+ <xsd:annotation>
+ <xsd:documentation>Gesamtdatensatz der angelegten Meldung (mit EntityIDs der Meldung und deren abhängigen Entities)</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="PersonAnlegenInfo" type="PersonAnlegenInfoType"/>
+ <xsd:complexType name="PersonAnlegenInfoType">
+ <xsd:annotation>
+ <xsd:documentation>allgemeine Fachliche Informationen zur Personenanlage</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexContent>
+ <xsd:extension base="base:InfoFachlichType">
+
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/PersonExport.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/PersonExport.xsd
new file mode 100644
index 00000000..a91e9f5a
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/PersonExport.xsd
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: PersonExport.xsd
+Zweck: Definiert Datentypen für den Usecase "Person export" im LMR
+-->
+
+<xsd:schema targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:cio="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:include schemaLocation="../zmr/entities/Person.xsd"/>
+ <xsd:include schemaLocation="Personensuche.xsd"/>
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../eingebunden/EingebundenProxy.xsd"/>
+
+ <xsd:element name="PersonExportRequest">
+ <xsd:complexType>
+ <xsd:annotation>
+ <xsd:documentation>Request für PersonExport</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="base:EntityID"/>
+ <xsd:element ref="ExportOption"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="PersonExportResponse">
+ <xsd:complexType>
+ <xsd:annotation>
+ <xsd:documentation>Response für PersonExport</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="base:Message"/>
+ <xsd:element ref="ExportOption"/>
+ <xsd:element ref="base:PersonExport"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="ExportOption">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="ExportErgebnisOption"/>
+ <xsd:element ref="ExportMeldungOption"/>
+ <xsd:element ref="base:LetzteAenderung" minOccurs="0" maxOccurs="1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="ExportMeldungOption">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="ALLE" />
+ <xsd:enumeration value="GEMEINDE" />
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="ExportErgebnisOption">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="ALLE" />
+ <xsd:enumeration value="AKTUELL" />
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+
+
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/PersonKorrigieren.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/PersonKorrigieren.xsd
new file mode 100644
index 00000000..3f163231
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/PersonKorrigieren.xsd
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: PersonKorrigieren.xsd
+Zweck: Definiert Datentypen für Korrekturen von Personendaten im ZMR
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2004-09-29 tsch: Standarddokumente hinzugefügt
+2004-09-27 tsch: Erstellt
+-->
+
+<xsd:schema xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:cio="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+ targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../eingebunden/EingebundenProxy.xsd"/>
+ <xsd:include schemaLocation="../zmr/entities/Person.xsd"/>
+
+ <xsd:element name="PersonKorrigierenRequest">
+ <xsd:annotation>
+ <xsd:documentation>Es können die Person und deren abhängige Entities (z.B. Staatsangehoerigkeit) unabhängig geändert werden. Felder, die nicht geschickt werden, bleiben unverändert, leer geschickte Felder werden gelöscht.</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="PersonKorrigierenInfo"/>
+ <xsd:element ref="PersonReferenz"/>
+ <xsd:element ref="PersonAenderung" minOccurs="0"/>
+ <xsd:element ref="StaatsangehoerigkeitAenderung" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element ref="StaatsangehoerigkeitAnlage" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element ref="ReisedokumentAenderung" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element ref="ReisedokumentAnlage" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element name="BehoerdenattributeSetzen" type="BehoerdenattributeSetzenType" minOccurs="0"/>
+ <xsd:element ref="AuskunftssperreAenderung" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element ref="AuskunftssperreAnlage" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element ref="AkademischerGradAenderung" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element ref="AkademischerGradAnlage" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element ref="StandarddokumentAenderung" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element ref="StandarddokumentAnlage" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="PersonKorrigierenResponse">
+ <xsd:annotation>
+ <xsd:documentation>Server-Antwort zur Personenkorrektur</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="base:Message"/>
+ <xsd:element ref="PersonErgebnis">
+ <xsd:annotation>
+ <xsd:documentation>Gesamtdatensatz der korrigierten Person (mit EntityIDs der Person und deren abhängigen Entities)</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="PersonKorrigierenInfo" type="PersonKorrigierenInfoType"/>
+ <xsd:complexType name="PersonKorrigierenInfoType">
+ <xsd:annotation>
+ <xsd:documentation>allgemeine Fachliche Informationen zur Personenkorrektur</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexContent>
+ <xsd:extension base="base:InfoFachlichType">
+
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/PersonTrennen.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/PersonTrennen.xsd
new file mode 100644
index 00000000..ceba2041
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/PersonTrennen.xsd
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: PersonTrennen.xsd
+Zweck: Definiert Datentypen für den Usecase "Person_Trennen (SPLIT)" im ZMR
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2004-09-09 tsch: Erstellung
+-->
+
+<xsd:schema targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:cio="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../eingebunden/EingebundenProxy.xsd"/>
+
+ <xsd:include schemaLocation="Personenabfrage.xsd"/>
+
+ <xsd:element name="PersonTrennenSucheRequest">
+ <xsd:annotation>
+ <xsd:documentation>ZMR-Zahl der Person, die gesplittet werden soll</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="base:ZMRZahl"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="PersonTrennenSucheResponse">
+ <xsd:annotation>
+ <xsd:documentation>Personen- und Medledaten des SPLIT-Kandidaten (es werden nur die zuletzt fachlich gültigen Sätze - sowohl der Person, als auch der Meldungen geliefert)</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="base:Message"/>
+ <xsd:element name="PersonTrennenSuchergebnis" type="PAbfrageErgebnisSatzType" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+
+ <xsd:element name="PersonTrennenRequest">
+ <xsd:annotation>
+ <xsd:documentation>
+ Zweiter Schritt der Personentrennung nach der Suche/Anzeige der zu trennenden Person (Trennung durchführen)
+ Enthält die Person-Referenz und die Liste der auf die neue Person zu übertragenden Meldungen
+ </xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="PersonReferenz"/>
+ <xsd:element ref="MeldungReferenz" minOccurs="1" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="PersonTrennenResponse">
+ <xsd:annotation>
+ <xsd:documentation>Personen- und Meldedaten der getrennten Personen, es wird die gesamte fachl. Historie geliefert</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="base:Message"/>
+ <xsd:element name="PersonTrennenErgebnis" type="PAbfrageErgebnisSatzType" minOccurs="2" maxOccurs="2"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/PersonZusammenfuehren.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/PersonZusammenfuehren.xsd
new file mode 100644
index 00000000..b44943d7
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/PersonZusammenfuehren.xsd
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: PersonZusammenfuehren.xsd
+Zweck: Definiert Datentypen für den Usecase "Person_Zusammenfuehren (KIT)" im ZMR
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2004-09-09 tsch: Erstellung
+-->
+
+<xsd:schema targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:cio="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../eingebunden/EingebundenProxy.xsd"/>
+
+ <xsd:include schemaLocation="Personenabfrage.xsd"/>
+
+ <xsd:element name="PersonZusammenfuehrenSucheRequest">
+ <xsd:annotation>
+ <xsd:documentation>ZMR-Zahl der Person, die gesplittet werden soll</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="QuellpersonZMRZahl" type="base:ZMRZahlType"/>
+ <xsd:element name="ZielpersonZMRZahl" type="base:ZMRZahlType"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="PersonZusammenfuehrenSucheResponse">
+ <xsd:annotation>
+ <xsd:documentation>Personen- und Medledaten der KIT-Kandidaten (es werden nur die zuletzt fachlich gültigen Sätze - sowohl der Person, als auch der Meldungen geliefert)</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="base:Message"/>
+ <xsd:sequence minOccurs="0">
+ <xsd:element name="PersonZusammenfuehrenSuchergebnis" type="PAbfrageErgebnisSatzType" minOccurs="2" maxOccurs="2"/>
+ </xsd:sequence>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+
+ <xsd:element name="PersonZusammenfuehrenRequest">
+ <xsd:annotation>
+ <xsd:documentation>Zweiter Schritt der Personenzusammenführung nach der Suche/Anzeige der zusammenzuführenden Personen (Zusammenführung durchführen)</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="QuellpersonReferenz" type="PersonReferenzType"/>
+ <xsd:element name="ZielpersonReferenz" type="PersonReferenzType"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="PersonZusammenfuehrenResponse">
+ <xsd:annotation>
+ <xsd:documentation>Personen- und Meldedaten zusammengeführten Person, es wird die gesamte fachl. Historie geliefert</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="base:Message"/>
+ <xsd:element name="PersonZusammenfuehrenErgebnis" type="PAbfrageErgebnisSatzType"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/PersonenIndex.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/PersonenIndex.xsd
new file mode 100644
index 00000000..72b3d3f2
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/PersonenIndex.xsd
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: PersonenIndex.xsd
+Zweck: Definiert Datentypen für den Personenindex mit verschl. bPKs
+Author(s): Oliver Ehrenmüller, ZMR-SU
+
+Aenderungshistorie:
+2011-09-05 teo Änderungsdienst ZWR (PN126)
+2011-08-05 teo Request/Response vertauscht, +Register-Info
+2011-08-02 teo erstellt.
+-->
+
+<xsd:schema targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:cio="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../eingebunden/EingebundenProxy.xsd"/>
+ <xsd:import namespace="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" schemaLocation="../eingebunden/PersonDataZMR.xsd"/>
+
+ <xsd:element name="PersonenIndexRequest">
+ <xsd:annotation>
+ <xsd:documentation>
+ Im Request werden Meta-Informationen zum Batch und die verschlüsselten BPKs geliefert
+ ECDID steht für "encrypted context dependend id" aus.
+ </xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="base:Message"/>
+ <xsd:element ref="PersonenIndexInfo"/>
+ <xsd:element name="ECDID" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="PersonenIndexResponse">
+ <xsd:annotation>
+ <xsd:documentation>Es werden keine Responsedaten erwartet.</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence/>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="PersonenIndexInfo" type="PersonenIndexInfoType"/>
+
+ <xsd:complexType name="PersonenIndexInfoType">
+ <xsd:annotation>
+ <xsd:documentation>
+ Meta-Informationen zum ausgelieferten Index:
+ BatchCode/Name, Organisation, Bereich, Zeitraum, etc...
+ </xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element name="BatchCode" type="xsd:string"/>
+ <xsd:element name="BatchName" type="xsd:string"/>
+ <xsd:element ref="base:Organisation"/>
+ <xsd:element name="Register" type="xsd:string"/>
+ <xsd:sequence minOccurs="0">
+ <xsd:element name="AbgleichVon" type="base:TimestampType"/>
+ <xsd:element name="AbgleichBis" type="base:TimestampType"/>
+ </xsd:sequence>
+ <xsd:element name="Bereich" type="xsd:string"/>
+ <xsd:element name="PackageID" type="base:ENTITYIDType"/>
+ <xsd:element ref="base:AnzahlSaetze"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Personenabfrage.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Personenabfrage.xsd
new file mode 100644
index 00000000..c1b579ce
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Personenabfrage.xsd
@@ -0,0 +1,139 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: Personenabfrage.xsd
+Zweck: Definiert Datentypen für den Usecase "Personenabfrage" im ZMR
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2004-12-09 tsch: Liste der EntityIDs bei Druck optional (für Negativauskunft)
+2004-08-17 tsch: Erstellung
+-->
+
+<xsd:schema targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:cio="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../eingebunden/EingebundenProxy.xsd"/>
+ <xsd:import namespace="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" schemaLocation="../eingebunden/PersonDataZMR.xsd"/>
+ <xsd:include schemaLocation="Personensuche.xsd"/>
+
+ <xsd:element name="PersonenAbfrageRequest">
+ <xsd:annotation>
+ <xsd:documentation>Suchkriterien für die Personensuche im ZMR(Personendaten + Adressdaten)</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="PersonenAbfrageInfo"/>
+ <xsd:element ref="base:ZMRZahl" minOccurs="0"/>
+ <xsd:element ref="cio:NatuerlichePerson" minOccurs="0"/>
+ <xsd:element ref="cio:PostAdresse" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="PersonenAbfrageResponse">
+ <xsd:annotation>
+ <xsd:documentation>In der Response werden die Anfragedaten aus dem Request, und das Suchergebnis bzw. eine Text-Meldung geliefert (Falls keine Person gefunden)</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="PersonenAbfrageAnfrage"/>
+ <xsd:element ref="base:Message"/>
+ <xsd:element ref="PersonenAbfrageErgebnis" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="PersonenAbfrageDruckRequest">
+ <xsd:annotation>
+ <xsd:documentation>Suchkriterien für die Personensuche im ZMR (Personendaten + Adressdaten)</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:annotation>
+ <xsd:documentation>Liste der EntityIDs der zu druckenden Personen</xsd:documentation>
+ </xsd:annotation>
+ <xsd:element ref="base:EntityID" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="PersonenAbfrageDruckResponse">
+ <xsd:annotation>
+ <xsd:documentation>In der Response werden die Anfragedaten aus dem Request, und das Suchergebnis bzw. eine Text-Meldung geliefert (Falls keine Person gefunden)</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="PersonenAbfrageAnfrage"/>
+ <xsd:element ref="base:Message"/>
+ <xsd:element name="PDFDaten" type="xsd:base64Binary"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="PersonenAbfrageInfo" type="PersonenAbfrageInfoType"/>
+ <xsd:element name="PersonenAbfrageErgebnis" type="PersonenAbfrageErgebnisType"/>
+
+ <xsd:element name="PersonenAbfrageAnfrage">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="PersonenAbfrageInfo"/>
+ <xsd:element ref="base:ZMRZahl" minOccurs="0"/>
+ <xsd:element ref="cio:NatuerlichePerson" minOccurs="0"/>
+ <xsd:element ref="cio:PostAdresse" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:complexType name="PersonenAbfrageInfoType">
+ <xsd:annotation>
+ <xsd:documentation>Fachliche Informationen zur Personensuche</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="base:Bezugsfeld"/>
+ <xsd:element name="Suchkriterien" type="SuchkriterienType"/>
+ <xsd:element name="Ergebniskriterien" type="ErgebniskriterienType"/>
+ <xsd:element name="berechneBpk" type="xsd:boolean" default="false" minOccurs="0"/>
+ <xsd:element ref="base:AnzahlSaetze"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="PersonenAbfrageErgebnisType">
+ <xsd:annotation>
+ <xsd:documentation>Enthält je einen 'PersonErgebnisSatz' pro gefundener Person. Wird keine Person gefunden, befindet sich eine entprechende Text-Message in 'PersonensucheMsg'</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="base:GefundeneSaetze">
+ <xsd:annotation>
+ <xsd:documentation>Gesamtanzahl der in der Datenbank gefundenen Personen</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element ref="base:SaetzeVon">
+ <xsd:annotation>
+ <xsd:documentation>Beginn-Index dieser Ergebnisliste im Gesamtergebnis (bei Blaettern); Start mit 1</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element ref="base:SaetzeBis">
+ <xsd:annotation>
+ <xsd:documentation>Ende-Index dieser Ergebnisliste im Gesamtergebnis (bei Blaettern)</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element name="PersonErgebnisSatz" type="PAbfrageErgebnisSatzType" minOccurs="1" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="PAbfrageErgebnisSatzType">
+ <xsd:annotation>
+ <xsd:documentation>Enthält die Ergebnisdaten zu einer gefundenen Person.</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="Personendaten"/>
+ <xsd:element ref="Meldedaten" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Personenlisten.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Personenlisten.xsd
new file mode 100644
index 00000000..e7f18752
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Personenlisten.xsd
@@ -0,0 +1,131 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: Personenlisten.xsd
+Zweck: Definiert Datentypen für den Usecase "Personenlisten" im ZMR. Soll ein generischer Ansatz für
+Suche nach aktuellen Personendaten mit v-bPKs sein. Erstnutzer der Schnittstelle ist der VVO (mit VVOAbfrage)
+Author(s): Ehrenmüller Oliver, ZMR-SU
+
+Aenderungshistorie:
+2009-11-16 teo: +Flag für Suchwizard
+2008-02-26 teo: erstellt.
+-->
+
+<xsd:schema targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:cio="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:include schemaLocation="../zmr/Personensuche.xsd"/>
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../eingebunden/EingebundenProxy.xsd"/>
+ <xsd:import namespace="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" schemaLocation="../eingebunden/PersonDataZMR.xsd"/>
+
+ <xsd:element name="PersonenListenRequest">
+ <xsd:annotation>
+ <xsd:documentation>Suchkriterien für den PersonenListen-Request im ZMR (Personendaten + Adressdaten)</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="PersonenListenInfo"/>
+ <xsd:element ref="base:ZMRZahl" minOccurs="0"/>
+ <xsd:element ref="cio:NatuerlichePerson" minOccurs="0"/>
+ <xsd:element ref="cio:PostAdresse" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="PersonenListenResponse">
+ <xsd:annotation>
+ <xsd:documentation>In der Response werden die Anfragedaten aus dem Request, und das
+ Suchergebnis bzw. eine Text-Meldung geliefert (Falls keine Person gefunden)</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="PersonenListenAnfrage"/>
+ <xsd:element ref="base:Message"/>
+ <xsd:element ref="PersonenListenErgebnis" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="PersonenListenInfo" type="PersonenListenInfoType"/>
+ <xsd:element name="PersonenListenErgebnis" type="PersonenListenErgebnisType"/>
+
+ <xsd:element name="PersonenListenAnfrage">
+ <xsd:annotation>
+ <xsd:documentation>Anfragedaten, entsprechen den Suchdaten des Requests</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="PersonenListenInfo"/>
+ <xsd:element ref="base:ZMRZahl" minOccurs="0"/>
+ <xsd:element ref="cio:NatuerlichePerson" minOccurs="0"/>
+ <xsd:element ref="cio:PostAdresse" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:complexType name="PersonenListenInfoType">
+ <xsd:annotation>
+ <xsd:documentation>Fachliche Informationen zur PersonenListen</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="base:Bezugsfeld"/>
+ <xsd:element name="Suchkriterien" type="PersonenListenSuchkriterienType"/>
+ <xsd:element name="Ergebniskriterien" type="PersonenListenErgebniskriterienType"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="PersonenListenSuchkriterienType">
+ <xsd:annotation>
+ <xsd:documentation>Suchkriterien</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="base:InclusivHistorie"/>
+ <xsd:element ref="base:Formalisiert"/>
+ <xsd:element name="Suchwizard" type="xsd:boolean" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="PersonenListenErgebniskriterienType">
+ <xsd:annotation>
+ <xsd:documentation>Ergebniskriterien</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element name="vbPKAnfrage" minOccurs="0" maxOccurs="10">
+ <xsd:annotation>
+ <xsd:documentation>v-bPKs die miterzeugt werden sollen. (zb. urn:publicid:gv.at:ecdid+BMI+ZP)</xsd:documentation>
+ </xsd:annotation>
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="28"/>
+ <xsd:maxLength value="50"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="PersonenListenErgebnisType">
+ <xsd:annotation>
+ <xsd:documentation>PersonenListenErgebnisType beinhaltet die Liste der gefundenen Personen.
+ Derzeit wird die Liste auf 50 Sätze begrenzt.</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element name="PersonenListenSatz" type="PersonenListenSatzType" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="PersonenListenSatzType">
+ <xsd:annotation>
+ <xsd:documentation>Beinhaltet als einen Ergebnissatz eine Personen und ihre aktuellen Meldungen</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:group ref="ZMRPersonErgebnissatzGroup"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Personensuche.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Personensuche.xsd
new file mode 100644
index 00000000..a501ba1f
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Personensuche.xsd
@@ -0,0 +1,255 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: Personensuche.xsd
+Zweck: Definiert Datentypen für den Usecase "Person suchen Meldevorgang" im ZMR
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2010-10-15 mp: ZMR-1473: Personensuche erweitert um Dokumentsuche
+2010-04-02 teo: ZMR-1356: ZMR-Suchergebnis: die Aufteilung in ZMR- und ERnP-Treffer fehlt
+2010-01-26 teo: ZMR-1334: Umbau der Suche mit Namensteilen auf eigene Suchoption
+2009-12-15 teo: LMR-712 Übernahme LMR Auslandsösterreicher ins ERnP
+2009-07-02 rp: LMR-660: +Sortierung
+2008-03-20 teo: CQ#2960 rückgängig gemacht.
+2008-02-25 teo: CQ#2960: +Dummy-Attribut für .Net-Umgebungen
+2006-08-08 tsch: Feld EingeschraenkteHistorie hinzugefügt
+2005-10-06 tsch: Suchkriterium InclusivERnP hinzugefügt, Umbenennung EGR->ERnP
+2004-06-22 tsch: Akademische Grade hinzugefügt; SaetzeVon und SaetzeBis im Ergebnis
+2004-06-18 tsch: Stichtag hinzugefügt
+2004-06-08 tsch: Message immer im Ergebnis
+2004-05-17 tsch: Organisation entfernt
+2004-05-04 tsch: InclusivAusgeblendeteSaetze entfernt
+2004-04-15 tsch: ZMR-Zahl bei Suchanfrage dazu (ZMR-Zahl-Suche nicht über NatuerlichePerson.Identification)
+2004-01-27 tsch: Personen- und Kontaktadressdaten aus dem Ergänzungsregister im Suchergebnis definiert
+2004-01-26 tsch: Integration der CIO-Personendaten Struktur (http://reference.e-government.gv.at/namespace/persondata/de/20040201#)
+-->
+
+<xsd:schema targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:cio="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:include schemaLocation="../zmr/entities/Meldung.xsd"/>
+ <xsd:include schemaLocation="../zmr/entities/Person.xsd"/>
+ <xsd:include schemaLocation="../zmr/entities/ERnPPerson.xsd"/>
+
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../eingebunden/EingebundenProxy.xsd"/>
+ <xsd:import namespace="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" schemaLocation="../eingebunden/PersonDataZMR.xsd"/>
+
+ <xsd:element name="PersonSuchenRequest">
+ <xsd:annotation>
+ <xsd:documentation>Suchkriterien für die Personensuche im ZMR/ERnP (Personendaten + Adressdaten)</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="PersonensucheInfo"/>
+ <xsd:element ref="base:ZMRZahl" minOccurs="0"/>
+ <xsd:element ref="cio:NatuerlichePerson" minOccurs="0"/>
+ <xsd:element ref="cio:PostAdresse" minOccurs="0"/>
+ <xsd:element ref="DokumentSuchdaten" minOccurs="0"/>
+ <xsd:element ref="EidasSuchdaten" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="PersonSuchenResponse">
+ <xsd:annotation>
+ <xsd:documentation>In der Response werden die Anfragedaten aus dem Request, und das Suchergebnis bzw. eine Text-Meldung geliefert (Falls keine Person gefunden)</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="PersonensucheAnfrage"/>
+ <xsd:element ref="base:Message"/>
+ <xsd:element ref="Personensuchergebnis" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="PersonensucheInfo" type="PersonensucheInfoType"/>
+ <xsd:element name="Personensuchergebnis" type="PersonensuchergebnisType"/>
+
+ <xsd:element name="PersonensucheAnfrage">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="PersonensucheInfo"/>
+ <xsd:element ref="base:ZMRZahl" minOccurs="0"/>
+ <xsd:element ref="cio:NatuerlichePerson" minOccurs="0"/>
+ <xsd:element ref="cio:PostAdresse" minOccurs="0"/>
+ <xsd:element ref="DokumentSuchdaten" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:complexType name="PersonensucheInfoType">
+ <xsd:annotation>
+ <xsd:documentation>Fachliche Informationen zur Personensuche</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="base:Bezugsfeld"/>
+ <xsd:element name="Suchkriterien" type="SuchkriterienType"/>
+ <xsd:element name="Ergebniskriterien" type="ErgebniskriterienType"/>
+ <xsd:element ref="base:AnzahlSaetze"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="SuchkriterienType">
+ <xsd:annotation>
+ <xsd:documentation>Datenbank-Suchkriterien für Personen- und Meldedaten der Personensuche</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="base:Stichtag" minOccurs="0"/>
+ <xsd:element ref="base:InclusivHistorie"/>
+ <xsd:element ref="base:Formalisiert"/>
+ <xsd:element name="ErweitereSuchoptionen" minOccurs="0">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="Teilnamen"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="InclusivERnP" type="xsd:boolean" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="ErgebniskriterienType">
+ <xsd:annotation>
+ <xsd:documentation>Anzeigekriterien für Personen- und Meldedaten im Personensuchergebnis</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:choice>
+ <xsd:element ref="base:InclusivHistorie"/>
+ <xsd:element ref="base:EingeschraenkteHistorie"/>
+ </xsd:choice>
+ <xsd:element ref="Sortierung" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="Sortierung">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="Person">
+ <xsd:annotation>
+ <xsd:documentation>Sortierung nach Familienname, Vorname, Geburtsdatum (Default)</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="Adresse">
+ <xsd:annotation>
+ <xsd:documentation>
+ Sortierung nach PLZ, Straße, Hausnummer, Stiege, Tür, Familienname, Vorname,
+ Geburtsdatum.
+ Die Sortierung wirkt auf die Adresse, nach der gesucht wurde, d.h. es sollte
+ auf eine eingeschränkt werden (z.B. Suche in Objekt).
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:complexType name="PersonensuchergebnisType">
+ <xsd:annotation>
+ <xsd:documentation>Enthält je einen 'PersonErgebnisSatz' pro gefundener Person. Wird keine Person gefunden, befindet sich eine entprechende Text-Message in 'PersonensucheMsg'</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="base:GefundeneSaetze">
+ <xsd:annotation>
+ <xsd:documentation>Gesamtanzahl der in der Datenbank gefundenen Personen</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element name="GefundeneSaetzeERnP" type="base:IntegerType" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>Gesamtanzahl der in der ERnP-Datenbank gefundenen Personen</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element ref="base:SaetzeVon">
+ <xsd:annotation>
+ <xsd:documentation>Beginn-Index dieser Ergebnisliste im Gesamtergebnis (bei Blaettern); Start mit 1</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element ref="base:SaetzeBis">
+ <xsd:annotation>
+ <xsd:documentation>Ende-Index dieser Ergebnisliste im Gesamtergebnis (bei Blaettern)</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element name="PersonErgebnisSatz" type="PersonErgebnisSatzType" minOccurs="1" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="PersonErgebnisSatzType">
+ <xsd:annotation>
+ <xsd:documentation>Enthält die Ergebnisdaten zu einer gefundenen Person.</xsd:documentation>
+ </xsd:annotation>
+ <xsd:choice>
+ <xsd:group ref="ZMRPersonErgebnissatzGroup"/>
+ <xsd:group ref="ERnPPersonErgebnissatzGroup"/>
+ </xsd:choice>
+ </xsd:complexType>
+
+ <xsd:group name="ZMRPersonErgebnissatzGroup">
+ <xsd:annotation>
+ <xsd:documentation>Fasst die gefundenen Daten einer Person aus dem Melderegister (aktuelle und historische Personendaten, sowie aktuelle und historische Meldedaten)</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="Personendaten"/>
+ <xsd:element ref="Meldedaten" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:group>
+
+ <xsd:element name="Personendaten">
+ <xsd:annotation>
+ <xsd:documentation>Historienliste der Personendaten (Erklärung Historienliste siehe Dokument ZMR2Schnittstellen-Richtlinien.doc</xsd:documentation>
+ </xsd:annotation>
+
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="PersonErgebnis" minOccurs="1" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="Meldedaten" type="MeldedatenType">
+ <xsd:annotation>
+ <xsd:documentation>gelieferte Meldungen der Person (ein Strang = ein Element 'Meldedaten')</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:complexType name="MeldedatenType">
+ <xsd:annotation>
+ <xsd:documentation>Historienliste der Meldedaten einer Meldung</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="MeldungErgebnis" minOccurs="1" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:group name="ERnPPersonErgebnissatzGroup">
+ <xsd:annotation>
+ <xsd:documentation>Fasst die gefundenen Daten einer Person aus dem Ergänzungsregister (ERnP) (aktuelle und historische Personendaten, sowie aktuelle und historische Kontaktadressen)</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element name="ERnPPersonendaten">
+ <xsd:annotation>
+ <xsd:documentation>Historienliste der Personendaten (Erklärung Historienliste siehe Dokument ZMR2Schnittstellen-Richtlinien.doc</xsd:documentation>
+ </xsd:annotation>
+
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="ERnPPersonErgebnis" minOccurs="1" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="ERnPHistLMRMeldungen" type="MeldedatenType" minOccurs="0" maxOccurs="unbounded">
+ <xsd:annotation>
+ <xsd:documentation>
+ LMR-Histmeldungen für ERnP-Personen werden bei der LMR-Suche benötigt.
+ Sonst nicht verwenden, ausbauen, wenn Schnittstelle an externe Partner
+ geliefert wird!!!
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ </xsd:sequence>
+ </xsd:group>
+
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/QKZAuswertung.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/QKZAuswertung.xsd
new file mode 100644
index 00000000..e6dafecd
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/QKZAuswertung.xsd
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: QKZAuswertung.xsd
+Zweck: Definiert Datentypen für das Anfordern einer QKZ-Auswertung innerhalb einer Gemeinde (Die Auswertung steht in PDF-Form in den Auswertungen bereit)
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2010-06-15 ZMR-171 XML-Schnittstelle für Qualifikationskennzeichenliste
+2005-02-02 Erstellt
+-->
+
+<xsd:schema xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:cio="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+ targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../eingebunden/EingebundenProxy.xsd"/>
+ <xsd:import namespace="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" schemaLocation="../eingebunden/PersonDataZMR.xsd"/>
+ <xsd:include schemaLocation="../zmr/entities/Qualifikationskennzeichen.xsd"/>
+
+ <xsd:element name="QKZAuswertungRequest">
+ <xsd:annotation>
+ <xsd:documentation>Die Auswertung läuft über alle Personen mit den angegebene QKZ in der angegebenen Gemeinde.</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="base:GemeindeNr"/>
+ <xsd:element ref="QualifikationskennzeichenCode" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="QKZAuswertungAnfrage">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="base:GemeindeNr"/>
+ <xsd:element ref="QualifikationskennzeichenCode" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="QKZAuswertungResponse">
+ <xsd:annotation>
+ <xsd:documentation>Server-Antwort zur Anforderung einer QKZ-Auswertung</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="QKZAuswertungAnfrage"/>
+ <xsd:element ref="base:Message"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="QKZAuswertung">
+ <xsd:annotation>
+ <xsd:documentation>Auswertungs-XML für QKZs laut ZMR-171</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="base:Message"/>
+ <xsd:element name="Qualifikationskennzeichen" type="QualifikationskennzeichenAnlageType" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element ref="QKZZuordnung" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="QKZZuordnung">
+ <xsd:annotation>
+ <xsd:documentation>Definiert eine Zuordnung zwischen einer Person und einem QKZ für die XML-Auswertung laut ZMR-171</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="QualifikationskennzeichenCode"/>
+ <xsd:element ref="base:GemeindeNr"/>
+ <xsd:element ref="cio:NatuerlichePerson"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/QKZBearbeiten.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/QKZBearbeiten.xsd
new file mode 100644
index 00000000..2f97c8b8
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/QKZBearbeiten.xsd
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: QKZWarten.xsd
+Zweck: Definiert Datentypen für Wartung von Qualifikationskennzeichen im ZMR/ZPR
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2005-05-10 Löschen und Anlegen von mehreren QKZ in einem Request
+2005-02-02 Erstellt
+-->
+
+<xsd:schema xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:cio="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+ targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../eingebunden/EingebundenProxy.xsd"/>
+ <xsd:include schemaLocation="../zmr/entities/Person.xsd"/>
+ <xsd:include schemaLocation="../zmr/entities/Meldung.xsd"/>
+ <xsd:include schemaLocation="../zmr/entities/Qualifikationskennzeichen.xsd"/>
+
+ <xsd:element name="QKZBearbeitenRequest">
+ <xsd:annotation>
+ <xsd:documentation>Mit einem Request können Qualifikationskennzeichen angelegt oder gelöscht werden.</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="QKZBearbeitenInfo"/>
+ <xsd:choice>
+ <xsd:annotation>
+ <xsd:documentation>Referenz auf das Objekt, für das die QKZ-Wartung durchgeführt wird (Person oder Meldung)</xsd:documentation>
+ </xsd:annotation>
+ <xsd:element ref="PersonReferenz"/>
+ <xsd:element ref="MeldungReferenz"/>
+ </xsd:choice>
+ <xsd:element ref="QualifikationskennzeichenAnlage" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element ref="QualifikationskennzeichenLoeschen" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="QKZBearbeitenResponse">
+ <xsd:annotation>
+ <xsd:documentation>Server-Antwort zur QKZ-Wartung</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="base:Message"/>
+ <xsd:element name="Qualifikationskennzeichen" type="QualifikationskennzeichenErgebnisType" minOccurs="1" maxOccurs="unbounded">
+ <xsd:annotation>
+ <xsd:documentation>Datensatz der angelegten/gelöschten Qualifikationskennzeichen</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="QKZBearbeitenInfo" type="QKZBearbeitenInfoType"/>
+ <xsd:complexType name="QKZBearbeitenInfoType">
+ <xsd:annotation>
+ <xsd:documentation>allgemeine Fachliche Informationen zur QKZ-Wartung</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexContent>
+ <xsd:extension base="base:InfoFachlichType">
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/SZREinzelabfrage.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/SZREinzelabfrage.xsd
new file mode 100644
index 00000000..f0cc9d26
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/SZREinzelabfrage.xsd
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: SZREinzelabfrage.xsd
+Zweck: Definiert Datentypen für die Einzalabfrage des Stammzahlenregisters im ZMR
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2009-10-27 teo: SZR-Verordnung 2009
+2006-03-21 tsch: Ordnungszahl hinzugefügt
+2004-09-09 tsch: Erstellung
+-->
+
+<xsd:schema xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:cio="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+ targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../eingebunden/EingebundenProxy.xsd"/>
+ <xsd:import namespace="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" schemaLocation="../eingebunden/PersonDataZMR.xsd"/>
+ <xsd:include schemaLocation="SZRPersonenbindung.xsd"/>
+
+ <xsd:element name="SZREinzelabfrageRequest">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="SZREinzelabfrageInfo"/>
+ <xsd:element ref="base:OrdnungsZahl" minOccurs="0"/>
+ <xsd:element ref="cio:NatuerlichePerson" minOccurs="0"/>
+ <xsd:element ref="cio:PostAdresse" minOccurs="0"/>
+ <xsd:element ref="DokumentSuchdaten" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="SZREinzelabfrageResponse">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="SZREinzelabfrageAnfrage"/>
+ <xsd:element ref="base:Message"/>
+ <xsd:element ref="SZREinzelabfrageErgebnis" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="SZREinzelabfrageAnfrage">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="SZREinzelabfrageInfo"/>
+ <xsd:element ref="cio:NatuerlichePerson" minOccurs="0"/>
+ <xsd:element ref="cio:PostAdresse" minOccurs="0"/>
+ <xsd:element ref="DokumentSuchdaten" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="SZREinzelabfrageInfo" type="SZREinzelabfrageInfoType"/>
+ <xsd:complexType name="SZREinzelabfrageInfoType">
+ <xsd:annotation>
+ <xsd:documentation>allgemeine Fachliche Informationen für die SZR - Einzelabfrage</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="base:Bezugsfeld"/>
+ <xsd:element ref="base:Behoerdenschluessel" minOccurs="0"/>
+ <xsd:element name="ListePersonenWennNichtEindeutig" type="xsd:boolean" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="SZREinzelabfrageErgebnis">
+ <xsd:complexType>
+ <xsd:choice>
+ <xsd:sequence>
+ <xsd:element ref="base:OrdnungsZahl"/>
+ <xsd:element ref="base:Register"/>
+ <xsd:element name="PersonHistorisch" type="xsd:boolean"/>
+ </xsd:sequence>
+ <xsd:sequence>
+ <xsd:element ref="SZRPersonenbindungErgebnis" maxOccurs="10"/>
+ </xsd:sequence>
+ </xsd:choice>
+ </xsd:complexType>
+ </xsd:element>
+
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/SZRPersonenbindung.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/SZRPersonenbindung.xsd
new file mode 100644
index 00000000..81a836d6
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/SZRPersonenbindung.xsd
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: SZRPersonenbindung.xsd
+Zweck: Definiert Datentypen für die Personenbindungs-Suche Anfrage des Stammzahlenregisters ins ZMR
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2009-10-27 teo: SZR-Verordnung 2009
+2008-11-12 teo: +ERnPEintragWennNotwendig, SZRPersonenbindungErgebnis als Array für Ergebnisliste
+2006-03-21 tsch: Ordnungszahl hinzugefügt
+2004-09-09 tsch: Erstellung
+-->
+
+<xsd:schema xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:cio="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+ targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../eingebunden/EingebundenProxy.xsd"/>
+ <xsd:import namespace="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" schemaLocation="../eingebunden/PersonDataZMR.xsd"/>
+ <xsd:include schemaLocation="../zmr/entities/Reisedokument.xsd"/>
+
+ <xsd:element name="SZRPersonenbindungRequest">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="SZRPersonenbindungInfo"/>
+ <xsd:element ref="base:OrdnungsZahl" minOccurs="0"/>
+ <xsd:element ref="cio:NatuerlichePerson" minOccurs="0"/>
+ <xsd:element ref="cio:PostAdresse" minOccurs="0"/>
+ <xsd:element ref="DokumentSuchdaten" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="SZRPersonenbindungResponse">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="SZRPersonenbindungAnfrage"/>
+ <xsd:element ref="base:Message"/>
+ <xsd:element ref="SZRPersonenbindungErgebnis" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="SZRPersonenbindungAnfrage">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="SZRPersonenbindungInfo"/>
+ <xsd:element ref="cio:NatuerlichePerson" minOccurs="0"/>
+ <xsd:element ref="cio:PostAdresse" minOccurs="0"/>
+ <xsd:element ref="DokumentSuchdaten" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="SZRPersonenbindungInfo" type="SZRPersonenbindungInfoType"/>
+ <xsd:complexType name="SZRPersonenbindungInfoType">
+ <xsd:annotation>
+ <xsd:documentation>allgemeine Fachliche Informationen für die Personenbindungsanfrage</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="base:Bezugsfeld"/>
+ <xsd:element ref="base:Behoerdenschluessel" minOccurs="0"/>
+ <xsd:element name="ERnPEintragBeiBedarf" type="xsd:boolean" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="SZRPersonenbindungErgebnis">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="cio:PersonenDaten"/>
+ <xsd:element ref="base:Register"/>
+ <xsd:element ref="base:Adressschluessel" minOccurs="0"/>
+ <xsd:element name="WohnsitzHistorisch" type="xsd:boolean"/>
+ <xsd:element name="AuskunftssperreGesetzt" type="xsd:boolean"/>
+ <xsd:element name="ERnPEintragAngelegt" type="xsd:boolean" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/SZRPersonensuche.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/SZRPersonensuche.xsd
new file mode 100644
index 00000000..7e1050e5
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/SZRPersonensuche.xsd
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: SZRPersonensuche.xsd
+Zweck: Definiert Datentypen für die Personensuche - Abfrage des Stammzahlenregisters ins ZMR
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2006-03-21 tsch: Ordnungszahl hinzugefügt
+2004-09-09 tsch: Erstellung
+-->
+
+<xsd:schema xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:cio="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+ targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../eingebunden/EingebundenProxy.xsd"/>
+ <xsd:import namespace="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" schemaLocation="../eingebunden/PersonDataZMR.xsd"/>
+ <xsd:include schemaLocation="SZRPersonenbindung.xsd"/>
+
+ <xsd:element name="SZRPersonensucheRequest">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="SZRPersonensucheInfo"/>
+ <xsd:element ref="base:OrdnungsZahl" minOccurs="0"/>
+ <xsd:element ref="cio:NatuerlichePerson" minOccurs="0"/>
+ <xsd:element ref="cio:PostAdresse" minOccurs="0"/>
+ <xsd:element ref="DokumentSuchdaten" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="SZRPersonensucheResponse">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="SZRPersonensucheAnfrage"/>
+ <xsd:element ref="base:Message"/>
+ <xsd:element ref="SZRPersonensucheErgebnis" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="SZRPersonensucheAnfrage">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="SZRPersonensucheInfo"/>
+ <xsd:element ref="cio:NatuerlichePerson" minOccurs="0"/>
+ <xsd:element ref="cio:PostAdresse" minOccurs="0"/>
+ <xsd:element ref="DokumentSuchdaten" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="SZRPersonensucheInfo" type="SZRPersonensucheInfoType"/>
+ <xsd:complexType name="SZRPersonensucheInfoType">
+ <xsd:annotation>
+ <xsd:documentation>allgemeine Fachliche Informationen für die SZR - Personensuche</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="base:Bezugsfeld"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="SZRPersonensucheErgebnis">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="base:GefundeneSaetze"/>
+ <xsd:element ref="base:OrdnungsZahl" minOccurs="1" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/SZRSammelabfrage.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/SZRSammelabfrage.xsd
new file mode 100644
index 00000000..0608fa38
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/SZRSammelabfrage.xsd
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: SZRSammelabfrage.xsd
+Zweck: Definiert Datentypen für Sammelrequests des Stammzahlenregisters ins ZMR
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2006-03-21 tsch: Erstellung
+-->
+
+<xsd:schema xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:cio="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+ targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:include schemaLocation="../zmr/SZRPersonenbindung.xsd"/>
+ <xsd:include schemaLocation="../zmr/SZREinzelabfrage.xsd"/>
+ <xsd:include schemaLocation="../zmr/SZRPersonensuche.xsd"/>
+
+ <xsd:element name="SZRSammelRequest">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="Item" minOccurs="0" maxOccurs="unbounded">
+ <xsd:complexType>
+ <xsd:choice>
+ <xsd:element ref="SZRPersonenbindungRequest"/>
+ <xsd:element ref="SZREinzelabfrageRequest"/>
+ <xsd:element ref="SZRPersonensucheRequest"/>
+ </xsd:choice>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="SZRSammelResponse">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="Item" minOccurs="0" maxOccurs="unbounded">
+ <xsd:complexType>
+ <xsd:choice>
+ <xsd:element ref="SZRPersonenbindungResponse"/>
+ <xsd:element ref="SZREinzelabfrageResponse"/>
+ <xsd:element ref="SZRPersonensucheResponse"/>
+ </xsd:choice>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Sperrliste.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Sperrliste.xsd
new file mode 100644
index 00000000..624919ff
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Sperrliste.xsd
@@ -0,0 +1,129 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: Adresssperrliste
+Zweck: Definiert Requests/Responses zum Lesen/Erfassen/Löschen von Adressen, an denen eine
+ Wohnsitzanmeldung nicht erlaubt ist.
+Author(s): Richie Mayrhofer, ZMR
+-->
+
+<xsd:schema targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:cio="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+ xmlns:dsig="http://www.w3.org/2000/09/xmldsig#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:include schemaLocation="../zmr/entities/Meldung.xsd"/>
+ <xsd:include schemaLocation="../zmr/entities/Person.xsd"/>
+ <xsd:include schemaLocation="../zmr/WohnsitzUmmelden.xsd"/>
+
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../eingebunden/EingebundenProxy.xsd"/>
+ <xsd:import namespace="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" schemaLocation="../eingebunden/PersonDataZMR.xsd"/>
+
+ <xsd:element name="SperrlisteRequest">
+ <xsd:annotation>
+ <xsd:documentation>Auflisten der gesperrten Adressen für die angegebene Gemeinde</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="cio:Gemeindekennziffer"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="SperrlisteResponse">
+ <xsd:annotation>
+ <xsd:documentation>Response der Personensuche im ZMR. Geliefert werden die ID-Daten sowie alle Staatsangehoerigkeiten</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="base:Message"/>
+ <xsd:element ref="SperradresseErgebnis" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="SperrlisteAnlegenRequest">
+ <xsd:annotation>
+ <xsd:documentation>Anlegen einer neuen Adressen für die angegebene Gemeinde</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="Sperradresse" minOccurs="1" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="SperrlisteUpdateResponse">
+ <xsd:annotation>
+ <xsd:documentation>Message fuer das Update einer Sperradresse</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="base:Message"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="SperrlisteLoeschenRequest">
+ <xsd:annotation>
+ <xsd:documentation>Loeschen von Sperradressen</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence minOccurs="1" maxOccurs="unbounded">
+ <xsd:element ref="SperradresseId"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="SperradresseId">
+ <xsd:annotation>
+ <xsd:documentation>Id der Sperradresse</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="EntityId" type="xsd:long"/>
+ <xsd:element ref="base:LetzteAenderung"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="SperradresseErgebnis">
+ <xsd:annotation>
+ <xsd:documentation>gespeicherte Sperradresse</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="EntityId" type="xsd:long"/>
+ <xsd:element ref="base:LetzteAenderung"/>
+ <xsd:element ref="Sperradresse"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="Sperradresse">
+ <xsd:annotation>
+ <xsd:documentation>Adresse</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="cio:Postleitzahl"/>
+ <xsd:element ref="cio:Gemeinde"/>
+ <xsd:element ref="cio:Gemeindekennziffer"/>
+ <xsd:element ref="cio:Ortschaft" minOccurs="0"/>
+ <xsd:element ref="cio:Strassenname"/>
+ <xsd:element name="Hausnummer" type="xsd:string" minOccurs="0"/>
+ <xsd:element name="Stiege" type="xsd:string" minOccurs="0"/>
+ <xsd:element name="Tuer" type="xsd:string" minOccurs="0"/>
+ <xsd:element ref="AdressRegisterEintrag" minOccurs="1"/>
+ <xsd:element ref="cio:Nutzungseinheitlaufnummer" minOccurs="0"/>
+ <xsd:element ref="base:OKZ" minOccurs="0"/>
+ <xsd:element ref="base:SKZ" minOccurs="0"/>
+ <xsd:element ref="base:Gebaeudeunterscheidung" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Storno.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Storno.xsd
new file mode 100644
index 00000000..50b6f1f4
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Storno.xsd
@@ -0,0 +1,146 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: Storno.xsd
+Zweck: Definiert Datentypen für den Usecase "Person und/oder Wohnsitz Stornieren" im ZMR
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2010-04-16 teo: ZMR-1397: Anzeige von Details in der Storno Voransicht (Personenstorno)
+2009-07-23 teo: Mehrfachstorno / Undo
+2004-09-27 tsch: Erstellt
+-->
+
+<xsd:schema targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:cio="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../eingebunden/EingebundenProxy.xsd"/>
+ <xsd:include schemaLocation="Personensuche.xsd"/>
+
+ <xsd:element name="StornoDarstellenRequest">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="StornoModus" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ Über den Storno-Modus kann gesteuert werden, ob
+ der Storno normal durchgeführt werden soll, oder
+ zb. ob der letzte Storno rückgängig gemacht werden soll.
+ Fehlt der Storno-Modus wird das Storno normal
+ durchgeführt.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element ref="PersonReferenz"/>
+ <xsd:element ref="MeldungReferenz" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ Falls eine bestimmte Meldung storniert werden soll,
+ müssen hier ihre Referenzdaten geschickt werden.
+ Wird nur die Personreferenz geschickt, wird die Person storniert
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="StornoDarstellenResponse">
+ <xsd:complexType>
+ <xsd:annotation>
+ <xsd:documentation>Stellt den Stornovorgang für den User dar</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="base:Message"/>
+ <xsd:sequence minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ Für jede in den Storno involvierte Person wird ein Element StornoVergleich geliefert.
+ Hier wird der Person-Gesamtdatensatz vor und nach dem Storno dargestellt.
+ Auch wenn aussschließlich Meldedaten vom Storno betroffen sind, wird die gesamte Person geliefert.
+ </xsd:documentation>
+ </xsd:annotation>
+ <xsd:element name="StornoVergleich" type="StornoVergleichType" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:complexType name="StornoVergleichType">
+ <xsd:sequence>
+ <xsd:element name="PersonSatzVorStorno" type="PersonErgebnisSatzType"/>
+ <xsd:element name="PersonSatzNachStorno" type="PersonErgebnisSatzType" minOccurs="0"/>
+ <xsd:element name="WeitereBetroffenePerson" type="base:ZMRZahlType" minOccurs="0" maxOccurs="unbounded">
+ <xsd:annotation>
+ <xsd:documentation>
+ Bei einem Storno kann vorkommen, dass mehrere Personen involviert sind.
+ Zum Beispiel bei einem Kit-Fall. Um davor zu warnen, wird hier explizit
+ eine Liste von ZMR-Zahlen geliefert, die Personen anzeigen, bei denen das
+ Storno ebenfalls eine Änderung bewirken würde.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="StornoRequest">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="StornoModus" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ Über den Storno-Modus kann gesteuert werden, ob
+ der Storno normal durchgeführt werden soll, oder
+ zb. ob der letzte Storno rückgängig gemacht werden soll.
+ Fehlt der Storno-Modus wird das Storno normal
+ durchgeführt.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element ref="PersonReferenz"/>
+ <xsd:element ref="MeldungReferenz" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>
+ Falls eine bestimmte Meldung storniert werden soll,
+ müssen hier ihre Referenzdaten geschickt werden.
+ Wird nur die Personreferenz geschickt, wird die Person storniert
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="StornoResponse">
+ <xsd:complexType>
+ <xsd:annotation>
+ <xsd:documentation>Server-Antwort des Storno-Vorgangs</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="base:Message"/>
+ <xsd:element name="PersonSatzNachStorno" type="PersonErgebnisSatzType" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="StornoModus">
+ <xsd:annotation>
+ <xsd:documentation>
+ Stellt Steuerungsmöglichkeiten für den Storno zur Verfügung.
+ zb. normales Storno, letztes Storno rückgängig machen (Storno vom Storno)
+ </xsd:documentation>
+ </xsd:annotation>
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="NORMAL"/>
+ <xsd:enumeration value="RUECKGAENGIG"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/SzrAbfrage.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/SzrAbfrage.xsd
new file mode 100644
index 00000000..1e8261ab
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/SzrAbfrage.xsd
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsd:schema xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:cio="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+ targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified"
+ version="1.0">
+
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../eingebunden/EingebundenProxy.xsd" />
+ <xsd:import namespace="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" schemaLocation="../eingebunden/PersonDataZMR.xsd" />
+ <xsd:include schemaLocation="../zmr/entities/Reisedokument.xsd" />
+
+ <xsd:element name="SzrAbfrageRequest">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="Art" type="AbfrageArt" />
+ <xsd:element name="SzrTransactionId" type="xsd:string" />
+ <xsd:element ref="cio:NatuerlichePerson" minOccurs="0" />
+ <xsd:element ref="cio:PostAdresse" minOccurs="0" />
+ <xsd:element ref="DokumentSuchdaten" minOccurs="0" />
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:simpleType name="AbfrageArt">
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="EinzelMitList" />
+ <xsd:enumeration value="EinzelOhneList" />
+ <xsd:enumeration value="Kombi" />
+ <xsd:enumeration value="Persbin" />
+ <xsd:enumeration value="Suche" />
+ </xsd:restriction>
+ </xsd:simpleType>
+
+ <xsd:element name="SzrAbfrageResponse">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="base:Message" />
+ <xsd:element ref="SzrAbfrageErgebnis" minOccurs="0" maxOccurs="unbounded" />
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="SzrAbfrageErgebnis">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="cio:PersonenDaten" />
+ <xsd:element ref="base:Register" />
+ <xsd:element name="Basiszahl" type="xsd:string" />
+ <xsd:element ref="base:Adressschluessel" minOccurs="0" />
+ <xsd:element name="WohnsitzHistorisch" type="xsd:boolean" minOccurs="0" />
+ <xsd:element name="AuskunftssperreGesetzt" type="xsd:boolean" minOccurs="0" />
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/TechnischeAnsicht.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/TechnischeAnsicht.xsd
new file mode 100644
index 00000000..a8d09153
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/TechnischeAnsicht.xsd
@@ -0,0 +1,132 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: TechnischeAnsicht.xsd
+Zweck: Definiert Datentypen für die technische Ansicht eines Personensatzes mit Meldungen
+Author(s): Ehrenmüller Oliver, ZMR-SU
+
+Aenderungshistorie:
+2009-10-27 mp: Schnittstelle überarbeitet, Person und Meldung getrennt
+2009-08-24 mp: Bei TechnischeAnsichtInfo minOccurs=0 gesetzt
+2009-08-19 teo: Erstellung
+-->
+
+<xsd:schema xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:cio="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+ targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../eingebunden/EingebundenProxy.xsd"/>
+ <xsd:import namespace="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" schemaLocation="../eingebunden/PersonDataZMR.xsd"/>
+ <xsd:include schemaLocation="../zmr/entities/Person.xsd"/>
+ <xsd:include schemaLocation="../zmr/entities/Meldung.xsd"/>
+
+ <xsd:element name="TechnischeAnsichtRequest">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="TechnischeAnsichtInfo" minOccurs="0"/>
+ <xsd:element ref="PersonReferenz"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="TechnischeAnsichtResponse">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="TechnischeAnsichtAnfrage"/>
+ <xsd:element ref="base:Message"/>
+ <xsd:element ref="TechnischeAnsichtErgebnisPerson"/>
+ <xsd:element ref="TechnischeAnsichtErgebnisMeldung"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="TechnischeAnsichtAnfrage">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="TechnischeAnsichtInfo" minOccurs="0"/>
+ <xsd:element ref="PersonReferenz"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="TechnischeAnsichtInfo" type="TechnischeAnsichtInfoType"/>
+ <xsd:complexType name="TechnischeAnsichtInfoType">
+ <xsd:annotation>
+ <xsd:documentation>allgemeine Fachliche Informationen für die Abfrage zur technischen Ansicht</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="TechnischeAnsichtErgebnisPerson">
+ <xsd:complexType>
+ <xsd:annotation>
+ <xsd:documentation>Enthält alle Personenzustände (für eine Person) zu einem bestimmten techn. Änderungszeitpunkt.</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="TechnischeAnsichtPerson" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="TechnischeAnsichtErgebnisMeldung">
+ <xsd:complexType>
+ <xsd:annotation>
+ <xsd:documentation>Enthält alle Meldungszustände (für eine Meldung) zu einem bestimmten techn. Änderungszeitpunkt.</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="TechnischeAnsichtMeldung" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="TechnischeAnsichtPerson">
+ <xsd:complexType>
+ <xsd:annotation>
+ <xsd:documentation>Liste der technischen Zustände einer Person zu einem Zeitpunkt.</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element name="TechnischerZeitpunkt" type="base:TimestampType"/>
+ <xsd:element ref="PersonErgebnisTechnisch" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="TechnischeAnsichtMeldung">
+ <xsd:complexType>
+ <xsd:annotation>
+ <xsd:documentation>Liste der technischen Zustände einer Meldung</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element name="TechnischerZeitpunkt" type="base:TimestampType"/>
+ <xsd:element ref="MeldungErgebnisTechnisch" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="PersonErgebnisTechnisch">
+ <xsd:complexType>
+ <xsd:annotation>
+ <xsd:documentation>komplette Personendaten mit Information für den technischen Stichzeitpunkt</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="PersonErgebnis"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="MeldungErgebnisTechnisch">
+ <xsd:complexType>
+ <xsd:annotation>
+ <xsd:documentation>komplette Meldung mit Information für den technischen Stichzeitpunkt</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="MeldungErgebnis"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Ummeldeserviceabfrage.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Ummeldeserviceabfrage.xsd
new file mode 100644
index 00000000..8f459931
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Ummeldeserviceabfrage.xsd
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: Ummeldeserviceabfrage.xsd
+Zweck: Definiert Datentypen für die Abfrage für Ummeldeservices im ZMR
+Author(s): Ehrenmüller Oliver, ZMR-SU
+
+Aenderungshistorie:
+2009-05-07 teo: Erstellung
+-->
+
+<xsd:schema xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:cio="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+ targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../eingebunden/EingebundenProxy.xsd"/>
+ <xsd:import namespace="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" schemaLocation="../eingebunden/PersonDataZMR.xsd"/>
+
+
+ <xsd:element name="UmmSrvAbfrageRequest">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="UmmSrvAbfrageInfo"/>
+ <xsd:element ref="cio:NatuerlichePerson"/>
+ <xsd:element ref="cio:PostAdresse" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="UmmSrvAbfrageResponse">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="UmmSrvAbfrageAnfrage"/>
+ <xsd:element ref="base:Message"/>
+ <xsd:element ref="UmmSrvAbfrageErgebnis" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="UmmSrvAbfrageAnfrage">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="UmmSrvAbfrageInfo"/>
+ <xsd:element ref="cio:NatuerlichePerson"/>
+ <xsd:element ref="cio:PostAdresse" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="UmmSrvAbfrageInfo" type="UmmSrvAbfrageInfoType"/>
+ <xsd:complexType name="UmmSrvAbfrageInfoType">
+ <xsd:annotation>
+ <xsd:documentation>allgemeine Fachliche Informationen für die BP-Abfrage</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element name="Pin">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:minLength value="6"/>
+ <xsd:maxLength value="6"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+
+
+ <xsd:element name="UmmSrvAbfrageErgebnis">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="cio:NatuerlichePerson" minOccurs="0"/>
+ <xsd:element ref="cio:PostAdresse" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/WehrpflichtigeAbfragen.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/WehrpflichtigeAbfragen.xsd
new file mode 100644
index 00000000..9a5e6e1a
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/WehrpflichtigeAbfragen.xsd
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: WehrpflichtigeAbfragen.xsd
+Zweck: Definiert Datentypen für die Wehrpflichtigenabfrage im ZMR
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2004-09-28 tsch: Erstellung
+-->
+
+<xsd:schema xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:cio="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+ targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../eingebunden/EingebundenProxy.xsd"/>
+ <xsd:import namespace="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" schemaLocation="../eingebunden/PersonDataZMR.xsd"/>
+ <xsd:include schemaLocation="Personenabfrage.xsd"/>
+
+ <xsd:element name="WehrpflichtigeAbfragenRequest">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="WehrpflichtigeAbfragenInfo"/>
+ <xsd:element ref="cio:Bundesland"/>
+ <xsd:element name="GeburtsdatumVon" type="base:TimestampType"/>
+ <xsd:element name="GeburtsdatumBis" type="base:TimestampType"/>
+ <xsd:element ref="cio:Familienname"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="WehrpflichtigeAbfragenResponse">
+ <xsd:annotation>
+ <xsd:documentation>
+ Es wir entweder das Feld PDFDaten (Anforderung als Druck) mit allen gefundenen Datensätzen,
+ oder WehrpflichtigeAbfragenErgebnis mit der aktuell geblätterten Seite geliefert.
+ </xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="WehrpflichtigeAbfragenAnfrage"/>
+ <xsd:element ref="base:Message"/>
+ <xsd:element ref="WehrpflichtigeAbfragenErgebnis" minOccurs="0"/>
+ <xsd:element name="PDFDaten" type="xsd:base64Binary" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="WehrpflichtigeAbfragenAnfrage">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="WehrpflichtigeAbfragenInfo"/>
+ <xsd:element ref="cio:Bundesland"/>
+ <xsd:element name="GeburtsdatumVon" type="base:TimestampType"/>
+ <xsd:element name="GeburtsdatumBis" type="base:TimestampType"/>
+ <xsd:element ref="cio:Familienname"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="WehrpflichtigeAbfragenInfo" type="WehrpflichtigeAbfragenInfoType"/>
+ <xsd:complexType name="WehrpflichtigeAbfragenInfoType">
+ <xsd:annotation>
+ <xsd:documentation>allgemeine Fachliche Informationen für die Wehrpflichtigenabfrage</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element name="AlsDruck" type="xsd:boolean"/>
+ <xsd:element ref="base:AnzahlSaetze" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="WehrpflichtigeAbfragenErgebnis" type="WehrpflichtigeAbfragenErgebnisType"/>
+ <xsd:complexType name="WehrpflichtigeAbfragenErgebnisType">
+ <xsd:annotation>
+ <xsd:documentation>Enthält je einen 'PersonErgebnisSatz' pro gefundener Person. Wird keine Person gefunden, befindet sich eine entprechende Text-Message in 'base:Message'</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="base:GefundeneSaetze">
+ <xsd:annotation>
+ <xsd:documentation>Gesamtanzahl der in der Datenbank gefundenen Personen</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element ref="base:SaetzeVon">
+ <xsd:annotation>
+ <xsd:documentation>Beginn-Index dieser Ergebnisliste im Gesamtergebnis (bei Blaettern); Start mit 0</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element ref="base:SaetzeBis">
+ <xsd:annotation>
+ <xsd:documentation>Ende-Index dieser Ergebnisliste im Gesamtergebnis (bei Blaettern)</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element name="PersonErgebnisSatz" type="PAbfrageErgebnisSatzType" minOccurs="1" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/WohnsitzAbmelden.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/WohnsitzAbmelden.xsd
new file mode 100644
index 00000000..5d3b7cc2
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/WohnsitzAbmelden.xsd
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: WohnsitzAbmelden.xsd
+Zweck: Definiert Datentypen für den Usecase "Wohnsitz abmelden" im ZMR
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2004-06-24 tsch: WohnsitzAbmeldenMsg entfernt
+2004-01-28 tsch: Gesamtdatensatz der neuen Meldung in der Response-Message
+-->
+
+<xsd:schema targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../eingebunden/EingebundenProxy.xsd"/>
+ <xsd:include schemaLocation="../zmr/entities/Person.xsd"/>
+ <xsd:include schemaLocation="../zmr/entities/Meldung.xsd"/>
+ <xsd:include schemaLocation="../zmr/entities/Behoerdenattribute.xsd"/>
+
+ <xsd:element name="WohnsitzAbmeldenRequest">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="WohnsitzAbmeldenInfo"/>
+ <xsd:element ref="PersonReferenz"/>
+ <xsd:element ref="MeldungReferenz"/>
+ <xsd:element name="BehoerdenattributeSetzen" type="BehoerdenattributeSetzenType" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="WohnsitzAbmeldenResponse">
+ <xsd:complexType>
+ <xsd:annotation>
+ <xsd:documentation>Server-Antwort zur Wohnsitzabmeldung</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="base:Message"/>
+ <xsd:sequence minOccurs="0">
+ <xsd:element ref="PersonReferenz"/>
+ <xsd:element ref="MeldungErgebnis">
+ <xsd:annotation>
+ <xsd:documentation>Gesamtdatensatz der abgemeldeten Meldung (mit EntityIDs der Meldung und deren abhängigen Entities)</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ </xsd:sequence>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="WohnsitzAbmeldenInfo" type="WohnsitzAbmeldenInfoType"/>
+ <xsd:complexType name="WohnsitzAbmeldenInfoType">
+ <xsd:annotation>
+ <xsd:documentation>Fachliche Informationen zur Wohnsitzabmeldung</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexContent>
+ <xsd:extension base="base:InfoFachlichType">
+ <xsd:sequence>
+ <xsd:element ref="base:StaatVerzogen" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/WohnsitzAnmelden.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/WohnsitzAnmelden.xsd
new file mode 100644
index 00000000..75670c47
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/WohnsitzAnmelden.xsd
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: WohnsitzAnmelden.xsd
+Zweck: Definiert Datentypen für den Usecase "Wohnsitz anmelden" im ZMR
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2004-06-24 tsch: WohnsitzAnmeldenMsg entfernt
+2004-01-28 tsch: Gesamtdatensatz der abgemeldeten Meldung in der Response-Message
+-->
+
+<xsd:schema targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:cio="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../eingebunden/EingebundenProxy.xsd"/>
+ <xsd:include schemaLocation="../zmr/entities/Person.xsd"/>
+ <xsd:include schemaLocation="../zmr/entities/Meldung.xsd"/>
+
+ <xsd:element name="WohnsitzAnmeldenRequest">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="WohnsitzAnmeldenInfo"/>
+ <xsd:element ref="PersonReferenz"/>
+ <xsd:element ref="MeldungAnlage"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="WohnsitzAnmeldenResponse">
+ <xsd:complexType>
+ <xsd:annotation>
+ <xsd:documentation>Server-Antwort zur Wohnsitzanmeldung</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="base:Message"/>
+ <xsd:sequence minOccurs="0">
+ <xsd:element ref="PersonReferenz"/>
+ <xsd:element ref="MeldungErgebnis">
+ <xsd:annotation>
+ <xsd:documentation>Gesamtdatensatz der angelegten Meldung (mit EntityIDs der Meldung und deren abhängigen Entities)</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ </xsd:sequence>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="WohnsitzAnmeldenInfo" type="WohnsitzAnmeldenInfoType"/>
+
+ <xsd:complexType name="WohnsitzAnmeldenInfoType">
+ <xsd:annotation>
+ <xsd:documentation>allgemeine Fachliche Informationen zur Wohnsitzanmeldung</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexContent>
+ <xsd:extension base="base:InfoFachlichType">
+ <xsd:sequence>
+ <xsd:element ref="base:StaatZugezogen" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/WohnsitzKorrigieren.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/WohnsitzKorrigieren.xsd
new file mode 100644
index 00000000..90153232
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/WohnsitzKorrigieren.xsd
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: WohnsitzKorrigieren.xsd
+Zweck: Definiert Datentypen für den Usecase "Wohnsitz korrigieren" im ZMR
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2004-09-27 tsch: Erstellt
+-->
+
+<xsd:schema targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:cio="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../eingebunden/EingebundenProxy.xsd"/>
+ <xsd:import namespace="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" schemaLocation="../eingebunden/PersonDataZMR.xsd"/>
+ <xsd:include schemaLocation="../zmr/entities/Person.xsd"/>
+ <xsd:include schemaLocation="../zmr/entities/Meldung.xsd"/>
+ <xsd:include schemaLocation="../zmr/entities/Behoerdenattribute.xsd"/>
+ <xsd:include schemaLocation="../zmr/entities/Auskunftssperre.xsd"/>
+
+ <xsd:element name="WohnsitzKorrigierenRequest">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="WohnsitzKorrigierenInfo"/>
+ <xsd:element ref="PersonReferenz"/>
+ <xsd:element ref="MeldungReferenz"/>
+ <xsd:element name="BehoerdenattributeSetzen" type="BehoerdenattributeSetzenType" minOccurs="0"/>
+ <xsd:element ref="AuskunftssperreAenderung" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element ref="AuskunftssperreAnlage" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="WohnsitzKorrigierenResponse">
+ <xsd:complexType>
+ <xsd:annotation>
+ <xsd:documentation>Server-Antwort zur Wohnsitzkorrektur</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="base:Message"/>
+ <xsd:sequence minOccurs="0">
+ <xsd:element ref="PersonReferenz"/>
+ <xsd:element ref="MeldungErgebnis">
+ <xsd:annotation>
+ <xsd:documentation>Gesamtdatensatz der korrigierten Meldung (mit EntityIDs der Meldung und deren abhängigen Entities)</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ </xsd:sequence>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="WohnsitzKorrigierenInfo" type="WohnsitzKorrigierenInfoType"/>
+ <xsd:complexType name="WohnsitzKorrigierenInfoType">
+ <xsd:annotation>
+ <xsd:documentation>Fachliche Informationen zur Wohnsitzkorrektur</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexContent>
+ <xsd:extension base="base:InfoFachlichType">
+ <xsd:sequence>
+ <xsd:element ref="base:Unterkunftgeber" minOccurs="0"/>
+ <xsd:element ref="cio:Abgabestelle" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/WohnsitzUmmelden.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/WohnsitzUmmelden.xsd
new file mode 100644
index 00000000..48128ade
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/WohnsitzUmmelden.xsd
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: WohnsitzUmmelden.xsd
+Zweck: Definiert Datentypen für den Usecase "Wohnsitz ummelden" im ZMR (siehe Messages.xsd)
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2009-12-10 mp: Änderungsmöglichkeit d. Unterkunftgebers bei Ummeldung
+2009-08-06 teo: Auskunftssperre auf Meldung
+2004-07-06 tsch: WohnsitzUmmeldenInfo.Von optional
+2004-06-24 tsch: WohnsitzUmmeldenMsg entfernt
+2004-01-28 tsch: Gesamtdatensaetze der involvierten Meldungen in der Response-Message
+2004-01-25 tsch: BehoerdenattributeAendern wird BehoerdenattributeSetzen
+-->
+
+
+<xsd:schema targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../eingebunden/EingebundenProxy.xsd"/>
+ <xsd:include schemaLocation="../zmr/entities/Person.xsd"/>
+ <xsd:include schemaLocation="../zmr/entities/Meldung.xsd"/>
+ <xsd:include schemaLocation="../zmr/entities/Behoerdenattribute.xsd"/>
+ <xsd:include schemaLocation="../zmr/entities/Auskunftssperre.xsd"/>
+
+ <xsd:element name="WohnsitzUmmeldenRequest">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="WohnsitzUmmeldenInfo"/>
+ <xsd:element ref="PersonReferenz"/>
+ <xsd:element name="UMMVorgang1">
+ <xsd:annotation>
+ <xsd:documentation>Referenz auf die erste in den Ummeldevorgang involvierte Meldung (wird entweder umgemeldet, oder abgemeldet), sowie deren evtl. geänderten Behördenattribute</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="MeldungReferenz"/>
+ <xsd:element name="BehoerdenattributeSetzen" type="BehoerdenattributeSetzenType" minOccurs="0"/>
+ <xsd:element ref="AuskunftssperreAenderung" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element ref="AuskunftssperreAnlage" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element ref="base:Unterkunftgeber" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="UMMVorgang2" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>Zweite in den Ummeldevorgang involvierte Meldung (wird entweder umgemeldet, oder angemeldet - entsprechend entweder Referenz oder MeldungAnlage), sowie deren Behördenattribute (bei Ummeldung)</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:choice>
+ <xsd:element ref="MeldungAnlage"/>
+ <xsd:sequence>
+ <xsd:element ref="MeldungReferenz"/>
+ <xsd:element name="BehoerdenattributeSetzen" type="BehoerdenattributeSetzenType" minOccurs="0"/>
+ <xsd:element ref="AuskunftssperreAenderung" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element ref="AuskunftssperreAnlage" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element ref="base:Unterkunftgeber" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:choice>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="WohnsitzUmmeldenResponse">
+ <xsd:annotation>
+ <xsd:documentation>Server-Antwort zur Wohnsitzummeldung</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="base:Message"/>
+ <xsd:sequence minOccurs="0">
+ <xsd:element ref="PersonReferenz"/>
+ <xsd:element name="UMMErgebnis1" type="MeldungErgebnisType">
+ <xsd:annotation>
+ <xsd:documentation>Gesamtdatensatz der umgemeldeten Meldung (mit EntityIDs der Meldung und deren abhängigen Entities)</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element name="UMMErgebnis2" type="MeldungErgebnisType" minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>Gesamtdatensatz der umgemeldeten oder neuen Meldung (mit EntityIDs der Meldung und deren abhängigen Entities)</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ </xsd:sequence>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="WohnsitzUmmeldenInfo" type="WohnsitzUmmeldenInfoType"/>
+ <xsd:complexType name="WohnsitzUmmeldenInfoType">
+ <xsd:annotation>
+ <xsd:documentation>Fachliche Informationen zur Wohnsitzummeldung</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="base:Von" minOccurs="0"/>
+ <xsd:element ref="base:GrundFreitext" minOccurs="0"/>
+ <xsd:element ref="UmmeldungAktion"/>
+ <xsd:choice>
+ <xsd:element ref="base:StaatZugezogen" minOccurs="0"/>
+ <xsd:element ref="base:StaatVerzogen" minOccurs="0"/>
+ </xsd:choice>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="UmmeldungAktion">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="HWS_NWS_HWS"/>
+ <xsd:enumeration value="HWS_NWS"/>
+ <xsd:enumeration value="HWS_ABM_HWS"/>
+ <xsd:enumeration value="NWS_HWS"/>
+ <xsd:enumeration value="HWS_ABM_NWS_HWS"/>
+ <xsd:enumeration value="HWS_NWS_NWS_HWS"/>
+ <xsd:enumeration value="NWS_ABM_NWS"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/ZMRDatenauszug.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/ZMRDatenauszug.xsd
new file mode 100644
index 00000000..cdab5654
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/ZMRDatenauszug.xsd
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: ZMRDatenauszug.xsd
+Zweck: Definiert Datentypen für den Datenabgleich externer Partner mit dem ZMR.
+ Die Partner übermitteln eine csv-Datei mit Suchbegriffen, diese xsd definiert die Struktur des Antwort-XML.
+Author(s): Richard Mayrhofer
+
+-->
+
+<xsd:schema targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:cio="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:include schemaLocation="../zmr/Personensuche.xsd"/>
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../eingebunden/EingebundenProxy.xsd"/>
+ <xsd:import namespace="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" schemaLocation="../eingebunden/PersonDataZMR.xsd"/>
+
+ <xsd:element name="ZMRDatenauszug">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="cio:Identification" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element ref="Personendaten" minOccurs="1"/>
+ <xsd:element ref="Meldedaten" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/ZMRProxy.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/ZMRProxy.xsd
new file mode 100644
index 00000000..bb0583ef
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/ZMRProxy.xsd
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Name: ZMRProxy.xsd
+Zweck: Fasst alle ZMR-Vorgangs XSD-Files zusammen
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2011-09-05 teo: Änderungsdienst ZWR (PN126)
+2010-03-08 teo: Historische Meldungskorrektur
+2010-02-01 teo: MeldebestätigungenAnforderung hinzugefügt
+2009-08-24 mp: TechnischeAnsicht hinzugefügt
+2009-08-06 teo: Auskunftssperre ändern hinzugefügt
+2009-05-07 teo: Ummeldeserviceabfrage hinzugefügt
+2009-01-23 teo: GISSuche hinzugefügt
+2006-11-06 tsch: ORFGISAnforderung hinzugefügt
+2006-03-21 tsch: SZRSammelabfrage hinzugefügt
+2005-01-14 tsch: Aviso aktivieren entfernt, Gleichstzungtabelle Warten hinzugefügt
+2004-11-22 tsch: Gerichtskommissaerabfrage hinzugefügt
+2004-09-28 tsch: Wehrfplichtigenanfrage, ablaufende Auskunfssperren-Suche hinzugefügt
+2004-09-27 tsch: Storno/Korrektur hinzugefügt
+2004-09-09 tsch: SZR-Vorgänge sowie Person trennen/zusammenführen hinzugefügt
+2004-08-24 tsch: GISAdressabfrage hinzugefügt
+2004-08-17 tsch: Erstellung
+-->
+
+<xsd:schema xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:include schemaLocation="../zmr/Personensuche.xsd"/>
+ <xsd:include schemaLocation="../zmr/PersonAnlegen.xsd"/>
+ <xsd:include schemaLocation="../zmr/PersonAendern.xsd"/>
+ <xsd:include schemaLocation="../zmr/WohnsitzAnmelden.xsd"/>
+ <xsd:include schemaLocation="../zmr/WohnsitzAbmelden.xsd"/>
+ <xsd:include schemaLocation="../zmr/WohnsitzUmmelden.xsd"/>
+ <xsd:include schemaLocation="../zmr/Adresssuche.xsd"/>
+ <xsd:include schemaLocation="../zmr/Meldeauskunft.xsd"/>
+ <xsd:include schemaLocation="../zmr/BKMeldeauskunft.xsd"/>
+ <xsd:include schemaLocation="../zmr/Meldebestaetigung.xsd"/>
+ <xsd:include schemaLocation="../zmr/Avisosuche.xsd"/>
+ <xsd:include schemaLocation="../zmr/AvisoAnlegen.xsd"/>
+ <xsd:include schemaLocation="../zmr/AvisoAendern.xsd"/>
+ <xsd:include schemaLocation="../zmr/AvisoFreigeben.xsd"/>
+ <xsd:include schemaLocation="../zmr/Datenabgleich.xsd"/>
+ <xsd:include schemaLocation="../zmr/Behoerdenabfrage.xsd"/>
+ <xsd:include schemaLocation="../zmr/Businesspartnerabfrage.xsd"/>
+ <xsd:include schemaLocation="../zmr/BusinesspartnerabfrageErweitert.xsd"/>
+ <xsd:include schemaLocation="../zmr/BusinesspartnerAnfrage.xsd"/>
+ <xsd:include schemaLocation="../zmr/Bestandsaenderungen.xsd"/>
+ <xsd:include schemaLocation="../zmr/Fremdenabfrage.xsd"/>
+ <xsd:include schemaLocation="../zmr/Hauseigentuemerabfrage.xsd"/>
+ <xsd:include schemaLocation="../zmr/IAPPersonenabfrage.xsd"/>
+ <xsd:include schemaLocation="../zmr/Personenabfrage.xsd"/>
+ <xsd:include schemaLocation="../zmr/Zuzugsbestaetigung.xsd"/>
+ <xsd:include schemaLocation="../zmr/GISAdressabfrage.xsd"/>
+ <xsd:include schemaLocation="../zmr/PersonZusammenfuehren.xsd"/>
+ <xsd:include schemaLocation="../zmr/PersonTrennen.xsd"/>
+ <xsd:include schemaLocation="../zmr/SZREinzelabfrage.xsd"/>
+ <xsd:include schemaLocation="../zmr/SZRPersonenbindung.xsd"/>
+ <xsd:include schemaLocation="../zmr/SzrAbfrage.xsd"/>
+ <xsd:include schemaLocation="../zmr/SZRPersonensuche.xsd"/>
+ <xsd:include schemaLocation="../zmr/SZRSammelabfrage.xsd"/>
+ <xsd:include schemaLocation="../zmr/BehoerdenattributeAendern.xsd"/>
+ <xsd:include schemaLocation="../zmr/Storno.xsd"/>
+ <xsd:include schemaLocation="../zmr/PersonKorrigieren.xsd"/>
+ <xsd:include schemaLocation="../zmr/WohnsitzKorrigieren.xsd"/>
+ <xsd:include schemaLocation="../zmr/WehrpflichtigeAbfragen.xsd"/>
+ <xsd:include schemaLocation="../zmr/AblaufendeAuskunftssperrenSuche.xsd"/>
+ <xsd:include schemaLocation="../zmr/Gerichtskommissaerabfrage.xsd"/>
+ <xsd:include schemaLocation="../zmr/ObjektsucheSteuerfahndung.xsd"/>
+ <xsd:include schemaLocation="../zmr/Adoption.xsd"/>
+ <xsd:include schemaLocation="../zmr/GleichsetzungstabelleWarten.xsd"/>
+ <xsd:include schemaLocation="../zmr/QKZBearbeiten.xsd"/>
+ <xsd:include schemaLocation="../zmr/QKZAuswertung.xsd"/>
+ <xsd:include schemaLocation="../zmr/BPKPruefung.xsd"/>
+ <xsd:include schemaLocation="../zmr/ORFGISAnforderung.xsd"/>
+ <xsd:include schemaLocation="../zmr/Anwendungsintegration.xsd"/>
+ <xsd:include schemaLocation="../zmr/AnwendungsintegrationWiederholung.xsd"/>
+ <xsd:include schemaLocation="../zmr/Personenlisten.xsd"/>
+ <xsd:include schemaLocation="../zmr/GISSuche.xsd"/>
+ <xsd:include schemaLocation="../zmr/Ummeldeserviceabfrage.xsd"/>
+ <xsd:include schemaLocation="../zmr/AuskunftssperreAendern.xsd"/>
+ <xsd:include schemaLocation="../zmr/TechnischeAnsicht.xsd"/>
+ <xsd:include schemaLocation="../zmr/MeldebestaetigungenAnfordern.xsd"/>
+ <xsd:include schemaLocation="../zmr/MeldungHistKorrigieren.xsd"/>
+ <xsd:include schemaLocation="../zmr/ObjektsucheMindestsicherung.xsd"/>
+ <xsd:include schemaLocation="../zmr/PersonenIndex.xsd"/>
+ <xsd:include schemaLocation="../zmr/PersonExport.xsd"/>
+ <xsd:include schemaLocation="../zmr/ErnpAbfrage.xsd"/>
+ <xsd:include schemaLocation="../zmr/ZMRDatenauszug.xsd"/>
+ <xsd:include schemaLocation="../zmr/ZmrBuergerService.xsd"/>
+ <xsd:include schemaLocation="../zmr/Gemeindeeinstellungen.xsd"/>
+ <xsd:include schemaLocation="../zmr/Sperrliste.xsd"/>
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/ZmrBuergerService.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/ZmrBuergerService.xsd
new file mode 100644
index 00000000..9732778d
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/ZmrBuergerService.xsd
@@ -0,0 +1,373 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: ZmrBuergerService.xsd
+Zweck: Definiert Requests/Responses und Datentypen für die Usecases des ZMR-Buergerservice mit Buergerkarte.
+Author(s): Richie Mayrhofer, ZMR
+-->
+
+<xsd:schema targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:cio="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+ xmlns:dsig="http://www.w3.org/2000/09/xmldsig#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:include schemaLocation="../zmr/entities/Meldung.xsd"/>
+ <xsd:include schemaLocation="../zmr/entities/Person.xsd"/>
+ <xsd:include schemaLocation="../zmr/WohnsitzUmmelden.xsd"/>
+
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../eingebunden/EingebundenProxy.xsd"/>
+ <xsd:import namespace="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" schemaLocation="../eingebunden/PersonDataZMR.xsd"/>
+
+ <xsd:element name="BuergerPersonensucheRequest">
+ <xsd:annotation>
+ <xsd:documentation>Suchkriterien für die Personensuche im ZMR</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="TrackingInfo" minOccurs="0"/>
+ <xsd:element ref="cio:Familienname" minOccurs="1"/>
+ <xsd:element ref="cio:Vorname" minOccurs="1"/>
+ <xsd:element ref="cio:Geburtsdatum" minOccurs="1"/>
+ <xsd:element ref="bpkZP" minOccurs="1"/>
+ <xsd:element ref="base:Stichtag" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="BuergerPersonensucheResponse">
+ <xsd:annotation>
+ <xsd:documentation>Response der Personensuche im ZMR. Geliefert werden die ID-Daten sowie alle Staatsangehoerigkeiten</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="base:Message"/>
+ <xsd:element ref="PersonendatenBuerger" minOccurs="0" maxOccurs="1"/>
+ <xsd:element ref="MeldedatenBuerger" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="BuergerMitbewohnersucheRequest">
+ <xsd:annotation>
+ <xsd:documentation>Suchkriterien für die Mitbewohnersuche im ZMR</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="TrackingInfo" minOccurs="0"/>
+ <xsd:element ref="bpkZP"/>
+ <xsd:element ref="EntityIdPerson"/>
+ <xsd:element ref="EntityIdMeldung"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="BuergerMitbewohnersucheResponse">
+ <xsd:annotation>
+ <xsd:documentation>Response der Mitbewohnersuche im ZMR. Geliefert wird die angefragte Adresse sowie die ID-Daten aller Personen an der Adresse</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="base:Message"/>
+ <xsd:element ref="Suchperson" minOccurs="1" maxOccurs="1"/>
+ <xsd:element ref="MinderjaehrigePerson" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="BuergerWohnsitzAnmeldenRequest">
+ <xsd:annotation>
+ <xsd:documentation>Suchkriterien für die Wohnsitzanmeldung im ZMR. bPK/ZP der </xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="TrackingInfo" minOccurs="0"/>
+ <xsd:element name="Signatur" type="xsd:base64Binary"/>
+ <xsd:element ref="bpkZP"/>
+ <xsd:element ref="cio:Wohnsitzqualitaet"/>
+ <xsd:element ref="Adressinfo"/>
+ <xsd:element ref="AnmeldedatenPerson" minOccurs="1" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="BuergerWohnsitzAbmeldenRequest">
+ <xsd:annotation>
+ <xsd:documentation>Suchkriterien für die Wohnsitzanmeldung im ZMR</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="TrackingInfo" minOccurs="0"/>
+ <xsd:element name="Signatur" type="xsd:base64Binary"/>
+ <xsd:element ref="bpkZP"/>
+ <xsd:element ref="Abmeldedaten" minOccurs="1" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="BuergerWohnsitzUmmeldenRequest">
+ <xsd:annotation>
+ <xsd:documentation>Suchkriterien für die Wohnsitzanmeldung im ZMR</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="TrackingInfo" minOccurs="0"/>
+ <xsd:element name="Signatur" type="xsd:base64Binary"/>
+ <xsd:element ref="bpkZP"/>
+ <xsd:element ref="UmmeldungAktion" />
+ <!-- neue Adresse, leer UmmeldeAktion wenn nicht HWS_ABM_NWS_HWS oder HWS_NWS_NWS_HWS -->
+ <xsd:element ref="AnmeldeAdresse" minOccurs="0" maxOccurs="1"/>
+ <xsd:element ref="Ummeldedaten" minOccurs="1" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="TrackingInfo">
+ <xsd:annotation>
+ <xsd:documentation>Transaction- und UUID des Service Clients</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="TransactionId" type="xsd:string"/>
+ <xsd:element name="UUID" type="xsd:string"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="AnmeldeAdresse">
+ <xsd:annotation>
+ <xsd:documentation>neue Meldung bei HWS_ABM_NWS_HWS und HWS_NWS_NWS_HWS</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="Adressinfo"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="BuergerWohnsitzserviceResponse">
+ <xsd:annotation>
+ <xsd:documentation>Response der Wohnsitzabmeldung im ZMR. Geliefert wird der MessageCode, die Anzahl der an/ab/umgemeldeten Personen und die Meldebestaetigungen</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="base:Message"/>
+ <xsd:element ref="base:AnzahlSaetze"/>
+ <xsd:element name="PDF" type="xsd:base64Binary" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="bpkZP" type="xsd:string"/>
+ <xsd:element name="EntityIdPerson" type="xsd:long"/>
+ <xsd:element name="EntityIdMeldung" type="xsd:long"/>
+
+ <xsd:element name="PersonendatenBuerger">
+ <xsd:annotation>
+ <xsd:documentation>aktuelle Personendaten</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="EntityIdPerson"/>
+ <xsd:element ref="base:LetzteAenderung"/>
+ <xsd:element ref="cio:Familienname"/>
+ <xsd:element ref="cio:Vorname"/>
+ <xsd:element ref="cio:Geburtsdatum"/>
+ <xsd:element ref="cio:Geburtsort"/>
+ <xsd:element ref="cio:Geschlecht"/>
+ <xsd:element ref="Staatsangehoerigkeit" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element ref="bpkZP" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="Staatsangehoerigkeit">
+ <xsd:annotation>
+ <xsd:documentation>Staatsangehoerigkeiten der Person, mindestens eine (ISO-Code3 + Name)</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="cio:Staatscode"/>
+ <xsd:element ref="cio:Staatsname"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="MeldedatenBuerger">
+ <xsd:annotation>
+ <xsd:documentation>aktuelle Meldungen zur Person</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="MeldungKurzinfo"/>
+ <xsd:element ref="Adressinfo"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="MeldungKurzinfo">
+ <xsd:annotation>
+ <xsd:documentation>aktuelle Meldungen zur Person</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="EntityIdMeldung"/>
+ <xsd:element ref="base:LetzteAenderung"/>
+ <xsd:element ref="cio:Wohnsitzqualitaet"/>
+ <xsd:element ref="base:GemeldetVon"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="Adressinfo">
+ <xsd:annotation>
+ <xsd:documentation>Adresse</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="cio:Postleitzahl"/>
+ <xsd:element ref="cio:Gemeinde"/>
+ <xsd:element ref="cio:Gemeindekennziffer"/>
+ <xsd:element ref="cio:Ortschaft" minOccurs="0"/>
+ <xsd:element ref="cio:Strassenname"/>
+ <xsd:element name="Hausnummer" type="xsd:string" minOccurs="0"/>
+ <xsd:element name="Stiege" type="xsd:string" minOccurs="0"/>
+ <xsd:element name="Tuer" type="xsd:string" minOccurs="0"/>
+ <xsd:element ref="AdressRegisterEintrag" minOccurs="0"/>
+ <xsd:element ref="cio:Nutzungseinheitlaufnummer" minOccurs="0"/>
+ <xsd:element ref="base:Unterkunftgeber" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="Suchperson">
+ <xsd:annotation>
+ <xsd:documentation>Personen- und Meldedaten der abfragenden Person</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="PersonendatenBuerger"/>
+ <xsd:element ref="MeldedatenBuerger"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="MinderjaehrigePerson">
+ <xsd:annotation>
+ <xsd:documentation>Personen- und Meldedaten der minderjaehrigen Kinder</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="PersonendatenBuerger"/>
+ <xsd:element ref="MeldungKurzinfo"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="Abmeldedaten">
+ <xsd:annotation>
+ <xsd:documentation>Personen- und Meldedaten fuer eine abzumeldende Person </xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <!-- Id der abzumeldenden Meldung -->
+ <xsd:element ref="Wohnsitz"/>
+ <!-- Id der abzumeldenden Person -->
+ <xsd:element ref="EntityIdPerson"/>
+ <!-- Timestamp letzte Aenderung Person -->
+ <xsd:element ref="base:LetzteAenderung"/>
+ <xsd:element ref="VerzugsstaatIso3" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="Ummeldedaten">
+ <xsd:annotation>
+ <xsd:documentation>Personen- und Meldedaten fuer eine umzumeldende Person </xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <!-- Id der umzumeldenden Person -->
+ <xsd:element ref="UmmeldedatenPerson"/>
+ <!-- Zuzugs- oder Verzugsstaat -->
+ <xsd:choice>
+ <xsd:element ref="ZuzugsstaatIso3" minOccurs="0"/>
+ <xsd:element ref="VerzugsstaatIso3" minOccurs="0"/>
+ </xsd:choice>
+ <!-- alte/bisherige Meldung -->
+ <xsd:element ref="Abmeldung" minOccurs="1"/>
+ <!-- neue/Ziel-Meldung bei Wechsel der WohnsitzQualitaet -->
+ <xsd:element ref="Anmeldung" minOccurs="0" maxOccurs="1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="Abmeldung">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="Wohnsitz"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="Anmeldung">
+ <xsd:annotation>
+ <xsd:documentation>neue Meldung bei HWS_ABM_NWS_HWS und HWS_NWS_NWS_HWS</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="Wohnsitz"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="Wohnsitz">
+ <xsd:annotation>
+ <xsd:documentation>Id der zu aendernden Meldung sowie Datum der letzten Aenderung </xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="EntityIdMeldung"/>
+ <xsd:element ref="base:LetzteAenderung"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="ZuzugsstaatIso3" type="StaatscodeType"/>
+ <xsd:element name="VerzugsstaatIso3" type="StaatscodeType"/>
+
+ <xsd:simpleType name="StaatscodeType">
+ <xsd:restriction base="xsd:string">
+ <xsd:pattern value="[A-Z]{3}"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+
+ <xsd:element name="AnmeldedatenPerson">
+ <xsd:annotation>
+ <xsd:documentation>Zuzugsstaat und Ummeldedaten</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="ZuzugsstaatIso3" minOccurs="0" />
+ <xsd:element ref="UmmeldedatenPerson"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+
+ <xsd:element name="UmmeldedatenPerson">
+ <xsd:annotation>
+ <xsd:documentation>Id der Person und Religionsbekenntnis</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="EntityIdPerson"/>
+ <xsd:element name="Religionsbekenntnis" type="xsd:string"/>
+ <xsd:element ref="base:LetzteAenderung"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Zuzugsbestaetigung.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Zuzugsbestaetigung.xsd
new file mode 100644
index 00000000..d557ae50
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/Zuzugsbestaetigung.xsd
@@ -0,0 +1,105 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: Zuzugsbestaetigung.xsd
+Zweck: Definiert Datentypen für die Zuzugsbetätigungen aus dem ZMR
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2011-09-13 teo: ZMR-1656 Zuzugsbestätigung aufgrund Wahlrechtsänderung anpassen
+2004-08-20 tsch: Kapselung der Zuzugssätze im Element Zuzugsbestaetigung
+2004-08-17 tsch: Erstellung
+-->
+
+<xsd:schema targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:cio="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../eingebunden/EingebundenProxy.xsd"/>
+ <xsd:import namespace="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" schemaLocation="../eingebunden/PersonDataZMR.xsd"/>
+
+ <xsd:element name="ZuzugsbestaetigungRequest">
+ <xsd:annotation>
+ <xsd:documentation>Anfragedaten der Zuzugsbestaetigung</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="ZuzugsbestaetigungInfo"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="ZuzugsbestaetigungResponse">
+ <xsd:annotation>
+ <xsd:documentation>In der Response werden die Anfragedaten aus dem Request und das Abgleichergebnis geliefert.</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="ZuzugsbestaetigungAnfrage"/>
+ <xsd:element ref="base:Message"/>
+ <xsd:element ref="Zuzugsbestaetigung" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="ZuzugsbestaetigungInfo" type="ZuzugsbestaetigungInfoType"/>
+
+ <xsd:complexType name="ZuzugsbestaetigungInfoType">
+ <xsd:sequence>
+ <xsd:element ref="base:GemeindeNr"/>
+ <xsd:element name="ZuzugsbestaetigungVon" type="base:TimestampType"/>
+ <xsd:element name="ZuzugsbestaetigungBis" type="base:TimestampType"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="ZuzugsbestaetigungAnfrage">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="ZuzugsbestaetigungInfo"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="Zuzugsbestaetigung" type="ZuzugsbestaetigungType"/>
+
+ <xsd:complexType name="ZuzugsbestaetigungType">
+ <xsd:sequence>
+ <xsd:element ref="base:GefundeneSaetze">
+ <xsd:annotation>
+ <xsd:documentation>Gesamtanzahl der Zuzugs-Saetze für diese Anfrage</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element ref="base:AnzahlSaetze">
+ <xsd:annotation>
+ <xsd:documentation>Anzahl der im File gelieferten Zuzugs-Saetze</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element ref="ZuzugsbestaetigungSatz" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="ZuzugsbestaetigungSatz" type="ZuzugsbestaetigungSatzType"/>
+ <xsd:complexType name="ZuzugsbestaetigungSatzType">
+ <xsd:sequence>
+ <xsd:element name="ZugezogenPerson" type="ZugezogenPersonType"/>
+ <xsd:element name="ZugezogenAm" type="base:TimestampType"/>
+ <xsd:element name="ZugezogenGemeindeNr" type="base:GemeindeNrType"/>
+ <xsd:element name="ZugezogenGemeinde" type="base:GemeindenameType"/>
+ <xsd:element name="HaftAnschrift" type="cio:PostAdresseTyp" minOccurs="0"/>
+ <xsd:element name="ZuLoeschenAm" type="base:TimestampType" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="ZugezogenPersonType">
+ <xsd:sequence>
+ <xsd:element ref="base:ZMRZahl"/>
+ <xsd:element ref="cio:Familienname"/>
+ <xsd:element ref="cio:Vorname"/>
+ <xsd:element ref="cio:Geburtsdatum"/>
+ </xsd:sequence>
+ </xsd:complexType>
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/entities/AkademischerGrad.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/entities/AkademischerGrad.xsd
new file mode 100644
index 00000000..3ebf0c0a
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/entities/AkademischerGrad.xsd
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: AkademischerGrad.xsd
+Zweck: Definiert Datentypen für die akademischen Grade einer Person im ZMR
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2005-03-01 tsch: Feld AusstellBehoerde optional
+2004-06-20 tsch: Erstellt
+-->
+
+<xsd:schema xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../../eingebunden/EingebundenProxy.xsd"/>
+
+ <xsd:complexType name="AkademischerGradErgebnisType">
+ <xsd:annotation>
+ <xsd:documentation>Suchergebnisse-Struktur akademischer Grade einer Person</xsd:documentation>
+ </xsd:annotation>
+
+ <xsd:sequence>
+ <xsd:element ref="base:EntityErgebnisReferenz"/>
+ <xsd:element ref="base:AkadGradKey"/>
+ <xsd:element ref="base:AkadGradStellung"/>
+ <xsd:element ref="base:AkadGradReihung"/>
+ <xsd:element ref="base:AkadGradLang"/>
+ <xsd:element ref="base:AkadGradKurz"/>
+ <xsd:element ref="base:AusstellDatum" minOccurs="0"/>
+ <xsd:element ref="base:AusstellBehoerde" minOccurs="0"/>
+ <xsd:element ref="base:Ausstellungsstaat"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="AkademischerGradAnlage" type="AkademischerGradAnlageType"/>
+ <xsd:complexType name="AkademischerGradAnlageType">
+ <xsd:annotation>
+ <xsd:documentation>Struktur für Anlagen von akademischen Graden im ZMR</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:choice>
+ <xsd:annotation>
+ <xsd:documentation>
+ Bei Anlage eines offiziellen akademischer Grades muss der AkadGradKey des Grades geschickt werden,
+ die einzelnen Felder (ohne AkadGradKey) sind nur bei Anlage eines "händischen", nicht offiziellen
+ Grades zu befüllen.
+ </xsd:documentation>
+ </xsd:annotation>
+ <xsd:element ref="base:AkadGradKey"/>
+ <xsd:sequence>
+ <xsd:element ref="base:AkadGradStellung"/>
+ <xsd:element ref="base:AkadGradReihung"/>
+ <xsd:element ref="base:AkadGradLang"/>
+ <xsd:element ref="base:AkadGradKurz"/>
+ </xsd:sequence>
+ </xsd:choice>
+ <xsd:element ref="base:AusstellDatum" minOccurs="0"/>
+ <xsd:element ref="base:AusstellBehoerde" minOccurs="0"/>
+ <xsd:element ref="base:Ausstellungsstaat"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="AkademischerGradAenderung" type="AkademischerGradAenderungType"/>
+ <xsd:complexType name="AkademischerGradAenderungType">
+ <xsd:annotation>
+ <xsd:documentation>
+ Struktur für Änderungen von akademischen Graden im ZMR.
+ Die Felder AkadGradLang und AkadGradKurz lassen sich nur bei nicht-offiziellen Graden (kein AkadGradKey) ändern.
+ </xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="base:EntityReferenz"/>
+ <xsd:element ref="base:AkadGradLang" minOccurs="0"/>
+ <xsd:element ref="base:AkadGradKurz" minOccurs="0"/>
+ <xsd:element ref="base:AusstellDatum" minOccurs="0"/>
+ <xsd:element ref="base:AusstellBehoerde" minOccurs="0"/>
+ <xsd:element ref="base:Beendigung"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/entities/Auskunftssperre.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/entities/Auskunftssperre.xsd
new file mode 100644
index 00000000..30dafed3
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/entities/Auskunftssperre.xsd
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: Auskunftssperre.xsd
+Zweck: Definiert Auskunftssperren für ZMR-Entities (Person und Meldung)
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2004-10-27 tsch: Felder bei Änderung optional, Beendigung hinzugefügt
+2004-08-06 tsch: SperrText in AuskunftssperreErgebnisType hinzugefügt
+2004-06-14 tsch: Handling mehrerer Auskunftssperren
+2004-01-22 tsch: Auskunftssperre->AuskunftssperreErgebnisType
+-->
+
+<xsd:schema xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../../eingebunden/EingebundenProxy.xsd"/>
+
+ <xsd:complexType name="AuskunftssperreErgebnisType">
+ <xsd:annotation>
+ <xsd:documentation>Auskunftssperre-Struktur für Suchergebnisse</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="base:EntityErgebnisReferenz"/>
+ <xsd:element ref="SperreVon"/>
+ <xsd:element ref="SperreBis"/>
+ <xsd:element ref="SperrCode"/>
+ <xsd:element ref="SperrText"/>
+ <xsd:element ref="SperrFreitext" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="AuskunftssperreAnlage" type="AuskunftssperreAnlageType"/>
+ <xsd:complexType name="AuskunftssperreAnlageType">
+ <xsd:annotation>
+ <xsd:documentation>Struktur für Anlagen von Auskunftssperren</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="SperreVon"/>
+ <xsd:element ref="SperreBis"/>
+ <xsd:element ref="SperrCode"/>
+ <xsd:element ref="SperrFreitext" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="AuskunftssperreAenderung" type="AuskunftssperreAenderungType"/>
+ <xsd:complexType name="AuskunftssperreAenderungType">
+ <xsd:annotation>
+ <xsd:documentation>Struktur für Änderungen von Auskunftssperren</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="base:EntityReferenz"/>
+ <xsd:element ref="SperreVon" minOccurs="0"/>
+ <xsd:element ref="SperreBis" minOccurs="0"/>
+ <xsd:element ref="SperrCode" minOccurs="0"/>
+ <xsd:element ref="SperrFreitext" minOccurs="0"/>
+ <xsd:element ref="base:Beendigung"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="SperreVon" type="base:TimestampType"/>
+ <xsd:element name="SperreBis" type="base:TimestampType"/>
+
+ <xsd:element name="SperrCode">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="15"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="SperrFreitext">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="240"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="SperrText">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="50"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/entities/Aviso.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/entities/Aviso.xsd
new file mode 100644
index 00000000..dff1d5eb
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/entities/Aviso.xsd
@@ -0,0 +1,176 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: Aviso.xsd
+Zweck: Definiert Datentypen für die Anlage, Aenderung und Suche von Avisi
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2010-06-02 mp: ZMR-1142: AvisoAktenzahl für case-insensitive Suche auf bestimmte Zeichen begrenzt
+2005-01-14 tsch: Adaptionen bei Änderung; Abfragerhythmus entfernt
+2004-11-26 tsch: Erweiterung um Avisotreffer
+2004-04-06 tsch: Erstellung
+-->
+
+<xsd:schema xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:cio="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+ targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:include schemaLocation="../Personenabfrage.xsd"/>
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../../eingebunden/EingebundenProxy.xsd"/>
+ <xsd:import namespace="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" schemaLocation="../../eingebunden/PersonDataZMR.xsd"/>
+
+ <xsd:element name="AvisoReferenz" type="AvisoReferenzType"/>
+ <xsd:complexType name="AvisoReferenzType">
+ <xsd:annotation>
+ <xsd:documentation>Typ für Referenzdaten eines Aviso (immer das aktuellste, das heisst jüngstes 'Von'), mit Avisozahl zur Kontrolle</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="base:Technisch"/>
+ <xsd:element ref="AvisoZahl"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="AvisoErgebnis" type="AvisoErgebnisType"/>
+
+
+ <xsd:complexType name="AvisoErgebnisType">
+ <xsd:annotation>
+ <xsd:documentation>Aviso-Struktur für Suchergebnisse der Avisosuchen</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="base:EntityErgebnisReferenz"/>
+ <xsd:element ref="AvisoZahl"/>
+ <xsd:element ref="AvisoAktenzahl" minOccurs="0"/>
+ <xsd:element ref="base:Behoerdenschluessel"/>
+ <xsd:element ref="base:BehoerdenBezeichnung" minOccurs="0"/>
+
+ <xsd:element ref="ZustaendigeMeldebehoerde"/>
+
+ <xsd:element ref="AvisoStart"/>
+ <xsd:element ref="AvisoEnde"/>
+ <xsd:element ref="AvisoStatus"/>
+
+ <xsd:element ref="AvisoSuchkriterien"/>
+ <xsd:element ref="AvisoSuchdaten"/>
+
+ <xsd:element ref="AvisoTreffer" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="AvisoTreffer" type="AvisoTrefferType"/>
+ <xsd:complexType name="AvisoTrefferType">
+ <xsd:annotation>
+ <xsd:documentation>Struktur für gefundenen Treffer des Aviso im ZMR (ein Treffer repräsentiert eine gefundene Person)</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="AvisoTrefferStatus"/>
+ <xsd:element name="AvisoTrefferAusgeschlossen" type="xsd:boolean"/>
+ <xsd:element name="AvisoTrefferPersonendaten" type="PAbfrageErgebnisSatzType"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="AvisoAnlage" type="AvisoAnlageType"/>
+ <xsd:complexType name="AvisoAnlageType">
+ <xsd:annotation>
+ <xsd:documentation>Aviso-Struktur für Neuanlagen von Avisi im ZMR</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="base:BehoerdenNr" minOccurs="0"/>
+ <xsd:element ref="AvisoAktenzahl" minOccurs="0"/>
+ <xsd:element ref="ZustaendigeMeldebehoerde"/>
+
+ <xsd:element ref="AvisoStart"/>
+ <xsd:element ref="AvisoEnde"/>
+
+ <xsd:element ref="AvisoSuchkriterien"/>
+ <xsd:element ref="AvisoSuchdaten"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="AvisoAenderung" type="AvisoAenderungType"/>
+ <xsd:complexType name="AvisoAenderungType">
+ <xsd:annotation>
+ <xsd:documentation>Aviso-Struktur für Aenderungen von Avisdaten</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="AvisoStart" minOccurs="0"/>
+ <xsd:element ref="AvisoEnde" minOccurs="0"/>
+ <xsd:element ref="base:Beendigung"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="AvisoTrefferAenderung" type="AvisoTrefferAenderungType"/>
+ <xsd:complexType name="AvisoTrefferAenderungType">
+ <xsd:annotation>
+ <xsd:documentation>Struktur zum Ein/Ausschliessen von Avisotreffern eines Aviso</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="PersonReferenz"/>
+ <xsd:element ref="base:Bezugsfeld" minOccurs="0"/>
+ <xsd:element name="AvisoTrefferAusschliessen" type="xsd:boolean"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="AvisoSuchkriterien">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="base:Formalisiert"/>
+ <xsd:element ref="base:InclusivNameVorErsterEhe"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="AvisoSuchdaten">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="base:ZMRZahl" minOccurs="0"/>
+ <xsd:element ref="cio:NatuerlichePerson" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="AvisoZahl">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:pattern value="[0-9]{9}"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="AvisoAktenzahl">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="72"/>
+ <xsd:pattern value="[a-zA-Z0-9ÄÖÜäöüß^°!&quot;§$&amp;/(){}\[\]=?\\´`*+~#',;.:\-_@ ]*"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:element name="AvisoStart" type="base:TimestampType"/>
+ <xsd:element name="AvisoEnde" type="base:TimestampType"/>
+
+ <xsd:element name="AvisoStatus">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="N"/>
+ <xsd:enumeration value="A"/>
+ <xsd:enumeration value="D"/>
+ <xsd:enumeration value="H"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="AvisoTrefferStatus">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="A"/>
+ <xsd:enumeration value="H"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="ZustaendigeMeldebehoerde" type="base:GemeindeNrType"/>
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/entities/Behoerdenattribute.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/entities/Behoerdenattribute.xsd
new file mode 100644
index 00000000..0b2cc6b8
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/entities/Behoerdenattribute.xsd
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: Behoerdenattribute.xsd
+Zweck: Definiert die Struktur von Behördenattributen für Meldungen
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2004-12-01 tsch: Attribut6 hinzugefügt
+2004-01-22 tsch: Erstellt
+-->
+
+<xsd:schema xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../../eingebunden/EingebundenProxy.xsd"/>
+
+ <xsd:complexType name="BehoerdenattributeErgebnisType">
+ <xsd:annotation>
+ <xsd:documentation>Behördenattribute-Struktur für Suchergebnisse</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="base:EntityErgebnisReferenz"/>
+ <xsd:sequence>
+ <xsd:element ref="Attribut1" minOccurs="0"/>
+ <xsd:element ref="Attribut2" minOccurs="0"/>
+ <xsd:element ref="Attribut3" minOccurs="0"/>
+ <xsd:element ref="Attribut4" minOccurs="0"/>
+ <xsd:element ref="Attribut5" minOccurs="0"/>
+ <xsd:element ref="Attribut6" minOccurs="0"/>
+ <xsd:element ref="OMRNummer" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="BehoerdenattributeSetzenType">
+ <xsd:annotation>
+ <xsd:documentation>Behördenattribute-Struktur zum Setzen der Behördenattribute einer Meldung</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="Attribut1" minOccurs="0"/>
+ <xsd:element ref="Attribut2" minOccurs="0"/>
+ <xsd:element ref="Attribut3" minOccurs="0"/>
+ <xsd:element ref="Attribut4" minOccurs="0"/>
+ <xsd:element ref="Attribut5" minOccurs="0"/>
+ <xsd:element ref="Attribut6" minOccurs="0"/>
+ <xsd:element ref="OMRNummer" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="Attribut1" type="AttributType"/>
+ <xsd:element name="Attribut2" type="AttributType"/>
+ <xsd:element name="Attribut3" type="AttributType"/>
+ <xsd:element name="Attribut4" type="AttributType"/>
+ <xsd:element name="Attribut5" type="AttributType"/>
+ <xsd:element name="Attribut6" type="AttributType"/>
+ <xsd:element name="OMRNummer" type="AttributType"/>
+
+ <xsd:simpleType name="AttributType">
+ <xsd:restriction base="xsd:string">
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="240"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/entities/ERnPAnschrift.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/entities/ERnPAnschrift.xsd
new file mode 100644
index 00000000..0fb07b9b
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/entities/ERnPAnschrift.xsd
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: ERnPAnschrift.xsd
+Zweck: Definiert Anschriftntypen für Suchergebnisse aus dem ERnP der übergreifenden ZMR-Suche
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2005-11-29 tsch: Firmenname, Ansprechpartner hinzugefügt
+2005-10-11 tsch: Umbenennung Anschrift->Anschrift
+2005-10-06 tsch: Umbenennung EGR->ERnP
+2005-08-30 tsch: Anpassungen an neu erstellte Schnittstelle des ERnP
+2004-01-27 tsch: Erstellung (Diese Struktur der EGR-Anschrift ist vorläufig, und wird noch angepasst!)
+-->
+
+<xsd:schema targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:cio="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../../eingebunden/EingebundenProxy.xsd"/>
+ <xsd:import namespace="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" schemaLocation="../../eingebunden/PersonDataZMR.xsd"/>
+
+ <xsd:element name="ERnPAnschriftErgebnis" type="ERnPAnschriftErgebnisType"/>
+ <xsd:complexType name="ERnPAnschriftErgebnisType">
+ <xsd:annotation>
+ <xsd:documentation>Anschrift-Struktur für Suchergebnisse aus dem ERnP</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="base:EntityErgebnisReferenz"/>
+ <xsd:element ref="cio:PostAdresse" minOccurs="0"/>
+ <xsd:element ref="PostleitzahlStaat" minOccurs="0"/>
+ <xsd:element ref="base:Adressstatus" minOccurs="0"/>
+ <xsd:element ref="base:Adressschluessel" minOccurs="0"/>
+ <xsd:element ref="base:HauptIdent" minOccurs="0"/>
+ <xsd:element ref="base:StrasseZweisprachig" minOccurs="0"/>
+ <xsd:element ref="base:Postleitzahlgebiet" minOccurs="0"/>
+ <xsd:element ref="cio:TelefonAdresse" minOccurs="0" maxOccurs="3"/>
+ <xsd:element ref="cio:InternetAdresse" minOccurs="0"/>
+ <xsd:element name="Firmenname1" type="FirmennameType" minOccurs="0"/>
+ <xsd:element name="Firmenname2" type="FirmennameType" minOccurs="0"/>
+ <xsd:element ref="Ansprechpartner" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="PostleitzahlStaat">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:pattern value="[A-Z]{3}"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+ <xsd:simpleType name="FirmennameType">
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="54"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+
+ <xsd:element name="Ansprechpartner">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="54"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/entities/ERnPPerson.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/entities/ERnPPerson.xsd
new file mode 100644
index 00000000..d4b83b63
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/entities/ERnPPerson.xsd
@@ -0,0 +1,114 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: ERnPPerson.xsd
+Zweck: Definiert Persondatentypen für Suchergebnisse aus dem ERnP der übergreifenden ZMR-Suche
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2010-04-02 teo: +Kit-Informationen
+2010-02-25 mp: +Akad. Grad
+2006-01-12 tsch: Anschrift optional
+2005-10-06 tsch: Umbenennung EGR->ERnP
+2005-08-30 tsch: Anpassungen an neu erstellte Schnittstelle des ERnP
+2004-01-27 tsch: Erstellung (Diese Struktur der EGR-Person ist vorläufig, und wird noch angepasst!)
+-->
+
+<xsd:schema xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:cio="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+ targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../../eingebunden/EingebundenProxy.xsd"/>
+ <xsd:import namespace="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" schemaLocation="../../eingebunden/PersonDataZMR.xsd"/>
+ <xsd:include schemaLocation="ERnPAnschrift.xsd"/>
+
+ <xsd:element name="ERnPPersonErgebnis" type="ERnPPersonErgebnisType"/>
+
+ <xsd:complexType name="ERnPPersonErgebnisType">
+ <xsd:annotation>
+ <xsd:documentation>Person-Struktur für Suchergebnisse aus dem ERnP</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="base:ErgebnissatzInfo"/>
+ <xsd:element ref="base:EntityErgebnisReferenz"/>
+ <xsd:element ref="base:OrdnungsZahl" minOccurs="0"/>
+ <xsd:element ref="cio:NatuerlichePerson"/>
+ <xsd:element name="ReferenziertePersonen" type="ERnPReferenziertePersonenErgebnisType" minOccurs="0"/>
+ <xsd:element name="Reisedokument" type="ERnPReisedokumentErgebnisType" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element name="Dokument" type="ERnPDokumentErgebnisType" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element name="PersonGeprueft" type="xsd:boolean"/>
+ <xsd:element name="Anschrift" type="ERnPAnschriftErgebnisType" minOccurs="0"/>
+ <xsd:element name="AkadGrad" type="ERnPAkademischerGradErgebnisType" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="ERnPDokumentErgebnisType">
+ <xsd:annotation>
+ <xsd:documentation>Dokument-Struktur für Suchergebnisse</xsd:documentation>
+ </xsd:annotation>
+
+ <xsd:sequence>
+ <xsd:element ref="base:EntityErgebnisReferenz"/>
+ <xsd:element ref="base:DokumentArt"/>
+ <xsd:element ref="base:DokumentNummer"/>
+ <xsd:element ref="base:AusstellDatum"/>
+ <xsd:element ref="base:AusstellBehoerde"/>
+ <xsd:element ref="base:Ausstellungsstaat" minOccurs="0"/>
+ <xsd:element ref="base:SterbeDatum" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="ERnPReisedokumentErgebnisType">
+ <xsd:annotation>
+ <xsd:documentation>Reisedokument-Struktur für Suchergebnisse</xsd:documentation>
+ </xsd:annotation>
+
+ <xsd:sequence>
+ <xsd:element ref="base:EntityErgebnisReferenz"/>
+ <xsd:element ref="base:DokumentArt"/>
+ <xsd:element ref="base:DokumentNummer" minOccurs="0"/>
+ <xsd:element ref="base:AusstellDatum" minOccurs="0"/>
+ <xsd:element ref="base:AusstellBehoerde" minOccurs="0"/>
+ <xsd:element ref="base:Ausstellungsstaat" minOccurs="0"/>
+ <xsd:element ref="base:DokumentGiltBis" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="ERnPAkademischerGradErgebnisType">
+ <xsd:annotation>
+ <xsd:documentation>Akademischer-Grad-Struktur für Suchergebnisse</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="base:EntityErgebnisReferenz"/>
+ <xsd:element ref="base:AkadGradKey"/>
+ <xsd:element ref="base:AkadGradStellung"/>
+ <xsd:element ref="base:AkadGradReihung"/>
+ <xsd:element ref="base:AkadGradLang"/>
+ <xsd:element ref="base:AkadGradKurz"/>
+ <xsd:element ref="base:AusstellDatum" minOccurs="0"/>
+ <xsd:element ref="base:AusstellBehoerde" minOccurs="0"/>
+ <xsd:element ref="base:Ausstellungsstaat"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="ERnPReferenziertePersonenErgebnisType">
+ <xsd:annotation>
+ <xsd:documentation>
+ Hier befinden sich Referenzan auf Personen, die mit der Person in technischer Beziehung stehen.
+ - KITQuelle, KITZiel, SPLITQuelle, SPLITZiel1 und SPLITZiel2 sind Referenzen auf geKITete
+ bzw. geSPLITete Quellpersonen- bzw. Zielpersonen und entsprechend befüllt (siehe Beschreibung KIT/SPLIT)
+ </xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element name="KitQuelle" type="base:OrdnungsZahlType" minOccurs="0"/>
+ <xsd:element name="KitZiel" type="base:OrdnungsZahlType" minOccurs="0"/>
+ <xsd:element name="SplitQuelle" type="base:OrdnungsZahlType" minOccurs="0"/>
+ <xsd:element name="SplitZiel1" type="base:OrdnungsZahlType" minOccurs="0"/>
+ <xsd:element name="SplitZiel2" type="base:OrdnungsZahlType" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/entities/EidasIdentitaet.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/entities/EidasIdentitaet.xsd
new file mode 100644
index 00000000..361c0c95
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/entities/EidasIdentitaet.xsd
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: EidasIdentitaet.xsd
+Zweck: Definiert Datentypen für die EidasIdentitaeten einer Person im ZMR
+Author(s): Richard Mayrhofer
+-->
+
+<xsd:schema xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-iEidasce"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../../eingebunden/EingebundenProxy.xsd"/>
+
+ <xsd:complexType name="EidasIdentitaetErgebnisType">
+ <xsd:annotation>
+ <xsd:documentation>EIDAS-Identitaet-Struktur für Suchergebnisse</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="base:EntityErgebnisReferenz"/>
+ <xsd:element ref="EidasArt"/>
+ <xsd:element ref="Staatscode2" minOccurs="0"/>
+ <xsd:element ref="base:AusstellBehoerde" minOccurs="0"/>
+ <xsd:element ref="EidasWert" minOccurs="0"/>
+ <xsd:element ref="base:AusstellDatum" minOccurs="0"/>
+ <xsd:element ref="base:AblaufDatum" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="EidasIdentitaetAnlage" type="EidasIdentitaetAnlageType"/>
+ <xsd:complexType name="EidasIdentitaetAnlageType">
+ <xsd:annotation>
+ <xsd:documentation>EIDAS-Identitaet-Struktur für Identitaetanlagen im ZMR</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="EidasArt"/>
+ <xsd:element ref="Staatscode2"/>
+ <xsd:element ref="base:AusstellBehoerde" minOccurs="0"/>
+ <xsd:element ref="EidasWert" minOccurs="0"/>
+ <xsd:element ref="base:AusstellDatum" minOccurs="0"/>
+ <xsd:element ref="base:AblaufDatum" minOccurs="0"/>
+ <xsd:element ref="image" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="EidasIdentitaetAenderung" type="EidasIdentitaetAenderungType"/>
+ <xsd:complexType name="EidasIdentitaetAenderungType">
+ <xsd:annotation>
+ <xsd:documentation>EidasIdentitaet-Struktur für Änderungen von Identitaeten im ZMR</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="base:Technisch"/>
+ <xsd:element ref="EidasArt" minOccurs="0"/>
+ <xsd:element ref="Staatscode2" minOccurs="0"/>
+ <xsd:element ref="base:AusstellBehoerde" minOccurs="0"/>
+ <xsd:element ref="EidasWert" minOccurs="0"/>
+ <xsd:element ref="base:AusstellDatum" minOccurs="0"/>
+ <xsd:element ref="base:AblaufDatum" minOccurs="0"/>
+ <xsd:element ref="image" minOccurs="0"/>
+ <xsd:element ref="base:Beendigung"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="EidasSuchdaten" type="EidasSuchdatenType"/>
+ <xsd:complexType name="EidasSuchdatenType">
+ <xsd:annotation>
+ <xsd:documentation>EidasIdentitaet-Struktur für EidasIdentitensuche im ZMR</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="EidasArt" minOccurs="0"/>
+ <xsd:element ref="Staatscode2" minOccurs="0"/>
+ <xsd:element ref="EidasWert" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="Staatscode2">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="2"/>
+ <xsd:maxLength value="2"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="EidasArt">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="255"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="EidasWert">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="255"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="image" type="xsd:base64Binary"/>
+
+
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/entities/EidasIdentitaet.xsd.svntmp b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/entities/EidasIdentitaet.xsd.svntmp
new file mode 100644
index 00000000..cd07bd8a
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/entities/EidasIdentitaet.xsd.svntmp
@@ -0,0 +1,106 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: EidasIdentitaet.xsd
+Zweck: Definiert Datentypen für die EidasIdentitaeten einer Person im ZMR
+Author(s): Richard Mayrhofer
+-->
+
+<xsd:schema xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-iEidasce"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../../eingebunden/EingebundenProxy.xsd"/>
+
+ <xsd:complexType name="EidasIdentitaetErgebnisType">
+ <xsd:annotation>
+ <xsd:documentation>EIDAS-Identitaet-Struktur für Suchergebnisse</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="base:EntityErgebnisReferenz"/>
+ <xsd:element ref="EidasArt"/>
+ <xsd:element ref="Staatscode3" minOccurs="0"/>
+ <xsd:element ref="base:AusstellBehoerde" minOccurs="0"/>
+ <xsd:element ref="base:DokumentNummer" minOccurs="0"/>
+ <xsd:element ref="base:AusstellDatum" minOccurs="0"/>
+ <xsd:element ref="base:AblaufDatum" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="EidasIdentitaetAnlage" type="EidasIdentitaetAnlageType"/>
+ <xsd:complexType name="EidasIdentitaetAnlageType">
+ <xsd:annotation>
+ <xsd:documentation>EIDAS-Identitaet-Struktur für Identitaetanlagen im ZMR</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="EidasArt"/>
+ <xsd:element ref="Staatscode3"/>
+ <xsd:element ref="base:AusstellBehoerde" minOccurs="0"/>
+ <xsd:element ref="EidasNummer" minOccurs="0"/>
+ <xsd:element ref="base:AusstellDatum" minOccurs="0"/>
+ <xsd:element ref="base:AblaufDatum" minOccurs="0"/>
+ <xsd:element ref="image" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="EidasIdentitaetAenderung" type="EidasIdentitaetAenderungType"/>
+ <xsd:complexType name="EidasIdentitaetAenderungType">
+ <xsd:annotation>
+ <xsd:documentation>EidasIdentitaet-Struktur für Änderungen von Identitaeten im ZMR</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="base:Technisch"/>
+ <xsd:element ref="EidasArt" minOccurs="0"/>
+ <xsd:element ref="Staatscode3" minOccurs="0"/>
+ <xsd:element ref="base:AusstellBehoerde" minOccurs="0"/>
+ <xsd:element ref="EidasNummer" minOccurs="0"/>
+ <xsd:element ref="base:AusstellDatum" minOccurs="0"/>
+ <xsd:element ref="base:AblaufDatum" minOccurs="0"/>
+ <xsd:element ref="image" minOccurs="0"/>
+ <xsd:element ref="base:Beendigung"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="EidasSuchdaten" type="EidasSuchdatenType"/>
+ <xsd:complexType name="EidasSuchdatenType">
+ <xsd:annotation>
+ <xsd:documentation>EidasIdentitaet-Struktur für EidasIdentitensuche im ZMR</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="EidasArt" minOccurs="0"/>
+ <xsd:element ref="EidasNummer" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="Staatscode3">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="3"/>
+ <xsd:maxLength value="3"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="EidasArt">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="55"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="EidasNummer">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="0"/>
+ <xsd:maxLength value="54"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="image" type="xsd:base64Binary"/>
+
+
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/entities/Meldung.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/entities/Meldung.xsd
new file mode 100644
index 00000000..0ea75355
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/entities/Meldung.xsd
@@ -0,0 +1,189 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: Meldung.xsd
+Zweck: Definiert Meldedatentypen für das ZMR
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2004-08-18 tsch: Qualifikationskennzeichen hinzugefügt
+2004-08-02 tsch: Adressschluessel hinzugefügt; StrasseZweisprachig, Postleitzahlgebiet, weitere optionale Adresssfelder bei MeldungErgebnis hinzugefügt
+2004-08-02 tsch: Adressdaten in Struktur-Feld 'Wohnsitz' gekapselt
+2004-07-30 tsch: PostAdresseAnlageKlaerung entfernt, Keys und Adressfelde in PostadresseAnlage optional, Felder an neue Personrecord angepasst
+2004-07-14 tsch: Postleitzahl in Klärungsadresse optional
+2004-07-08 tsch: Felder Adresszusatz, HauptIdentadresse hinzugefügt
+2004-06-24 tsch: Bezeichung Beharrungsadresse->Klaerungsadresse
+2004-06-18 tsch: ErgebnissatzInfo hinzugefügt
+2004-06-14 tsch: Handling mehrerer Auskunftssperren
+2004-04-14 tsch: MeldungAnlageType: Korrekturen bei Beharrungsadresse/offizielle Adresse
+2004-01-27 tsch: ZMRAdresse wird PostAdresse
+2004-01-22 tsch: Integration der CIO-Personendaten Struktur (http://reference.e-government.gv.at/namespace/persondata/de/20040201#)
+-->
+
+<xsd:schema targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:cio="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../../eingebunden/EingebundenProxy.xsd"/>
+ <xsd:import namespace="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" schemaLocation="../../eingebunden/PersonDataZMR.xsd"/>
+ <xsd:include schemaLocation="Behoerdenattribute.xsd"/>
+ <xsd:include schemaLocation="Auskunftssperre.xsd"/>
+ <xsd:include schemaLocation="Qualifikationskennzeichen.xsd"/>
+
+ <xsd:element name="MeldungReferenz" type="MeldungReferenzType"/>
+ <xsd:complexType name="MeldungReferenzType">
+ <xsd:annotation>
+ <xsd:documentation>Typ für Referenzdaten einer Meldung, (immer die aktuellste, das heisst jüngstes 'Von') mit WS-Qualität zur Kontrolle)</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="base:Technisch">
+ <xsd:annotation>
+ <xsd:documentation>
+ Bei einer Änderung von Meldedaten müssen hier die EntityID der Meldung, sowie der
+ Zeitpunkt der letzten Änderung am Meldungssatz (Meldung-Entity und abhängige Entities wie Behördenattribute)
+ geschickt werden.
+ Der LetzteAenderung-Timestamp muss mit dem LetzteAenderung-Timestamp im Feld ErgebnissatzInfo
+ aus dem Suchergebnissatz übereinstimmen
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element ref="cio:Wohnsitzqualitaet">
+ <xsd:annotation>
+ <xsd:documentation>
+ Die Wohnsitzqualität der Meldung muss zur Kontrolle unverändert
+ mitgeschickt werden.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="MeldungErgebnis" type="MeldungErgebnisType"/>
+ <xsd:complexType name="MeldungErgebnisType">
+ <xsd:annotation>
+ <xsd:documentation>Meldung-Struktur für Suchergebnisse aus dem ZMR</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="base:ErgebnissatzInfo"/>
+ <xsd:element ref="base:EntityErgebnisReferenz"/>
+ <xsd:element name="Wohnsitz" type="WohnsitzErgebnisType"/>
+ <xsd:element ref="base:GemeldetVon"/>
+ <xsd:element ref="base:PeriodeCode"/>
+ <xsd:element ref="base:PeriodeText"/>
+ <xsd:element ref="base:PeriodeFreitext" minOccurs="0"/>
+ <xsd:element ref="base:GemeldetBis" minOccurs="0"/>
+ <xsd:element ref="base:Unterkunftgeber" minOccurs="0"/>
+ <xsd:element name="Behoerdenattribute" type="BehoerdenattributeErgebnisType" minOccurs="0"/>
+ <xsd:element name="Auskunftssperre" type="AuskunftssperreErgebnisType" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element name="Qualifikationskennzeichen" type="QualifikationskennzeichenErgebnisType" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="PostAdresseErgebnisType">
+ <xsd:annotation>
+ <xsd:documentation>ZMR-Adresse (Suchergebnis)</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexContent>
+ <xsd:extension base="cio:AbstractAddressType">
+ <xsd:sequence>
+ <xsd:element ref="cio:Postleitzahl"/>
+ <xsd:element ref="cio:Gemeinde"/>
+ <xsd:element ref="cio:Gemeindekennziffer"/>
+ <xsd:element ref="cio:Ortschaft" minOccurs="0"/>
+ <xsd:element ref="cio:OrtschaftZweisprachig" minOccurs="0"/>
+ <xsd:element name="Zustelladresse">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="cio:Adresszeile" minOccurs="0"/>
+ <xsd:element ref="cio:Strassenname"/>
+ <xsd:element ref="cio:Orientierungsnummer"/>
+ <xsd:element ref="cio:Gebaeude" minOccurs="0"/>
+ <xsd:element ref="cio:Nutzungseinheit" minOccurs="0"/>
+ <xsd:element ref="cio:Wohnsitzqualitaet"/>
+ <xsd:element ref="cio:Abgabestelle" minOccurs="0"/>
+ <xsd:element ref="cio:Nutzungseinheitlaufnummer" minOccurs="0"/>
+ <xsd:element ref="AdressRegisterEintrag" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ </xsd:sequence>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:complexType name="WohnsitzErgebnisType">
+ <xsd:sequence>
+ <xsd:element name="PostAdresse" type="PostAdresseErgebnisType"/>
+ <xsd:element ref="base:Adressstatus"/>
+ <xsd:element ref="base:Adressschluessel" minOccurs="0"/>
+ <xsd:element ref="base:HauptIdent" minOccurs="0"/>
+ <xsd:element ref="base:StrasseZweisprachig" minOccurs="0"/>
+ <xsd:element ref="base:Postleitzahlgebiet" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="MeldungAnlage" type="MeldungAnlageType"/>
+ <xsd:complexType name="MeldungAnlageType">
+ <xsd:annotation>
+ <xsd:documentation>Meldung-Struktur zur Wohnsitzanmeldung im ZMR</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element name="Wohnsitz" type="WohnsitzAnlageType"/>
+ <xsd:element ref="base:Unterkunftgeber" minOccurs="0"/>
+ <xsd:element name="Behoerdenattribute" type="BehoerdenattributeSetzenType" minOccurs="0"/>
+ <xsd:element name="Auskunftssperre" type="AuskunftssperreAnlageType" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="WohnsitzAnlageType">
+ <xsd:sequence>
+ <xsd:element name="PostAdresse" type="PostAdresseAnlageType"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="PostAdresseAnlageType">
+ <xsd:annotation>
+ <xsd:documentation>ZMR-Adresse (für Wohnsitzanlage)</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexContent>
+ <xsd:extension base="cio:AbstractAddressType">
+ <xsd:sequence>
+ <xsd:element ref="cio:Postleitzahl" minOccurs="0"/>
+ <xsd:element ref="cio:Gemeindekennziffer" minOccurs="0"/>
+ <xsd:element ref="cio:Ortschaft" minOccurs="0"/>
+ <xsd:element ref="cio:OrtschaftZweisprachig" minOccurs="0"/>
+ <xsd:element name="Zustelladresse">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="cio:Adresszeile" minOccurs="0"/>
+ <xsd:element ref="cio:Strassenname" minOccurs="0"/>
+ <xsd:element ref="cio:Orientierungsnummer" minOccurs="0"/>
+ <xsd:element ref="cio:Gebaeude" minOccurs="0"/>
+ <xsd:element ref="cio:Nutzungseinheit" minOccurs="0"/>
+ <xsd:element ref="cio:Wohnsitzqualitaet"/>
+ <xsd:element ref="cio:Abgabestelle" minOccurs="0"/>
+ <xsd:element ref="cio:Nutzungseinheitlaufnummer" minOccurs="0"/>
+ <xsd:element ref="AdressRegisterEintrag" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ </xsd:sequence>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="AdressRegisterEintrag">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="cio:Adresscode" minOccurs="1"/>
+ <xsd:element ref="cio:Subcode" minOccurs="0"/>
+ <xsd:element ref="cio:Objektnummer" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+</xsd:schema>
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/entities/Person.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/entities/Person.xsd
new file mode 100644
index 00000000..8e3e55ee
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/entities/Person.xsd
@@ -0,0 +1,233 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: Person.xsd
+Zweck: Definiert Persondatentypen für das Personenregister
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2006-04-18 woeg: +optionales Feld Familienstand
+2004-12-17 tsch: optionales Feld Affix in NatuerlichePersonErgebnisType hinzugefügt
+2004-09-29 tsch: Standarddokumente hinzugefügt
+2004-06-22 tsch: StaatZugezogen bei PersonAenderung hinzugefügt, akademische Grade hinzugefügt, Titel hinzugefügt
+2004-06-18 tsch: ErgebnissatzInfo hinzugefügt
+2004-06-14 tsch: Behördenattribute hinzugefügt
+2004-06-14 tsch: Handling mehrerer Auskunftssperren
+2004-01-22 tsch: Integration der CIO-Personendaten Struktur (http://reference.e-government.gv.at/namespace/persondata/de/20040201#)
+-->
+
+<xsd:schema xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:cio="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+ targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../../eingebunden/EingebundenProxy.xsd"/>
+ <xsd:import namespace="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" schemaLocation="../../eingebunden/PersonDataZMR.xsd"/>
+ <xsd:include schemaLocation="Reisedokument.xsd"/>
+ <xsd:include schemaLocation="Behoerdenattribute.xsd"/>
+ <xsd:include schemaLocation="Auskunftssperre.xsd"/>
+ <xsd:include schemaLocation="Qualifikationskennzeichen.xsd"/>
+ <xsd:include schemaLocation="Staatsangehoerigkeit.xsd"/>
+ <xsd:include schemaLocation="AkademischerGrad.xsd"/>
+ <xsd:include schemaLocation="Standarddokument.xsd"/>
+ <xsd:include schemaLocation="EidasIdentitaet.xsd"/>
+
+ <xsd:element name="PersonReferenz" type="PersonReferenzType"/>
+ <xsd:complexType name="PersonReferenzType">
+ <xsd:annotation>
+ <xsd:documentation>Typ für Referenzdaten einer Person (immer die aktuellste, das heisst jüngstes 'Von'), mit ZMR-Zahl zur Kontrolle</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="base:Technisch">
+ <xsd:annotation>
+ <xsd:documentation>
+ Bei einer Änderung von Personendaten müssen hier die EntityID der Person, sowie der
+ Zeitpunkt der letzten Änderung am Personensatz (Person-Entity und abhängige Entities wie Reisedokumente)
+ geschickt werden.
+ Der LetzteAenderung-Timestamp muss mit dem LetzteAenderung-Timestamp im Feld ErgebnissatzInfo
+ aus dem Suchergebnissatz übereinstimmen
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+
+ <xsd:element ref="base:ZMRZahl">
+ <xsd:annotation>
+ <xsd:documentation>
+ Die ZMR-Zahl der Person muss zur Kontrolle unverändert
+ mitgeschickt werden.
+ </xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="PersonErgebnis" type="PersonErgebnisType"/>
+
+
+ <xsd:complexType name="PersonErgebnisType">
+ <xsd:annotation>
+ <xsd:documentation>Person-Struktur für Suchergebnisse aus dem ZMR</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="base:ErgebnissatzInfo"/>
+ <xsd:element ref="base:EntityErgebnisReferenz"/>
+ <xsd:element ref="base:ZMRZahl" minOccurs="0"/>
+ <xsd:element name="NatuerlichePerson" type="NatuerlichePersonErgebnisType"/>
+ <xsd:element ref="base:Titel" minOccurs="0"/>
+ <xsd:element ref="base:StaatZugezogen" minOccurs="0"/>
+ <xsd:element ref="base:StaatVerzogen" minOccurs="0"/>
+ <xsd:element name="ReferenziertePersonen" type="ReferenziertePersonenErgebnisType" minOccurs="0"/>
+ <xsd:element name="Reisedokument" type="ReisedokumentErgebnisType" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element name="Behoerdenattribute" type="BehoerdenattributeErgebnisType" minOccurs="0"/>
+ <xsd:element name="Auskunftssperre" type="AuskunftssperreErgebnisType" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element name="Qualifikationskennzeichen" type="QualifikationskennzeichenErgebnisType" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element name="AkademischerGrad" type="AkademischerGradErgebnisType" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element name="Standarddokument" type="StandarddokumentErgebnisType" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element name="EidasIdentitaet" type="EidasIdentitaetErgebnisType" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="NatuerlichePersonErgebnisType">
+ <xsd:annotation>
+ <xsd:documentation>Natuerliche Person (Suchergebnis)</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexContent>
+ <xsd:extension base="cio:AbstractPersonType">
+ <xsd:sequence>
+ <xsd:element name="PersonenName">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="cio:Vorname"/>
+ <xsd:element ref="cio:Familienname"/>
+ <xsd:element ref="cio:Affix" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element ref="cio:AlternativName" minOccurs="0"/>
+ <xsd:element ref="cio:Familienstand" minOccurs="0"/>
+ <xsd:element ref="cio:Geschlecht"/>
+ <xsd:element ref="cio:Geburtsdatum"/>
+ <xsd:element ref="cio:Geburtsort"/>
+ <xsd:element ref="cio:Geburtsbundesland" minOccurs="0"/>
+ <xsd:element ref="cio:Geburtsstaat"/>
+ <xsd:element ref="cio:Sterbedatum" minOccurs="0"/>
+ <xsd:element name="Staatsangehoerigkeit" type="StaatsangehoerigkeitErgebnisType" minOccurs="1" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:complexType name="ReferenziertePersonenErgebnisType">
+ <xsd:annotation>
+ <xsd:documentation>
+ Hier befinden sich Referenzan auf Personen, die mit der Person in technischer Beziehung stehen.
+ - Die Ordnungszahl verweist auf den Personenzatz im Ergänzungsregister, falls die Person vom
+ vom EGR ins ZMR übernommen wurde.
+ - KITQuelle, KITZiel, SPLITQuelle, SPLITZiel1 und SPLITZiel2 sind Referenzen auf geKITete
+ bzw. geSPLITete Quellpersonen- bzw. Zielpersonen und entsprechend befüllt (siehe Beschreibung KIT/SPLIT)
+ </xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="base:OrdnungsZahl" minOccurs="0"/>
+ <xsd:element name="KitQuelle" type="base:ZMRZahlType" minOccurs="0"/>
+ <xsd:element name="KitQuelleBpk" type="cio:IdentificationType" minOccurs="0"/>
+ <xsd:element name="KitZiel" type="base:ZMRZahlType" minOccurs="0"/>
+ <xsd:element name="KitZielBpk" type="cio:IdentificationType" minOccurs="0"/>
+ <xsd:element name="SplitQuelle" type="base:ZMRZahlType" minOccurs="0"/>
+ <xsd:element name="SplitZiel1" type="base:ZMRZahlType" minOccurs="0"/>
+ <xsd:element name="SplitZiel2" type="base:ZMRZahlType" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="PersonAnlage" type="PersonAnlageType"/>
+ <xsd:complexType name="PersonAnlageType">
+ <xsd:annotation>
+ <xsd:documentation>Person-Struktur für Personenanlagen im ZMR</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element name="NatuerlichePerson" type="NatuerlichePersonAnlageType"/>
+ <xsd:element ref="base:Titel" minOccurs="0"/>
+ <xsd:element ref="base:StaatZugezogen" minOccurs="0"/>
+ <xsd:element name="Reisedokument" type="ReisedokumentAnlageType" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element name="Behoerdenattribute" type="BehoerdenattributeSetzenType" minOccurs="0"/>
+ <xsd:element name="Auskunftssperre" type="AuskunftssperreAnlageType" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element name="AkademischerGrad" type="AkademischerGradAnlageType" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element name="Standarddokument" type="StandarddokumentAnlageType" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element name="EidasIdentitaet" type="EidasIdentitaetAnlageType" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="NatuerlichePersonAnlageType">
+ <xsd:annotation>
+ <xsd:documentation>Natuerliche Person (Personenanlage)</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexContent>
+ <xsd:extension base="cio:AbstractPersonType">
+ <xsd:sequence>
+ <xsd:element name="PersonenName">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="cio:Vorname"/>
+ <xsd:element ref="cio:Familienname"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element ref="cio:AlternativName" minOccurs="0"/>
+ <xsd:element ref="cio:Familienstand" minOccurs="0"/>
+ <xsd:element ref="cio:Geschlecht"/>
+ <xsd:element ref="cio:Geburtsdatum"/>
+ <xsd:element ref="cio:Geburtsort"/>
+ <xsd:element ref="cio:Geburtsbundesland" minOccurs="0"/>
+ <xsd:element ref="cio:Geburtsstaat"/>
+ <xsd:element name="Staatsangehoerigkeit" type="StaatsangehoerigkeitAnlageType" minOccurs="1" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="PersonAenderung" type="PersonAenderungType"/>
+ <xsd:complexType name="PersonAenderungType">
+ <xsd:annotation>
+ <xsd:documentation>Person-Struktur für Personendatenänderungen im ZMR</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element name="NatuerlichePerson" type="NatuerlichePersonAenderungTyp" minOccurs="0"/>
+ <xsd:element ref="base:Titel" minOccurs="0"/>
+ <xsd:choice>
+ <xsd:element ref="base:StaatZugezogen" minOccurs="0"/>
+ <xsd:element ref="base:StaatVerzogen" minOccurs="0"/>
+ </xsd:choice>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="NatuerlichePersonAenderungTyp">
+ <xsd:annotation>
+ <xsd:documentation>Natuerliche Person (Änderung)</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexContent>
+ <xsd:extension base="cio:AbstractPersonType">
+ <xsd:sequence>
+ <xsd:element name="PersonenName" minOccurs="0">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="cio:Vorname" minOccurs="0"/>
+ <xsd:element ref="cio:Familienname" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element ref="cio:AlternativName" minOccurs="0"/>
+ <xsd:element ref="cio:Familienstand" minOccurs="0"/>
+ <xsd:element ref="cio:Geschlecht" minOccurs="0"/>
+ <xsd:element ref="cio:Geburtsdatum" minOccurs="0"/>
+ <xsd:element ref="cio:Geburtsort" minOccurs="0"/>
+ <xsd:element ref="cio:Geburtsbundesland" minOccurs="0"/>
+ <xsd:element ref="cio:Geburtsstaat" minOccurs="0"/>
+ <xsd:element ref="cio:Sterbedatum" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/entities/Qualifikationskennzeichen.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/entities/Qualifikationskennzeichen.xsd
new file mode 100644
index 00000000..044452c6
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/entities/Qualifikationskennzeichen.xsd
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: Qualifikationskennzeichen.xsd
+Zweck: Definiert Datentypen für die Qualifikationskennzeichen einer Person im ZMR
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2004-02-02 tsch: Umbennenung auf QualifikationskennzeichenCode, QualifikationskennzeichenText, Adaptionen
+2004-01-22 tsch: Erstellung
+-->
+
+<xsd:schema xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../../eingebunden/EingebundenProxy.xsd"/>
+
+ <xsd:complexType name="QualifikationskennzeichenErgebnisType">
+ <xsd:annotation>
+ <xsd:documentation>Qualifikationskennzeichen-Struktur für Suchergebnisse</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="base:EntityErgebnisReferenz"/>
+ <xsd:sequence>
+ <xsd:element ref="QualifikationskennzeichenCode"/>
+ <xsd:element ref="QualifikationskennzeichenText" minOccurs="0"/>
+ <xsd:element ref="QualifikationskennzeichenGiltAb" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="QualifikationskennzeichenAnlage" type="QualifikationskennzeichenAnlageType"/>
+ <xsd:complexType name="QualifikationskennzeichenAnlageType">
+ <xsd:annotation>
+ <xsd:documentation>Struktur für Anlagen von Qualifikationskennzeichen</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="QualifikationskennzeichenCode" minOccurs="1"/>
+ <xsd:element ref="QualifikationskennzeichenText" minOccurs="0"/>
+ <xsd:element ref="QualifikationskennzeichenGiltAb" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="QualifikationskennzeichenLoeschen" type="QualifikationskennzeichenLoeschenType"/>
+ <xsd:complexType name="QualifikationskennzeichenLoeschenType">
+ <xsd:annotation>
+ <xsd:documentation>Struktur für Änderungen von Qualifikationskennzeichen</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="base:EntityReferenz"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="QualifikationskennzeichenCode">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="35"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="QualifikationskennzeichenText">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:whiteSpace value="collapse"/>
+ <xsd:minLength value="1"/>
+ <xsd:maxLength value="55"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="QualifikationskennzeichenGiltAb" type="xsd:date"/>
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/entities/Reisedokument.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/entities/Reisedokument.xsd
new file mode 100644
index 00000000..edbbcc8c
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/entities/Reisedokument.xsd
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: Reisedokument.xsd
+Zweck: Definiert Datentypen für die Reisedokumente einer Person im ZMR
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2010-03-16 teo: LMR-756/CLM-1504 Reisedokument gültig bis erfassen
+2004-01-22 tsch: Reisedokument->ReisedokumentErgebnisType
+-->
+
+<xsd:schema xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../../eingebunden/EingebundenProxy.xsd"/>
+
+ <xsd:complexType name="ReisedokumentErgebnisType">
+ <xsd:annotation>
+ <xsd:documentation>Reisedokument-Struktur für Suchergebnisse</xsd:documentation>
+ </xsd:annotation>
+
+ <xsd:sequence>
+ <xsd:element ref="base:EntityErgebnisReferenz"/>
+ <xsd:element ref="base:DokumentArt"/>
+ <xsd:element ref="base:DokumentNummer" minOccurs="0"/>
+ <xsd:element ref="base:AusstellDatum" minOccurs="0"/>
+ <xsd:element ref="base:AusstellBehoerde" minOccurs="0"/>
+ <xsd:element ref="base:Ausstellungsstaat" minOccurs="0"/>
+ <xsd:element ref="base:DokumentGiltBis" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="ReisedokumentAnlage" type="ReisedokumentAnlageType"/>
+ <xsd:complexType name="ReisedokumentAnlageType">
+ <xsd:annotation>
+ <xsd:documentation>Reisedokument-Struktur für Reisedokumentanlagen im ZMR</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="base:DokumentArt"/>
+ <xsd:element ref="base:DokumentNummer" minOccurs="0"/>
+ <xsd:element ref="base:AusstellDatum" minOccurs="0"/>
+ <xsd:element ref="base:AusstellBehoerde" minOccurs="0"/>
+ <xsd:element ref="base:Ausstellungsstaat" minOccurs="0"/>
+ <xsd:element ref="base:DokumentGiltBis" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="ReisedokumentAenderung" type="ReisedokumentAenderungType"/>
+ <xsd:complexType name="ReisedokumentAenderungType">
+ <xsd:annotation>
+ <xsd:documentation>Reisedokument-Struktur für Änderungen von Reisedokumenten im ZMR</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="base:EntityReferenz"/>
+ <xsd:element ref="base:DokumentArt" minOccurs="0"/>
+ <xsd:element ref="base:DokumentNummer" minOccurs="0"/>
+ <xsd:element ref="base:AusstellDatum" minOccurs="0"/>
+ <xsd:element ref="base:AusstellBehoerde" minOccurs="0"/>
+ <xsd:element ref="base:Ausstellungsstaat" minOccurs="0"/>
+ <xsd:element ref="base:DokumentGiltBis" minOccurs="0"/>
+ <xsd:element ref="base:Beendigung"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="DokumentSuchdaten" type="DokumentSuchdatenType"/>
+ <xsd:complexType name="DokumentSuchdatenType">
+ <xsd:annotation>
+ <xsd:documentation>Reisedokument-Struktur für Reisedokumentanlagen im ZMR</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="base:DokumentArt" minOccurs="0"/>
+ <xsd:element ref="base:DokumentNummer" minOccurs="0"/>
+ <xsd:element ref="base:AusstellDatum" minOccurs="0"/>
+ <xsd:element ref="base:AusstellBehoerde" minOccurs="0"/>
+ <xsd:element ref="base:Ausstellungsstaat" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/entities/Staatsangehoerigkeit.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/entities/Staatsangehoerigkeit.xsd
new file mode 100644
index 00000000..2dcdee66
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/entities/Staatsangehoerigkeit.xsd
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: Staatsangehoerigkeit.xsd
+Zweck: Definiert Datentypen für die Staatsangehoerigkeiten einer Person im ZMR
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2010-03-15 teo: +GueltigVon, +GueltigBis: Gültigkeitsdatum für Staatsangehörigkeiten
+2004-12-20 tsch: ISOCode3 in StaatsangehoerigkeitErgebnisType optional (für historische Staaten)
+2004-08-04 tsch: StaatsangehoerigkeitAenderungType: EntityReferenz optional (Staatsangeh. kann auch uber ISOCode3 identifiziert werden)
+2004-01-26 tsch: Erstellung
+-->
+
+<xsd:schema xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ xmlns:cio="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
+ targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../../eingebunden/EingebundenProxy.xsd"/>
+ <xsd:import namespace="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" schemaLocation="../../eingebunden/PersonDataZMR.xsd"/>
+
+ <xsd:complexType name="StaatsangehoerigkeitErgebnisType">
+ <xsd:annotation>
+ <xsd:documentation>Staatsangehoerigkeit-Struktur für Suchergebnisse</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="cio:ISOCode3" minOccurs="0"/>
+ <xsd:element ref="cio:StaatsnameDE" minOccurs="1"/>
+ <xsd:element ref="cio:StaatsnameEN" minOccurs="0"/>
+ <xsd:element ref="cio:StaatsnameFR" minOccurs="0"/>
+ <xsd:element name="GueltigVon" type="xsd:date" minOccurs="0"/>
+ <xsd:element name="GueltigBis" type="xsd:date" minOccurs="0"/>
+ <xsd:element ref="base:EntityErgebnisReferenz"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="StaatsangehoerigkeitAnlage" type="StaatsangehoerigkeitAnlageType"/>
+ <xsd:complexType name="StaatsangehoerigkeitAnlageType">
+ <xsd:annotation>
+ <xsd:documentation>Staatsangehoerigkeit-Struktur für Anlagen im ZMR</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="cio:ISOCode3"/>
+ <xsd:element name="GueltigVon" type="xsd:date" minOccurs="0"/>
+ <xsd:element name="GueltigBis" type="xsd:date" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="StaatsangehoerigkeitAenderung" type="StaatsangehoerigkeitAenderungType"/>
+ <xsd:complexType name="StaatsangehoerigkeitAenderungType">
+ <xsd:annotation>
+ <xsd:documentation>Staatsangehoerigkeit-Struktur für Änderungen im ZMR</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:choice>
+ <xsd:annotation>
+ <xsd:documentation>
+ Wenn der Schlüssel (EntityID) der Staatsbürgerschaft nicht bekannt ist,
+ kann alternativ der ISO-Code geschickt werden.
+ </xsd:documentation>
+ </xsd:annotation>
+ <xsd:element ref="base:EntityReferenz"/>
+ <xsd:element ref="cio:ISOCode3"/>
+ </xsd:choice>
+ <xsd:element name="GueltigVon" type="xsd:date" minOccurs="0"/>
+ <xsd:element name="GueltigBis" type="xsd:date" minOccurs="0"/>
+ <xsd:element ref="base:Beendigung"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/entities/Standarddokument.xsd b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/entities/Standarddokument.xsd
new file mode 100644
index 00000000..5b14bcc4
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/main/resources/wsdl/zmr_client/xsd/zmr/entities/Standarddokument.xsd
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Name: Standarddokument.xsd
+Zweck: Definiert Datentypen für die Standarddokumente einer Person im ZMR
+Author(s): Tschurtschenthaler Thomas, ZMR-SU
+
+Aenderungshistorie:
+2004-11-03 tsch: Ausstellungsstaat hinzugefügt
+2004-09-29 tsch: Erstellt
+-->
+
+<xsd:schema xmlns="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#"
+ targetNamespace="http://bmi.gv.at/namespace/zmr-su/zmr/20040201#"
+ elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
+ <xsd:import namespace="http://bmi.gv.at/namespace/zmr-su/base/20040201#" schemaLocation="../../eingebunden/EingebundenProxy.xsd"/>
+
+ <xsd:complexType name="StandarddokumentErgebnisType">
+ <xsd:annotation>
+ <xsd:documentation>Standarddokument-Struktur für Suchergebnisse</xsd:documentation>
+ </xsd:annotation>
+
+ <xsd:sequence>
+ <xsd:element ref="base:EntityErgebnisReferenz"/>
+ <xsd:element ref="base:DokumentArt"/>
+ <xsd:element ref="base:EintragungsNummer"/>
+ <xsd:element ref="base:AusstellDatum"/>
+ <xsd:element ref="base:AblaufDatum" minOccurs="0"/>
+ <xsd:element ref="base:AusstellBehoerde"/>
+ <xsd:element ref="base:Ausstellungsstaat" minOccurs="0"/>
+ <xsd:element ref="base:SterbeDatum" minOccurs="0"/>
+ <xsd:element ref="base:SterbeUhrzeit" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="StandarddokumentAnlage" type="StandarddokumentAnlageType"/>
+ <xsd:complexType name="StandarddokumentAnlageType">
+ <xsd:annotation>
+ <xsd:documentation>Standarddokument-Struktur für Standarddokumentanlagen</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="base:DokumentArt"/>
+ <xsd:element ref="base:EintragungsNummer"/>
+ <xsd:element ref="base:AusstellDatum"/>
+ <xsd:element ref="base:AblaufDatum" minOccurs="0"/>
+ <xsd:element ref="base:AusstellBehoerde"/>
+ <xsd:element ref="base:Ausstellungsstaat" minOccurs="0"/>
+ <xsd:element ref="base:SterbeDatum" minOccurs="0"/>
+ <xsd:element ref="base:SterbeUhrzeit" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="StandarddokumentAenderung" type="StandarddokumentAenderungType"/>
+ <xsd:complexType name="StandarddokumentAenderungType">
+ <xsd:annotation>
+ <xsd:documentation>Standarddokument-Struktur für Änderungen von Standarddokumenten</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element ref="base:EntityReferenz"/>
+ <xsd:element ref="base:DokumentArt" minOccurs="0"/>
+ <xsd:element ref="base:EintragungsNummer" minOccurs="0"/>
+ <xsd:element ref="base:AusstellDatum" minOccurs="0"/>
+ <xsd:element ref="base:AblaufDatum" minOccurs="0"/>
+ <xsd:element ref="base:AusstellBehoerde" minOccurs="0"/>
+ <xsd:element ref="base:Ausstellungsstaat" minOccurs="0"/>
+ <xsd:element ref="base:SterbeDatum" minOccurs="0"/>
+ <xsd:element ref="base:SterbeUhrzeit" minOccurs="0"/>
+ <xsd:element ref="base:Beendigung"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+</xsd:schema> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/EidasSignalServletTest.java b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/EidasSignalServletTest.java
index 0d9d4fb8..4d4ac47d 100644
--- a/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/EidasSignalServletTest.java
+++ b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/EidasSignalServletTest.java
@@ -14,7 +14,6 @@ import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
-import org.powermock.core.classloader.annotations.PrepareForTest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.mock.web.MockHttpServletResponse;
@@ -47,12 +46,10 @@ import eu.eidas.auth.commons.tx.BinaryLightToken;
import eu.eidas.specificcommunication.exception.SpecificCommunicationException;
@RunWith(SpringJUnit4ClassRunner.class)
-@PrepareForTest(CreateIdentityLinkTask.class)
@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_CLASS)
@ContextConfiguration(locations = {
"/SpringTest-context_tasks_test.xml",
"/SpringTest-context_basic_mapConfig.xml"})
-@EnableWebMvc
public class EidasSignalServletTest {
@Autowired private MsConnectorDummyConfigMap basicConfig;
@@ -61,14 +58,14 @@ public class EidasSignalServletTest {
@Autowired private ITransactionStorage transStore;
@Autowired private DummyProtocolAuthService protAuthService;
@Autowired private DummySpecificCommunicationService connector;
-
-
+
+
private MockHttpServletRequest httpReq;
private MockHttpServletResponse httpResp;
private TestRequestImpl pendingReq;
private MsConnectorDummySpConfiguration oaParam;
-
-
+
+
/**
* jUnit test set-up.
*/
@@ -78,7 +75,7 @@ public class EidasSignalServletTest {
httpResp = new MockHttpServletResponse();
RequestContextHolder.resetRequestAttributes();
RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(httpReq, httpResp));
-
+
final Map<String, String> spConfig = new HashMap<>();
spConfig.put(EaafConfigConstants.SERVICE_UNIQUEIDENTIFIER, "testSp");
spConfig.put("target", "urn:publicid:gv.at:cdid+XX");
@@ -92,51 +89,51 @@ public class EidasSignalServletTest {
pendingReq.setAuthUrl("http://test.com/");
pendingReq.setTransactionId("avaasbav");
pendingReq.setPiiTransactionId(RandomStringUtils.randomAlphanumeric(10));
-
+
connector.setiLightResponse(null);
-
-
+
+
}
-
+
@Test
public void noResponsToken() throws IOException, EaafException {
//set-up
-
+
//execute test
controller.restoreEidasAuthProcess(httpReq, httpResp);
-
+
//validate state
Assert.assertNull("eIDAS response", httpReq.getAttribute(Constants.DATA_FULL_EIDAS_RESPONSE));
Assert.assertNotNull("missing error", protAuthService.getException());
- Assert.assertEquals("Wrong errorId", "auth.26",
+ Assert.assertEquals("Wrong errorId", "auth.26",
((EaafException) protAuthService.getException()).getErrorId());
-
+
}
-
+
@Test
public void unknownResponseToken() throws IOException, EaafException {
//set-up
- httpReq.setParameter(EidasParameterKeys.TOKEN.toString(),
+ httpReq.setParameter(EidasParameterKeys.TOKEN.toString(),
RandomStringUtils.randomAlphanumeric(10));
-
+
//execute test
controller.restoreEidasAuthProcess(httpReq, httpResp);
-
+
//validate state
Assert.assertNull("eIDAS response", httpReq.getAttribute(Constants.DATA_FULL_EIDAS_RESPONSE));
Assert.assertNotNull("missing error", protAuthService.getException());
- Assert.assertEquals("Wrong errorId", "auth.26",
+ Assert.assertEquals("Wrong errorId", "auth.26",
((EaafException) protAuthService.getException()).getErrorId());
-
+
}
-
+
@Test
public void withRelayState() throws IOException, EaafException, SpecificCommunicationException {
- //set-up
- String relayState = RandomStringUtils.randomAlphanumeric(10);
+ //set-up
+ String relayState = RandomStringUtils.randomAlphanumeric(10);
pendingReq.setPendingReqId(relayState);
storage.storePendingRequest(pendingReq);
-
+
Builder iLightResponse = new AuthenticationResponse.Builder();
iLightResponse.id("_".concat(Random.nextHexRandom16()))
.issuer(RandomStringUtils.randomAlphabetic(10))
@@ -145,37 +142,37 @@ public class EidasSignalServletTest {
.inResponseTo("_".concat(Random.nextHexRandom16()))
.subjectNameIdFormat("afaf")
.relayState(relayState);
-
+
AuthenticationResponse eidasResp = iLightResponse.build();
- BinaryLightToken token = connector.putResponse(eidasResp);
- httpReq.setParameter(EidasParameterKeys.TOKEN.toString(),
+ BinaryLightToken token = connector.putResponse(eidasResp);
+ httpReq.setParameter(EidasParameterKeys.TOKEN.toString(),
Base64.getEncoder().encodeToString(token.getTokenBytes()));
-
+
//execute test
controller.restoreEidasAuthProcess(httpReq, httpResp);
-
-
+
+
//validate state
Assert.assertNotNull("eIDAS response", httpReq.getAttribute(Constants.DATA_FULL_EIDAS_RESPONSE));
- Assert.assertEquals("wrong eIDAS response", eidasResp,
+ Assert.assertEquals("wrong eIDAS response", eidasResp,
httpReq.getAttribute(Constants.DATA_FULL_EIDAS_RESPONSE));
-
- Assert.assertNotNull("missing error", protAuthService.getException());
- Assert.assertEquals("Wrong errorId", "PendingRequest object is not of type 'RequestImpl.class'",
+
+ Assert.assertNotNull("missing error", protAuthService.getException());
+ Assert.assertEquals("Wrong errorId", "PendingRequest object is not of type 'RequestImpl.class'",
((EaafException) protAuthService.getException()).getErrorId());
-
+
}
-
+
@Test
public void withOutRelayStateMissingPendingReq() throws IOException, EaafException, SpecificCommunicationException {
- //set-up
- String pendingReqId = RandomStringUtils.randomAlphanumeric(10);
+ //set-up
+ String pendingReqId = RandomStringUtils.randomAlphanumeric(10);
pendingReq.setPendingReqId(pendingReqId);
storage.storePendingRequest(pendingReq);
-
+
String inResponseTo = "_".concat(Random.nextHexRandom16());
-
+
Builder iLightResponse = new AuthenticationResponse.Builder();
iLightResponse.id("_".concat(Random.nextHexRandom16()))
.issuer(RandomStringUtils.randomAlphabetic(10))
@@ -183,35 +180,35 @@ public class EidasSignalServletTest {
.statusCode(Constants.SUCCESS_URI)
.inResponseTo(inResponseTo)
.subjectNameIdFormat("afaf");
-
+
AuthenticationResponse eidasResp = iLightResponse.build();
- BinaryLightToken token = connector.putResponse(eidasResp);
- httpReq.setParameter(EidasParameterKeys.TOKEN.toString(),
+ BinaryLightToken token = connector.putResponse(eidasResp);
+ httpReq.setParameter(EidasParameterKeys.TOKEN.toString(),
Base64.getEncoder().encodeToString(token.getTokenBytes()));
-
+
//execute test
controller.restoreEidasAuthProcess(httpReq, httpResp);
-
-
+
+
//validate state
Assert.assertNull("eIDAS response", httpReq.getAttribute(Constants.DATA_FULL_EIDAS_RESPONSE));
Assert.assertNotNull("missing error", protAuthService.getException());
- Assert.assertEquals("Wrong errorId", "auth.26",
+ Assert.assertEquals("Wrong errorId", "auth.26",
((EaafException) protAuthService.getException()).getErrorId());
-
+
}
-
+
@Test
public void withInResponseToElement() throws IOException, EaafException, SpecificCommunicationException {
- //set-up
- String pendingReqId = RandomStringUtils.randomAlphanumeric(10);
+ //set-up
+ String pendingReqId = RandomStringUtils.randomAlphanumeric(10);
pendingReq.setPendingReqId(pendingReqId);
storage.storePendingRequest(pendingReq);
-
+
String inResponseTo = "_".concat(Random.nextHexRandom16());
transStore.put(inResponseTo, pendingReqId, -1);
-
+
Builder iLightResponse = new AuthenticationResponse.Builder();
iLightResponse.id("_".concat(Random.nextHexRandom16()))
.issuer(RandomStringUtils.randomAlphabetic(10))
@@ -219,26 +216,26 @@ public class EidasSignalServletTest {
.statusCode(Constants.SUCCESS_URI)
.inResponseTo(inResponseTo)
.subjectNameIdFormat("afaf");
-
+
AuthenticationResponse eidasResp = iLightResponse.build();
- BinaryLightToken token = connector.putResponse(eidasResp);
- httpReq.setParameter(EidasParameterKeys.TOKEN.toString(),
+ BinaryLightToken token = connector.putResponse(eidasResp);
+ httpReq.setParameter(EidasParameterKeys.TOKEN.toString(),
Base64.getEncoder().encodeToString(token.getTokenBytes()));
-
+
//execute test
controller.restoreEidasAuthProcess(httpReq, httpResp);
-
-
+
+
//validate state
Assert.assertNotNull("eIDAS response", httpReq.getAttribute(Constants.DATA_FULL_EIDAS_RESPONSE));
- Assert.assertEquals("wrong eIDAS response", eidasResp,
+ Assert.assertEquals("wrong eIDAS response", eidasResp,
httpReq.getAttribute(Constants.DATA_FULL_EIDAS_RESPONSE));
-
- Assert.assertNotNull("missing error", protAuthService.getException());
- Assert.assertEquals("Wrong errorId", "PendingRequest object is not of type 'RequestImpl.class'",
+
+ Assert.assertNotNull("missing error", protAuthService.getException());
+ Assert.assertEquals("Wrong errorId", "PendingRequest object is not of type 'RequestImpl.class'",
((EaafException) protAuthService.getException()).getErrorId());
-
+
}
-
+
}
diff --git a/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/SzrClientTestProduction.java b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/SzrClientTestProduction.java
deleted file mode 100644
index 31b05676..00000000
--- a/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/SzrClientTestProduction.java
+++ /dev/null
@@ -1,294 +0,0 @@
-/*
- * Copyright 2018 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;
-
-import java.io.IOException;
-import java.security.InvalidKeyException;
-import java.security.MessageDigest;
-import java.security.NoSuchProviderException;
-import java.util.List;
-
-import org.apache.commons.lang3.RandomStringUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.bouncycastle.util.encoders.Base64;
-import org.joda.time.DateTime;
-import org.junit.Assert;
-import org.junit.Ignore;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.test.annotation.IfProfileValue;
-import org.springframework.test.context.ContextConfiguration;
-import org.springframework.test.context.TestPropertySource;
-import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
-import org.springframework.util.Base64Utils;
-import org.w3c.dom.Element;
-
-import at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants;
-import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.ErnbEidData;
-import at.asitplus.eidas.specific.modules.auth.eidas.v2.exception.EidasSAuthenticationException;
-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.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;
-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;
-import szrservices.PersonInfoType;
-import szrservices.SZRException_Exception;
-import szrservices.TravelDocumentType;
-
-
-@IfProfileValue(name = "spring.profiles.active", value = "devEnvironment")
-@RunWith(SpringJUnit4ClassRunner.class)
-@ContextConfiguration(locations = {
- "/SpringTest-context_tasks_test.xml",
- "/SpringTest-context_basic_realConfig.xml"})
-@TestPropertySource(locations = {
- //"classpath:/application.properties",
- "file:/home/tlenz/Projekte/config/ms_connector/default_config.properties",
- })
-public class SzrClientTestProduction {
- private static final Logger log = LoggerFactory.getLogger(SzrClientTestProduction.class);
-
- @Autowired
- SzrClient szrClient;
- @Autowired
- IConfiguration basicConfig;
-
- private static final String givenName = "Franz";
- private static final String familyName = "Mustermann";
- // private static final String dateOfBirth = "1989-05-05";
- private static final String dateOfBirth = "1989-05-04";
- private static final String eIDASeID = "IS/AT/1234ffgsdfg56789ABCDEF";
-
- private static final String DUMMY_TARGET = EaafConstants.URN_PREFIX_CDID + "ZP";
-
- @Test
- public void dummyTest() {
-
- }
-
- @Test
- public void getVsz() throws SzrCommunicationException, EidasSAuthenticationException {
- String vsz = szrClient.getEncryptedStammzahl(getPersonInfo());
- Assert.assertNotNull("vsz", vsz);
-
- }
-
- @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());
- String eidStatus = "urn:eidgvat:eid.status.eidas";
- ErnbEidData eidData = new ErnbEidData();
- eidData.setFamilyName(familyName);
- eidData.setGivenName(givenName);
- eidData.setDateOfBirth(new DateTime());
- eidData.setCitizenCountryCode("IS");
- eidData.setPseudonym("1234sdgsdfg56789ABCDEF");
-
-
- String eidasBind = szrClient.getEidsaBind(vsz, bindingPubKey, eidStatus, eidData);
-
- Assert.assertNotNull("eidasBind", eidasBind);
-
- }
-
-
- @Test
- public void getIdentityLinkRawMode() throws SZRException_Exception, EaafParserException,
- NoSuchProviderException, IOException, InvalidKeyException, EidasSAuthenticationException {
- log.debug("Starting connecting SZR Gateway");
- final IdentityLinkType result = szrClient.getIdentityLinkInRawMode(
- getPersonInfo());
-
- final Element idlFromSzr = (Element) result.getAssertion();
- final IIdentityLink identityLink = new SimpleIdentityLinkAssertionParser(idlFromSzr).parseIdentityLink();
-
- if (identityLink == null) {
- throw new SzrCommunicationException("ernb.00", new Object[] { "NO IDL object" });
- }
-
- System.out.println(identityLink.getSerializedSamlAssertion());
-
- if (StringUtils.isEmpty(identityLink.getFamilyName())) {
- throw new SzrCommunicationException("ernb.00", new Object[] { "NO FamilyName from IDL" });
- }
-
- if (StringUtils.isEmpty(identityLink.getGivenName())) {
- throw new SzrCommunicationException("ernb.00", new Object[] { "NO GivenName from IDL" });
- }
-
- if (StringUtils.isEmpty(identityLink.getDateOfBirth())) {
- throw new SzrCommunicationException("ernb.00", new Object[] { "NO DateOfBirthName from IDL" });
- }
-
- if (StringUtils.isEmpty(identityLink.getIdentificationType())) {
- throw new SzrCommunicationException("ernb.00", new Object[] { "NO baseIdType from IDL" });
- }
-
- if (StringUtils.isEmpty(identityLink.getIdentificationValue())) {
- throw new SzrCommunicationException("ernb.00", new Object[] { "NO baseId from IDL" });
- }
-
- if (StringUtils.isEmpty(identityLink.getSerializedSamlAssertion())) {
- throw new SzrCommunicationException("ernb.00", new Object[] { "NO serialized IDL" });
- }
-
- if (identityLink.getSamlAssertion() == null) {
- throw new SzrCommunicationException("ernb.00", new Object[] { "NO raw IDL" });
- }
-
- }
-
-
- @Ignore
- @Test
- public void getBpkTest() throws SZRException_Exception, EidasSAuthenticationException {
- final List<String> bPK = szrClient.getBpk(getPersonInfo(), DUMMY_TARGET,
- basicConfig.getBasicConfiguration(
- Constants.CONIG_PROPS_EIDAS_SZRCLIENT_PARAMS_VKZ,
- "no VKZ defined"));
-
- if (bPK.isEmpty()) {
- throw new SzrCommunicationException("ernb.01", new Object[]{"bPK list is empty"});
- }
- for (String b : bPK) {
- if (StringUtils.isEmpty(b)) {
- throw new SzrCommunicationException("ernb.01", new Object[]{"bPK is null or empty"});
- }
- }
-
- }
-
- private String createHashFromUniqueId(String uniqueId) throws EidasSAuthenticationException {
- try {
- final MessageDigest md = MessageDigest.getInstance("SHA-256");
- final byte[] hash = md.digest(uniqueId.getBytes("UTF-8"));
- final String hashBase64 = new String(Base64Utils.encode(hash), "UTF-8").replaceAll("\r\n", "");
- return hashBase64;
-
- } catch (final Exception ex) {
- throw new EidasSAuthenticationException("internal.03", new Object[] {}, ex);
-
- }
- }
-
- 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();
- final TravelDocumentType eDocument = new TravelDocumentType();
-
- naturalPerson.setName(personName);
- personInfo.setPerson(naturalPerson);
-
- // person information
- personName.setFamilyName(familyName);
- personName.setGivenName(givenName);
- naturalPerson.setDateOfBirth(dateOfBirth);
-
- // 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);
-
- }
-
- // set place-of-birth
- naturalPerson.setPlaceOfBirth(RandomStringUtils.randomAlphabetic(5));
-
- //set birthname
- final AlternativeNameType alternativeName = new AlternativeNameType();
- naturalPerson.setAlternativeName(alternativeName);
- alternativeName.setFamilyName(RandomStringUtils.randomAlphabetic(5));
-
-
- return personInfo;
-
- }
-}
diff --git a/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/clients/ErnpRestClientProductionTest.java b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/clients/ErnpRestClientProductionTest.java
new file mode 100644
index 00000000..59cf4520
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/clients/ErnpRestClientProductionTest.java
@@ -0,0 +1,486 @@
+package at.asitplus.eidas.specific.modules.auth.eidas.v2.test.clients;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertThrows;
+import static org.junit.Assert.assertTrue;
+
+import org.apache.commons.lang3.RandomStringUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.junit.Ignore;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.annotation.IfProfileValue;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.TestPropertySource;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.clients.ernp.ErnpRestClient.ErnpRegisterResult;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.clients.ernp.IErnpClient;
+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.exception.EidasSAuthenticationException;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.handler.DeSpecificDetailSearchProcessor;
+import at.gv.bmi.namespace.zmr_su.zmr._20040201.PersonSuchenRequest;
+import lombok.SneakyThrows;
+
+@IfProfileValue(name = "spring.profiles.active", value = "devEnvironment")
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration(locations = {
+ "/SpringTest-context_tasks_test.xml",
+ "/SpringTest-context_basic_realConfig.xml"})
+@TestPropertySource(locations = {
+ //"classpath:/application.properties",
+ "file:/home/tlenz/Projekte/config/ms_connector/default_config.properties",
+ })
+public class ErnpRestClientProductionTest {
+
+ //private static final String TEST_PREFIX = "XXX_";
+ private static final String TEST_PREFIX = "";
+
+ @Autowired IErnpClient client;
+
+ @Test
+ @SneakyThrows
+ public void searchWithPersonalIdentifierServerError() {
+ String personalIdentifierFirst = "7cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit";
+ personalIdentifierFirst = "";
+ final String cc = "DE";
+ final SimpleEidasData eidasDataFirst = SimpleEidasData.builder()
+ .citizenCountryCode(cc)
+ .familyName("XXXvon Brandenburg")
+ .givenName("XXXClaus - Maria")
+ .dateOfBirth("1994-12-00")
+ .personalIdentifier(cc + "/AT/" + personalIdentifierFirst)
+ .pseudonym(personalIdentifierFirst)
+ .build();
+
+ // execute operation
+ EidasSAuthenticationException error = assertThrows("wrong Exception", EidasSAuthenticationException.class,
+ () -> client.searchWithPersonIdentifier(
+ eidasDataFirst.getPseudonym(), eidasDataFirst.getCitizenCountryCode()));
+
+ assertEquals("wrong errorCode", "module.eidasauth.matching.11", error.getErrorId());
+
+ }
+
+ @Ignore
+ @Test
+ @SneakyThrows
+ public void searchWithPersonalIdentifierSuccess() {
+ final String personalIdentifierFirst = "7cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit";
+ final String cc = "CZ";
+ final SimpleEidasData eidasDataFirst = SimpleEidasData.builder()
+ .citizenCountryCode(cc)
+ .familyName("DOPISNÍ")
+ .givenName("DANA")
+ .dateOfBirth("1996-01-01")
+ .personalIdentifier(cc + "/AT/" + personalIdentifierFirst)
+ .pseudonym(personalIdentifierFirst)
+ .build();
+
+ // execute operation
+ ErnpRegisterResult resp = client.searchWithPersonIdentifier(
+ eidasDataFirst.getPseudonym(), eidasDataFirst.getCitizenCountryCode());
+
+ // validate state
+ assertNotNull("no ERnP response", resp);
+ assertEquals("wrong resp size", 1, resp.getPersonResult().size());
+ checkErnpResult(resp.getPersonResult().get(0), eidasDataFirst, 1);
+ assertEquals("wrong bpk", "vypyCkyczK7i+cgPWlJasuJphIA=",
+ resp.getPersonResult().get(0).getBpk());
+
+ }
+
+ @Test
+ @SneakyThrows
+ public void searchWithPersonalIdentifierNoResult() {
+ final String personalIdentifierFirst = RandomStringUtils.randomAlphanumeric(10);
+ final String cc = "CZ";
+ final SimpleEidasData eidasDataFirst = SimpleEidasData.builder()
+ .citizenCountryCode(cc)
+ .familyName("DOPISNÍ")
+ .givenName("DANA")
+ .dateOfBirth("1996-01-01")
+ .personalIdentifier(cc + "/AT/" + personalIdentifierFirst)
+ .pseudonym(personalIdentifierFirst)
+ .build();
+
+ // execute operation
+ ErnpRegisterResult resp = client.searchWithPersonIdentifier(
+ eidasDataFirst.getPseudonym(), eidasDataFirst.getCitizenCountryCode());
+
+ // validate state
+ assertNotNull("no ERnP response", resp);
+ assertEquals("wrong resp size", 0, resp.getPersonResult().size());
+
+ }
+
+ @Ignore
+ @Test
+ @SneakyThrows
+ public void searchWithMdsSuccess() {
+ final String personalIdentifierFirst = "7cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit";
+ final String cc = "CZ";
+ final SimpleEidasData eidasDataFirst = SimpleEidasData.builder()
+ .citizenCountryCode(cc)
+ .familyName("DOPISNÍ")
+ .givenName("DANA")
+ .dateOfBirth("1996-01-01")
+ .personalIdentifier(cc + "/AT/" + personalIdentifierFirst)
+ .pseudonym(personalIdentifierFirst)
+ .build();
+
+ // execute operation
+ ErnpRegisterResult resp = client.searchWithMds(eidasDataFirst.getGivenName(), eidasDataFirst.getFamilyName(),
+ eidasDataFirst.getDateOfBirth(), eidasDataFirst.getCitizenCountryCode());
+
+ // validate state
+ assertNotNull("no ERnP response", resp);
+ assertEquals("wrong resp size", 1, resp.getPersonResult().size());
+ checkErnpResult(resp.getPersonResult().get(0), eidasDataFirst, 1);
+ assertEquals("wrong bpk", "vypyCkyczK7i+cgPWlJasuJphIA=",
+ resp.getPersonResult().get(0).getBpk());
+
+ }
+
+ @Test
+ @SneakyThrows
+ public void searchWithMdsNoResult() {
+ final String personalIdentifierFirst = RandomStringUtils.randomAlphanumeric(10);
+ final String cc = "CZ";
+ final SimpleEidasData eidasDataFirst = SimpleEidasData.builder()
+ .citizenCountryCode(cc)
+ .familyName(RandomStringUtils.randomAlphanumeric(10))
+ .givenName(RandomStringUtils.randomAlphanumeric(10))
+ .dateOfBirth("1996-10-15")
+ .personalIdentifier(cc + "/AT/" + personalIdentifierFirst)
+ .pseudonym(personalIdentifierFirst)
+ .build();
+
+ // execute operation
+ ErnpRegisterResult resp = client.searchWithMds(eidasDataFirst.getGivenName(), eidasDataFirst.getFamilyName(),
+ eidasDataFirst.getDateOfBirth(), eidasDataFirst.getCitizenCountryCode());
+
+ // validate state
+ assertNotNull("no ERnP response", resp);
+ assertEquals("wrong resp size", 0, resp.getPersonResult().size());
+
+ }
+
+ @Test
+ @SneakyThrows
+ public void addTwiceSameMdsAndMdsSearch() {
+ // *** add new random first person ***
+ final String addFirstPersonPersonalIdentifier = RandomStringUtils.randomAlphanumeric(10);
+ final String cc = "XZ";
+ final SimpleEidasData addFirstPersonData = SimpleEidasData.builder()
+ .citizenCountryCode(cc)
+ .familyName(TEST_PREFIX + RandomStringUtils.randomAlphabetic(8))
+ .givenName(TEST_PREFIX + RandomStringUtils.randomAlphabetic(8))
+ .dateOfBirth("1996-01-01")
+ .personalIdentifier(cc + "/AT/" + addFirstPersonPersonalIdentifier)
+ .pseudonym(addFirstPersonPersonalIdentifier)
+ .build();
+
+ // add entry
+ ErnpRegisterResult addFirstPersonResponse = client.add(addFirstPersonData);
+
+ // verify added entry
+ assertNotNull("no ERnP response", addFirstPersonResponse);
+ assertEquals("wrong resp size", 1, addFirstPersonResponse.getPersonResult().size());
+ checkErnpResult(addFirstPersonResponse.getPersonResult().get(0), addFirstPersonData, 1);
+
+
+ // *** add new random second person with same MDS ***
+ final String addSecondPersonPersonalIdentifier = RandomStringUtils.randomAlphanumeric(10);
+ final SimpleEidasData addSecondPersonData = addFirstPersonData.toBuilder()
+ .personalIdentifier(cc + "/AT/" + addSecondPersonPersonalIdentifier)
+ .pseudonym(addSecondPersonPersonalIdentifier)
+ .build();
+
+ // add entry
+ ErnpRegisterResult addSecondPersonResponse = client.add(addSecondPersonData);
+
+ // verify added entry
+ assertNotNull("no ERnP response", addSecondPersonResponse);
+ assertEquals("wrong resp size", 1, addSecondPersonResponse.getPersonResult().size());
+ checkErnpResult(addSecondPersonResponse.getPersonResult().get(0), addSecondPersonData, 1);
+
+
+
+ // search with MDS
+ ErnpRegisterResult resp = client.searchWithMds(addFirstPersonData.getGivenName(), addFirstPersonData.getFamilyName(),
+ addFirstPersonData.getDateOfBirth(), cc);
+
+ // validate state
+ assertNotNull("no ERnP response", resp);
+ assertEquals("wrong resp size", 2, resp.getPersonResult().size());
+
+ }
+
+
+
+ @Test
+ @SneakyThrows
+ public void addSearchAndPersonalIdUpdate() {
+ // *** add new random entry ***
+
+ final String addPersonPersonalIdentifier = RandomStringUtils.randomAlphanumeric(10);
+ final String cc = "DE";
+ final SimpleEidasData addPersonData = SimpleEidasData.builder()
+ .citizenCountryCode(cc)
+ .familyName(TEST_PREFIX + RandomStringUtils.randomAlphabetic(8))
+ .givenName(TEST_PREFIX + RandomStringUtils.randomAlphabetic(8))
+ .dateOfBirth("1996-01-01")
+ .personalIdentifier(cc + "/AT/" + addPersonPersonalIdentifier)
+ .pseudonym(addPersonPersonalIdentifier)
+ .birthName(RandomStringUtils.randomAlphabetic(8))
+ .placeOfBirth(RandomStringUtils.randomAlphabetic(8))
+ .build();
+
+ // add entry
+ ErnpRegisterResult addPersonResponse = client.add(addPersonData);
+
+ // verify added entry
+ assertNotNull("no ERnP response", addPersonResponse);
+ assertEquals("wrong resp size", 1, addPersonResponse.getPersonResult().size());
+ checkErnpResult(addPersonResponse.getPersonResult().get(0), addPersonData, 1);
+
+
+ // *** search entry by countrySpecifics ***
+ final String ccPersonPersonalIdentifier = RandomStringUtils.randomAlphanumeric(10);
+ SimpleEidasData ccSpecificData = addPersonData.toBuilder()
+ .personalIdentifier(cc + "/AT/" + ccPersonPersonalIdentifier)
+ .pseudonym(ccPersonPersonalIdentifier)
+ .build();
+ PersonSuchenRequest ccSearchReq =
+ new DeSpecificDetailSearchProcessor().generateSearchRequest(ccSpecificData);
+
+ // search CC specific
+ ErnpRegisterResult ccSearchResponse = client.searchCountrySpecific(ccSearchReq, cc);
+
+ // verify cc specific result
+ assertNotNull("no ERnP response", ccSearchResponse);
+ assertEquals("wrong resp size", 1, ccSearchResponse.getPersonResult().size());
+ RegisterResult ccSearchPersResult = ccSearchResponse.getPersonResult().get(0);
+ checkErnpResult(ccSearchResponse.getPersonResult().get(0), addPersonData, 1);
+ assertEquals("wrong bPK", addPersonResponse.getPersonResult().get(0).getBpk(),
+ ccSearchPersResult.getBpk());
+ assertFalse("no PersonalId change detected", ccSpecificData.equalsRegisterData(ccSearchPersResult));
+
+
+ // *** update entry because PersonalId has changed ***
+ // update ERnP entry
+ ErnpRegisterResult updateResponse = client.update(ccSearchPersResult, ccSpecificData);
+ assertNotNull("no ERnP response", updateResponse);
+ assertEquals("wrong resp size", 1, updateResponse.getPersonResult().size());
+ checkErnpResult(updateResponse.getPersonResult().get(0), addPersonData, 2);
+ assertEquals("wrong bPK", addPersonResponse.getPersonResult().get(0).getBpk(), ccSearchPersResult.getBpk());
+ checkPersonalIdentifier(updateResponse.getPersonResult().get(0), addPersonPersonalIdentifier);
+ checkPersonalIdentifier(updateResponse.getPersonResult().get(0), ccPersonPersonalIdentifier);
+
+
+
+ // *** search by first personalIdentifier
+ ErnpRegisterResult persIdSearchFirstResp = client.searchWithPersonIdentifier(
+ addPersonPersonalIdentifier, cc);
+ assertNotNull("no ERnP response", persIdSearchFirstResp);
+ assertEquals("wrong resp size", 1, persIdSearchFirstResp.getPersonResult().size());
+ assertEquals("wrong bPK", addPersonResponse.getPersonResult().get(0).getBpk(), ccSearchPersResult.getBpk());
+ checkPersonalIdentifier(updateResponse.getPersonResult().get(0), addPersonPersonalIdentifier);
+ checkPersonalIdentifier(updateResponse.getPersonResult().get(0), ccPersonPersonalIdentifier);
+ checkErnpResult(updateResponse.getPersonResult().get(0), addPersonData, 2);
+
+
+
+ // *** search by second personalIdentifier
+ ErnpRegisterResult persIdSearchSecondResp = client.searchWithPersonIdentifier(
+ ccPersonPersonalIdentifier, cc);
+ assertNotNull("no ERnP response", persIdSearchSecondResp);
+ assertEquals("wrong resp size", 1, persIdSearchSecondResp.getPersonResult().size());
+ assertEquals("wrong bPK", addPersonResponse.getPersonResult().get(0).getBpk(), ccSearchPersResult.getBpk());
+ checkPersonalIdentifier(updateResponse.getPersonResult().get(0), addPersonPersonalIdentifier);
+ checkPersonalIdentifier(updateResponse.getPersonResult().get(0), ccPersonPersonalIdentifier);
+ checkErnpResult(updateResponse.getPersonResult().get(0), addPersonData, 2);
+
+ }
+
+ @Test
+ @SneakyThrows
+ public void addSearchAndMdsUpdate() {
+ // *** add new random entry ***
+
+ final String addPersonPersonalIdentifier = RandomStringUtils.randomAlphanumeric(10);
+ final String cc = "DE";
+ final SimpleEidasData addPersonData = SimpleEidasData.builder()
+ .citizenCountryCode(cc)
+ .familyName(TEST_PREFIX + RandomStringUtils.randomAlphabetic(8))
+ .givenName(TEST_PREFIX + RandomStringUtils.randomAlphabetic(8))
+ .dateOfBirth("1985-05-05")
+ .personalIdentifier(cc + "/AT/" + addPersonPersonalIdentifier)
+ .pseudonym(addPersonPersonalIdentifier)
+ .birthName(RandomStringUtils.randomAlphabetic(8))
+ .placeOfBirth(RandomStringUtils.randomAlphabetic(8))
+ .build();
+
+ // add entry
+ ErnpRegisterResult addPersonResponse = client.add(addPersonData);
+
+ // verify added entry
+ assertNotNull("no ERnP response", addPersonResponse);
+ assertEquals("wrong resp size", 1, addPersonResponse.getPersonResult().size());
+ checkErnpResult(addPersonResponse.getPersonResult().get(0), addPersonData, 1);
+
+
+ // *** search entry by personalId ***
+ SimpleEidasData mdsHasChanged = addPersonData.toBuilder()
+ .givenName(RandomStringUtils.randomAlphanumeric(10))
+ .familyName(RandomStringUtils.randomAlphanumeric(10))
+ .build();
+
+ // search by personalId
+ ErnpRegisterResult personalIdResponse = client.searchWithPersonIdentifier(addPersonPersonalIdentifier, cc);
+
+ // verify personalId result
+ assertNotNull("no ERnP response", personalIdResponse);
+ assertEquals("wrong resp size", 1, personalIdResponse.getPersonResult().size());
+ RegisterResult persIdSearchResult = personalIdResponse.getPersonResult().get(0);
+ checkErnpResult(personalIdResponse.getPersonResult().get(0), addPersonData, 1);
+ assertEquals("wrong bPK", addPersonResponse.getPersonResult().get(0).getBpk(),
+ persIdSearchResult.getBpk());
+ assertFalse("no MDS change detected", mdsHasChanged.equalsRegisterData(persIdSearchResult));
+
+
+ // *** update entry because MDS has changed ***
+ // update ERnP entry
+ ErnpRegisterResult updateResponse = client.update(persIdSearchResult, mdsHasChanged);
+ assertNotNull("no ERnP response", updateResponse);
+ assertEquals("wrong resp size", 1, updateResponse.getPersonResult().size());
+ checkErnpResult(updateResponse.getPersonResult().get(0), mdsHasChanged, 1);
+ assertEquals("wrong bPK", addPersonResponse.getPersonResult().get(0).getBpk(), persIdSearchResult.getBpk());
+ checkPersonalIdentifier(updateResponse.getPersonResult().get(0), addPersonPersonalIdentifier);
+
+
+ // *** search by first personalIdentifier
+ ErnpRegisterResult persIdSearchFirstResp = client.searchWithPersonIdentifier(
+ addPersonPersonalIdentifier, cc);
+ assertNotNull("no ERnP response", persIdSearchFirstResp);
+ assertEquals("wrong resp size", 1, persIdSearchFirstResp.getPersonResult().size());
+ assertEquals("wrong bPK", addPersonResponse.getPersonResult().get(0).getBpk(), persIdSearchResult.getBpk());
+ checkPersonalIdentifier(updateResponse.getPersonResult().get(0), addPersonPersonalIdentifier);
+ checkErnpResult(updateResponse.getPersonResult().get(0), mdsHasChanged, 1);
+
+ // *** search by first personalIdentifier
+ ErnpRegisterResult mdsSearchResp = client.searchWithMds(
+ mdsHasChanged.getGivenName(), mdsHasChanged.getFamilyName(), mdsHasChanged.getDateOfBirth(), cc);
+ assertNotNull("no ERnP response", mdsSearchResp);
+ assertEquals("wrong resp size", 1, mdsSearchResp.getPersonResult().size());
+ assertEquals("wrong bPK", addPersonResponse.getPersonResult().get(0).getBpk(), persIdSearchResult.getBpk());
+ checkPersonalIdentifier(updateResponse.getPersonResult().get(0), addPersonPersonalIdentifier);
+ checkErnpResult(updateResponse.getPersonResult().get(0), mdsHasChanged, 1);
+
+
+
+ }
+
+
+ @Ignore
+ @Test
+ @SneakyThrows
+ public void addErnpEntry() {
+ final String personalIdentifierFirst = "7cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit";
+ final String cc = "CZ";
+ final SimpleEidasData eidasDataFirst = SimpleEidasData.builder()
+ .citizenCountryCode(cc)
+ .familyName("DOPISNÍ")
+ .givenName("DANA")
+ .dateOfBirth("1996-01-01")
+ .personalIdentifier(cc + "/AT/" + personalIdentifierFirst)
+ .pseudonym(personalIdentifierFirst)
+ .build();
+
+ // execute operation
+ ErnpRegisterResult resp = client.add(eidasDataFirst);
+
+ // validate state
+ assertNotNull("no ERnP response", resp);
+ assertEquals("wrong resp size", 1, resp.getPersonResult().size());
+ checkErnpResult(resp.getPersonResult().get(0), eidasDataFirst, 1);
+
+ }
+
+ @Ignore
+ @Test
+ @SneakyThrows
+ public void addErnpEntryE2ETest() {
+ final String personalIdentifierFirst = "adfasfsadvsafsafweqrwr432553324";
+ final String cc = "EE";
+ final SimpleEidasData eidasDataFirst = SimpleEidasData.builder()
+ .citizenCountryCode(cc)
+ .familyName("Mustermatch01")
+ .givenName("Max")
+ .dateOfBirth("1965-01-01")
+ .personalIdentifier(cc + "/AT/" + personalIdentifierFirst)
+ .pseudonym(personalIdentifierFirst)
+ .build();
+
+ // execute operation
+ ErnpRegisterResult resp = client.add(eidasDataFirst);
+
+ // validate state
+ assertNotNull("no ERnP response", resp);
+ assertEquals("wrong resp size", 1, resp.getPersonResult().size());
+ checkErnpResult(resp.getPersonResult().get(0), eidasDataFirst, 1);
+
+ }
+
+ @Test
+ @SneakyThrows
+ public void addRandomErnpEntry() {
+ final String addPersonPersonalIdentifier = RandomStringUtils.randomAlphanumeric(10);
+ final String cc = "XZ";
+ final SimpleEidasData addPersonData = SimpleEidasData.builder()
+ .citizenCountryCode(cc)
+ .familyName(TEST_PREFIX + RandomStringUtils.randomAlphabetic(8))
+ .givenName(TEST_PREFIX + RandomStringUtils.randomAlphabetic(8))
+ .dateOfBirth("1985-05-05")
+ .personalIdentifier(cc + "/AT/" + addPersonPersonalIdentifier)
+ .pseudonym(addPersonPersonalIdentifier)
+ .birthName(RandomStringUtils.randomAlphabetic(8))
+ .placeOfBirth(RandomStringUtils.randomAlphabetic(8))
+ .build();
+
+ // add entry
+ ErnpRegisterResult addPersonResponse = client.add(addPersonData);
+
+ // verify added entry
+ assertNotNull("no ERnP response", addPersonResponse);
+ assertEquals("wrong resp size", 1, addPersonResponse.getPersonResult().size());
+ checkErnpResult(addPersonResponse.getPersonResult().get(0), addPersonData, 1);
+
+ }
+
+
+ private void checkErnpResult(RegisterResult registerResult, final SimpleEidasData eidasData, int numOfPseudonyms) {
+ assertEquals("wrong familyname", eidasData.getFamilyName(), registerResult.getFamilyName());
+ assertEquals("wrong givenname", eidasData.getGivenName(), registerResult.getGivenName());
+ assertEquals("wrong birthday", eidasData.getDateOfBirth(), registerResult.getDateOfBirth());
+ assertEquals("wrong personalId size", numOfPseudonyms, registerResult.getPseudonym().size());
+ assertEquals("wrong placeOfBirth", eidasData.getPlaceOfBirth(), registerResult.getPlaceOfBirth());
+ assertEquals("wrong birthName", eidasData.getBirthName(), registerResult.getBirthName());
+ assertTrue("no bPK", StringUtils.isNotEmpty(registerResult.getBpk()));
+ checkPersonalIdentifier(registerResult, eidasData.getPseudonym());
+
+ }
+
+ private void checkPersonalIdentifier(RegisterResult registerResult, String pseudonym) {
+ assertTrue("wrong or no personalId", registerResult.getPseudonym().stream()
+ .filter(el -> pseudonym.equals(el))
+ .findFirst()
+ .isPresent());
+
+ }
+}
diff --git a/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/clients/ErnpRestClientTest.java b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/clients/ErnpRestClientTest.java
new file mode 100644
index 00000000..a9e10de6
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/clients/ErnpRestClientTest.java
@@ -0,0 +1,1085 @@
+package at.asitplus.eidas.specific.modules.auth.eidas.v2.test.clients;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+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 java.net.HttpURLConnection;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.UUID;
+import java.util.concurrent.TimeUnit;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.RandomStringUtils;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+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 com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import at.asitplus.eidas.specific.core.test.config.dummy.MsConnectorDummyConfigMap;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.clients.ernp.ErnpRestClient.ErnpRegisterResult;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.clients.ernp.IErnpClient;
+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.exception.EidasSAuthenticationException;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.handler.DeSpecificDetailSearchProcessor;
+import at.gv.egiz.eaaf.core.impl.utils.TransactionIdUtils;
+import lombok.SneakyThrows;
+import okhttp3.mockwebserver.MockResponse;
+import okhttp3.mockwebserver.MockWebServer;
+import okhttp3.mockwebserver.RecordedRequest;
+import okhttp3.mockwebserver.SocketPolicy;
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration(locations = {
+ "/SpringTest-context_tasks_test.xml",
+ "/SpringTest-context_basic_mapConfig.xml" })
+@DirtiesContext(classMode = ClassMode.AFTER_CLASS)
+public class ErnpRestClientTest {
+
+ @Autowired MsConnectorDummyConfigMap basicConfig;
+ @Autowired IErnpClient client;
+
+ private static ObjectMapper mapper = new ObjectMapper();
+ private static MockWebServer mockWebServer;
+
+ /**
+ * JUnit class initializer.
+ *
+ * @throws Exception In case of an OpenSAML3 initialization error
+ */
+ @BeforeClass
+ @SneakyThrows
+ public static void classInitializer() {
+ mockWebServer = new MockWebServer();
+ mockWebServer.start(1718);
+
+ }
+
+ @AfterClass
+ @SneakyThrows
+ public static void resetTestEnviroment() {
+ mockWebServer.shutdown();
+
+ }
+
+ /**
+ * jUnit test initializer.
+ *
+ * @throws InterruptedException in case of an error
+ */
+ @Before
+ public void initialize() throws InterruptedException {
+ mockWebServer.takeRequest(2, TimeUnit.MILLISECONDS);
+ TransactionIdUtils.setTransactionId(UUID.randomUUID().toString());
+
+ }
+
+
+ @Test
+ @SneakyThrows
+ public void searchWithPersonalIdentifierServerError() {
+ final String personalIdentifierFirst = "7cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit";
+ final String cc = "DE";
+ final SimpleEidasData eidasDataFirst = SimpleEidasData.builder()
+ .citizenCountryCode(cc)
+ .familyName("XXXvon Brandenburg")
+ .givenName("XXXClaus - Maria")
+ .dateOfBirth("1994-12-31")
+ .personalIdentifier(cc + "/AT/" + personalIdentifierFirst)
+ .pseudonym(personalIdentifierFirst)
+ .build();
+
+ // set ERnP response
+ mockWebServer.enqueue(new MockResponse().setResponseCode(500)
+ .setBody("Internal error"));
+
+ // execute operation
+ EidasSAuthenticationException error = assertThrows("wrong Exception", EidasSAuthenticationException.class,
+ () -> client.searchWithPersonIdentifier(
+ eidasDataFirst.getPseudonym(), eidasDataFirst.getCitizenCountryCode()));
+
+ mockWebServer.takeRequest();
+ assertEquals("wrong errorCode", "module.eidasauth.matching.11", error.getErrorId());
+
+ }
+
+ @Test
+ @SneakyThrows
+ public void searchWithPersonalIdentifierSuccess() {
+ final String personalIdentifierFirst = "7cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit";
+ final String cc = "DE";
+ final SimpleEidasData eidasDataFirst = SimpleEidasData.builder()
+ .citizenCountryCode(cc)
+ .familyName("XXXvon Brandenburg")
+ .givenName("XXXClaus - Maria")
+ .dateOfBirth("1994-12-31")
+ .personalIdentifier(cc + "/AT/" + personalIdentifierFirst)
+ .pseudonym(personalIdentifierFirst)
+ .build();
+
+
+ // set ERnP response
+ mockWebServer.enqueue(new MockResponse().setResponseCode(200)
+ .setBody(IOUtils.toString(
+ ErnpRestClientTest.class.getResourceAsStream("/data/ernp/ernp_handbook_example.json"),
+ "UTF-8"))
+ .setHeader("Content-Type", "application/json;charset=utf-8"));
+
+
+ // execute operation
+ ErnpRegisterResult resp = client.searchWithPersonIdentifier(
+ eidasDataFirst.getPseudonym(), eidasDataFirst.getCitizenCountryCode());
+
+ // validate request
+ final RecordedRequest request = mockWebServer.takeRequest();
+ String reqBody = request.getBody().readUtf8();
+ assertFalse("no request body", reqBody.isEmpty());
+
+ // validate state
+ assertNotNull("no ERnP response", resp);
+ assertEquals("wrong resp size", 1, resp.getPersonResult().size());
+
+
+ }
+
+ @Test
+ @SneakyThrows
+ public void searchResidence() {
+ // execute operation
+ ErnpRegisterResult resp = client.searchWithResidenceData(null, null, null, null, null, null);
+ assertNotNull("no ERnP response", resp);
+ assertEquals("wrong resp size", 0, resp.getPersonResult().size());
+
+ }
+
+ @Test
+ @SneakyThrows
+ public void searchWithMdsNoResponse() {
+ final String cc = "CZ";
+ final SimpleEidasData eidasDataFirst = generateRandomEidasData(cc);
+
+ mockWebServer.enqueue(new MockResponse()
+ .setSocketPolicy(SocketPolicy.NO_RESPONSE)
+ .setResponseCode(HttpURLConnection.HTTP_NO_CONTENT));
+
+ // execute operation
+ EidasSAuthenticationException error = assertThrows("wrong Exception", EidasSAuthenticationException.class,
+ () -> client.searchWithMds(eidasDataFirst.getGivenName(), eidasDataFirst.getFamilyName(), eidasDataFirst.getDateOfBirth(), cc));
+ assertEquals("wrong errorCode", "module.eidasauth.matching.11", error.getErrorId());
+ mockWebServer.takeRequest();
+
+
+ }
+
+ @Test
+ @SneakyThrows
+ public void searchWithMdsErrorResponse() {
+ final String cc = "CZ";
+ final SimpleEidasData eidasDataFirst = generateRandomEidasData(cc);
+
+ // set ERnP response
+ mockWebServer.enqueue(new MockResponse().setResponseCode(400)
+ .setBody(IOUtils.toString(
+ ErnpRestClientTest.class.getResourceAsStream("/data/ernp/error_resp.json"),
+ "UTF-8"))
+ .setHeader("Content-Type", "application/json;charset=utf-8"));
+
+ // execute operation
+ EidasSAuthenticationException error = assertThrows("wrong Exception", EidasSAuthenticationException.class,
+ () -> client.searchWithMds(eidasDataFirst.getGivenName(), eidasDataFirst.getFamilyName(), eidasDataFirst.getDateOfBirth(), cc));
+ assertEquals("wrong errorCode", "module.eidasauth.matching.11", error.getErrorId());
+ mockWebServer.takeRequest();
+
+ }
+
+ @Test
+ @SneakyThrows
+ public void searchWithMdsNoResult() {
+ final String cc = "CZ";
+ final SimpleEidasData eidasDataFirst = generateRandomEidasData(cc);
+
+ // set ERnP response
+ mockWebServer.enqueue(new MockResponse().setResponseCode(200)
+ .setBody(IOUtils.toString(
+ ErnpRestClientTest.class.getResourceAsStream("/data/ernp/ernp_empty_resp.json"),
+ "UTF-8"))
+ .setHeader("Content-Type", "application/json;charset=utf-8"));
+
+ // execute operation
+ ErnpRegisterResult resp = client.searchWithMds(eidasDataFirst.getGivenName(), eidasDataFirst.getFamilyName(), eidasDataFirst.getDateOfBirth(), cc);
+
+ // validate request
+ final RecordedRequest request = mockWebServer.takeRequest();
+ String reqBody = request.getBody().readUtf8();
+ assertFalse("no request body", reqBody.isEmpty());
+ JsonNode reqJson = mapper.readTree(reqBody);
+ checkSearchOptions(reqJson, "Searching with MDS only");
+ JsonNode person = getJsonObject(reqJson, "suchdaten");
+ checkJsonElement(person, "familienname", eidasDataFirst.getFamilyName());
+ checkJsonElement(person, "vorname", eidasDataFirst.getGivenName());
+ checkPersonDateOfBirth(person, eidasDataFirst.getDateOfBirth());
+
+ // validate state
+ assertNotNull("no ERnP response", resp);
+ assertEquals("wrong resp size", 0, resp.getPersonResult().size());
+
+ }
+
+ @Test
+ @SneakyThrows
+ public void searchWithMdsSingleResult() {
+ final String cc = "CZ";
+ final SimpleEidasData eidasDataFirst = generateRandomEidasData(cc);
+
+ // set ERnP response
+ mockWebServer.enqueue(new MockResponse().setResponseCode(200)
+ .setBody(IOUtils.toString(
+ ErnpRestClientTest.class.getResourceAsStream("/data/ernp/3_search_with_mds_resp.json"),
+ "UTF-8"))
+ .setHeader("Content-Type", "application/json;charset=utf-8"));
+
+ // execute operation
+ ErnpRegisterResult resp = client.searchWithMds(eidasDataFirst.getGivenName(), eidasDataFirst.getFamilyName(), eidasDataFirst.getDateOfBirth(), cc);
+
+ // validate state
+ mockWebServer.takeRequest();
+ assertNotNull("no ERnP response", resp);
+ assertEquals("wrong resp size", 1, resp.getPersonResult().size());
+ RegisterResult persInfo = resp.getPersonResult().get(0);
+ assertEquals("wrong familyname", "DOPISNÍ", persInfo.getFamilyName());
+ assertEquals("wrong givenName", "DANA", persInfo.getGivenName());
+ assertEquals("wrong dateOfBirth", "1996-01-01", persInfo.getDateOfBirth());
+ assertEquals("wrong bpk", "vypyCkyczK7i+cgPWlJasuJphIA=", persInfo.getBpk());
+ assertEquals("wrong pseudonym", "7cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit", persInfo.getPseudonym().get(0));
+ assertNull("placeOfBirth", persInfo.getPlaceOfBirth());
+ assertNull("birthName", persInfo.getBirthName());
+
+ }
+
+ @Test
+ @SneakyThrows
+ public void searchWithMdsMultiResult() {
+ final String cc = "CZ";
+ final SimpleEidasData eidasDataFirst = generateRandomEidasData(cc);
+
+ // set ERnP response
+ mockWebServer.enqueue(new MockResponse().setResponseCode(200)
+ .setBody(IOUtils.toString(
+ ErnpRestClientTest.class.getResourceAsStream("/data/ernp/4_search_with_mds_multi_resp.json"),
+ "UTF-8"))
+ .setHeader("Content-Type", "application/json;charset=utf-8"));
+
+ // execute operation
+ ErnpRegisterResult resp = client.searchWithMds(eidasDataFirst.getGivenName(), eidasDataFirst.getFamilyName(), eidasDataFirst.getDateOfBirth(), cc);
+
+ // validate state
+ mockWebServer.takeRequest();
+ assertNotNull("no ERnP response", resp);
+ assertEquals("wrong resp size", 2, resp.getPersonResult().size());
+
+ }
+
+
+ @Test
+ @SneakyThrows
+ public void searchWithPersonalIdNoResponse() {
+ final String cc = "CZ";
+ final SimpleEidasData eidasDataFirst = generateRandomEidasData(cc);
+
+ mockWebServer.enqueue(new MockResponse()
+ .setSocketPolicy(SocketPolicy.NO_RESPONSE)
+ .setResponseCode(HttpURLConnection.HTTP_NO_CONTENT));
+
+ // execute operation
+ EidasSAuthenticationException error = assertThrows("wrong Exception", EidasSAuthenticationException.class,
+ () -> client.searchWithPersonIdentifier(eidasDataFirst.getPseudonym(), cc));
+ assertEquals("wrong errorCode", "module.eidasauth.matching.11", error.getErrorId());
+ mockWebServer.takeRequest();
+
+ }
+
+ @Test
+ @SneakyThrows
+ public void searchWithPersonalIdErrorResponse() {
+ final String cc = "CZ";
+ final SimpleEidasData eidasDataFirst = generateRandomEidasData(cc);
+
+ // set ERnP response
+ mockWebServer.enqueue(new MockResponse().setResponseCode(400)
+ .setBody(IOUtils.toString(
+ ErnpRestClientTest.class.getResourceAsStream("/data/ernp/error_resp.json"),
+ "UTF-8"))
+ .setHeader("Content-Type", "application/json;charset=utf-8"));
+
+ // execute operation
+ EidasSAuthenticationException error = assertThrows("wrong Exception", EidasSAuthenticationException.class,
+ () -> client.searchWithPersonIdentifier(eidasDataFirst.getPseudonym(), cc));
+ assertEquals("wrong errorCode", "module.eidasauth.matching.11", error.getErrorId());
+ mockWebServer.takeRequest();
+
+ }
+
+ @Test
+ @SneakyThrows
+ public void searchWithPersonalIdNoResult() {
+ final String cc = "CZ";
+ final SimpleEidasData eidasDataFirst = generateRandomEidasData(cc);
+
+ // set ERnP response
+ mockWebServer.enqueue(new MockResponse().setResponseCode(200)
+ .setBody(IOUtils.toString(
+ ErnpRestClientTest.class.getResourceAsStream("/data/ernp/ernp_empty_resp.json"),
+ "UTF-8"))
+ .setHeader("Content-Type", "application/json;charset=utf-8"));
+
+ // execute operation
+ ErnpRegisterResult resp = client.searchWithPersonIdentifier(eidasDataFirst.getPseudonym(), cc);
+
+ // validate request
+ final RecordedRequest request = mockWebServer.takeRequest();
+ String reqBody = request.getBody().readUtf8();
+ assertFalse("no request body", reqBody.isEmpty());
+ JsonNode reqJson = mapper.readTree(reqBody);
+ checkSearchOptions(reqJson, "Searching PersonIdentifier");
+ JsonNode person = getJsonObject(reqJson, "suchdaten");
+ checkEidasDocument(person, "http://eidas.europa.eu/attributes/naturalperson/PersonIdentifier", cc, eidasDataFirst.getPseudonym());
+
+ // validate state
+ assertNotNull("no ERnP response", resp);
+ assertEquals("wrong resp size", 0, resp.getPersonResult().size());
+
+ }
+
+ @Test
+ @SneakyThrows
+ public void searchWithPersonalIdSingleResult() {
+ final String cc = "DE";
+ final SimpleEidasData eidasDataFirst = generateRandomEidasData(cc);
+
+ // set ERnP response
+ mockWebServer.enqueue(new MockResponse().setResponseCode(200)
+ .setBody(IOUtils.toString(
+ ErnpRestClientTest.class.getResourceAsStream("/data/ernp/1_search_with_personalId_resp.json"),
+ "UTF-8"))
+ .setHeader("Content-Type", "application/json;charset=utf-8"));
+
+ // execute operation
+ ErnpRegisterResult resp = client.searchWithPersonIdentifier(eidasDataFirst.getPseudonym(), cc);
+
+ // validate state
+ mockWebServer.takeRequest();
+ assertNotNull("no ERnP response", resp);
+ assertEquals("wrong resp size", 1, resp.getPersonResult().size());
+ RegisterResult persInfo = resp.getPersonResult().get(0);
+ assertEquals("wrong familyname", "CtKKrtUe", persInfo.getFamilyName());
+ assertEquals("wrong givenName", "dUeYzUFg", persInfo.getGivenName());
+ assertEquals("wrong dateOfBirth", "1985-05-05", persInfo.getDateOfBirth());
+ assertEquals("wrong bpk", "+OQnljn0Son1W2rkM73nP/VMsvc=", persInfo.getBpk());
+ assertEquals("wrong pseudonym", "Y8ADWaeh0h", persInfo.getPseudonym().get(0));
+ assertEquals("wrong placeOfBirth", "hrFevCfP", persInfo.getPlaceOfBirth());
+ assertEquals("wrong birthName", "sNUEAhEr", persInfo.getBirthName());
+
+ }
+
+ @Test
+ @SneakyThrows
+ public void searchWithPersonalIdSingleResultCountryNoMatch() {
+ final String cc = "CZ";
+ final SimpleEidasData eidasDataFirst = generateRandomEidasData(cc);
+
+ // set ERnP response
+ mockWebServer.enqueue(new MockResponse().setResponseCode(200)
+ .setBody(IOUtils.toString(
+ ErnpRestClientTest.class.getResourceAsStream("/data/ernp/1_search_with_personalId_resp.json"),
+ "UTF-8"))
+ .setHeader("Content-Type", "application/json;charset=utf-8"));
+
+ // execute operation
+ ErnpRegisterResult resp = client.searchWithPersonIdentifier(eidasDataFirst.getPseudonym(), cc);
+
+ // validate state
+ mockWebServer.takeRequest();
+ assertNotNull("no ERnP response", resp);
+ assertEquals("wrong resp size", 1, resp.getPersonResult().size());
+ RegisterResult persInfo = resp.getPersonResult().get(0);
+ assertEquals("wrong familyname", "CtKKrtUe", persInfo.getFamilyName());
+ assertEquals("wrong givenName", "dUeYzUFg", persInfo.getGivenName());
+ assertEquals("wrong dateOfBirth", "1985-05-05", persInfo.getDateOfBirth());
+ assertEquals("wrong bpk", "+OQnljn0Son1W2rkM73nP/VMsvc=", persInfo.getBpk());
+ assertTrue("pseudonym", persInfo.getPseudonym().isEmpty());
+ assertNull("placeOfBirth", persInfo.getPlaceOfBirth());
+ assertNull("birthName", persInfo.getBirthName());
+
+ }
+
+
+ @Test
+ @SneakyThrows
+ public void searchWithPersonalIdMultiResult() {
+ final String cc = "CZ";
+ final SimpleEidasData eidasDataFirst = generateRandomEidasData(cc);
+
+ // set ERnP response
+ mockWebServer.enqueue(new MockResponse().setResponseCode(200)
+ .setBody(IOUtils.toString(
+ ErnpRestClientTest.class.getResourceAsStream("/data/ernp/4_search_with_mds_multi_resp.json"),
+ "UTF-8"))
+ .setHeader("Content-Type", "application/json;charset=utf-8"));
+
+ // execute operation
+ EidasSAuthenticationException error = assertThrows("wrong Exception", EidasSAuthenticationException.class,
+ () -> client.searchWithPersonIdentifier(eidasDataFirst.getPseudonym(), cc));
+ assertEquals("wrong errorCode", "module.eidasauth.matching.03", error.getErrorId());
+ mockWebServer.takeRequest();
+
+ }
+
+
+ @Test
+ @SneakyThrows
+ public void searchWithCcspecificsNoResponse() {
+ final String cc = "CZ";
+ final SimpleEidasData eidasDataFirst = generateRandomEidasData(cc);
+
+ mockWebServer.enqueue(new MockResponse()
+ .setSocketPolicy(SocketPolicy.NO_RESPONSE)
+ .setResponseCode(HttpURLConnection.HTTP_NO_CONTENT));
+
+ // execute operation
+ EidasSAuthenticationException error = assertThrows("wrong Exception", EidasSAuthenticationException.class,
+ () -> client.searchCountrySpecific(new DeSpecificDetailSearchProcessor().generateSearchRequest(eidasDataFirst), cc));
+ assertEquals("wrong errorCode", "module.eidasauth.matching.11", error.getErrorId());
+ mockWebServer.takeRequest();
+
+ }
+
+ @Test
+ @SneakyThrows
+ public void searchWithCcspecificsErrorResponse() {
+ final String cc = "CZ";
+ final SimpleEidasData eidasDataFirst = generateRandomEidasData(cc);
+
+ // set ERnP response
+ mockWebServer.enqueue(new MockResponse().setResponseCode(400)
+ .setBody(IOUtils.toString(
+ ErnpRestClientTest.class.getResourceAsStream("/data/ernp/error_resp.json"),
+ "UTF-8"))
+ .setHeader("Content-Type", "application/json;charset=utf-8"));
+
+ // execute operation
+ EidasSAuthenticationException error = assertThrows("wrong Exception", EidasSAuthenticationException.class,
+ () -> client.searchCountrySpecific(new DeSpecificDetailSearchProcessor().generateSearchRequest(eidasDataFirst), cc));
+ assertEquals("wrong errorCode", "module.eidasauth.matching.11", error.getErrorId());
+ mockWebServer.takeRequest();
+
+ }
+
+ @Test
+ @SneakyThrows
+ public void searchWithCcspecificsNoResult() {
+ final String cc = "DE";
+ final SimpleEidasData eidasDataFirst = generateRandomEidasData(cc).toBuilder()
+ .birthName(RandomStringUtils.randomAlphabetic(5))
+ .placeOfBirth(RandomStringUtils.randomAlphabetic(5))
+ .build();
+
+ // set ERnP response
+ mockWebServer.enqueue(new MockResponse().setResponseCode(200)
+ .setBody(IOUtils.toString(
+ ErnpRestClientTest.class.getResourceAsStream("/data/ernp/ernp_empty_resp.json"),
+ "UTF-8"))
+ .setHeader("Content-Type", "application/json;charset=utf-8"));
+
+ // execute operation
+ ErnpRegisterResult resp = client.searchCountrySpecific(
+ new DeSpecificDetailSearchProcessor().generateSearchRequest(eidasDataFirst), cc);
+
+ // validate request
+ final RecordedRequest request = mockWebServer.takeRequest();
+ String reqBody = request.getBody().readUtf8();
+ assertFalse("no request body", reqBody.isEmpty());
+ JsonNode reqJson = mapper.readTree(reqBody);
+ checkSearchOptions(reqJson, "Searching DE specific");
+ JsonNode person = getJsonObject(reqJson, "suchdaten");
+ checkJsonElement(person, "familienname", eidasDataFirst.getFamilyName());
+ checkJsonElement(person, "vorname", eidasDataFirst.getGivenName());
+ checkPersonDateOfBirth(person, eidasDataFirst.getDateOfBirth());
+ checkEidasDocument(person, "http://eidas.europa.eu/attributes/naturalperson/PlaceOfBirth", cc, eidasDataFirst.getPlaceOfBirth());
+ checkEidasDocument(person, "http://eidas.europa.eu/attributes/naturalperson/BirthName", cc, eidasDataFirst.getBirthName());
+
+ // validate state
+ assertNotNull("no ERnP response", resp);
+ assertEquals("wrong resp size", 0, resp.getPersonResult().size());
+
+ }
+
+ @Test
+ @SneakyThrows
+ public void searchWithCcspecificsSingleResult() {
+ final String cc = "DE";
+ final SimpleEidasData eidasDataFirst = generateRandomEidasData(cc);
+
+ // set ERnP response
+ mockWebServer.enqueue(new MockResponse().setResponseCode(200)
+ .setBody(IOUtils.toString(
+ ErnpRestClientTest.class.getResourceAsStream("/data/ernp/1_search_with_personalId_resp.json"),
+ "UTF-8"))
+ .setHeader("Content-Type", "application/json;charset=utf-8"));
+
+ // execute operation
+ ErnpRegisterResult resp = client.searchCountrySpecific(
+ new DeSpecificDetailSearchProcessor().generateSearchRequest(eidasDataFirst), cc);
+
+ // validate state
+ mockWebServer.takeRequest();
+ assertNotNull("no ERnP response", resp);
+ assertEquals("wrong resp size", 1, resp.getPersonResult().size());
+ RegisterResult persInfo = resp.getPersonResult().get(0);
+ assertEquals("wrong familyname", "CtKKrtUe", persInfo.getFamilyName());
+ assertEquals("wrong givenName", "dUeYzUFg", persInfo.getGivenName());
+ assertEquals("wrong dateOfBirth", "1985-05-05", persInfo.getDateOfBirth());
+ assertEquals("wrong bpk", "+OQnljn0Son1W2rkM73nP/VMsvc=", persInfo.getBpk());
+ assertEquals("wrong pseudonym", "Y8ADWaeh0h", persInfo.getPseudonym().get(0));
+ assertEquals("wrong placeOfBirth", "hrFevCfP", persInfo.getPlaceOfBirth());
+ assertEquals("wrong birthName", "sNUEAhEr", persInfo.getBirthName());
+
+ }
+
+ @Test
+ @SneakyThrows
+ public void searchWithCcspecificsSingleResultCountryNoMatch() {
+ final String cc = "CZ";
+ final SimpleEidasData eidasDataFirst = generateRandomEidasData(cc);
+
+ // set ERnP response
+ mockWebServer.enqueue(new MockResponse().setResponseCode(200)
+ .setBody(IOUtils.toString(
+ ErnpRestClientTest.class.getResourceAsStream("/data/ernp/1_search_with_personalId_resp.json"),
+ "UTF-8"))
+ .setHeader("Content-Type", "application/json;charset=utf-8"));
+
+ // execute operation
+ ErnpRegisterResult resp = client.searchCountrySpecific(
+ new DeSpecificDetailSearchProcessor().generateSearchRequest(eidasDataFirst), cc);
+
+ // validate state
+ mockWebServer.takeRequest();
+ assertNotNull("no ERnP response", resp);
+ assertEquals("wrong resp size", 1, resp.getPersonResult().size());
+ RegisterResult persInfo = resp.getPersonResult().get(0);
+ assertEquals("wrong familyname", "CtKKrtUe", persInfo.getFamilyName());
+ assertEquals("wrong givenName", "dUeYzUFg", persInfo.getGivenName());
+ assertEquals("wrong dateOfBirth", "1985-05-05", persInfo.getDateOfBirth());
+ assertEquals("wrong bpk", "+OQnljn0Son1W2rkM73nP/VMsvc=", persInfo.getBpk());
+ assertTrue("pseudonym", persInfo.getPseudonym().isEmpty());
+ assertNull("placeOfBirth", persInfo.getPlaceOfBirth());
+ assertNull("birthName", persInfo.getBirthName());
+
+ }
+
+
+ @Test
+ @SneakyThrows
+ public void searchWithCcspecificsMultiResult() {
+ final String cc = "CZ";
+ final SimpleEidasData eidasDataFirst = generateRandomEidasData(cc);
+
+ // set ERnP response
+ mockWebServer.enqueue(new MockResponse().setResponseCode(200)
+ .setBody(IOUtils.toString(
+ ErnpRestClientTest.class.getResourceAsStream("/data/ernp/4_search_with_mds_multi_resp.json"),
+ "UTF-8"))
+ .setHeader("Content-Type", "application/json;charset=utf-8"));
+
+ // execute operation
+ EidasSAuthenticationException error = assertThrows("wrong Exception", EidasSAuthenticationException.class,
+ () -> client.searchCountrySpecific(new DeSpecificDetailSearchProcessor().generateSearchRequest(eidasDataFirst), cc));
+ assertEquals("wrong errorCode", "module.eidasauth.matching.03", error.getErrorId());
+ mockWebServer.takeRequest();
+
+ }
+
+
+ @Test
+ @SneakyThrows
+ public void addPersonNoResponse() {
+ final String cc = "CZ";
+ final SimpleEidasData eidasDataFirst = generateRandomEidasData(cc);
+
+ mockWebServer.enqueue(new MockResponse()
+ .setSocketPolicy(SocketPolicy.NO_RESPONSE)
+ .setResponseCode(HttpURLConnection.HTTP_NO_CONTENT));
+
+ // execute operation
+ EidasSAuthenticationException error = assertThrows("wrong Exception", EidasSAuthenticationException.class,
+ () -> client.add(eidasDataFirst));
+ assertEquals("wrong errorCode", "module.eidasauth.matching.11", error.getErrorId());
+ mockWebServer.takeRequest();
+
+ }
+
+ @Test
+ @SneakyThrows
+ public void addPersonSimpleSuccess() {
+ final String cc = "CZ";
+ final SimpleEidasData eidasDataFirst = generateRandomEidasData(cc);
+
+ // set ERnP response
+ mockWebServer.enqueue(new MockResponse().setResponseCode(200)
+ .setBody(IOUtils.toString(
+ ErnpRestClientTest.class.getResourceAsStream("/data/ernp/2_add_resp.json"),
+ "UTF-8"))
+ .setHeader("Content-Type", "application/json;charset=utf-8"));
+
+ // execute operation
+ // execute operation
+ ErnpRegisterResult resp = client.add(eidasDataFirst);
+
+ // validate request
+ final RecordedRequest request = mockWebServer.takeRequest();
+ String reqBody = request.getBody().readUtf8();
+ assertFalse("no request body", reqBody.isEmpty());
+ JsonNode reqJson = mapper.readTree(reqBody);
+ checkJsonElement(reqJson, "begruendung", "Add new person");
+ JsonNode person = getJsonObject(reqJson, "personendaten");
+ checkJsonElement(person, "familienname", eidasDataFirst.getFamilyName());
+ checkJsonElement(person, "vorname", eidasDataFirst.getGivenName());
+ checkPersonDateOfBirth(person, eidasDataFirst.getDateOfBirth());
+ checkEidasDocument(reqJson, "http://eidas.europa.eu/attributes/naturalperson/PersonIdentifier", cc, eidasDataFirst.getPseudonym());
+ checkEidasDocument(reqJson, "http://eidas.europa.eu/attributes/naturalperson/PlaceOfBirth", cc);
+ checkEidasDocument(reqJson, "http://eidas.europa.eu/attributes/naturalperson/BirthName", cc);
+
+
+ // validate state
+ assertNotNull("no ERnP response", resp);
+ assertEquals("wrong resp size", 1, resp.getPersonResult().size());
+ RegisterResult persInfo = resp.getPersonResult().get(0);
+ assertEquals("wrong familyname", "mRjMKAQc", persInfo.getFamilyName());
+ assertEquals("wrong givenName", "vdqZZIaA", persInfo.getGivenName());
+ assertEquals("wrong dateOfBirth", "1996-01-01", persInfo.getDateOfBirth());
+ assertEquals("wrong bpk", "TBGoMlirU881e2jMGETa9WLx1+A=", persInfo.getBpk());
+
+ }
+
+ @Test
+ @SneakyThrows
+ public void addPersonSimpleComplexe() {
+ final String cc = "DE";
+ final SimpleEidasData eidasDataFirst = generateRandomEidasData(cc).toBuilder()
+ .birthName(RandomStringUtils.randomAlphabetic(5))
+ .placeOfBirth(RandomStringUtils.randomAlphabetic(5))
+ .build();
+
+ // set ERnP response
+ mockWebServer.enqueue(new MockResponse().setResponseCode(200)
+ .setBody(IOUtils.toString(
+ ErnpRestClientTest.class.getResourceAsStream("/data/ernp/2_add_resp.json"),
+ "UTF-8"))
+ .setHeader("Content-Type", "application/json;charset=utf-8"));
+
+ // execute operation
+ // execute operation
+ ErnpRegisterResult resp = client.add(eidasDataFirst);
+
+ // validate request
+ final RecordedRequest request = mockWebServer.takeRequest();
+ String reqBody = request.getBody().readUtf8();
+ assertFalse("no request body", reqBody.isEmpty());
+ JsonNode reqJson = mapper.readTree(reqBody);
+ checkJsonElement(reqJson, "begruendung", "Add new person");
+ JsonNode person = getJsonObject(reqJson, "personendaten");
+ checkJsonElement(person, "familienname", eidasDataFirst.getFamilyName());
+ checkJsonElement(person, "vorname", eidasDataFirst.getGivenName());
+ checkPersonDateOfBirth(person, eidasDataFirst.getDateOfBirth());
+ checkEidasDocument(reqJson, "http://eidas.europa.eu/attributes/naturalperson/PersonIdentifier", cc, eidasDataFirst.getPseudonym());
+ checkEidasDocument(reqJson, "http://eidas.europa.eu/attributes/naturalperson/PlaceOfBirth", cc, eidasDataFirst.getPlaceOfBirth());
+ checkEidasDocument(reqJson, "http://eidas.europa.eu/attributes/naturalperson/BirthName", cc, eidasDataFirst.getBirthName());
+
+ // validate state
+ assertNotNull("no ERnP response", resp);
+ assertEquals("wrong resp size", 1, resp.getPersonResult().size());
+ RegisterResult persInfo = resp.getPersonResult().get(0);
+ assertEquals("wrong familyname", "mRjMKAQc", persInfo.getFamilyName());
+ assertEquals("wrong givenName", "vdqZZIaA", persInfo.getGivenName());
+ assertEquals("wrong dateOfBirth", "1996-01-01", persInfo.getDateOfBirth());
+ assertEquals("wrong bpk", "TBGoMlirU881e2jMGETa9WLx1+A=", persInfo.getBpk());
+ assertEquals("wrong pseudonym", "88hvWzUaIX", persInfo.getPseudonym().get(0));
+ assertEquals("wrong placeOfBirth", "VRNCAylF", persInfo.getPlaceOfBirth());
+ assertEquals("wrong birthName", "miEklFHC", persInfo.getBirthName());
+
+ }
+
+ @Test
+ @SneakyThrows
+ public void updateNoLatestVersion() {
+ final String cc = "DE";
+ final SimpleEidasData eidasDataFirst = generateRandomEidasData(cc).toBuilder()
+ .birthName(RandomStringUtils.randomAlphabetic(5))
+ .placeOfBirth(RandomStringUtils.randomAlphabetic(5))
+ .build();
+
+ // set ERnP response
+ mockWebServer.enqueue(new MockResponse().setResponseCode(200)
+ .setBody(IOUtils.toString(
+ ErnpRestClientTest.class.getResourceAsStream("/data/ernp/ernp_empty_resp.json"),
+ "UTF-8"))
+ .setHeader("Content-Type", "application/json;charset=utf-8"));
+
+ RegisterResult ernpResult = RegisterResult.builder()
+ .familyName(eidasDataFirst.getFamilyName())
+ .givenName(eidasDataFirst.getGivenName())
+ .dateOfBirth(eidasDataFirst.getDateOfBirth())
+ .bpk("")
+ .pseudonym(Arrays.asList(eidasDataFirst.getPseudonym()))
+ .build();
+
+ // execute operation
+ EidasSAuthenticationException error = assertThrows("wrong Exception", EidasSAuthenticationException.class,
+ () -> client.update(ernpResult, eidasDataFirst));
+ assertEquals("wrong errorCode", "module.eidasauth.matching.03", error.getErrorId());
+ mockWebServer.takeRequest();
+
+
+ }
+
+
+ @Test
+ @SneakyThrows
+ public void updateNoUpdateRequired() {
+ final String cc = "DE";
+ final String personalIdentifierFirst = "Y8ADWaeh0h";
+ final SimpleEidasData eidasDataFirst = SimpleEidasData.builder()
+ .citizenCountryCode(cc)
+ .familyName("CtKKrtUe")
+ .givenName("dUeYzUFg")
+ .dateOfBirth("1985-05-05")
+ .personalIdentifier(cc + "/AT/" + personalIdentifierFirst)
+ .pseudonym(personalIdentifierFirst)
+ .build();
+
+ // set ERnP response
+ mockWebServer.enqueue(new MockResponse().setResponseCode(200)
+ .setBody(IOUtils.toString(
+ ErnpRestClientTest.class.getResourceAsStream("/data/ernp/1_kitt_search_latest_resp.json"),
+ "UTF-8"))
+ .setHeader("Content-Type", "application/json;charset=utf-8"));
+
+ RegisterResult ernpResult = RegisterResult.builder()
+ .familyName(eidasDataFirst.getFamilyName())
+ .givenName(eidasDataFirst.getGivenName())
+ .dateOfBirth(eidasDataFirst.getDateOfBirth())
+ .bpk("+OQnljn0Son1W2rkM73nP/VMsvc=")
+ .pseudonym(Arrays.asList(eidasDataFirst.getPseudonym()))
+ .birthName("sNUEAhEr")
+ .placeOfBirth("hrFevCfP")
+ .build();
+
+ // execute operation
+ ErnpRegisterResult resp = client.update(ernpResult, eidasDataFirst);
+
+ // validate request
+ final RecordedRequest request = mockWebServer.takeRequest();
+ String reqBody = request.getBody().readUtf8();
+ assertFalse("no request body", reqBody.isEmpty());
+ JsonNode reqJson = mapper.readTree(reqBody);
+ checkSearchOptions(reqJson, "KITT get-latest-version");
+ JsonNode person = getJsonObject(reqJson, "suchdaten");
+ checkJsonElement(person, "familienname", ernpResult.getFamilyName());
+ checkJsonElement(person, "vorname", ernpResult.getGivenName());
+ checkJsonElement(person, "bpkZp", ernpResult.getBpk());
+ checkPersonDateOfBirth(person, ernpResult.getDateOfBirth());
+
+ //validate state
+ assertNotNull("no ERnP response", resp);
+ assertEquals("wrong resp size", 1, resp.getPersonResult().size());
+ RegisterResult persInfo = resp.getPersonResult().get(0);
+ assertEquals("wrong familyname", ernpResult.getFamilyName(), persInfo.getFamilyName());
+ assertEquals("wrong givenName", ernpResult.getGivenName(), persInfo.getGivenName());
+ assertEquals("wrong dateOfBirth", ernpResult.getDateOfBirth(), persInfo.getDateOfBirth());
+ assertEquals("wrong bpk", ernpResult.getBpk(), persInfo.getBpk());
+ assertEquals("wrong pseudonym", ernpResult.getPseudonym().get(0), persInfo.getPseudonym().get(0));
+ assertEquals("wrong placeOfBirth", "hrFevCfP", persInfo.getPlaceOfBirth());
+ assertEquals("wrong birthName", "sNUEAhEr", persInfo.getBirthName());
+
+ }
+
+ @Test
+ @SneakyThrows
+ public void updateUpdateRequiredMds() {
+ final String cc = "DE";
+ final String personalIdentifierFirst = "Y8ADWaeh0h";
+ final SimpleEidasData eidasDataFirst = SimpleEidasData.builder()
+ .citizenCountryCode(cc)
+ .familyName("mVzTMpig6r")
+ .givenName("Jb2vj1Xpql")
+ .dateOfBirth("1985-05-05")
+ .personalIdentifier(cc + "/AT/" + personalIdentifierFirst)
+ .pseudonym(personalIdentifierFirst)
+ .placeOfBirth("hrFevCfP")
+ .birthName("sNUEAhEr")
+ .build();
+
+ // set ERnP response
+ mockWebServer.enqueue(new MockResponse().setResponseCode(200)
+ .setBody(IOUtils.toString(
+ ErnpRestClientTest.class.getResourceAsStream("/data/ernp/1_kitt_search_latest_resp.json"),
+ "UTF-8"))
+ .setHeader("Content-Type", "application/json;charset=utf-8"));
+ mockWebServer.enqueue(new MockResponse().setResponseCode(200)
+ .setBody(IOUtils.toString(
+ ErnpRestClientTest.class.getResourceAsStream("/data/ernp/1_kitt_update_resp.json"),
+ "UTF-8"))
+ .setHeader("Content-Type", "application/json;charset=utf-8"));
+
+ RegisterResult ernpResult = RegisterResult.builder()
+ .familyName("CtKKrtUe")
+ .givenName("dUeYzUFg")
+ .dateOfBirth("1985-05-05")
+ .bpk("+OQnljn0Son1W2rkM73nP/VMsvc=")
+ .pseudonym(Arrays.asList("Y8ADWaeh0h"))
+ .birthName("sNUEAhEr")
+ .placeOfBirth("hrFevCfP")
+ .build();
+
+ // execute operation
+ ErnpRegisterResult resp = client.update(ernpResult, eidasDataFirst);
+
+ // validate request
+ // check get-latest-version request
+ final RecordedRequest request = mockWebServer.takeRequest();
+ String reqBody = request.getBody().readUtf8();
+ assertFalse("no request body", reqBody.isEmpty());
+ JsonNode reqJson = mapper.readTree(reqBody);
+ checkSearchOptions(reqJson, "KITT get-latest-version");
+ JsonNode person = getJsonObject(reqJson, "suchdaten");
+ checkJsonElement(person, "familienname", ernpResult.getFamilyName());
+ checkJsonElement(person, "vorname", ernpResult.getGivenName());
+ checkJsonElement(person, "bpkZp", ernpResult.getBpk());
+ checkPersonDateOfBirth(person, ernpResult.getDateOfBirth());
+
+ // check update request
+ final RecordedRequest requestKitt = mockWebServer.takeRequest();
+ String reqBodyKitt = requestKitt.getBody().readUtf8();
+ assertFalse("no request body", reqBodyKitt.isEmpty());
+ JsonNode reqJsonKitt = mapper.readTree(reqBodyKitt);
+ checkJsonElement(reqJsonKitt, "begruendung", "KITT update dataset");
+ checkJsonElement(reqJsonKitt, "entityId", "1933000000000475");
+ checkJsonElement(reqJsonKitt, "version", "2022-03-03T10:07:28.885Z");
+ JsonNode personChange = getJsonObject(reqJsonKitt, "aendern");
+ JsonNode personKitt = getJsonObject(personChange, "personendaten");
+ checkJsonElement(personKitt, "familienname", eidasDataFirst.getFamilyName());
+ checkJsonElement(personKitt, "vorname", eidasDataFirst.getGivenName());
+ checkPersonDateOfBirth(personKitt, eidasDataFirst.getDateOfBirth());
+
+ assertFalse("find 'aendern' element", reqJsonKitt.has("anlegen"));
+ assertFalse("find 'aendern' element", personChange.has("eidas"));
+
+
+ //validate state
+ assertNotNull("no ERnP response", resp);
+ assertEquals("wrong resp size", 1, resp.getPersonResult().size());
+ RegisterResult persInfo = resp.getPersonResult().get(0);
+ assertEquals("wrong familyname", eidasDataFirst.getFamilyName(), persInfo.getFamilyName());
+ assertEquals("wrong givenName", eidasDataFirst.getGivenName(), persInfo.getGivenName());
+ assertEquals("wrong dateOfBirth", ernpResult.getDateOfBirth(), persInfo.getDateOfBirth());
+ assertEquals("wrong bpk", ernpResult.getBpk(), persInfo.getBpk());
+ assertEquals("wrong pseudonym", ernpResult.getPseudonym().get(0), persInfo.getPseudonym().get(0));
+ assertEquals("wrong placeOfBirth", "hrFevCfP", persInfo.getPlaceOfBirth());
+ assertEquals("wrong birthName", "sNUEAhEr", persInfo.getBirthName());
+
+ }
+
+ @Test
+ @SneakyThrows
+ public void updateUpdateRequiredEidasDocs() {
+ final String cc = "DE";
+ final String personalIdentifierFirst = "nj1m79jm9z";
+ final SimpleEidasData eidasDataFirst = SimpleEidasData.builder()
+ .citizenCountryCode(cc)
+ .familyName("mRjMKAQc")
+ .givenName("vdqZZIaA")
+ .dateOfBirth("1996-01-01")
+ .personalIdentifier(cc + "/AT/" + personalIdentifierFirst)
+ .pseudonym(personalIdentifierFirst)
+ .birthName(RandomStringUtils.randomAlphabetic(10))
+ .build();
+
+ // set ERnP response
+ mockWebServer.enqueue(new MockResponse().setResponseCode(200)
+ .setBody(IOUtils.toString(
+ ErnpRestClientTest.class.getResourceAsStream("/data/ernp/2_kitt_search_latest_resp.json"),
+ "UTF-8"))
+ .setHeader("Content-Type", "application/json;charset=utf-8"));
+ mockWebServer.enqueue(new MockResponse().setResponseCode(200)
+ .setBody(IOUtils.toString(
+ ErnpRestClientTest.class.getResourceAsStream("/data/ernp/2_kitt_update_resp.json"),
+ "UTF-8"))
+ .setHeader("Content-Type", "application/json;charset=utf-8"));
+
+ RegisterResult ernpResult = RegisterResult.builder()
+ .familyName("mRjMKAQc")
+ .givenName("vdqZZIaA")
+ .dateOfBirth("1996-01-01")
+ .bpk("TBGoMlirU881e2jMGETa9WLx1+A=")
+ .pseudonym(Arrays.asList("88hvWzUaIX"))
+ .birthName("VRNCAylF")
+ .placeOfBirth("miEklFHC")
+ .build();
+
+ // execute operation
+ ErnpRegisterResult resp = client.update(ernpResult, eidasDataFirst);
+
+ // validate request
+ // check get-latest-version request
+ final RecordedRequest request = mockWebServer.takeRequest();
+ String reqBody = request.getBody().readUtf8();
+ assertFalse("no request body", reqBody.isEmpty());
+ JsonNode reqJson = mapper.readTree(reqBody);
+ checkSearchOptions(reqJson, "KITT get-latest-version");
+ JsonNode person = getJsonObject(reqJson, "suchdaten");
+ checkJsonElement(person, "familienname", ernpResult.getFamilyName());
+ checkJsonElement(person, "vorname", ernpResult.getGivenName());
+ checkJsonElement(person, "bpkZp", ernpResult.getBpk());
+ checkPersonDateOfBirth(person, ernpResult.getDateOfBirth());
+
+ // check update request
+ final RecordedRequest requestKitt = mockWebServer.takeRequest();
+ String reqBodyKitt = requestKitt.getBody().readUtf8();
+ assertFalse("no request body", reqBodyKitt.isEmpty());
+ JsonNode reqJsonKitt = mapper.readTree(reqBodyKitt);
+ checkJsonElement(reqJsonKitt, "begruendung", "KITT update dataset");
+ checkJsonElement(reqJsonKitt, "entityId", "1933000000000498");
+ checkJsonElement(reqJsonKitt, "version", "2022-03-03T10:14:59.712Z");
+ JsonNode personChange = getJsonObject(reqJsonKitt, "anlegen");
+ checkEidasDocument(personChange, "http://eidas.europa.eu/attributes/naturalperson/PersonIdentifier", cc, eidasDataFirst.getPseudonym());
+ assertFalse("find 'aendern' element", reqJsonKitt.has("aendern"));
+
+ //validate state
+ assertNotNull("no ERnP response", resp);
+ assertEquals("wrong resp size", 1, resp.getPersonResult().size());
+ RegisterResult persInfo = resp.getPersonResult().get(0);
+ assertEquals("wrong familyname", eidasDataFirst.getFamilyName(), persInfo.getFamilyName());
+ assertEquals("wrong givenName", eidasDataFirst.getGivenName(), persInfo.getGivenName());
+ assertEquals("wrong dateOfBirth", ernpResult.getDateOfBirth(), persInfo.getDateOfBirth());
+ assertEquals("wrong bpk", ernpResult.getBpk(), persInfo.getBpk());
+ assertEquals("wrong pseudonym", ernpResult.getPseudonym().get(0), persInfo.getPseudonym().get(0));
+ assertEquals("wrong pseudonym", eidasDataFirst.getPseudonym(), persInfo.getPseudonym().get(1));
+ assertEquals("wrong placeOfBirth", "VRNCAylF", persInfo.getPlaceOfBirth());
+ assertEquals("wrong birthName", "miEklFHC", persInfo.getBirthName());
+
+ }
+
+
+ private SimpleEidasData generateRandomEidasData(String cc) {
+ final String personalIdentifierFirst = RandomStringUtils.randomAlphanumeric(10);
+ return SimpleEidasData.builder()
+ .citizenCountryCode(cc)
+ .familyName(RandomStringUtils.randomAlphanumeric(10))
+ .givenName(RandomStringUtils.randomAlphanumeric(10))
+ .dateOfBirth("1996-10-15")
+ .personalIdentifier(cc + "/AT/" + personalIdentifierFirst)
+ .pseudonym(personalIdentifierFirst)
+ .build();
+
+ }
+
+ private void checkEidasDocument(JsonNode person, String art, String cc, String expected) {
+ assertTrue("no element: eidas", person.has("eidas"));
+ assertTrue("wrong type element: eidas", person.get("eidas").isArray());
+
+ boolean found = false;
+ Iterator<JsonNode> docs = person.get("eidas").elements();
+ while (docs.hasNext() && !found) {
+ JsonNode el = docs.next();
+ assertTrue("art", el.has("art"));
+ assertTrue("wert", el.has("wert"));
+ assertTrue("cc", el.has("staatscode2"));
+ found = art.equals(el.get("art").asText()) && cc.equals(el.get("staatscode2").asText())
+ && expected.equals(el.get("wert").asText());
+
+ }
+ assertTrue("Missing eidas document", found);
+
+ }
+
+ private void checkEidasDocument(JsonNode person, String art, String cc) {
+ assertTrue("no element: eidas", person.has("eidas"));
+ assertTrue("wrong type element: eidas", person.get("eidas").isArray());
+
+ boolean found = false;
+ Iterator<JsonNode> docs = person.get("eidas").elements();
+ while (docs.hasNext() && !found) {
+ JsonNode el = docs.next();
+ assertTrue("art", el.has("art"));
+ assertTrue("wert", el.has("wert"));
+ assertTrue("cc", el.has("staatscode2"));
+ found = art.equals(el.get("art").asText()) && cc.equals(el.get("staatscode2").asText());
+
+ }
+ assertFalse("Missing eidas document", found);
+
+ }
+
+ private void checkPersonDateOfBirth(JsonNode person, String dateOfBirth) {
+ JsonNode birthDay = getJsonObject(person, "geburtsdatum");
+ String[] el = dateOfBirth.split("-");
+ checkJsonElement(birthDay, "jahr", Integer.parseInt(el[0]));
+ checkJsonElement(birthDay, "monat", Integer.parseInt(el[1]));
+ checkJsonElement(birthDay, "tag", Integer.parseInt(el[2]));
+
+ }
+
+ private void checkSearchOptions(JsonNode json, String reason) {
+ checkJsonElement(json, "begruendung", reason);
+ JsonNode options = getJsonObject(json, "suchoptionen");
+ checkJsonElement(options, "historisch", "AktuellUndHistorisch");
+ checkJsonElement(options, "sucheMitNamensteilen", false);
+ checkJsonElement(options, "suchwizard", false);
+ checkJsonElement(options, "zmr", false);
+
+ }
+
+ private JsonNode getJsonObject(JsonNode json, String key) {
+ assertTrue("no element: " + key, json.has(key));
+ assertTrue("wrong type element: " + key, json.get(key).isObject());
+ return json.get(key);
+
+ }
+
+ private void checkJsonElement(JsonNode json, String key, int expected) {
+ assertTrue("no element: " + key, json.has(key));
+ assertTrue("wong element-type: " + key, json.get(key).isInt());
+ assertEquals("wong element-value: " + key, expected, json.get(key).asInt());
+
+ }
+
+ private void checkJsonElement(JsonNode json, String key, String expected) {
+ assertTrue("no element: " + key, json.has(key));
+ assertTrue("wong element-type: " + key, json.get(key).isTextual());
+ assertEquals("wong element-value: " + key, expected, json.get(key).asText());
+
+ }
+
+ private void checkJsonElement(JsonNode json, String key, boolean expected) {
+ assertTrue("no element: " + key, json.has(key));
+ assertTrue("wong element-type: " + key, json.get(key).isBoolean());
+ assertEquals("wong element-value: " + key, expected, json.get(key).asBoolean());
+
+ }
+
+
+}
diff --git a/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/clients/SzrClientProductionTest.java b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/clients/SzrClientProductionTest.java
new file mode 100644
index 00000000..d2bfe662
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/clients/SzrClientProductionTest.java
@@ -0,0 +1,140 @@
+/*
+ * Copyright 2018 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.clients;
+
+import static org.junit.Assert.assertNotNull;
+
+import java.util.List;
+
+import org.apache.commons.lang3.RandomStringUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.bouncycastle.util.encoders.Base64;
+import org.junit.Assert;
+import org.junit.Ignore;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.annotation.IfProfileValue;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.TestPropertySource;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.clients.szr.SzrClient;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.MatchedPersonResult;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.SimpleEidasData;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.exception.EidasSAuthenticationException;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.exception.SzrCommunicationException;
+import at.gv.egiz.eaaf.core.api.data.EaafConstants;
+import at.gv.egiz.eaaf.core.api.idp.IConfiguration;
+
+
+@IfProfileValue(name = "spring.profiles.active", value = "devEnvironment")
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration(locations = {
+ "/SpringTest-context_tasks_test.xml",
+ "/SpringTest-context_basic_realConfig.xml"})
+@TestPropertySource(locations = {
+ //"classpath:/application.properties",
+ "file:/home/tlenz/Projekte/config/ms_connector/default_config.properties",
+ })
+public class SzrClientProductionTest {
+ private static final Logger log = LoggerFactory.getLogger(SzrClientProductionTest.class);
+
+ @Autowired
+ SzrClient szrClient;
+ @Autowired
+ IConfiguration basicConfig;
+
+ private static final String DUMMY_TARGET = EaafConstants.URN_PREFIX_CDID + "ZP";
+
+ @Test
+ public void dummyTest() {
+
+ }
+
+
+ @Ignore
+ @Test
+ public void getEncBaseId() throws SzrCommunicationException {
+
+ MatchedPersonResult matchingResult = MatchedPersonResult.builder()
+ .bpk("QusNG6WEct/vkD1aoRfxHod0Dtk=")
+ .familyName("Garcia")
+ .givenName("javier")
+ .dateOfBirth("1964-12-31")
+ .build();
+
+
+ String baseId = szrClient.getEncryptedStammzahl(matchingResult);
+
+
+ assertNotNull("not encrypted baseId", baseId);
+
+ }
+
+
+ @Test
+ public void getEidasBind() throws EidasSAuthenticationException {
+ String vsz = RandomStringUtils.randomAlphanumeric(10);
+ String bindingPubKey = Base64.toBase64String(RandomStringUtils.random(20).getBytes());
+ String eidStatus = "urn:eidgvat:eid.status.eidas";
+
+ String eidasBind = szrClient.getEidasBind(vsz, bindingPubKey, eidStatus, getEidData());
+
+ Assert.assertNotNull("eidasBind", eidasBind);
+
+ }
+
+ @Ignore
+ @Test
+ public void getBpkTest() throws EidasSAuthenticationException {
+ String vkz = basicConfig.getBasicConfiguration(
+ Constants.CONIG_PROPS_EIDAS_SZRCLIENT_PARAMS_VKZ, "no VKZ defined");
+ final List<String> bPK = szrClient.getBpk(getEidData(), DUMMY_TARGET, vkz);
+
+ if (bPK.isEmpty()) {
+ throw new SzrCommunicationException("ernb.01", new Object[]{"bPK list is empty"});
+ }
+ for (String b : bPK) {
+ if (StringUtils.isEmpty(b)) {
+ throw new SzrCommunicationException("ernb.01", new Object[]{"bPK is null or empty"});
+ }
+ }
+
+ }
+
+ private SimpleEidasData getEidData() {
+ return SimpleEidasData.builder()
+ .familyName("Mustermann")
+ .givenName("Franz")
+ .dateOfBirth("1989-05-04")
+ .citizenCountryCode("IS")
+ .pseudonym("1234ffgsdfg56789ABCDEF")
+ .build();
+ }
+
+}
diff --git a/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/SzrClientTest.java b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/clients/SzrClientTest.java
index 4d9ae035..e61532a3 100644
--- a/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/SzrClientTest.java
+++ b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/clients/SzrClientTest.java
@@ -21,100 +21,71 @@
* that you distribute must include a readable copy of the "NOTICE" text file.
*/
-package at.asitplus.eidas.specific.modules.auth.eidas.v2.test;
+package at.asitplus.eidas.specific.modules.auth.eidas.v2.test.clients;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyList;
import static org.mockito.Mockito.when;
import java.io.IOException;
-import java.security.InvalidKeyException;
-import java.security.MessageDigest;
-import java.security.NoSuchProviderException;
import java.util.List;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.ws.soap.SOAPFaultException;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.RandomStringUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.cxf.binding.soap.SoapFault;
-import org.joda.time.DateTime;
-import org.jose4j.lang.JoseException;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
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.util.Base64Utils;
import org.w3c.dom.Element;
import org.xml.sax.SAXException;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.JsonMappingException;
-import com.fasterxml.jackson.databind.ObjectMapper;
import com.github.skjolber.mockito.soap.SoapServiceRule;
import at.asitplus.eidas.specific.core.test.config.dummy.MsConnectorDummyConfigMap;
import at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants;
-import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.ErnbEidData;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.clients.szr.SzrClient;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.SimpleEidasData;
import at.asitplus.eidas.specific.modules.auth.eidas.v2.exception.EidasSAuthenticationException;
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.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.auth.data.IIdentityLink;
-import at.gv.egiz.eaaf.core.exceptions.EaafParserException;
-import at.gv.egiz.eaaf.core.impl.data.Triple;
-import at.gv.egiz.eaaf.core.impl.idp.auth.data.SimpleIdentityLinkAssertionParser;
import at.gv.egiz.eaaf.core.impl.utils.DomUtils;
-import szrservices.GetBPKFromStammzahlEncryptedResponse;
-import szrservices.GetBPKFromStammzahlEncryptedResponseType;
+import lombok.extern.slf4j.Slf4j;
import szrservices.GetIdentityLinkEidasResponse;
-import szrservices.IdentityLinkType;
import szrservices.PersonInfoType;
import szrservices.SZR;
import szrservices.SZRException_Exception;
import szrservices.SignContentEntry;
import szrservices.SignContentResponse;
import szrservices.SignContentResponseType;
-import szrservices.TravelDocumentType;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {
"/SpringTest-context_tasks_test.xml",
"/SpringTest-context_basic_mapConfig.xml"})
@DirtiesContext(classMode = ClassMode.AFTER_CLASS)
+@Slf4j
public class SzrClientTest {
- private static final Logger log = LoggerFactory.getLogger(SzrClientTest.class);
@Autowired SzrClient szrClient;
@Autowired MsConnectorDummyConfigMap basicConfig;
- private static ObjectMapper mapper = new ObjectMapper();
-
- private static final String givenName = "Franz";
- private static final String familyName = "Mustermann";
- private static final String dateOfBirth = "1989-05-05";
- private static final String eIDASeID = "IS/AT/1234sdgsdfg56789ABCDEF";
private static final String DUMMY_TARGET = EaafConstants.URN_PREFIX_CDID + "ZP";
private SZR szrMock = null;
- ErnbEidData eidData = null;
@Rule
public SoapServiceRule soap = SoapServiceRule.newInstance();
@@ -126,45 +97,10 @@ public class SzrClientTest {
public void initializer() {
if (szrMock == null) {
szrMock = soap.mock(SZR.class, "http://localhost:1234/demoszr");
-
}
-
- eidData = new ErnbEidData();
- eidData.setFamilyName(familyName);
- eidData.setGivenName(givenName);
- eidData.setDateOfBirth(new DateTime());
- eidData.setCitizenCountryCode("IS");
- eidData.setPseudonym("1234sdgsdfg56789ABCDEF");
-
- basicConfig.putConfigValue("eidas.ms.auth.eIDAS.szrclient.eidasbind.mds.inject", "false");
-
- }
-
-
-
-
- @Test
- public void getStammzahlenEcryptedTest() throws JAXBException, SZRException_Exception, SzrCommunicationException {
- final GetBPKFromStammzahlEncryptedResponse szrResponse = new GetBPKFromStammzahlEncryptedResponse();
- final GetBPKFromStammzahlEncryptedResponseType result1 = new GetBPKFromStammzahlEncryptedResponseType();
- szrResponse.getOut().add(result1);
- result1.setKey(RandomStringUtils.randomAlphanumeric(20));
-
- // when(szrMock.getBPKFromStammzahlEncrypted(anyList()))
- // .thenReturn(Arrays.asList(result1));
- when(szrMock.getStammzahlEncrypted(any(), any())).thenReturn(result1.getKey());
-
- String stammzahlEncrypted = szrClient.getEncryptedStammzahl(new PersonInfoType());
-
- Assert.assertEquals("bcBind not match", result1.getKey(), stammzahlEncrypted);
-
- when(szrMock.getStammzahlEncrypted(any(), any())).thenReturn(null);
- try {
- stammzahlEncrypted = szrClient.getEncryptedStammzahl(new PersonInfoType());
- } catch (SzrCommunicationException e) {
- Assert.assertTrue("Not correct error", e.getMessage().contains("ernb.01"));
- }
+ basicConfig.putConfigValue("eidas.ms.auth.eIDAS.szrclient.eidasbind.mds.inject", "false");
+
}
@Test
@@ -181,45 +117,45 @@ public class SzrClientTest {
when(szrMock.signContent(any(), anyList(), anyList())).thenReturn(content);
final String bcBind = szrClient
- .getEidsaBind(RandomStringUtils.randomAlphabetic(10), RandomStringUtils.randomAlphabetic(10),
- RandomStringUtils.randomAlphabetic(10), eidData);
+ .getEidasBind(RandomStringUtils.randomAlphabetic(10), RandomStringUtils.randomAlphabetic(10),
+ RandomStringUtils.randomAlphabetic(10), getEidData());
Assert.assertNotNull("bcBind is null", bcBind);
Assert.assertEquals("bcBind not match", result1.getValue(), bcBind);
-
+
}
@Test
public void eidasBindNull() throws SZRException_Exception {
when(szrMock.signContent(any(), anyList(), anyList())).thenReturn(null);
-
- try {
+
+ try {
szrClient
- .getEidsaBind(RandomStringUtils.randomAlphabetic(10), RandomStringUtils.randomAlphabetic(10),
- RandomStringUtils.randomAlphabetic(10), eidData);
+ .getEidasBind(RandomStringUtils.randomAlphabetic(10), RandomStringUtils.randomAlphabetic(10),
+ RandomStringUtils.randomAlphabetic(10), getEidData());
} catch (SzrCommunicationException e) {
Assert.assertTrue("Not correct error", e.getMessage().contains("ernb.01"));
-
- }
+
+ }
}
-
+
@Test
public void eidasBindInvalidResponse() throws SZRException_Exception {
final SignContentEntry result2 = new SignContentEntry();
final SignContentResponseType content1 = new SignContentResponseType();
content1.getOut().add(result2);
when(szrMock.signContent(any(), anyList(), anyList())).thenReturn(content1);
-
+
try {
szrClient
- .getEidsaBind(RandomStringUtils.randomAlphabetic(10), RandomStringUtils.randomAlphabetic(10),
- RandomStringUtils.randomAlphabetic(10), eidData);
+ .getEidasBind(RandomStringUtils.randomAlphabetic(10), RandomStringUtils.randomAlphabetic(10),
+ RandomStringUtils.randomAlphabetic(10), getEidData());
} catch (SzrCommunicationException e) {
Assert.assertTrue("Not correct error", e.getMessage().contains("ernb.01"));
-
+
}
}
-
+
public void eidasBindEmptyResponse() throws SZRException_Exception {
final SignContentEntry result2 = new SignContentEntry();
final SignContentResponseType content1 = new SignContentResponseType();
@@ -227,20 +163,19 @@ public class SzrClientTest {
result2.setKey("bcBindReq");
result2.setValue("");
when(szrMock.signContent(any(), anyList(), anyList())).thenReturn(content1);
-
+
try {
szrClient
- .getEidsaBind(RandomStringUtils.randomAlphabetic(10), RandomStringUtils.randomAlphabetic(10),
- RandomStringUtils.randomAlphabetic(10), eidData);
+ .getEidasBind(RandomStringUtils.randomAlphabetic(10), RandomStringUtils.randomAlphabetic(10),
+ RandomStringUtils.randomAlphabetic(10), getEidData());
} catch (SzrCommunicationException e) {
Assert.assertTrue("Not correct error", e.getMessage().contains("ernb.01"));
-
- }
+
+ }
}
-
+
@Test
- public void eidasBindValid() throws SZRException_Exception, SzrCommunicationException, JsonMappingException,
- JsonProcessingException, JoseException {
+ public void eidasBindValid() throws SZRException_Exception, SzrCommunicationException {
final SignContentResponse szrResponse = new SignContentResponse();
final SignContentEntry result1 = new SignContentEntry();
final SignContentResponseType content = new SignContentResponseType();
@@ -253,19 +188,18 @@ public class SzrClientTest {
when(szrMock.signContent(any(), anyList(), anyList())).thenReturn(content);
final String bcBind = szrClient
- .getEidsaBind(RandomStringUtils.randomAlphabetic(10), RandomStringUtils.randomAlphabetic(10),
- RandomStringUtils.randomAlphabetic(10), eidData);
+ .getEidasBind(RandomStringUtils.randomAlphabetic(10), RandomStringUtils.randomAlphabetic(10),
+ RandomStringUtils.randomAlphabetic(10), getEidData());
Assert.assertNotNull("bcBind is null", bcBind);
Assert.assertEquals("bcBind not match", result1.getValue(), bcBind);
-
+
}
@Test
- public void eidasBindValidWithMds() throws SZRException_Exception, SzrCommunicationException, JoseException,
- JsonMappingException, JsonProcessingException {
+ public void eidasBindValidWithMds() throws SZRException_Exception, SzrCommunicationException {
basicConfig.putConfigValue("eidas.ms.auth.eIDAS.szrclient.eidasbind.mds.inject", "true");
-
+
final SignContentResponse szrResponse = new SignContentResponse();
final SignContentEntry result1 = new SignContentEntry();
final SignContentResponseType content = new SignContentResponseType();
@@ -278,77 +212,18 @@ public class SzrClientTest {
when(szrMock.signContent(any(), anyList(), anyList())).thenReturn(content);
final String bcBind = szrClient
- .getEidsaBind(RandomStringUtils.randomAlphabetic(10), RandomStringUtils.randomAlphabetic(10),
- RandomStringUtils.randomAlphabetic(10), eidData);
+ .getEidasBind(RandomStringUtils.randomAlphabetic(10), RandomStringUtils.randomAlphabetic(10),
+ RandomStringUtils.randomAlphabetic(10), getEidData());
Assert.assertNotNull("bcBind is null", bcBind);
Assert.assertEquals("bcBind not match", result1.getValue(), bcBind);
}
-
- @Test
- public void getIdentityLinkRawModeValidResponse()
- throws SZRException_Exception, EaafParserException, NoSuchProviderException, IOException, InvalidKeyException,
- EidasSAuthenticationException, JAXBException {
- setSzrResponseIdentityLink("/data/szr/szr_resp_valid_1.xml");
-
- try {
- log.debug("Starting connecting SZR Gateway");
- final IdentityLinkType result = szrClient.getIdentityLinkInRawMode(getPersonInfo());
-
- Assert.assertNotNull(result);
- Assert.assertNotNull(result.getAssertion());
-
- final IIdentityLink identityLink = new SimpleIdentityLinkAssertionParser((Element) result.getAssertion())
- .parseIdentityLink();
- Assert.assertNotNull(identityLink);
-
- System.out.println(identityLink.getSerializedSamlAssertion());
-
- checkElement("Mustermann", identityLink.getFamilyName());
- checkElement("Hans", identityLink.getGivenName());
- checkElement("1989-05-05", identityLink.getDateOfBirth());
- checkElement("urn:publicid:gv.at:baseid", identityLink.getIdentificationType());
- checkElement("k+zDM1BVpN1WJO4x7ZQ3ng==", identityLink.getIdentificationValue());
- Assert.assertNotNull(identityLink.getSerializedSamlAssertion());
- Assert.assertNotNull(identityLink.getSamlAssertion());
-
- } catch (final SzrCommunicationException e) {
- Assert.fail();
-
- }
-
- }
-
- @Test
- public void getIdentityLinkRawModeErrorTravelerDocExists()
- throws SZRException_Exception, EaafParserException, NoSuchProviderException, IOException, InvalidKeyException,
- EidasSAuthenticationException, JAXBException, ParserConfigurationException, SAXException {
- setSzrExceptionIdentityLink("/data/szr/szr_resp_error_travelerdocexists.xml");
-
- try {
- log.debug("Starting connecting SZR Gateway");
- szrClient.getIdentityLinkInRawMode(getPersonInfo());
- Assert.fail();
-
- } catch (final SzrCommunicationException e) {
- checkElement("ernb.02", e.getErrorId());
- Assert.assertNotNull(e.getCause());
- org.springframework.util.Assert.isInstanceOf(SOAPFaultException.class, e.getCause());
- Assert.assertNotNull(((SOAPFaultException) e.getCause()).getFault());
- checkElement("p344:F455", ((SOAPFaultException) e.getCause()).getFault().getFaultCode());
- checkElement(
- "The travel document you sent to insert a person already exists for another person. " + "Either check the document or have the person altered accordingly",
- ((SOAPFaultException) e.getCause()).getFault().getFaultString());
-
- }
-
- }
@Ignore
@Test
- public void getBpkTest() throws SZRException_Exception, EidasSAuthenticationException {
- final List<String> bPK = szrClient.getBpk(getPersonInfo(), DUMMY_TARGET, basicConfig
+ public void getBpkTest() throws EidasSAuthenticationException {
+ final List<String> bPK = szrClient.getBpk(getEidData(), DUMMY_TARGET, basicConfig
.getBasicConfiguration(Constants.CONIG_PROPS_EIDAS_SZRCLIENT_PARAMS_VKZ, "no VKZ defined"));
if (bPK.isEmpty()) {
@@ -368,6 +243,7 @@ public class SzrClientTest {
}
+ @SuppressWarnings("SameParameterValue")
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,
@@ -380,8 +256,9 @@ public class SzrClientTest {
}
+ @SuppressWarnings("SameParameterValue")
private void setSzrExceptionIdentityLink(String responseXmlPath)
- throws JAXBException, ParserConfigurationException, SAXException, IOException, SZRException_Exception {
+ throws ParserConfigurationException, SAXException, IOException, SZRException_Exception {
final Element detailerror = DomUtils.parseXmlNonValidating(this.getClass().getResourceAsStream(responseXmlPath));
final javax.xml.namespace.QName qName = new javax.xml.namespace.QName("urn:SZRServices", "F455", "p344");
final SoapFault fault = new SoapFault(
@@ -393,47 +270,15 @@ public class SzrClientTest {
}
- private String createHashFromUniqueId(String uniqueId) throws EidasSAuthenticationException {
- try {
- final MessageDigest md = MessageDigest.getInstance("SHA-256");
- final byte[] hash = md.digest(uniqueId.getBytes("UTF-8"));
- final String hashBase64 = new String(Base64Utils.encode(hash), "UTF-8").replaceAll("\r\n", "");
- return hashBase64;
-
- } catch (final Exception ex) {
- throw new EidasSAuthenticationException("internal.03", new Object[]{}, ex);
-
- }
+ private SimpleEidasData getEidData() {
+ return SimpleEidasData.builder()
+ .familyName("Mustermann")
+ .givenName("Franz")
+ .dateOfBirth("1989-05-05")
+ .citizenCountryCode("IS")
+ .pseudonym("1234sdgsdfg56789ABCDEF")
+ .build();
}
- private PersonInfoType getPersonInfo() throws EidasSAuthenticationException {
- final PersonInfoType personInfo = new PersonInfoType();
- final PersonNameType personName = new PersonNameType();
- final PhysicalPersonType naturalPerson = new PhysicalPersonType();
- final TravelDocumentType eDocument = new TravelDocumentType();
-
- 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));
-
- return personInfo;
- }
}
diff --git a/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/clients/ZmrAddressSearchClientProductionTest.java b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/clients/ZmrAddressSearchClientProductionTest.java
new file mode 100644
index 00000000..a6ff234b
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/clients/ZmrAddressSearchClientProductionTest.java
@@ -0,0 +1,169 @@
+package at.asitplus.eidas.specific.modules.auth.eidas.v2.test.clients;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.annotation.IfProfileValue;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.TestPropertySource;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.clients.zmr.ZmrAddressSoapClient;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.clients.zmr.ZmrAddressSoapClient.AddressInfo;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.clients.zmr.ZmrAddressSoapClient.DetailLevel;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.exception.EidasSAuthenticationException;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.utils.LoggingHandler;
+import at.gv.bmi.namespace.zmr_su.zrm._20040201_.address.Adressdaten;
+import at.gv.e_government.reference.namespace.persondata.de._20040201.PostAdresseTyp;
+import at.gv.e_government.reference.namespace.persondata.de._20040201.ZustelladresseTyp;
+import at.gv.egiz.eaaf.core.api.idp.IConfiguration;
+import ch.qos.logback.classic.Level;
+import ch.qos.logback.classic.Logger;
+
+@IfProfileValue(name = "spring.profiles.active", value = "devEnvironment")
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration(locations = {
+ "/SpringTest-context_tasks_test.xml",
+ "/SpringTest-context_basic_realConfig.xml" })
+@TestPropertySource(locations = {
+ // "classpath:/application.properties",
+ "file:/home/tlenz/Projekte/config/ms_connector/default_config.properties",
+})
+public class ZmrAddressSearchClientProductionTest {
+
+
+ @Autowired ZmrAddressSoapClient client;
+ @Autowired IConfiguration basicConfig;
+
+ @BeforeClass
+ public static void classInitializer() {
+ final Logger logger1 = (Logger) LoggerFactory.getLogger(LoggingHandler.class);
+ logger1.setLevel(Level.TRACE);
+
+ final Logger logger2 = (Logger) LoggerFactory.getLogger(ZmrAddressSoapClient.class);
+ logger2.setLevel(Level.TRACE);
+
+ final Logger rootLogger = (Logger) LoggerFactory.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME);
+ rootLogger.setLevel(Level.INFO);
+
+ }
+
+ @Test
+ public void gemeinde() throws EidasSAuthenticationException {
+ // build dummy request
+ Adressdaten req = new Adressdaten();
+ PostAdresseTyp address = new PostAdresseTyp();
+ address.setGemeinde("Frohnl*");
+ req.setPostAdresse(address);
+
+ // execute test
+ AddressInfo resp = client.searchAddress(req);
+
+ // validate state
+ assertFalse("no results", resp.getPersonResult().isEmpty());
+ assertEquals("wrong detail level", DetailLevel.CITY, resp.getLevel());
+
+
+ }
+
+ @Test
+ public void ortschaftAndGemeinde() throws EidasSAuthenticationException {
+ // build dummy request
+ Adressdaten req = new Adressdaten();
+ PostAdresseTyp address = new PostAdresseTyp();
+ address.setGemeinde("Frohnleiten");
+ address.setOrtschaft("Wannersdorf");
+ req.setPostAdresse(address);
+
+ // execute test
+ AddressInfo resp = client.searchAddress(req);
+
+ // validate state
+ assertFalse("no results", resp.getPersonResult().isEmpty());
+ assertEquals("wrong detail level", DetailLevel.STREET, resp.getLevel());
+
+ }
+
+ @Test
+ public void ortschaftAndGemeindeAndStreet() throws EidasSAuthenticationException {
+ // build dummy request
+ Adressdaten req = new Adressdaten();
+ PostAdresseTyp address = new PostAdresseTyp();
+ address.setGemeinde("Frohnleiten");
+ address.setOrtschaft("Wannersdorf");
+ req.setPostAdresse(address);
+
+ ZustelladresseTyp addressDetail = new ZustelladresseTyp();
+ addressDetail.setStrassenname("Wannersdorf");
+ address.setZustelladresse(addressDetail);
+
+ // execute test
+ AddressInfo resp = client.searchAddress(req);
+
+ // validate state
+ assertFalse("no results", resp.getPersonResult().isEmpty());
+ assertEquals("wrong detail level", DetailLevel.NUMBER, resp.getLevel());
+
+ }
+
+
+ @Test
+ public void ortschaftAndGemeinde2() throws EidasSAuthenticationException {
+ // build dummy request
+ Adressdaten req = new Adressdaten();
+ PostAdresseTyp address = new PostAdresseTyp();
+ address.setGemeinde("Fro*");
+ address.setOrtschaft("Wannersdorf");
+ req.setPostAdresse(address);
+
+ // execute test
+ AddressInfo resp = client.searchAddress(req);
+
+ // validate state
+ assertFalse("no results", resp.getPersonResult().isEmpty());
+ assertEquals("wrong detail level", DetailLevel.CITY, resp.getLevel());
+
+ }
+
+ @Test
+ public void ortschaftAndGemeinde3() throws EidasSAuthenticationException {
+ // build dummy request
+ Adressdaten req = new Adressdaten();
+ PostAdresseTyp address = new PostAdresseTyp();
+ address.setGemeinde("Eggelsberg");
+ address.setOrtschaft("Wannersdorf");
+ req.setPostAdresse(address);
+
+ // execute test
+ AddressInfo resp = client.searchAddress(req);
+
+ // validate state
+ assertFalse("no results", resp.getPersonResult().isEmpty());
+ assertEquals("wrong detail level", DetailLevel.STREET, resp.getLevel());
+
+ }
+
+
+ @Test
+ public void ortschaft() throws EidasSAuthenticationException {
+ // build dummy request
+ Adressdaten req = new Adressdaten();
+ PostAdresseTyp address = new PostAdresseTyp();
+ address.setOrtschaft("Wannersdorf");
+ req.setPostAdresse(address);
+
+ // execute test
+ AddressInfo resp = client.searchAddress(req);
+
+ // validate state
+ assertFalse("no results", resp.getPersonResult().isEmpty());
+ assertEquals("wrong detail level", DetailLevel.CITY, resp.getLevel());
+
+ }
+
+}
diff --git a/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/clients/ZmrClientProductionTest.java b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/clients/ZmrClientProductionTest.java
new file mode 100644
index 00000000..cada6f40
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/clients/ZmrClientProductionTest.java
@@ -0,0 +1,478 @@
+package at.asitplus.eidas.specific.modules.auth.eidas.v2.test.clients;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+import java.util.List;
+
+import org.apache.commons.lang3.RandomStringUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.junit.BeforeClass;
+import org.junit.Ignore;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.annotation.IfProfileValue;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.TestPropertySource;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.clients.zmr.ZmrSoapClient;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.clients.zmr.ZmrSoapClient.ZmrRegisterResult;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.SimpleEidasData;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.exception.EidasSAuthenticationException;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.utils.LoggingHandler;
+import at.gv.bmi.namespace.zmr_su.zmr._20040201.EidasSuchdatenType;
+import at.gv.bmi.namespace.zmr_su.zmr._20040201.PersonSuchenRequest;
+import at.gv.e_government.reference.namespace.persondata.de._20040201.NatuerlichePersonTyp;
+import at.gv.e_government.reference.namespace.persondata.de._20040201.PersonenNameTyp;
+import at.gv.egiz.eaaf.core.api.idp.IConfiguration;
+import ch.qos.logback.classic.Level;
+import ch.qos.logback.classic.Logger;
+
+@IfProfileValue(name = "spring.profiles.active", value = "devEnvironment")
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration(locations = {
+ "/SpringTest-context_tasks_test.xml",
+ "/SpringTest-context_basic_realConfig.xml" })
+@TestPropertySource(locations = {
+ // "classpath:/application.properties",
+ "file:/home/tlenz/Projekte/config/ms_connector/default_config.properties",
+})
+public class ZmrClientProductionTest {
+
+ @Autowired
+ ZmrSoapClient client;
+ @Autowired
+ IConfiguration basicConfig;
+
+ @BeforeClass
+ public static void classInitializer() {
+ final Logger logger1 = (Logger) LoggerFactory.getLogger(LoggingHandler.class);
+ logger1.setLevel(Level.TRACE);
+
+ final Logger logger2 = (Logger) LoggerFactory.getLogger(ZmrSoapClient.class);
+ logger2.setLevel(Level.TRACE);
+
+ final Logger rootLogger = (Logger) LoggerFactory.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME);
+ rootLogger.setLevel(Level.INFO);
+
+ }
+
+ @Ignore
+ @Test
+ public void searchWithMdsOnly() throws EidasSAuthenticationException {
+
+ final ZmrRegisterResult result = client.searchWithMds(null,
+ "Thomas", "Lenz", "1982-09-06",
+ "AT");
+
+ assertNotNull("ZMR response", result);
+ assertNotNull("ZMR processId", result.getProcessId());
+ assertNotNull("ZMR personResult", result.getPersonResult());
+ assertEquals("personResult size", 1, result.getPersonResult().size());
+
+ }
+
+ @Test
+ public void searchWithMdsOnlyTestIdentity() throws EidasSAuthenticationException {
+
+ final ZmrRegisterResult result = client.searchWithMds(null,
+ "XXXHildegard", "XXXÖhlinger", "1971-02-18",
+ "AT");
+
+ assertNotNull("ZMR response", result);
+ assertNotNull("ZMR processId", result.getProcessId());
+ assertNotNull("ZMR personResult", result.getPersonResult());
+ assertEquals("personResult size", 1, result.getPersonResult().size());
+
+ }
+
+ /*
+ * Ignore this test because "javier", "Garcia", "1964-12-31", "EE" is used as test-identity
+ * in test-country on vidp.gv.at. vidp.gv.at uses Test-SZR, but Test-SZR is connected to
+ * Q-ZMR and Q-ERnP. There is a staging problem because this test uses T-ZMR and T-ERnP.
+ */
+ @Ignore
+ @Test
+ public void searchWithMdsOnlyEidasIdentity() throws EidasSAuthenticationException {
+
+ final ZmrRegisterResult result = client.searchWithMds(null,
+ "javier", "Garcia", "1964-12-31",
+ "EE");
+
+ assertNotNull("ZMR response", result);
+ assertNotNull("ZMR processId", result.getProcessId());
+ assertNotNull("ZMR personResult", result.getPersonResult());
+ assertEquals("personResult size", 1, result.getPersonResult().size());
+
+ }
+
+ @Test
+ public void searchWithCountrySpecificsNoExits() throws EidasSAuthenticationException {
+ final ZmrRegisterResult result = client.searchCountrySpecific(null,
+ generateCustomRequest("AT", "Lenz", "Thomas", "1982-09-06",
+ null,
+ RandomStringUtils.randomAlphabetic(5),
+ RandomStringUtils.randomAlphabetic(5)),
+ "AT");
+
+ assertNotNull("ZMR response", result);
+ assertNotNull("ZMR processId", result.getProcessId());
+ assertNotNull("ZMR personResult", result.getPersonResult());
+ assertEquals("personResult size", 0, result.getPersonResult().size());
+
+ }
+
+ @Ignore
+ @Test
+ public void searchWithCountrySpecificsWithPersonalId() throws EidasSAuthenticationException {
+ final ZmrRegisterResult result = client.searchCountrySpecific(null,
+ generateCustomRequest("EE", "Lenz", "Thomas", "1982-09-06",
+ "7cEYSvKZvon+V4CDVzNT4E7cjkU4Vq",
+ null,
+ null),
+ "EE");
+
+ assertNotNull("ZMR response", result);
+ assertNotNull("ZMR processId", result.getProcessId());
+ assertNotNull("ZMR personResult", result.getPersonResult());
+ assertEquals("personResult size", 1, result.getPersonResult().size());
+
+ }
+
+ @Test
+ public void searchWithPersonalIdOnlyNoExisting() throws EidasSAuthenticationException {
+
+ final ZmrRegisterResult result = client.searchWithPersonIdentifier(null,
+ RandomStringUtils.randomAlphanumeric(25),
+ "AT");
+
+ assertNotNull("ZMR response", result);
+ assertNotNull("ZMR processId", result.getProcessId());
+ assertNotNull("ZMR personResult", result.getPersonResult());
+ assertEquals("personResult size", 0, result.getPersonResult().size());
+
+ }
+
+ @Test
+ public void updateZmrEntry() throws EidasSAuthenticationException {
+ final String personalIdentifier = "7cEYSvKZvon+V4CDVzNT4E7cjkU4Vq";
+ final String cc = "EE";
+
+ final SimpleEidasData eidasData = SimpleEidasData.builder()
+ .citizenCountryCode(cc)
+ .familyName("Lenz")
+ .givenName("Thomas")
+ .dateOfBirth("1982-09-06")
+ .personalIdentifier(cc + "/AT/" + personalIdentifier)
+ .pseudonym(personalIdentifier)
+ .build();
+
+ // get initial result
+ final ZmrRegisterResult result = client.searchWithMds(null,
+ eidasData.getGivenName(),
+ eidasData.getFamilyName(),
+ eidasData.getDateOfBirth(),
+ eidasData.getCitizenCountryCode());
+ assertNotNull("ZMR response", result);
+ assertEquals("personResult size", 1, result.getPersonResult().size());
+
+ // update ZMR entry
+ final ZmrRegisterResult updateResult =
+ client.update(result.getProcessId(),
+ result.getPersonResult().get(0),
+ eidasData);
+
+ assertNotNull("ZMR response", updateResult);
+ assertEquals("personResult size", 1, updateResult.getPersonResult().size());
+
+ final ZmrRegisterResult afterUpdateResult = client.searchWithPersonIdentifier(null,
+ personalIdentifier, cc);
+
+ assertNotNull("ZMR response", afterUpdateResult);
+ assertEquals("personResult size", 1, afterUpdateResult.getPersonResult().size());
+
+ }
+
+ @Test
+ public void updateZmrEntryTestIdentity() throws EidasSAuthenticationException {
+ final String personalIdentifier = "7cEYSvKZasdfsafsaf4CDVzNT4E7cjkU4Vq";
+ final String cc = "EE";
+
+ final SimpleEidasData eidasData = SimpleEidasData.builder()
+ .citizenCountryCode(cc)
+ .familyName("Muster301")
+ .givenName("Eric")
+ .dateOfBirth("1988-01-03")
+ .personalIdentifier(cc + "/AT/" + personalIdentifier)
+ .pseudonym(personalIdentifier)
+ .build();
+
+ // get initial result
+ final ZmrRegisterResult result = client.searchWithMds(null,
+ eidasData.getGivenName(),
+ eidasData.getFamilyName(),
+ eidasData.getDateOfBirth(),
+ eidasData.getCitizenCountryCode());
+ assertNotNull("ZMR response", result);
+ assertEquals("personResult size", 1, result.getPersonResult().size());
+
+ // update ZMR entry
+ final ZmrRegisterResult updateResult =
+ client.update(result.getProcessId(),
+ result.getPersonResult().get(0),
+ eidasData);
+
+ assertNotNull("ZMR response", updateResult);
+ assertEquals("personResult size", 1, updateResult.getPersonResult().size());
+
+
+ final ZmrRegisterResult afterUpdateResultMds = client.searchCountrySpecific(null,
+ generateCustomRequest("EE", "XXXHildegard", "XXXÖhlinger", "1971-02-18",
+ "7cEYSvKZasdfsafsaf4CDVzNT4E7cjkU4Vq",
+ null,
+ null),
+ cc);
+
+ assertNotNull("ZMR response", afterUpdateResultMds);
+ assertNotNull("ZMR processId", afterUpdateResultMds.getProcessId());
+ assertNotNull("ZMR personResult", afterUpdateResultMds.getPersonResult());
+ assertEquals("personResult size", 1, afterUpdateResultMds.getPersonResult().size());
+
+
+ // check if ZMR entry can be found by PersonalId
+ final ZmrRegisterResult afterUpdateResult = client.searchWithPersonIdentifier(null,
+ personalIdentifier, cc);
+
+ assertNotNull("ZMR response", afterUpdateResult);
+ assertEquals("personResult size", 1, afterUpdateResult.getPersonResult().size());
+
+ }
+
+ @Test
+ public void updateZmrEntryDeSpecific() throws EidasSAuthenticationException {
+ final String personalIdentifierFirst = "7cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit";
+ final String cc = "DE";
+ final SimpleEidasData eidasDataFirst = SimpleEidasData.builder()
+ .citizenCountryCode(cc)
+ .familyName("XXXvon Brandenburg")
+ .givenName("XXXClaus - Maria")
+ .dateOfBirth("1994-12-31")
+ .personalIdentifier(cc + "/AT/" + personalIdentifierFirst)
+ .pseudonym(personalIdentifierFirst)
+ .placeOfBirth("Hintergigritzpotschn")
+ .birthName("XXXvon Heuburg")
+ .build();
+
+ // first login with update
+ // get initial result
+ final ZmrRegisterResult result = client.searchWithMds(null,
+ eidasDataFirst.getGivenName(),
+ eidasDataFirst.getFamilyName(),
+ eidasDataFirst.getDateOfBirth(),
+ eidasDataFirst.getCitizenCountryCode());
+ assertNotNull("ZMR response", result);
+ assertEquals("personResult size", 1, result.getPersonResult().size());
+
+ // update ZMR entry
+ final ZmrRegisterResult updateResult =
+ client.update(result.getProcessId(),
+ result.getPersonResult().get(0),
+ eidasDataFirst);
+
+ assertNotNull("ZMR response", updateResult);
+ assertEquals("personResult size", 1, updateResult.getPersonResult().size());
+
+ // check if ZMR entry can be found by first PersonalId
+ final ZmrRegisterResult firstPersonalIdResult = client.searchWithPersonIdentifier(null,
+ personalIdentifierFirst, cc);
+ assertNotNull("ZMR response", firstPersonalIdResult);
+ assertEquals("first personResult size", 1, firstPersonalIdResult.getPersonResult().size());
+
+
+ // check if ZMR entry is not found by valid pseudonym but wrong country
+ final ZmrRegisterResult wrongPersonalIdResult = client.searchWithPersonIdentifier(null,
+ personalIdentifierFirst, "ES");
+ assertNotNull("ZMR response", wrongPersonalIdResult);
+ assertEquals("first personResult size", 0, wrongPersonalIdResult.getPersonResult().size());
+
+
+ // search CC-specific with MDS + placeOfBirth + birthName
+ final ZmrRegisterResult ccSpecificFirstEntry = client.searchCountrySpecific(null,
+ generateCustomRequest(
+ eidasDataFirst.getCitizenCountryCode(),
+ eidasDataFirst.getFamilyName(),
+ eidasDataFirst.getGivenName(),
+ eidasDataFirst.getDateOfBirth(),
+ null,
+ eidasDataFirst.getPlaceOfBirth(),
+ eidasDataFirst.getBirthName()),
+ cc);
+
+ assertNotNull("ZMR response", ccSpecificFirstEntry);
+ assertNotNull("ZMR processId", ccSpecificFirstEntry.getProcessId());
+ assertNotNull("ZMR personResult", ccSpecificFirstEntry.getPersonResult());
+ assertEquals("personResult size", 1, ccSpecificFirstEntry.getPersonResult().size());
+
+ }
+
+ @Test
+ public void updateZmrEntryTestIdentity2() throws EidasSAuthenticationException {
+ final String personalIdentifierFirst = "7cEYSvKZasdfsafsaf4CDVzNT4E7cjkU4Vq_first";
+ final String personalIdentifierSecond = "7cEYSvKZasdfsafsaf4CDVzNT4E7cjkU4Vq_second";
+ final String cc = "EE";
+
+ final SimpleEidasData eidasDataFirst = SimpleEidasData.builder()
+ .citizenCountryCode(cc)
+ .familyName("XXXTüzekçi")
+ .givenName("XXXŐzgür")
+ .dateOfBirth("1983-06-04")
+ .personalIdentifier(cc + "/AT/" + personalIdentifierFirst)
+ .pseudonym(personalIdentifierFirst)
+ .build();
+
+ final SimpleEidasData eidasDataSecond = SimpleEidasData.builder()
+ .citizenCountryCode(cc)
+ .familyName("XXXTüzekçi")
+ .givenName("XXXŐzgür")
+ .dateOfBirth("1983-06-04")
+ .personalIdentifier(cc + "/AT/" + personalIdentifierSecond)
+ .pseudonym(personalIdentifierSecond)
+ .build();
+
+
+ // first login with update
+ // get initial result
+ final ZmrRegisterResult result = client.searchWithMds(null,
+ eidasDataFirst.getGivenName(),
+ eidasDataFirst.getFamilyName(),
+ eidasDataFirst.getDateOfBirth(),
+ eidasDataFirst.getCitizenCountryCode());
+ assertNotNull("ZMR response", result);
+ assertEquals("personResult size", 1, result.getPersonResult().size());
+
+ // update ZMR entry
+ final ZmrRegisterResult updateResult =
+ client.update(result.getProcessId(),
+ result.getPersonResult().get(0),
+ eidasDataFirst);
+
+ assertNotNull("ZMR response", updateResult);
+ assertEquals("personResult size", 1, updateResult.getPersonResult().size());
+
+
+ // second login with update
+ // get initial result
+ final ZmrRegisterResult resultSecond = client.searchWithMds(null,
+ eidasDataSecond.getGivenName(),
+ eidasDataSecond.getFamilyName(),
+ eidasDataSecond.getDateOfBirth(),
+ eidasDataSecond.getCitizenCountryCode());
+ assertNotNull("ZMR response", resultSecond);
+ assertEquals("personResult size", 1, resultSecond.getPersonResult().size());
+
+ // update ZMR entry
+ final ZmrRegisterResult updateResultSecond =
+ client.update(resultSecond.getProcessId(),
+ resultSecond.getPersonResult().get(0),
+ eidasDataSecond);
+
+ assertNotNull("ZMR response", updateResultSecond);
+ assertEquals("personResult size", 1, updateResultSecond.getPersonResult().size());
+
+
+ // check if ZMR entry can be found by first PersonalId
+ final ZmrRegisterResult firstPersonalIdResult = client.searchWithPersonIdentifier(null,
+ personalIdentifierFirst, cc);
+ assertNotNull("ZMR response", firstPersonalIdResult);
+ assertEquals("first personResult size", 1, firstPersonalIdResult.getPersonResult().size());
+
+ // check if ZMR entry can be found by second PersonalId
+ final ZmrRegisterResult secondPersonalIdResult = client.searchWithPersonIdentifier(null,
+ personalIdentifierFirst, cc);
+ assertNotNull("ZMR response", secondPersonalIdResult);
+ assertEquals("second personResult size", 1, secondPersonalIdResult.getPersonResult().size());
+
+
+ // search CC-specific with first MDS
+ final ZmrRegisterResult ccSpecificFirstEntry = client.searchCountrySpecific(null,
+ generateCustomRequest(
+ eidasDataFirst.getCitizenCountryCode(),
+ eidasDataFirst.getFamilyName(),
+ eidasDataFirst.getGivenName(),
+ eidasDataFirst.getDateOfBirth(),
+ eidasDataFirst.getPseudonym(),
+ null,
+ null),
+ cc);
+
+ assertNotNull("ZMR response", ccSpecificFirstEntry);
+ assertNotNull("ZMR processId", ccSpecificFirstEntry.getProcessId());
+ assertNotNull("ZMR personResult", ccSpecificFirstEntry.getPersonResult());
+ assertEquals("personResult size", 1, ccSpecificFirstEntry.getPersonResult().size());
+
+
+ // search CC-specific with second MDS
+ final ZmrRegisterResult ccSpecificSecondEntry = client.searchCountrySpecific(null,
+ generateCustomRequest(
+ eidasDataSecond.getCitizenCountryCode(),
+ eidasDataSecond.getFamilyName(),
+ eidasDataSecond.getGivenName(),
+ eidasDataSecond.getDateOfBirth(),
+ eidasDataSecond.getPseudonym(),
+ null,
+ null),
+ cc);
+
+ assertNotNull("ZMR response", ccSpecificSecondEntry);
+ assertNotNull("ZMR processId", ccSpecificSecondEntry.getProcessId());
+ assertNotNull("ZMR personResult", ccSpecificSecondEntry.getPersonResult());
+ assertEquals("personResult size", 1, ccSpecificSecondEntry.getPersonResult().size());
+
+
+ }
+
+
+ private PersonSuchenRequest generateCustomRequest(String cc, String familyName, String givenName,
+ String dateOfBirth, String personalId, String placeOfBirth, String birthName) {
+ final PersonSuchenRequest req = new PersonSuchenRequest();
+
+ // set basic MDS information
+ final NatuerlichePersonTyp searchNatPerson = new NatuerlichePersonTyp();
+ req.setNatuerlichePerson(searchNatPerson);
+ final PersonenNameTyp searchNatPersonName = new PersonenNameTyp();
+ searchNatPerson.setPersonenName(searchNatPersonName);
+ searchNatPersonName.setFamilienname(familyName);
+ searchNatPersonName.setVorname(givenName);
+ searchNatPerson.setGeburtsdatum(dateOfBirth);
+
+ // add addtional eIDAS attributes if available
+ addIfAvailable(req.getEidasSuchdaten(), cc, Constants.eIDAS_ATTRURN_PLACEOFBIRTH, placeOfBirth);
+ addIfAvailable(req.getEidasSuchdaten(), cc, Constants.eIDAS_ATTRURN_BIRTHNAME, birthName);
+ addIfAvailable(req.getEidasSuchdaten(), cc, Constants.eIDAS_ATTRURN_PERSONALIDENTIFIER, personalId);
+
+ return req;
+
+ }
+
+ private void addIfAvailable(List<EidasSuchdatenType> eidasSuchdaten,
+ String cc, String attrName, String attrValue) {
+ if (StringUtils.isNotEmpty(attrValue)) {
+ eidasSuchdaten.add(buildEidasSuchData(cc, attrName, attrValue));
+
+ }
+ }
+
+ private EidasSuchdatenType buildEidasSuchData(String cc, String attrName, String attrValue) {
+ final EidasSuchdatenType eidasInfos = new EidasSuchdatenType();
+ eidasInfos.setStaatscode2(cc);
+ eidasInfos.setEidasArt(attrName);
+ eidasInfos.setEidasWert(attrValue);
+ return eidasInfos;
+
+ }
+
+}
diff --git a/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/clients/ZmrClientTest.java b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/clients/ZmrClientTest.java
new file mode 100644
index 00000000..4e0a1f28
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/clients/ZmrClientTest.java
@@ -0,0 +1,1242 @@
+package at.asitplus.eidas.specific.modules.auth.eidas.v2.test.clients;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+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.util.Arrays;
+import java.util.List;
+import java.util.Optional;
+
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBElement;
+import javax.xml.bind.JAXBException;
+import javax.xml.bind.Unmarshaller;
+
+import org.apache.commons.lang3.RandomStringUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.cxf.binding.soap.SoapFault;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Ignore;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
+import org.springframework.beans.factory.annotation.Autowired;
+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 com.github.skjolber.mockito.soap.SoapServiceRule;
+
+import at.asitplus.eidas.specific.core.test.config.dummy.MsConnectorDummyConfigMap;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.clients.zmr.ZmrSoapClient;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.clients.zmr.ZmrSoapClient.ZmrRegisterResult;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.controller.AdresssucheController.AdresssucheOutput;
+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.exception.EidasSAuthenticationException;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.exception.WorkflowException;
+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.bmi.namespace.zmr_su.zmr._20040201.EidasIdentitaetAnlageType;
+import at.gv.bmi.namespace.zmr_su.zmr._20040201.EidasSuchdatenType;
+import at.gv.bmi.namespace.zmr_su.zmr._20040201.PersonAendernRequest;
+import at.gv.bmi.namespace.zmr_su.zmr._20040201.PersonSuchenRequest;
+import at.gv.bmi.namespace.zmr_su.zmr._20040201.PersonensucheInfoType;
+import at.gv.e_government.reference.namespace.persondata.de._20040201.NatuerlichePersonTyp;
+import at.gv.e_government.reference.namespace.persondata.de._20040201.PersonenNameTyp;
+import at.gv.egiz.eaaf.core.exceptions.EaafException;
+import lombok.SneakyThrows;
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration(locations = {
+ "/SpringTest-context_tasks_test.xml",
+ "/SpringTest-context_basic_mapConfig.xml" })
+@DirtiesContext(classMode = ClassMode.AFTER_CLASS)
+public class ZmrClientTest {
+
+ 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;
+ @Autowired
+ ZmrSoapClient client;
+
+ @Rule
+ public SoapServiceRule soap = SoapServiceRule.newInstance();
+
+ private ServicePort zmrMock = null;
+
+ 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);
+ }
+
+ /**
+ * Initialize jUnit test.
+ */
+ @Before
+ public void initializer() {
+ if (zmrMock == null) {
+ zmrMock = soap.mock(ServicePort.class, "http://localhost:1234/demozmr");
+ }
+ }
+
+ @Test
+ @SneakyThrows
+ public void searchWithMdsEmpty() {
+ String familyName = RandomStringUtils.randomAlphabetic(10);
+ String givenName = RandomStringUtils.randomAlphabetic(10);
+ String dateOfBirth = RandomStringUtils.randomAlphabetic(10);
+ final String cc = RandomStringUtils.randomAlphabetic(2).toUpperCase();
+ BigInteger processId = new BigInteger(RandomStringUtils.randomNumeric(6));
+
+ final ArgumentCaptor<RequestType> zmrReq = ArgumentCaptor.forClass(RequestType.class);
+
+ // inject response
+ when(zmrMock.service(zmrReq.capture(), any())).thenReturn(
+ loadResponseFromFile("/data/zmr/empty_zmr_result.xml"));
+
+ // execute operation
+ ZmrRegisterResult resp = client.searchWithMds(processId,
+ givenName, familyName, dateOfBirth, cc);
+
+ // validate state
+ assertNotNull("no ZMR response", resp);
+ assertEquals("wrong processId", "367100000000079", resp.getProcessId().toString());
+ assertEquals("wrong resp size", 0, resp.getPersonResult().size());
+
+ // validate request
+ assertEquals("wrong number of req.", 1, zmrReq.getAllValues().size());
+ assertNotNull("Personensuche req.", zmrReq.getValue().getPersonSuchenRequest());
+
+ checkBasicRequestParameters(zmrReq.getValue(), PROCESS_TASK_SEARCH, processId, "jUnit123456");
+ PersonSuchenRequest pSuche = zmrReq.getValue().getPersonSuchenRequest();
+ checkSearchParameters(pSuche.getPersonensucheInfo());
+
+ assertEquals("eidas Docs. size", 0, pSuche.getEidasSuchdaten().size());
+ assertNotNull("mds", pSuche.getNatuerlichePerson());
+
+ assertEquals("req. givenName", givenName, pSuche.getNatuerlichePerson().getPersonenName().getVorname());
+ assertEquals("req. familyName", familyName, pSuche.getNatuerlichePerson().getPersonenName().getFamilienname());
+ assertEquals("req. dateOfBirth", dateOfBirth, pSuche.getNatuerlichePerson().getGeburtsdatum());
+
+ }
+
+ @Test
+ @SneakyThrows
+ public void searchWithMdsGetHistoricInfos() {
+ String familyName = RandomStringUtils.randomAlphabetic(10);
+ String givenName = RandomStringUtils.randomAlphabetic(10);
+ String dateOfBirth = RandomStringUtils.randomAlphabetic(10);
+ final String cc = "EE";
+
+ BigInteger processId = new BigInteger(RandomStringUtils.randomNumeric(6));
+
+ final ArgumentCaptor<RequestType> zmrReq = ArgumentCaptor.forClass(RequestType.class);
+
+ // inject response
+ when(zmrMock.service(zmrReq.capture(), any())).thenReturn(
+ loadResponseFromFile("/data/zmr/search_with_personalId_only_resp_historicIncluded.xml"));
+
+ // execute operation
+ ZmrRegisterResult resp = client.searchWithMds(processId,
+ givenName, familyName, dateOfBirth, cc);
+
+ // validate state
+ assertNotNull("no ZMR response", resp);
+ assertEquals("wrong processId", "367100000000080", resp.getProcessId().toString());
+ assertEquals("wrong resp size", 0, resp.getPersonResult().size());
+
+ }
+
+ @Test
+ @SneakyThrows
+ public void searchWithMdsSuccess() {
+ String familyName = RandomStringUtils.randomAlphabetic(10);
+ String givenName = RandomStringUtils.randomAlphabetic(10);
+ String dateOfBirth = RandomStringUtils.randomAlphabetic(10);
+ final String cc = "EE";
+
+ BigInteger processId = new BigInteger(RandomStringUtils.randomNumeric(6));
+
+ final ArgumentCaptor<RequestType> zmrReq = ArgumentCaptor.forClass(RequestType.class);
+
+ // inject response
+ when(zmrMock.service(zmrReq.capture(), any())).thenReturn(
+ loadResponseFromFile("/data/zmr/search_with_personalId_only_resp_moreThanOne_2.xml"));
+
+ // execute operation
+ ZmrRegisterResult resp = client.searchWithMds(processId,
+ givenName, familyName, dateOfBirth, cc);
+
+ // validate state
+ assertNotNull("no ZMR response", resp);
+ assertEquals("wrong processId", "367100000000080", resp.getProcessId().toString());
+ assertEquals("wrong resp size", 2, resp.getPersonResult().size());
+
+ // check first person
+ RegisterResult persInfo = resp.getPersonResult().get(0);
+ assertEquals("bPK", "9/MtsPZgBHQMBpQOD6aOY2TUqcY=", persInfo.getBpk());
+ assertEquals("dateOfBirth", "1983-06-04", persInfo.getDateOfBirth());
+ assertEquals("familyName", "XXXTüzekçi", persInfo.getFamilyName());
+ assertEquals("givenName", "XXXŐzgür", persInfo.getGivenName());
+ assertNull("placeOfBirth", persInfo.getPlaceOfBirth());
+ assertNull("birthName", persInfo.getBirthName());
+ assertEquals("num. stored eIDAS identifiers", 1, persInfo.getPseudonym().size());
+ assertEquals("stored eIDAS identifiers",
+ "aabbcc_should_not_be_included_for_DE", persInfo.getPseudonym().get(0));
+
+ // check second person
+ RegisterResult persInfo2 = resp.getPersonResult().get(1);
+ assertEquals("bPK", "UgeknNsc26lVuB7U/uYGVmWtnnA=", persInfo2.getBpk());
+ assertEquals("dateOfBirth", "1983-06-04", persInfo2.getDateOfBirth());
+ assertEquals("familyName", "XXXTüzekçi", persInfo2.getFamilyName());
+ assertEquals("givenName", "XXXŐzgür", persInfo2.getGivenName());
+ assertEquals("num. stored eIDAS identifiers", 1, persInfo2.getPseudonym().size());
+ assertEquals("stored eIDAS identifiers",
+ "7cEYSvKZasdfsafsaf4CDVzNT4E7cjkU4Vq_first", persInfo2.getPseudonym().get(0));
+
+ // validate request
+ assertEquals("wrong number of req.", 1, zmrReq.getAllValues().size());
+ assertNotNull("Personensuche req.", zmrReq.getValue().getPersonSuchenRequest());
+ checkBasicRequestParameters(zmrReq.getValue(), PROCESS_TASK_SEARCH, processId, "jUnit123456");
+ PersonSuchenRequest pSuche = zmrReq.getValue().getPersonSuchenRequest();
+ checkSearchParameters(pSuche.getPersonensucheInfo());
+
+ assertEquals("eidas Docs. size", 0, pSuche.getEidasSuchdaten().size());
+ assertNotNull("mds", pSuche.getNatuerlichePerson());
+
+ assertEquals("req. givenName", givenName, pSuche.getNatuerlichePerson().getPersonenName().getVorname());
+ assertEquals("req. familyName", familyName, pSuche.getNatuerlichePerson().getPersonenName().getFamilienname());
+ assertEquals("req. dateOfBirth", dateOfBirth, pSuche.getNatuerlichePerson().getGeburtsdatum());
+
+ }
+
+ //TODO: test does not throw the valid exception to catch the error that we like to test.
+ @Ignore
+ @Test
+ @SneakyThrows
+ public void searchWithPersonalIdentifierZmrError() {
+ final String personalIdentifierFirst = RandomStringUtils.randomAlphanumeric(10);
+ final String cc = RandomStringUtils.randomAlphabetic(2).toUpperCase();
+
+ // inject response
+ when(zmrMock.service(any(), any())).thenThrow(injectError(false));
+
+ // execute operation
+ EidasSAuthenticationException error = assertThrows("wrong Exception", EidasSAuthenticationException.class,
+ () -> client.searchWithPersonIdentifier(null, personalIdentifierFirst, cc));
+
+ assertEquals("wrong errorCode", "module.eidasauth.matching.01", error.getErrorId());
+
+ }
+
+ @Test
+ @SneakyThrows
+ public void searchWithPersonalIdentifierZmrGenericError() {
+ final String personalIdentifierFirst = RandomStringUtils.randomAlphanumeric(10);
+ final String cc = RandomStringUtils.randomAlphabetic(2).toUpperCase();
+
+ // inject response
+ when(zmrMock.service(any(), any())).thenThrow(injectError(true));
+
+ // execute operation
+ EidasSAuthenticationException error = assertThrows("wrong Exception", EidasSAuthenticationException.class,
+ () -> client.searchWithPersonIdentifier(null, personalIdentifierFirst, cc));
+
+ assertEquals("wrong errorCode", "module.eidasauth.matching.99", error.getErrorId());
+
+ }
+
+ @Test
+ @SneakyThrows
+ public void searchWithPersonalIdentifierGetHistoricInfos() {
+ final String personalIdentifierFirst = RandomStringUtils.randomAlphanumeric(10);
+ final String cc = RandomStringUtils.randomAlphabetic(2).toUpperCase();
+
+ final ArgumentCaptor<RequestType> zmrReq = ArgumentCaptor.forClass(RequestType.class);
+
+ // inject response
+ when(zmrMock.service(zmrReq.capture(), any())).thenReturn(
+ loadResponseFromFile("/data/zmr/search_with_personalId_only_resp_historicIncluded.xml"));
+
+ // execute operation
+ EidasSAuthenticationException error = assertThrows("wrong Exception", EidasSAuthenticationException.class,
+ () -> client.searchWithPersonIdentifier(null, personalIdentifierFirst, cc));
+
+ assertEquals("wrong errorCode", "module.eidasauth.matching.99", error.getErrorId());
+ assertEquals("wrong errorCode", "module.eidasauth.matching.02", ((EaafException) error.getCause()).getErrorId());
+
+ }
+
+ @Test
+ @SneakyThrows
+ public void searchWithPersonalIdentifierEmptyResult() {
+ final String personalIdentifierFirst = RandomStringUtils.randomAlphanumeric(10);
+ final String cc = RandomStringUtils.randomAlphabetic(2).toUpperCase();
+
+ final ArgumentCaptor<RequestType> zmrReq = ArgumentCaptor.forClass(RequestType.class);
+
+ // inject response
+ when(zmrMock.service(zmrReq.capture(), any())).thenReturn(
+ loadResponseFromFile("/data/zmr/empty_zmr_result.xml"));
+
+ // execute operation
+ ZmrRegisterResult resp = client.searchWithPersonIdentifier(null, personalIdentifierFirst, cc);
+
+ // validate state
+ assertNotNull("no ZMR response", resp);
+ assertEquals("wrong processId", "367100000000079", resp.getProcessId().toString());
+ assertEquals("wrong resp size", 0, resp.getPersonResult().size());
+
+ // validate request
+ assertEquals("wrong number of req.", 1, zmrReq.getAllValues().size());
+ assertNotNull("Personensuche req.", zmrReq.getValue().getPersonSuchenRequest());
+
+ checkBasicRequestParameters(zmrReq.getValue(), PROCESS_TASK_SEARCH, null, "jUnit123456");
+ PersonSuchenRequest pSuche = zmrReq.getValue().getPersonSuchenRequest();
+ checkSearchParameters(pSuche.getPersonensucheInfo());
+
+ assertEquals("eidas Docs. size", 1, pSuche.getEidasSuchdaten().size());
+ checkEidasDocumentResult(pSuche.getEidasSuchdaten(),
+ "http://eidas.europa.eu/attributes/naturalperson/PersonIdentifier", cc, personalIdentifierFirst);
+ assertNull("mds", pSuche.getNatuerlichePerson());
+
+ }
+
+ @Test
+ @SneakyThrows
+ public void searchWithPersonalIdentifierMoreThanOneResult() {
+ final String personalIdentifierFirst = RandomStringUtils.randomAlphanumeric(10);
+ final String cc = RandomStringUtils.randomAlphabetic(2).toUpperCase();
+
+ // inject response
+ when(zmrMock.service(any(), any())).thenReturn(
+ loadResponseFromFile("/data/zmr/search_with_personalId_only_resp_moreThanOne.xml"));
+
+ // execute operation
+ WorkflowException error = assertThrows("wrong Exception", WorkflowException.class,
+ () -> client.searchWithPersonIdentifier(null, personalIdentifierFirst, cc));
+
+ assertEquals("wrong errorCode", "module.eidasauth.matching.03", error.getErrorId());
+ assertEquals("wrong param 1", "Searching PersonIdentifier", error.getParams()[0]);
+ assertEquals("wrong param 2", "Find more-than-one ZMR entry with search criteria that has to be unique",
+ error.getParams()[1]);
+
+ }
+
+ @Test
+ @SneakyThrows
+ public void searchWithPersonalIdentifierSuccess() {
+ final String personalIdentifierFirst = "7cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit";
+ final String cc = "DE";
+ final SimpleEidasData eidasDataFirst = SimpleEidasData.builder()
+ .citizenCountryCode(cc)
+ .familyName("XXXvon Brandenburg")
+ .givenName("XXXClaus - Maria")
+ .dateOfBirth("1994-12-31")
+ .personalIdentifier(cc + "/AT/" + personalIdentifierFirst)
+ .pseudonym(personalIdentifierFirst)
+ .build();
+
+ BigInteger processId = new BigInteger(RandomStringUtils.randomNumeric(6));
+
+ final ArgumentCaptor<RequestType> zmrReq = ArgumentCaptor.forClass(RequestType.class);
+
+ // inject response
+ when(zmrMock.service(zmrReq.capture(), any())).thenReturn(
+ loadResponseFromFile("/data/zmr/search_with_personalId_only_resp.xml"));
+
+ // execute operation
+ ZmrRegisterResult resp = client.searchWithPersonIdentifier(processId,
+ eidasDataFirst.getPseudonym(), eidasDataFirst.getCitizenCountryCode());
+
+ // validate state
+ assertNotNull("no ZMR response", resp);
+ assertEquals("wrong processId", "367100000000079", resp.getProcessId().toString());
+ assertEquals("wrong resp size", 1, resp.getPersonResult().size());
+
+ RegisterResult persInfo = resp.getPersonResult().get(0);
+ assertEquals("bPK", "UgeknNsc26lVuB7U/uYGVmWtnnA=", persInfo.getBpk());
+ assertEquals("dateOfBirth", eidasDataFirst.getDateOfBirth(), persInfo.getDateOfBirth());
+ assertEquals("familyName", eidasDataFirst.getFamilyName(), persInfo.getFamilyName());
+ assertEquals("givenName", eidasDataFirst.getGivenName(), persInfo.getGivenName());
+ assertEquals("placeOfBirth", "Hintergigritzpotschn", persInfo.getPlaceOfBirth());
+ assertEquals("birthName", "XXXvon Heuburg", persInfo.getBirthName());
+ assertEquals("num. stored eIDAS identifiers", 2, persInfo.getPseudonym().size());
+ assertEquals("stored eIDAS identifiers", "7cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit",
+ persInfo.getPseudonym().get(0));
+ assertEquals("stored eIDAS identifiers",
+ "7cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit_second_one",
+ persInfo.getPseudonym().get(1));
+
+ // validate request
+ assertEquals("wrong number of req.", 1, zmrReq.getAllValues().size());
+ assertNotNull("Personensuche req.", zmrReq.getValue().getPersonSuchenRequest());
+ checkBasicRequestParameters(zmrReq.getValue(), PROCESS_TASK_SEARCH, processId, "jUnit123456");
+ PersonSuchenRequest pSuche = zmrReq.getValue().getPersonSuchenRequest();
+ checkSearchParameters(pSuche.getPersonensucheInfo());
+
+ assertEquals("eidas Docs. size", 1, pSuche.getEidasSuchdaten().size());
+ checkEidasDocumentResult(pSuche.getEidasSuchdaten(),
+ "http://eidas.europa.eu/attributes/naturalperson/PersonIdentifier", cc, personalIdentifierFirst);
+ assertNull("mds", pSuche.getNatuerlichePerson());
+
+ }
+
+ @Test
+ @SneakyThrows
+ public void searchWithPersonalIdentifierNoBpkZP() {
+ final String personalIdentifierFirst = "7cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit";
+ final String cc = "DE";
+ final SimpleEidasData eidasDataFirst = SimpleEidasData.builder()
+ .citizenCountryCode(cc)
+ .familyName("XXXvon Brandenburg")
+ .givenName("XXXClaus - Maria")
+ .dateOfBirth("1994-12-31")
+ .personalIdentifier(cc + "/AT/" + personalIdentifierFirst)
+ .pseudonym(personalIdentifierFirst)
+ .build();
+
+ BigInteger processId = new BigInteger(RandomStringUtils.randomNumeric(6));
+
+ final ArgumentCaptor<RequestType> zmrReq = ArgumentCaptor.forClass(RequestType.class);
+
+ // inject response
+ when(zmrMock.service(zmrReq.capture(), any())).thenReturn(
+ loadResponseFromFile("/data/zmr/no_bpk_zp.xml"));
+
+ // execute operation
+ ZmrRegisterResult resp = client.searchWithPersonIdentifier(processId,
+ eidasDataFirst.getPseudonym(), eidasDataFirst.getCitizenCountryCode());
+
+ // validate state
+ assertNotNull("no ZMR response", resp);
+ assertEquals("wrong processId", "367100000000079", resp.getProcessId().toString());
+ assertEquals("wrong resp size", 1, resp.getPersonResult().size());
+
+ RegisterResult persInfo = resp.getPersonResult().get(0);
+ assertNull("bPK", persInfo.getBpk());
+ assertEquals("dateOfBirth", eidasDataFirst.getDateOfBirth(), persInfo.getDateOfBirth());
+ assertEquals("familyName", eidasDataFirst.getFamilyName(), persInfo.getFamilyName());
+ assertEquals("givenName", eidasDataFirst.getGivenName(), persInfo.getGivenName());
+ assertEquals("placeOfBirth", "Hintergigritzpotschn", persInfo.getPlaceOfBirth());
+ assertEquals("birthName", "XXXvon Heuburg", persInfo.getBirthName());
+ assertEquals("num. stored eIDAS identifiers", 2, persInfo.getPseudonym().size());
+ assertEquals("stored eIDAS identifiers", "7cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit",
+ persInfo.getPseudonym().get(0));
+ assertEquals("stored eIDAS identifiers",
+ "7cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit_second_one",
+ persInfo.getPseudonym().get(1));
+
+ // validate request
+ assertEquals("wrong number of req.", 1, zmrReq.getAllValues().size());
+ assertNotNull("Personensuche req.", zmrReq.getValue().getPersonSuchenRequest());
+ checkBasicRequestParameters(zmrReq.getValue(), PROCESS_TASK_SEARCH, processId, "jUnit123456");
+ PersonSuchenRequest pSuche = zmrReq.getValue().getPersonSuchenRequest();
+ checkSearchParameters(pSuche.getPersonensucheInfo());
+
+ assertEquals("eidas Docs. size", 1, pSuche.getEidasSuchdaten().size());
+ checkEidasDocumentResult(pSuche.getEidasSuchdaten(),
+ "http://eidas.europa.eu/attributes/naturalperson/PersonIdentifier", cc, personalIdentifierFirst);
+ assertNull("mds", pSuche.getNatuerlichePerson());
+
+ }
+
+ @Test
+ @SneakyThrows
+ public void searchCcSpecificEmpty() {
+ BigInteger processId = new BigInteger(RandomStringUtils.randomNumeric(6));
+
+ final String cc = "DE";
+ String familyName = RandomStringUtils.randomAlphabetic(10);
+ String givenName = RandomStringUtils.randomAlphabetic(10);
+ String dateOfBirth = RandomStringUtils.randomAlphabetic(10);
+ String personalIdentifier = RandomStringUtils.randomAlphabetic(10);
+ String placeOfBirth = RandomStringUtils.randomAlphabetic(10);
+ String birthName = RandomStringUtils.randomAlphabetic(10);
+
+ final ArgumentCaptor<RequestType> zmrReq = ArgumentCaptor.forClass(RequestType.class);
+
+ // inject response
+ when(zmrMock.service(zmrReq.capture(), any())).thenReturn(
+ loadResponseFromFile("/data/zmr/empty_zmr_result.xml"));
+
+ // execute operation
+ ZmrRegisterResult resp = client.searchCountrySpecific(processId,
+ generateCustomRequest(cc, familyName, givenName, dateOfBirth, personalIdentifier, placeOfBirth, birthName),
+ cc);
+
+ // validate state
+ assertNotNull("no ZMR response", resp);
+ assertEquals("wrong processId", "367100000000079", resp.getProcessId().toString());
+ assertEquals("wrong resp size", 0, resp.getPersonResult().size());
+
+ }
+
+ @Test
+ @SneakyThrows
+ public void searchCcSpecificMoreThanOneResult() {
+ BigInteger processId = new BigInteger(RandomStringUtils.randomNumeric(6));
+
+ final String cc = "DE";
+ String familyName = RandomStringUtils.randomAlphabetic(10);
+ String givenName = RandomStringUtils.randomAlphabetic(10);
+ String dateOfBirth = RandomStringUtils.randomAlphabetic(10);
+ String personalIdentifier = RandomStringUtils.randomAlphabetic(10);
+ String placeOfBirth = RandomStringUtils.randomAlphabetic(10);
+ String birthName = RandomStringUtils.randomAlphabetic(10);
+
+ final ArgumentCaptor<RequestType> zmrReq = ArgumentCaptor.forClass(RequestType.class);
+
+ // inject response
+ when(zmrMock.service(zmrReq.capture(), any())).thenReturn(
+ loadResponseFromFile("/data/zmr/search_with_personalId_only_resp_moreThanOne.xml"));
+
+ // execute operation
+ WorkflowException error = assertThrows("wrong Exception", WorkflowException.class,
+ () -> client.searchCountrySpecific(processId,
+ generateCustomRequest(cc, familyName, givenName, dateOfBirth, personalIdentifier, placeOfBirth, birthName),
+ cc));
+
+ assertEquals("wrong errorCode", "module.eidasauth.matching.03", error.getErrorId());
+ assertEquals("wrong param 1", "Searching DE specific", error.getParams()[0]);
+ assertEquals("wrong param 2", "Find more-than-one ZMR entry with search criteria that has to be unique",
+ error.getParams()[1]);
+
+ }
+
+ @Test
+ @SneakyThrows
+ public void searchCcSpecificSuccess() {
+ final String personalIdentifierFirst = "7cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit";
+ final String cc = "DE";
+ final SimpleEidasData eidasDataFirst = SimpleEidasData.builder()
+ .citizenCountryCode(cc)
+ .familyName("XXXvon Brandenburg")
+ .givenName("XXXClaus - Maria")
+ .dateOfBirth("1994-12-31")
+ .personalIdentifier(cc + "/AT/" + personalIdentifierFirst)
+ .pseudonym(personalIdentifierFirst)
+ .build();
+
+ BigInteger processId = new BigInteger(RandomStringUtils.randomNumeric(6));
+
+ String familyName = RandomStringUtils.randomAlphabetic(10);
+ String givenName = RandomStringUtils.randomAlphabetic(10);
+ String dateOfBirth = RandomStringUtils.randomAlphabetic(10);
+ String personalIdentifier = RandomStringUtils.randomAlphabetic(10);
+ String placeOfBirth = RandomStringUtils.randomAlphabetic(10);
+ String birthName = RandomStringUtils.randomAlphabetic(10);
+
+ final ArgumentCaptor<RequestType> zmrReq = ArgumentCaptor.forClass(RequestType.class);
+
+ // inject response
+ when(zmrMock.service(zmrReq.capture(), any())).thenReturn(
+ loadResponseFromFile("/data/zmr/search_with_personalId_only_resp.xml"));
+
+ // execute operation
+ ZmrRegisterResult resp = client.searchCountrySpecific(processId,
+ generateCustomRequest(cc, familyName, givenName, dateOfBirth, personalIdentifier, placeOfBirth, birthName),
+ cc);
+
+ // validate state
+ assertNotNull("no ZMR response", resp);
+ assertEquals("wrong processId", "367100000000079", resp.getProcessId().toString());
+ assertEquals("wrong resp size", 1, resp.getPersonResult().size());
+
+ RegisterResult persInfo = resp.getPersonResult().get(0);
+ assertEquals("bPK", "UgeknNsc26lVuB7U/uYGVmWtnnA=", persInfo.getBpk());
+ assertEquals("dateOfBirth", eidasDataFirst.getDateOfBirth(), persInfo.getDateOfBirth());
+ assertEquals("familyName", eidasDataFirst.getFamilyName(), persInfo.getFamilyName());
+ assertEquals("givenName", eidasDataFirst.getGivenName(), persInfo.getGivenName());
+ assertEquals("placeOfBirth", "Hintergigritzpotschn", persInfo.getPlaceOfBirth());
+ assertEquals("birthName", "XXXvon Heuburg", persInfo.getBirthName());
+ assertEquals("num. stored eIDAS identifiers", 2, persInfo.getPseudonym().size());
+ assertEquals("stored eIDAS identifiers", "7cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit",
+ persInfo.getPseudonym().get(0));
+ assertEquals("stored eIDAS identifiers",
+ "7cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit_second_one",
+ persInfo.getPseudonym().get(1));
+
+ // validate request
+ assertEquals("wrong number of req.", 1, zmrReq.getAllValues().size());
+ assertNotNull("Personensuche req.", zmrReq.getValue().getPersonSuchenRequest());
+ checkBasicRequestParameters(zmrReq.getValue(), PROCESS_TASK_SEARCH, processId, "jUnit123456");
+ PersonSuchenRequest pSuche = zmrReq.getValue().getPersonSuchenRequest();
+ checkSearchParameters(pSuche.getPersonensucheInfo());
+
+ assertEquals("eidas Docs. size", 3, pSuche.getEidasSuchdaten().size());
+ checkEidasDocumentResult(pSuche.getEidasSuchdaten(),
+ "http://eidas.europa.eu/attributes/naturalperson/PlaceOfBirth", cc, placeOfBirth);
+ checkEidasDocumentResult(pSuche.getEidasSuchdaten(),
+ "http://eidas.europa.eu/attributes/naturalperson/BirthName", cc, birthName);
+ checkEidasDocumentResult(pSuche.getEidasSuchdaten(),
+ "http://eidas.europa.eu/attributes/naturalperson/PersonIdentifier", cc, personalIdentifier);
+
+ assertNotNull("mds", pSuche.getNatuerlichePerson());
+ assertEquals("req. givenName", givenName, pSuche.getNatuerlichePerson().getPersonenName().getVorname());
+ assertEquals("req. familyName", familyName, pSuche.getNatuerlichePerson().getPersonenName().getFamilienname());
+ assertEquals("req. dateOfBirth", dateOfBirth, pSuche.getNatuerlichePerson().getGeburtsdatum());
+
+ }
+
+ @Test
+ @SneakyThrows
+ public void searchResidenceEmpty() {
+ BigInteger processId = new BigInteger(RandomStringUtils.randomNumeric(6));
+
+ final String cc = "DE";
+ String familyName = RandomStringUtils.randomAlphabetic(10);
+ String givenName = RandomStringUtils.randomAlphabetic(10);
+ String dateOfBirth = RandomStringUtils.randomAlphabetic(10);
+ AdresssucheOutput addressInfo = AdresssucheOutput.builder()
+ .municipality(RandomStringUtils.randomAlphabetic(10))
+ .number(RandomStringUtils.randomAlphabetic(10))
+ .postleitzahl(RandomStringUtils.randomAlphabetic(10))
+ .street(RandomStringUtils.randomAlphabetic(10))
+ .village(RandomStringUtils.randomAlphabetic(10))
+ .build();
+
+
+ final ArgumentCaptor<RequestType> zmrReq = ArgumentCaptor.forClass(RequestType.class);
+
+ // inject response
+ when(zmrMock.service(zmrReq.capture(), any())).thenReturn(
+ loadResponseFromFile("/data/zmr/empty_zmr_result.xml"));
+
+ // execute operation
+ ZmrRegisterResult resp = client.searchWithResidenceData(processId,
+ givenName, familyName, dateOfBirth, cc, addressInfo);
+
+ // validate state
+ assertNotNull("no ZMR response", resp);
+ assertEquals("wrong processId", "367100000000079", resp.getProcessId().toString());
+ assertEquals("wrong resp size", 0, resp.getPersonResult().size());
+
+ // validate request
+ assertEquals("wrong number of req.", 1, zmrReq.getAllValues().size());
+ assertNotNull("Personensuche req.", zmrReq.getValue().getPersonSuchenRequest());
+ checkBasicRequestParameters(zmrReq.getValue(), PROCESS_TASK_SEARCH, processId, "jUnit123456");
+ PersonSuchenRequest pSuche = zmrReq.getValue().getPersonSuchenRequest();
+ checkSearchParameters(pSuche.getPersonensucheInfo());
+
+ assertNotNull("mds", pSuche.getNatuerlichePerson());
+ assertEquals("req. givenName", givenName, pSuche.getNatuerlichePerson().getPersonenName().getVorname());
+ assertEquals("req. familyName", familyName, pSuche.getNatuerlichePerson().getPersonenName().getFamilienname());
+ assertEquals("req. dateOfBirth", dateOfBirth, pSuche.getNatuerlichePerson().getGeburtsdatum());
+
+ assertEquals("req. Municipality", addressInfo.getMunicipality(), pSuche.getPostAdresse().getGemeinde());
+ assertEquals("req. Postleitzahl", addressInfo.getPostleitzahl(), pSuche.getPostAdresse().getPostleitzahl());
+ assertEquals("req. Village", addressInfo.getVillage(), pSuche.getPostAdresse().getOrtschaft());
+ assertEquals("req. Street", addressInfo.getStreet(), pSuche.getPostAdresse().getZustelladresse().getStrassenname());
+ assertEquals("req. Number", addressInfo.getNumber(), pSuche.getPostAdresse().getZustelladresse().getOrientierungsnummer());
+
+ }
+
+ @Test
+ @SneakyThrows
+ public void searchResidenceMoreThanOneResult() {
+ BigInteger processId = new BigInteger(RandomStringUtils.randomNumeric(6));
+
+ final String cc = "DE";
+ String familyName = RandomStringUtils.randomAlphabetic(10);
+ String givenName = RandomStringUtils.randomAlphabetic(10);
+ String dateOfBirth = RandomStringUtils.randomAlphabetic(10);
+ AdresssucheOutput addressInfo = AdresssucheOutput.builder()
+ .municipality(RandomStringUtils.randomAlphabetic(10))
+ .postleitzahl(RandomStringUtils.randomAlphabetic(10))
+ .street(RandomStringUtils.randomAlphabetic(10))
+ .build();
+
+ final ArgumentCaptor<RequestType> zmrReq = ArgumentCaptor.forClass(RequestType.class);
+
+ // inject response
+ when(zmrMock.service(zmrReq.capture(), any())).thenReturn(
+ loadResponseFromFile("/data/zmr/search_with_personalId_only_resp_moreThanOne.xml"));
+
+ // execute operation
+ ZmrRegisterResult resp = client.searchWithResidenceData(processId,
+ givenName, familyName, dateOfBirth, cc, addressInfo);
+
+ // validate state
+ assertNotNull("no ZMR response", resp);
+ assertEquals("wrong processId", "367100000000079", resp.getProcessId().toString());
+ assertEquals("wrong resp size", 2, resp.getPersonResult().size());
+
+ // validate request
+ assertEquals("wrong number of req.", 1, zmrReq.getAllValues().size());
+ assertNotNull("Personensuche req.", zmrReq.getValue().getPersonSuchenRequest());
+ checkBasicRequestParameters(zmrReq.getValue(), PROCESS_TASK_SEARCH, processId, "jUnit123456");
+ PersonSuchenRequest pSuche = zmrReq.getValue().getPersonSuchenRequest();
+ assertEquals("req. Municipality", addressInfo.getMunicipality(), pSuche.getPostAdresse().getGemeinde());
+ assertEquals("req. Postleitzahl", addressInfo.getPostleitzahl(), pSuche.getPostAdresse().getPostleitzahl());
+ assertNull("req. Village", pSuche.getPostAdresse().getOrtschaft());
+ assertEquals("req. Street", addressInfo.getStreet(), pSuche.getPostAdresse().getZustelladresse().getStrassenname());
+ assertNull("req. Number", pSuche.getPostAdresse().getZustelladresse().getOrientierungsnummer());
+
+ }
+
+ @Test
+ @SneakyThrows
+ public void searchResidenceSuccess() {
+ final String personalIdentifierFirst = "7cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit";
+ final String cc = "DE";
+ final SimpleEidasData eidasDataFirst = SimpleEidasData.builder()
+ .citizenCountryCode(cc)
+ .familyName("XXXvon Brandenburg")
+ .givenName("XXXClaus - Maria")
+ .dateOfBirth("1994-12-31")
+ .personalIdentifier(cc + "/AT/" + personalIdentifierFirst)
+ .pseudonym(personalIdentifierFirst)
+ .build();
+
+ BigInteger processId = new BigInteger(RandomStringUtils.randomNumeric(6));
+
+ String familyName = RandomStringUtils.randomAlphabetic(10);
+ String givenName = RandomStringUtils.randomAlphabetic(10);
+ String dateOfBirth = RandomStringUtils.randomAlphabetic(10);
+ AdresssucheOutput addressInfo = AdresssucheOutput.builder()
+ .municipality(RandomStringUtils.randomAlphabetic(10))
+ .postleitzahl(RandomStringUtils.randomAlphabetic(10))
+ .build();
+
+ final ArgumentCaptor<RequestType> zmrReq = ArgumentCaptor.forClass(RequestType.class);
+
+ // inject response
+ when(zmrMock.service(zmrReq.capture(), any())).thenReturn(
+ loadResponseFromFile("/data/zmr/search_with_personalId_only_resp.xml"));
+
+ // execute operation
+ ZmrRegisterResult resp = client.searchWithResidenceData(processId,
+ givenName, familyName, dateOfBirth, cc, addressInfo);
+
+ // validate state
+ assertNotNull("no ZMR response", resp);
+ assertEquals("wrong processId", "367100000000079", resp.getProcessId().toString());
+ assertEquals("wrong resp size", 1, resp.getPersonResult().size());
+
+ RegisterResult persInfo = resp.getPersonResult().get(0);
+ assertEquals("bPK", "UgeknNsc26lVuB7U/uYGVmWtnnA=", persInfo.getBpk());
+ assertEquals("dateOfBirth", eidasDataFirst.getDateOfBirth(), persInfo.getDateOfBirth());
+ assertEquals("familyName", eidasDataFirst.getFamilyName(), persInfo.getFamilyName());
+ assertEquals("givenName", eidasDataFirst.getGivenName(), persInfo.getGivenName());
+ assertEquals("placeOfBirth", "Hintergigritzpotschn", persInfo.getPlaceOfBirth());
+ assertEquals("birthName", "XXXvon Heuburg", persInfo.getBirthName());
+ assertEquals("num. stored eIDAS identifiers", 2, persInfo.getPseudonym().size());
+ assertEquals("stored eIDAS identifiers", "7cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit",
+ persInfo.getPseudonym().get(0));
+ assertEquals("stored eIDAS identifiers",
+ "7cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit_second_one",
+ persInfo.getPseudonym().get(1));
+
+ // validate request
+ assertEquals("wrong number of req.", 1, zmrReq.getAllValues().size());
+ assertNotNull("Personensuche req.", zmrReq.getValue().getPersonSuchenRequest());
+ checkBasicRequestParameters(zmrReq.getValue(), PROCESS_TASK_SEARCH, processId, "jUnit123456");
+ PersonSuchenRequest pSuche = zmrReq.getValue().getPersonSuchenRequest();
+ assertEquals("req. Municipality", addressInfo.getMunicipality(), pSuche.getPostAdresse().getGemeinde());
+ assertEquals("req. Postleitzahl", addressInfo.getPostleitzahl(), pSuche.getPostAdresse().getPostleitzahl());
+ assertNull("req. Village", pSuche.getPostAdresse().getOrtschaft());
+ assertNull("req. Number", pSuche.getPostAdresse().getZustelladresse());
+
+ }
+
+
+ @Test
+ @SneakyThrows
+ public void updateProcessNoLatestVersionResult() {
+ BigInteger processId = new BigInteger(RandomStringUtils.randomNumeric(6));
+
+ final String personalIdentifier = "7cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit";
+ final String cc = "DE";
+ final SimpleEidasData eidasData = SimpleEidasData.builder()
+ .citizenCountryCode(cc)
+ .familyName("XXXvon Brandenburg")
+ .givenName("XXXClaus - Maria")
+ .dateOfBirth("1994-12-31")
+ .personalIdentifier(cc + "/AT/" + personalIdentifier)
+ .pseudonym(personalIdentifier)
+ .birthName("XXXvon Heuburg")
+ .placeOfBirth("Hintergigritzpotschn")
+ .build();
+
+ RegisterResult toUpdate = RegisterResult.builder()
+ .bpk("UgeknNsc26lVuB7U/uYGVmWtnnA=")
+ .dateOfBirth("1994-12-31")
+ .familyName("XXXvon Brandenburg")
+ .givenName("XXXClaus - Maria")
+ //.birthName("")
+ //.placeOfBirth("")
+ //.pseudonym(Arrays.asList(""))
+ .build();
+
+
+ final ArgumentCaptor<RequestType> zmrReq = ArgumentCaptor.forClass(RequestType.class);
+
+ // inject response
+ when(zmrMock.service(zmrReq.capture(), any()))
+ .thenReturn(loadResponseFromFile("/data/zmr/empty_zmr_result.xml"))
+ .thenThrow(new RuntimeException("Request not needed any more"));
+
+
+ // execute operation
+ WorkflowException error = assertThrows("wrong Exception", WorkflowException.class,
+ () -> client.update(processId, toUpdate, eidasData));
+
+ assertEquals("wrong errorCode", "module.eidasauth.matching.03", error.getErrorId());
+ assertEquals("wrong param 1", "KITT get-latest-version", error.getParams()[0]);
+ assertEquals("wrong param 2", "Find NO data-set with already matchted eID during ZMR KITT process",
+ error.getParams()[1]);
+
+ }
+
+ @Test
+ @SneakyThrows
+ public void updateProcessMultiLatestVersionResult() {
+ BigInteger processId = new BigInteger(RandomStringUtils.randomNumeric(6));
+
+ final String personalIdentifier = "7cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit";
+ final String cc = "DE";
+ final SimpleEidasData eidasData = SimpleEidasData.builder()
+ .citizenCountryCode(cc)
+ .familyName("XXXvon Brandenburg")
+ .givenName("XXXClaus - Maria")
+ .dateOfBirth("1994-12-31")
+ .personalIdentifier(cc + "/AT/" + personalIdentifier)
+ .pseudonym(personalIdentifier)
+ .birthName("XXXvon Heuburg")
+ .placeOfBirth("Hintergigritzpotschn")
+ .build();
+
+ RegisterResult toUpdate = RegisterResult.builder()
+ .bpk("UgeknNsc26lVuB7U/uYGVmWtnnA=")
+ .dateOfBirth("1994-12-31")
+ .familyName("XXXvon Brandenburg")
+ .givenName("XXXClaus - Maria")
+ //.birthName("")
+ //.placeOfBirth("")
+ //.pseudonym(Arrays.asList(""))
+ .build();
+
+
+ final ArgumentCaptor<RequestType> zmrReq = ArgumentCaptor.forClass(RequestType.class);
+
+ // inject response
+ when(zmrMock.service(zmrReq.capture(), any()))
+ .thenReturn(loadResponseFromFile("/data/zmr/search_with_personalId_only_resp_moreThanOne.xml"))
+ .thenThrow(new RuntimeException("Request not needed any more"));
+
+
+ // execute operation
+ WorkflowException error = assertThrows("wrong Exception", WorkflowException.class,
+ () -> client.update(processId, toUpdate, eidasData));
+
+ assertEquals("wrong errorCode", "module.eidasauth.matching.03", error.getErrorId());
+ assertEquals("wrong param 1", "KITT get-latest-version", error.getParams()[0]);
+ assertEquals("wrong param 2", "Find MORE-THAN-ONE data-sets with already matchted eID during ZMR KITT process",
+ error.getParams()[1]);
+
+ }
+
+ @Test
+ @SneakyThrows
+ public void updateProcessRequired() {
+ BigInteger processId = new BigInteger(RandomStringUtils.randomNumeric(6));
+
+ final String personalIdentifier = "7cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit";
+ final String cc = "DE";
+ final SimpleEidasData eidasData = SimpleEidasData.builder()
+ .citizenCountryCode(cc)
+ .familyName("XXXvon Brandenburg")
+ .givenName("XXXClaus - Maria")
+ .dateOfBirth("1994-12-31")
+ .personalIdentifier(cc + "/AT/" + personalIdentifier)
+ .pseudonym(personalIdentifier)
+ .birthName("XXXvon Heuburg")
+ .placeOfBirth("Hintergigritzpotschn")
+ .build();
+
+ RegisterResult toUpdate = RegisterResult.builder()
+ .bpk("UgeknNsc26lVuB7U/uYGVmWtnnA=")
+ .dateOfBirth("1994-12-31")
+ .familyName("XXXvon Brandenburg")
+ .givenName("XXXClaus - Maria")
+ //.birthName("")
+ //.placeOfBirth("")
+ //.pseudonym(Arrays.asList(""))
+ .build();
+
+
+ final ArgumentCaptor<RequestType> zmrReq = ArgumentCaptor.forClass(RequestType.class);
+
+ // inject response
+ when(zmrMock.service(zmrReq.capture(), any()))
+ .thenReturn(loadResponseFromFile("/data/zmr/seq_1-4_kitt_get_latest_version_resp.xml"))
+ .thenReturn(loadResponseFromFile("/data/zmr/seq_1-6_kitt_update_resp.xml"))
+ .thenThrow(new RuntimeException("Request not needed any more"));
+
+
+ // execute operation
+ ZmrRegisterResult resp = client.update(processId, toUpdate, eidasData);
+
+ // validate request
+ assertEquals("wrong number of req.", 2, zmrReq.getAllValues().size());
+
+ // check get laterst version request
+ RequestType firstReq = zmrReq.getAllValues().get(0);
+ assertNotNull("1 req.", firstReq.getPersonSuchenRequest());
+ checkBasicRequestParameters(firstReq , PROCESS_TASK_SEARCH, processId, "jUnit123456");
+ PersonSuchenRequest pSuche = firstReq .getPersonSuchenRequest();
+ checkSearchParameters(pSuche.getPersonensucheInfo());
+ assertNull("1 req. ZMR Zahl", pSuche.getZMRZahl());
+ assertEquals("1 req. identifier size", 1,
+ pSuche.getNatuerlichePerson().getIdentification().size());
+ assertEquals("1 req. givenName", toUpdate.getBpk(),
+ pSuche.getNatuerlichePerson().getIdentification().get(0).getValue());
+ assertEquals("1 req. givenName", "urn:publicid:gv.at:cdid+ZP",
+ pSuche.getNatuerlichePerson().getIdentification().get(0).getType());
+ assertNotNull("1 mds", pSuche.getNatuerlichePerson());
+ assertEquals("1 req. givenName", toUpdate.getGivenName(),
+ pSuche.getNatuerlichePerson().getPersonenName().getVorname());
+ assertEquals("1 req. familyName", toUpdate.getFamilyName(),
+ pSuche.getNatuerlichePerson().getPersonenName().getFamilienname());
+ assertEquals("1 req. dateOfBirth", toUpdate.getDateOfBirth(),
+ pSuche.getNatuerlichePerson().getGeburtsdatum());
+
+
+ // check update request
+ RequestType secondReq = zmrReq.getAllValues().get(1);
+ assertNotNull("2 req.", secondReq.getPersonAendernRequest());
+ checkBasicRequestParameters(secondReq , PROCESS_TASK_UPDATE, processId, "jUnit123456");
+ PersonAendernRequest secondpSuche = secondReq.getPersonAendernRequest();
+
+ assertEquals("2 req. ZMR Zahl", "000430320173", secondpSuche.getPersonReferenz().getZMRZahl());
+ assertEquals("2 req. tech. Ref. value", "44453600000000697",
+ secondpSuche.getPersonReferenz().getTechnisch().getEntityID());
+ assertEquals("2 req. tech. Ref. date", "2020-02-05T13:07:06.311",
+ secondpSuche.getPersonReferenz().getTechnisch().getLetzteAenderung().toString());
+
+ assertEquals("eidas Docs. size", 6, secondpSuche.getEidasIdentitaetAnlage().size());
+ checkEidasDocumentAdd(secondpSuche.getEidasIdentitaetAnlage(),
+ "http://eidas.europa.eu/attributes/naturalperson/PlaceOfBirth", cc, eidasData.getPlaceOfBirth());
+ checkEidasDocumentAdd(secondpSuche.getEidasIdentitaetAnlage(),
+ "http://eidas.europa.eu/attributes/naturalperson/BirthName", cc, eidasData.getBirthName());
+ checkEidasDocumentAdd(secondpSuche.getEidasIdentitaetAnlage(),
+ "http://eidas.europa.eu/attributes/naturalperson/PersonIdentifier", cc, eidasData.getPseudonym());
+ checkEidasDocumentAdd(secondpSuche.getEidasIdentitaetAnlage(),
+ "http://eidas.europa.eu/attributes/naturalperson/CurrentGivenName", cc, eidasData.getGivenName());
+ checkEidasDocumentAdd(secondpSuche.getEidasIdentitaetAnlage(),
+ "http://eidas.europa.eu/attributes/naturalperson/CurrentFamilyName", cc, eidasData.getFamilyName());
+ checkEidasDocumentAdd(secondpSuche.getEidasIdentitaetAnlage(),
+ "http://eidas.europa.eu/attributes/naturalperson/DateOfBirth", cc, eidasData.getDateOfBirth());
+
+
+ // validate state
+ assertNotNull("no ZMR response", resp);
+ assertEquals("wrong processId", "366200000000082", resp.getProcessId().toString());
+ assertEquals("wrong resp size", 1, resp.getPersonResult().size());
+
+ }
+
+ @Test
+ @SneakyThrows
+ public void updateProcessNoUpdateRequired() {
+ BigInteger processId = new BigInteger(RandomStringUtils.randomNumeric(6));
+
+ final String personalIdentifier = "7cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit";
+ final String cc = "DE";
+ final SimpleEidasData eidasData = SimpleEidasData.builder()
+ .citizenCountryCode(cc)
+ .familyName("XXXvon Brandenburg")
+ .givenName("XXXClaus - Maria")
+ .dateOfBirth("1994-12-31")
+ .personalIdentifier(cc + "/AT/" + personalIdentifier)
+ .pseudonym(personalIdentifier)
+ .birthName("XXXvon Heuburg")
+ .placeOfBirth("Hintergigritzpotschn")
+ .build();
+
+ RegisterResult toUpdate = RegisterResult.builder()
+ .bpk("UgeknNsc26lVuB7U/uYGVmWtnnA=")
+ .dateOfBirth("1994-12-31")
+ .familyName("XXXvon Brandenburg")
+ .givenName("XXXClaus - Maria")
+ .birthName("XXXvon Heuburg")
+ .placeOfBirth("Hintergigritzpotschn")
+ .pseudonym(Arrays.asList(personalIdentifier))
+ .build();
+
+
+ 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("Request not needed any more"));
+
+
+ // execute operation
+ ZmrRegisterResult resp = client.update(processId, toUpdate, eidasData);
+
+ // validate request
+ assertEquals("wrong number of req.", 1, zmrReq.getAllValues().size());
+
+ // check get laterst version request
+ RequestType firstReq = zmrReq.getAllValues().get(0);
+ assertNotNull("1 req.", firstReq.getPersonSuchenRequest());
+ checkBasicRequestParameters(firstReq , PROCESS_TASK_SEARCH, processId, "jUnit123456");
+ PersonSuchenRequest pSuche = firstReq .getPersonSuchenRequest();
+ checkSearchParameters(pSuche.getPersonensucheInfo());
+ assertNull("1 req. ZMR Zahl", pSuche.getZMRZahl());
+ assertEquals("1 req. identifier size", 1,
+ pSuche.getNatuerlichePerson().getIdentification().size());
+ assertEquals("1 req. givenName", toUpdate.getBpk(),
+ pSuche.getNatuerlichePerson().getIdentification().get(0).getValue());
+ assertEquals("1 req. givenName", "urn:publicid:gv.at:cdid+ZP",
+ pSuche.getNatuerlichePerson().getIdentification().get(0).getType());
+ assertNotNull("1 mds", pSuche.getNatuerlichePerson());
+ assertEquals("1 req. givenName", toUpdate.getGivenName(),
+ pSuche.getNatuerlichePerson().getPersonenName().getVorname());
+ assertEquals("1 req. familyName", toUpdate.getFamilyName(),
+ pSuche.getNatuerlichePerson().getPersonenName().getFamilienname());
+ assertEquals("1 req. dateOfBirth", toUpdate.getDateOfBirth(),
+ pSuche.getNatuerlichePerson().getGeburtsdatum());
+
+
+ // validate state
+ assertNotNull("no ZMR response", resp);
+ assertEquals("wrong processId", processId.toString(), resp.getProcessId().toString());
+ assertEquals("wrong resp size", 1, resp.getPersonResult().size());
+
+ }
+
+ @Test
+ @SneakyThrows
+ public void updateProcessSomeSpecialCases() {
+ BigInteger processId = new BigInteger(RandomStringUtils.randomNumeric(6));
+
+ final String personalIdentifier = RandomStringUtils.randomAlphanumeric(10);
+ final String cc = "DE";
+ final SimpleEidasData eidasData = SimpleEidasData.builder()
+ .citizenCountryCode(cc)
+ .familyName("XXXvon Brandenburg")
+ .givenName("XXXClaus - Maria")
+ .dateOfBirth("1994-12-31")
+ .personalIdentifier(cc + "/AT/" + personalIdentifier)
+ .pseudonym(personalIdentifier)
+ .birthName("") //empty addr. values should be ignored
+ .placeOfBirth(RandomStringUtils.randomAlphabetic(10)) //should be ignored because it was already set for DE
+ .build();
+
+ RegisterResult toUpdate = RegisterResult.builder()
+ .bpk("UgeknNsc26lVuB7U/uYGVmWtnnA=")
+ .dateOfBirth("1994-12-31")
+ .familyName("XXXvon Brandenburg")
+ .givenName("XXXClaus - Maria")
+ .birthName("XXXvon Heuburg")
+ .placeOfBirth("Hintergigritzpotschn")
+ .pseudonym(Arrays.asList("7cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit"))
+ .build();
+
+
+ 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"))
+ .thenReturn(loadResponseFromFile("/data/zmr/seq_1-6_kitt_update_resp.xml"))
+ .thenThrow(new RuntimeException("Request not needed any more"));
+
+
+ // execute operation
+ ZmrRegisterResult resp = client.update(processId, toUpdate, eidasData);
+
+ // validate request
+ assertEquals("wrong number of req.", 2, zmrReq.getAllValues().size());
+
+ // check get latest version request
+ RequestType firstReq = zmrReq.getAllValues().get(0);
+ assertNotNull("1 req.", firstReq.getPersonSuchenRequest());
+ checkBasicRequestParameters(firstReq , PROCESS_TASK_SEARCH, processId, "jUnit123456");
+ PersonSuchenRequest pSuche = firstReq .getPersonSuchenRequest();
+ checkSearchParameters(pSuche.getPersonensucheInfo());
+ assertNull("1 req. ZMR Zahl", pSuche.getZMRZahl());
+ assertEquals("1 req. identifier size", 1,
+ pSuche.getNatuerlichePerson().getIdentification().size());
+ assertEquals("1 req. givenName", toUpdate.getBpk(),
+ pSuche.getNatuerlichePerson().getIdentification().get(0).getValue());
+ assertEquals("1 req. givenName", "urn:publicid:gv.at:cdid+ZP",
+ pSuche.getNatuerlichePerson().getIdentification().get(0).getType());
+ assertNotNull("1 mds", pSuche.getNatuerlichePerson());
+ assertEquals("1 req. givenName", toUpdate.getGivenName(),
+ pSuche.getNatuerlichePerson().getPersonenName().getVorname());
+ assertEquals("1 req. familyName", toUpdate.getFamilyName(),
+ pSuche.getNatuerlichePerson().getPersonenName().getFamilienname());
+ assertEquals("1 req. dateOfBirth", toUpdate.getDateOfBirth(),
+ pSuche.getNatuerlichePerson().getGeburtsdatum());
+
+ // check update request
+ RequestType secondReq = zmrReq.getAllValues().get(1);
+ assertNotNull("2 req.", secondReq.getPersonAendernRequest());
+ checkBasicRequestParameters(secondReq , PROCESS_TASK_UPDATE, processId, "jUnit123456");
+ PersonAendernRequest secondpSuche = secondReq.getPersonAendernRequest();
+
+ assertEquals("2 req. ZMR Zahl", "000430320173", secondpSuche.getPersonReferenz().getZMRZahl());
+ assertEquals("2 req. tech. Ref. value", "44453600000000697",
+ secondpSuche.getPersonReferenz().getTechnisch().getEntityID());
+ assertEquals("2 req. tech. Ref. date", "2020-02-05T13:07:06.311",
+ secondpSuche.getPersonReferenz().getTechnisch().getLetzteAenderung().toString());
+
+
+ // only one attribute for update because birthname is empty and placeOfBirth was already set for DE
+ assertEquals("eidas Docs. size", 1, secondpSuche.getEidasIdentitaetAnlage().size());
+ checkEidasDocumentAdd(secondpSuche.getEidasIdentitaetAnlage(),
+ "http://eidas.europa.eu/attributes/naturalperson/PersonIdentifier", cc, eidasData.getPseudonym());
+
+ // validate state
+ assertNotNull("no ZMR response", resp);
+ assertEquals("wrong processId", "366200000000082", resp.getProcessId().toString());
+ assertEquals("wrong resp size", 1, resp.getPersonResult().size());
+
+ }
+
+
+ private PersonSuchenRequest generateCustomRequest(String cc, String familyName, String givenName,
+ String dateOfBirth, String personalId, String placeOfBirth, String birthName) {
+ final PersonSuchenRequest req = new PersonSuchenRequest();
+
+ // set basic MDS information
+ final NatuerlichePersonTyp searchNatPerson = new NatuerlichePersonTyp();
+ req.setNatuerlichePerson(searchNatPerson);
+ final PersonenNameTyp searchNatPersonName = new PersonenNameTyp();
+ searchNatPerson.setPersonenName(searchNatPersonName);
+ searchNatPersonName.setFamilienname(familyName);
+ searchNatPersonName.setVorname(givenName);
+ searchNatPerson.setGeburtsdatum(dateOfBirth);
+
+ // add addtional eIDAS attributes if available
+ addIfAvailable(req.getEidasSuchdaten(), cc, Constants.eIDAS_ATTRURN_PLACEOFBIRTH, placeOfBirth);
+ addIfAvailable(req.getEidasSuchdaten(), cc, Constants.eIDAS_ATTRURN_BIRTHNAME, birthName);
+ addIfAvailable(req.getEidasSuchdaten(), cc, Constants.eIDAS_ATTRURN_PERSONALIDENTIFIER, personalId);
+
+ return req;
+
+ }
+
+ private void addIfAvailable(List<EidasSuchdatenType> eidasSuchdaten,
+ String cc, String attrName, String attrValue) {
+ if (StringUtils.isNotEmpty(attrValue)) {
+ eidasSuchdaten.add(buildEidasSuchData(cc, attrName, attrValue));
+
+ }
+ }
+
+ private EidasSuchdatenType buildEidasSuchData(String cc, String attrName, String attrValue) {
+ final EidasSuchdatenType eidasInfos = new EidasSuchdatenType();
+ eidasInfos.setStaatscode2(cc);
+ eidasInfos.setEidasArt(attrName);
+ eidasInfos.setEidasWert(attrValue);
+ return eidasInfos;
+
+ }
+
+ private void checkSearchParameters(PersonensucheInfoType toCheck) {
+ assertTrue("searchWithHistory flag", toCheck.getSuchkriterien().isInclusivHistorie());
+ assertFalse("withERsB flag", toCheck.getSuchkriterien().isInclusivERnP());
+ assertFalse("formalisiert flag", toCheck.getSuchkriterien().isFormalisiert());
+ assertFalse("resultWithHistory flag", toCheck.getErgebniskriterien().isInclusivHistorie());
+
+ }
+
+ private void checkEidasDocumentResult(List<EidasSuchdatenType> list, String type, String cc, String value) {
+ Optional<EidasSuchdatenType> eidasDoc = list.stream()
+ .filter(el -> type.equals(el.getEidasArt()))
+ .findFirst();
+
+ assertTrue("eidas doc: " + type, eidasDoc.isPresent());
+ assertEquals("eIDAS docType", type, eidasDoc.get().getEidasArt());
+ assertEquals("eIDAS docValue", value, eidasDoc.get().getEidasWert());
+ assertEquals("eIDAS docCC", cc, eidasDoc.get().getStaatscode2());
+
+ }
+
+ private void checkEidasDocumentAdd(List<EidasIdentitaetAnlageType> list, String type, String cc,
+ String value) {
+ Optional<EidasIdentitaetAnlageType> eidasDoc = list.stream()
+ .filter(el -> type.equals(el.getEidasArt()))
+ .findFirst();
+
+ assertTrue("eidas doc: " + type, eidasDoc.isPresent());
+ assertEquals("eIDAS docType", type, eidasDoc.get().getEidasArt());
+ assertEquals("eIDAS docValue", value, eidasDoc.get().getEidasWert());
+ assertEquals("eIDAS docCC", cc, eidasDoc.get().getStaatscode2());
+
+ }
+
+ private void checkBasicRequestParameters(RequestType requestType, String vorgangName, BigInteger processId,
+ String behoerdennummer) {
+ assertNotNull("no workflow infos", requestType.getWorkflowInfoClient());
+ assertEquals("processName", 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());
+ }
+
+ 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 Throwable injectError(boolean isGeneric) {
+ javax.xml.namespace.QName qName;
+ if (isGeneric) {
+ qName = new javax.xml.namespace.QName("urn:SZRServices", "F455", "p344");
+
+ } else {
+ qName = new javax.xml.namespace.QName("http://bmi.gv.at/namespace/zmr-su/base/20040201#", "ServiceFault", "zmr");
+
+ }
+ final SoapFault fault = new SoapFault(
+ "The travel document you sent to insert a person already exists for another person. " + "Either check the document or have the person altered accordingly",
+ qName);
+ fault.setRole("zmr:ServiceFault");
+ return fault;
+
+ }
+
+}
diff --git a/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/config/EidasConnectorMessageSourceTest.java b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/config/EidasConnectorMessageSourceTest.java
new file mode 100644
index 00000000..1f96b25c
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/config/EidasConnectorMessageSourceTest.java
@@ -0,0 +1,43 @@
+package at.asitplus.eidas.specific.modules.auth.eidas.v2.test.config;
+
+import java.util.List;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.io.Resource;
+import org.springframework.core.io.ResourceLoader;
+import org.springframework.test.annotation.DirtiesContext;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+import at.gv.egiz.eaaf.core.api.logging.IMessageSourceLocation;
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration(locations = {
+ "/SpringTest-context_tasks_test.xml",
+ "/SpringTest-context_basic_mapConfig.xml"})
+@DirtiesContext
+public class EidasConnectorMessageSourceTest {
+
+ @Autowired
+ private ResourceLoader loader;
+ @Autowired(required = false)
+ private List<IMessageSourceLocation> messageSources;
+
+ @Test
+ public void checkMessageSources() {
+ Assert.assertNotNull("No messageSource", messageSources);
+
+ for (final IMessageSourceLocation messageSource : messageSources) {
+ Assert.assertNotNull("No sourcePath", messageSource.getMessageSourceLocation());
+
+ for (final String el : messageSource.getMessageSourceLocation()) {
+ final Resource messages = loader.getResource(el + ".properties");
+ Assert.assertTrue("Source not exist", messages.exists());
+
+ }
+ }
+ }
+}
diff --git a/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/dummy/DummyAuthConfigMap.java b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/dummy/DummyAuthConfigMap.java
new file mode 100644
index 00000000..ba531029
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/dummy/DummyAuthConfigMap.java
@@ -0,0 +1,144 @@
+package at.asitplus.eidas.specific.modules.auth.eidas.v2.test.dummy;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URI;
+import java.net.URL;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+
+import at.gv.egiz.eaaf.core.api.idp.IConfigurationWithSP;
+import at.gv.egiz.eaaf.core.api.idp.ISpConfiguration;
+import at.gv.egiz.eaaf.core.exceptions.EaafConfigurationException;
+import at.gv.egiz.eaaf.core.exceptions.EaafException;
+import at.gv.egiz.eaaf.core.impl.utils.KeyValueUtils;
+
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * Dummy Application-configuration implementation for jUnit tests.
+ *
+ * @author tlenz
+ *
+ */
+public class DummyAuthConfigMap implements IConfigurationWithSP {
+
+ private Map<String, String> config = new HashMap<>();
+
+ /**
+ * Empty Dummy Application-configuration.
+ *
+ */
+ public DummyAuthConfigMap() {
+
+ }
+
+ /**
+ * Dummy Application-configuration.
+ *
+ * @param configIs Property based configuration
+ * @throws IOException In case of an configuration read error
+ */
+ public DummyAuthConfigMap(final InputStream configIs) throws IOException {
+
+ final Properties props = new Properties();
+ props.load(configIs);
+
+ config = KeyValueUtils.convertPropertiesToMap(props);
+
+ }
+
+ /**
+ * Dummy Application-configuration.
+ *
+ * @param path Path to property based configuration
+ * @throws IOException In case of an configuration read error
+ */
+ public DummyAuthConfigMap(final String path) throws IOException {
+
+ final Properties props = new Properties();
+ props.load(this.getClass().getResourceAsStream(path));
+
+ config = KeyValueUtils.convertPropertiesToMap(props);
+
+ }
+
+
+ @Override
+ public String getBasicConfiguration(final String key) {
+ return config.get(key);
+
+ }
+
+ @Override
+ public String getBasicConfiguration(final String key, final String defaultValue) {
+ final String value = getBasicConfiguration(key);
+ if (StringUtils.isEmpty(value)) {
+ return defaultValue;
+ } else {
+ return value;
+ }
+
+ }
+
+ @Override
+ public boolean getBasicConfigurationBoolean(final String key) {
+ final String value = getBasicConfiguration(key);
+ if (StringUtils.isEmpty(value)) {
+ return false;
+ } else {
+ return Boolean.valueOf(value);
+ }
+ }
+
+ @Override
+ public boolean getBasicConfigurationBoolean(final String key, final boolean defaultValue) {
+ return Boolean.parseBoolean(getBasicConfiguration(key, String.valueOf(defaultValue)));
+
+ }
+
+ @Override
+ public Map<String, String> getBasicConfigurationWithPrefix(final String prefix) {
+ return KeyValueUtils.getSubSetWithPrefix(config, prefix);
+
+ }
+
+ @Override
+ public ISpConfiguration getServiceProviderConfiguration(final String uniqueID)
+ throws EaafConfigurationException {
+ return null;
+ }
+
+ @Override
+ public <T> T getServiceProviderConfiguration(final String spIdentifier, final Class<T> decorator)
+ throws EaafConfigurationException {
+ return null;
+ }
+
+ @Override
+ public URI getConfigurationRootDirectory() {
+ return new java.io.File(".").toURI();
+
+ }
+
+ @Override
+ public String validateIdpUrl(final URL authReqUrl) throws EaafException {
+ return authReqUrl.toString();
+ }
+
+ public void putConfigValue(final String key, final String value) {
+ config.put(key, value);
+ }
+
+ public void removeConfigValue(final String key) {
+ config.remove(key);
+
+ }
+
+ public void removeAll() {
+ config.clear();
+
+ }
+
+}
diff --git a/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/dummy/DummyOA.java b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/dummy/DummyOA.java
new file mode 100644
index 00000000..074dd0bb
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/dummy/DummyOA.java
@@ -0,0 +1,304 @@
+package at.asitplus.eidas.specific.modules.auth.eidas.v2.test.dummy;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.commons.lang3.StringUtils;
+
+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.utils.KeyValueUtils;
+import lombok.Getter;
+import lombok.Setter;
+
+public class DummyOA implements IAhSpConfiguration {
+
+ private static final long serialVersionUID = 1L;
+ private String uniqueAppId = null;
+ private String targetIdentifier = null;
+ private String friendlyName = null;
+ private String cc = "AT";
+ private final Map<String, String> config = new HashMap<>();
+ private final List<Pair<String, String>> reqAttributes = new ArrayList<>();
+
+ private boolean mandateEnabled = false;
+ private boolean onlyMandateEnabled = false;
+ private String mandateProfilesCsv;
+
+ private boolean eidasEnabled = false;
+
+ private boolean testCredentialEnabled = true;
+ private String additionalBpkTargetCsv;
+ private List<Pair<String, String>> additionalEncBpkTargets;
+
+ @Setter
+ private boolean restricted = true;
+
+ @Setter
+ private long latestVdaAuthentication = 60 * 365 * 5;
+
+ @Getter
+ @Setter
+ private boolean publicServiceProvider;
+
+ @Getter
+ @Setter
+ private boolean multiMandateEnabled;
+
+ @Setter
+ private String bmiUniqueIdentifier;
+
+ @Override
+ public Map<String, String> getFullConfiguration() {
+ return this.config;
+ }
+
+ @Override
+ public String getConfigurationValue(final String key) {
+ return this.config.get(key);
+ }
+
+ @Override
+ public String getConfigurationValue(final String key, final String defaultValue) {
+ if (StringUtils.isNotEmpty(getConfigurationValue(key))) {
+ return getConfigurationValue(key);
+ } else {
+ return defaultValue;
+ }
+ }
+
+ @Override
+ public boolean isConfigurationValue(final String key) {
+ if (StringUtils.isNotEmpty(getConfigurationValue(key))) {
+ return Boolean.parseBoolean(getConfigurationValue(key));
+ } else {
+ return false;
+ }
+
+ }
+
+ @Override
+ public boolean isConfigurationValue(final String key, final boolean defaultValue) {
+ return Boolean.parseBoolean(getConfigurationValue(key, String.valueOf(defaultValue)));
+
+ }
+
+ @Override
+ public boolean containsConfigurationKey(final String key) {
+ return this.config.containsKey(key);
+ }
+
+ @Override
+ public String getUniqueIdentifier() {
+ return this.uniqueAppId;
+ }
+
+ @Override
+ public String getUniqueApplicationRegisterIdentifier() {
+ return this.bmiUniqueIdentifier;
+
+ }
+
+ @Override
+ public String getFriendlyName() {
+ return this.friendlyName;
+ }
+
+ @Override
+ public boolean hasBaseIdInternalProcessingRestriction() {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean hasBaseIdTransferRestriction() {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public Set<String> getTargetsWithNoBaseIdInternalProcessingRestriction() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Set<String> getTargetsWithNoBaseIdTransferRestriction() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public List<String> getRequiredLoA() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getLoAMatchingMode() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getAreaSpecificTargetIdentifier() {
+ return this.targetIdentifier;
+ }
+
+ @Override
+ public boolean isTestCredentialEnabled() {
+ return this.testCredentialEnabled;
+ }
+
+ @Override
+ public List<String> getTestCredentialOids() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public List<Pair<String, String>> getRequiredAttributes() {
+ return this.reqAttributes;
+
+ }
+
+ public void setUniqueAppId(final String uniqueAppId) {
+ this.uniqueAppId = uniqueAppId;
+ }
+
+ @Override
+ public String getCountryCode() {
+ return cc;
+ }
+
+ @Override
+ public void setCountryCode(final String cc) {
+ this.cc = cc;
+
+ }
+
+ public void setTargetIdentifier(final String targetIdentifier) {
+ this.targetIdentifier = BpkBuilder.normalizeBpkTargetIdentifierToCommonFormat(targetIdentifier);
+
+ }
+
+ public void setFriendlyName(final String friendlyName) {
+ this.friendlyName = friendlyName;
+ }
+
+ public void putGenericConfigurationKey(final String key, final String value) {
+ this.config.put(key, value);
+
+ }
+
+ public void addRequiredAttribute(final String attrUri) {
+ this.reqAttributes.add(Pair.newInstance(attrUri, null));
+
+ }
+
+ public void removeRequiredAttribute(final String attrUri) {
+ for (final Pair<String, String> el : reqAttributes) {
+ if (el.getFirst().equals(attrUri)) {
+ reqAttributes.remove(el);
+ break;
+
+ }
+
+
+ }
+ }
+
+ public void addRequiredAttribute(final String attrUri, String param) {
+ this.reqAttributes.add(Pair.newInstance(attrUri, param));
+
+ }
+
+ @Override
+ public boolean isMandateEnabled() {
+ return this.mandateEnabled;
+ }
+
+ @Override
+ public boolean isOnlyMandateEnabled() {
+ return this.onlyMandateEnabled;
+
+ }
+
+ @Override
+ public List<String> getMandateProfiles() {
+ return KeyValueUtils.getListOfCsvValues(mandateProfilesCsv);
+ }
+
+ @Override
+ public List<String> getAdditionalBpkTargets() {
+ return KeyValueUtils.getListOfCsvValues(additionalBpkTargetCsv);
+
+ }
+
+ @Override
+ public List<Pair<String, String>> getAdditionalForeignBpkTargets() {
+ if (additionalEncBpkTargets == null) {
+ return Collections.emptyList();
+
+ } else {
+ return additionalEncBpkTargets;
+
+ }
+ }
+
+ @Override
+ public long lastVdaAuthenticationDelay() {
+ return latestVdaAuthentication;
+
+ }
+
+ @Override
+ public boolean isRestrictedServiceProvider() {
+ return this.restricted;
+ }
+
+
+ public void setMandateEnabled(final boolean mandateEnabled) {
+ this.mandateEnabled = mandateEnabled;
+ }
+
+ public void setOnlyMandateEnabled(final boolean onlyMandateEnabled) {
+ this.onlyMandateEnabled = onlyMandateEnabled;
+ }
+
+ public void setMandateProfilesCsv(final String mandateProfilesCsv) {
+ this.mandateProfilesCsv = mandateProfilesCsv;
+ }
+
+ public void setTestCredentialEnabled(final boolean testCredentialEnabled) {
+ this.testCredentialEnabled = testCredentialEnabled;
+ }
+
+ public void setAdditionalBpkTargetCsv(String additionalBpkTargetCsv) {
+ this.additionalBpkTargetCsv = additionalBpkTargetCsv;
+ }
+
+ public void setAdditionalEncBpkTargets(List<Pair<String, String>> additionalEncBpkTargets) {
+ this.additionalEncBpkTargets = additionalEncBpkTargets;
+ }
+
+ @Override
+ public boolean isEnabled() {
+ return true;
+ }
+
+ @Override
+ public boolean isEidasEnabled() {
+ return this.eidasEnabled;
+
+ }
+
+ public void setEidasEnabled(boolean eidasEnabled) {
+ this.eidasEnabled = eidasEnabled;
+ }
+
+}
diff --git a/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/dummy/DummyPendingRequest.java b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/dummy/DummyPendingRequest.java
new file mode 100644
index 00000000..9a91ecbd
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/dummy/DummyPendingRequest.java
@@ -0,0 +1,8 @@
+package at.asitplus.eidas.specific.modules.auth.eidas.v2.test.dummy;
+
+import at.gv.egiz.eaaf.core.impl.idp.controller.protocols.RequestImpl;
+
+public class DummyPendingRequest extends RequestImpl {
+ private static final long serialVersionUID = 8136280395622411505L;
+}
+
diff --git a/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/dummy/IAhSpConfiguration.java b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/dummy/IAhSpConfiguration.java
new file mode 100644
index 00000000..13d61f15
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/dummy/IAhSpConfiguration.java
@@ -0,0 +1,152 @@
+package at.asitplus.eidas.specific.modules.auth.eidas.v2.test.dummy;
+
+import java.util.List;
+
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+
+import at.gv.egiz.eaaf.core.api.idp.ISpConfiguration;
+import at.gv.egiz.eaaf.core.impl.data.Pair;
+
+public interface IAhSpConfiguration extends ISpConfiguration {
+
+
+ /**
+ * Flag if this Service Provider is enabled.
+ *
+ * @return true if the SP is enabled, otherwise false
+ */
+ boolean isEnabled();
+
+ /**
+ * Get unique identifier that is used in Application-Register from BM.I.
+ *
+ * <p>If no BM.I specific identifier is available then this method returns
+ * the same identifier as <code>getUniqueIdentifier()</code></p>
+ *
+ * @return unique identifier from BM.I AppReg, or generic uniqueId of no specific exists
+ */
+ String getUniqueApplicationRegisterIdentifier();
+
+ /**
+ * Flag that marks this Service-Provider as <i>public</i> or <i>private</i>.
+ *
+ * <p><b>Default:</b> If it is not set or has an unknown value, its <i>private</i> by default</p>
+ *
+ * @return <code>true</code> if it is from <i>public</i>, otherwise <code>false</code>
+ */
+ boolean isPublicServiceProvider();
+
+ /**
+ * Enable test identities for this Service Provider.
+ *
+ * @return true if test identities are allowed, otherwise false
+ */
+ boolean isTestCredentialEnabled();
+
+ /**
+ * Get a List of OID's that refine the set of allowed test identities.
+ *
+ * @return @link {@link List} of test-identity OID's
+ */
+ @Nullable
+ List<String> getTestCredentialOids();
+
+
+ /**
+ * Get a List of unique attribute URI's that are required by this SP.
+ *
+ * @return {@link List} of attribute URI's / parameter {@link Pair}s
+ */
+ List<Pair<String, String>> getRequiredAttributes();
+
+
+ /**
+ * Get the CountryCode for this service. <br>
+ * <br>
+ * <b>Default:</b> AT
+ *
+ * @return
+ */
+ String getCountryCode();
+
+ /**
+ * Set the CountryCode for this service. If not countryCode is set, AT is used as default.
+ *
+ * @param cc Service-Provider country-code
+ */
+ void setCountryCode(String cc);
+
+ /**
+ * Enable mandates for this service provider.
+ *
+ * @return <code>true</code> if mandates are enabled, otherwise <code>false</code>
+ */
+ boolean isMandateEnabled();
+
+ /**
+ * Enables multi-mandates for this service-provider.
+ *
+ * @return <code>true</code> if multi-mandates are enabled, otherwise <code>false</code>
+ */
+ boolean isMultiMandateEnabled();
+
+ /**
+ * Only mandates are allowed for this service provider.
+ *
+ * @return <code>true</code> if only mandates are allowed, otherwise <code>false</code>
+ */
+ boolean isOnlyMandateEnabled();
+
+ /**
+ * Get a {@link List} of mandate profiles that are supported by this Service provider.
+ *
+ * @return
+ */
+ @Nonnull List<String> getMandateProfiles();
+
+
+ /**
+ * eIDAS authentication allowed flag.
+ *
+ * @return <code>true</code> if eIDAS authentication is enabled, otherwise <code>false</code>
+ */
+ boolean isEidasEnabled();
+
+ /**
+ * Get a List of targets for additional bPKs that are required by this service provider.
+ *
+ * @return List of prefixed bPK targets
+ */
+ @Nonnull List<String> getAdditionalBpkTargets();
+
+ /**
+ * Get a list of foreign bPK targets that are required by this service provider.
+ *
+ * @return List of pairs with prefixed bPK targets as first element and VKZ as second element
+ */
+ @Nonnull List<Pair<String, String>> getAdditionalForeignBpkTargets();
+
+ /**
+ * Flag that indicates that service-provider as restricted or unrestricted.
+ *
+ * <p>A restricted service-provider can only used by test-identities that contains a
+ * valid application-restriction in User-Certificate Pinning</p>
+ *
+ * <p><b>Default:</b> true</p>
+ *
+ * @return <code>true</code> if it is restricted, otherwise <code>false</code>
+ */
+ boolean isRestrictedServiceProvider();
+
+
+/**
+ * Defines the time in minutes how long the last VDA registration h@Override
+ ave passed as maximum.
+ *
+ * @return time in minutes
+ */
+long lastVdaAuthenticationDelay();
+
+}
+
diff --git a/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/handler/DeSpecificDetailSearchProcessorTest.java b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/handler/DeSpecificDetailSearchProcessorTest.java
new file mode 100644
index 00000000..21c9fd80
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/handler/DeSpecificDetailSearchProcessorTest.java
@@ -0,0 +1,105 @@
+package at.asitplus.eidas.specific.modules.auth.eidas.v2.test.handler;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import org.apache.commons.lang3.RandomStringUtils;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.BlockJUnit4ClassRunner;
+
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.SimpleEidasData;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.handler.DeSpecificDetailSearchProcessor;
+import at.gv.bmi.namespace.zmr_su.zmr._20040201.PersonSuchenRequest;
+
+@RunWith(BlockJUnit4ClassRunner.class)
+public class DeSpecificDetailSearchProcessorTest {
+
+ private DeSpecificDetailSearchProcessor handler = new DeSpecificDetailSearchProcessor();
+
+ @Test
+ public void checkName() {
+ assertEquals("wrong handler name", "DeSpecificDetailSearchProcessor", handler.getName());
+
+ }
+
+ @Test
+ public void canHandlerCheck_1() {
+ SimpleEidasData eidData = SimpleEidasData.builder()
+ .birthName(RandomStringUtils.randomAlphabetic(5))
+ .placeOfBirth(RandomStringUtils.randomAlphabetic(5))
+ .build();
+ assertFalse("wrong 'canHandle' flag", handler.canHandle("XX", eidData));
+
+ }
+
+ @Test
+ public void canHandlerCheck_2() {
+ SimpleEidasData eidData = SimpleEidasData.builder()
+ .birthName(RandomStringUtils.randomAlphabetic(5))
+ .placeOfBirth(RandomStringUtils.randomAlphabetic(5))
+ .build();
+ assertTrue("wrong 'canHandle' flag", handler.canHandle("DE", eidData));
+
+ }
+
+ @Test
+ public void canHandlerCheck_3() {
+ SimpleEidasData eidData = SimpleEidasData.builder()
+ .birthName(RandomStringUtils.randomAlphabetic(5))
+ .placeOfBirth(RandomStringUtils.randomAlphabetic(5))
+ .build();
+ assertTrue("wrong 'canHandle' flag", handler.canHandle("de", eidData));
+
+ }
+
+ @Test
+ public void canHandlerCheck_4() {
+ SimpleEidasData eidData = SimpleEidasData.builder()
+ .birthName(null)
+ .placeOfBirth(RandomStringUtils.randomAlphabetic(5))
+ .build();
+ assertFalse("wrong 'canHandle' flag", handler.canHandle("DE", eidData));
+
+ }
+
+ @Test
+ public void canHandlerCheck_5() {
+ SimpleEidasData eidData = SimpleEidasData.builder()
+ .birthName(RandomStringUtils.randomAlphabetic(5))
+ .placeOfBirth(null)
+ .build();
+ assertFalse("wrong 'canHandle' flag", handler.canHandle("DE", eidData));
+
+ }
+
+ @Test
+ public void generateZmrSearchRequest() {
+ SimpleEidasData eidData = SimpleEidasData.builder()
+ .citizenCountryCode("DE")
+ .givenName(RandomStringUtils.randomAlphabetic(5))
+ .familyName(RandomStringUtils.randomAlphabetic(5))
+ .dateOfBirth(RandomStringUtils.randomAlphabetic(5))
+ .birthName(RandomStringUtils.randomAlphabetic(5))
+ .placeOfBirth(RandomStringUtils.randomAlphabetic(5))
+ .build();
+
+ // perform operation
+ PersonSuchenRequest req = handler.generateSearchRequest(eidData);
+
+ //validate response
+ assertNotNull("no search request", req);
+ assertNotNull("no MDS", req.getNatuerlichePerson());
+ assertNotNull("no MDS PersonName", req.getNatuerlichePerson().getPersonenName());
+ assertEquals("familyName", eidData.getFamilyName(), req.getNatuerlichePerson().getPersonenName().getFamilienname());
+ assertEquals("givenName", eidData.getGivenName(), req.getNatuerlichePerson().getPersonenName().getVorname());
+ assertEquals("birthday", eidData.getDateOfBirth(), req.getNatuerlichePerson().getGeburtsdatum());
+
+ assertNotNull("no eIDAS documenst", req.getEidasSuchdaten());
+ //TODO: add validation if we can add more than one eIDAS document
+
+ }
+
+}
diff --git a/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/handler/ItSpecificDetailSearchProcessorTes.java b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/handler/ItSpecificDetailSearchProcessorTes.java
new file mode 100644
index 00000000..9b638ee5
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/handler/ItSpecificDetailSearchProcessorTes.java
@@ -0,0 +1,84 @@
+package at.asitplus.eidas.specific.modules.auth.eidas.v2.test.handler;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import org.apache.commons.lang3.RandomStringUtils;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.BlockJUnit4ClassRunner;
+
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.SimpleEidasData;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.handler.ItSpecificDetailSearchProcessor;
+import at.gv.bmi.namespace.zmr_su.zmr._20040201.PersonSuchenRequest;
+
+@RunWith(BlockJUnit4ClassRunner.class)
+public class ItSpecificDetailSearchProcessorTes {
+
+ private ItSpecificDetailSearchProcessor handler = new ItSpecificDetailSearchProcessor();
+
+ @Test
+ public void checkName() {
+ assertEquals("wrong handler name", "ItSpecificDetailSearchProcessor", handler.getName());
+
+ }
+
+ @Test
+ public void canHandlerCheck_1() {
+ SimpleEidasData eidData = SimpleEidasData.builder()
+ .taxNumber(RandomStringUtils.randomAlphabetic(5))
+ .build();
+ assertFalse("wrong 'canHandle' flag", handler.canHandle("XX", eidData));
+
+ }
+
+ @Test
+ public void canHandlerCheck_2() {
+ SimpleEidasData eidData = SimpleEidasData.builder()
+ .taxNumber(RandomStringUtils.randomAlphabetic(5))
+ .build();
+ assertTrue("wrong 'canHandle' flag", handler.canHandle("IT", eidData));
+
+ }
+
+ @Test
+ public void canHandlerCheck_3() {
+ SimpleEidasData eidData = SimpleEidasData.builder()
+ .taxNumber(RandomStringUtils.randomAlphabetic(5))
+ .build();
+ assertTrue("wrong 'canHandle' flag", handler.canHandle("it", eidData));
+
+ }
+
+ @Test
+ public void canHandlerCheck_4() {
+ SimpleEidasData eidData = SimpleEidasData.builder()
+ .taxNumber("")
+ .build();
+ assertFalse("wrong 'canHandle' flag", handler.canHandle("IT", eidData));
+
+ }
+
+ @Test
+ public void generateZmrSearchRequest() {
+ SimpleEidasData eidData = SimpleEidasData.builder()
+ .citizenCountryCode("IT")
+ .givenName(RandomStringUtils.randomAlphabetic(5))
+ .familyName(RandomStringUtils.randomAlphabetic(5))
+ .dateOfBirth(RandomStringUtils.randomAlphabetic(5))
+ .taxNumber(RandomStringUtils.randomAlphabetic(5))
+ .build();
+
+ // perform operation
+ PersonSuchenRequest req = handler.generateSearchRequest(eidData);
+
+ //validate response
+ assertNotNull("no search request", req);
+
+ //TODO: add validation if we can add more information about taxNumber from Italy
+
+ }
+
+}
diff --git a/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/idaustriaclient/IdAustriaAuthSignalControllerTest.java b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/idaustriaclient/IdAustriaAuthSignalControllerTest.java
new file mode 100644
index 00000000..cddcd11c
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/idaustriaclient/IdAustriaAuthSignalControllerTest.java
@@ -0,0 +1,197 @@
+package at.asitplus.eidas.specific.modules.auth.eidas.v2.test.idaustriaclient;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.commons.lang3.RandomStringUtils;
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.mock.web.MockHttpServletRequest;
+import org.springframework.mock.web.MockHttpServletResponse;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+import org.springframework.util.SerializationUtils;
+
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.idaustriaclient.controller.IdAustriaClientAuthSignalController;
+import at.gv.egiz.eaaf.core.api.IRequestStorage;
+import at.gv.egiz.eaaf.core.api.data.EaafConfigConstants;
+import at.gv.egiz.eaaf.core.api.data.ExceptionContainer;
+import at.gv.egiz.eaaf.core.api.idp.IConfiguration;
+import at.gv.egiz.eaaf.core.api.storage.ITransactionStorage;
+import at.gv.egiz.eaaf.core.api.utils.IPendingRequestIdGenerationStrategy;
+import at.gv.egiz.eaaf.core.exceptions.EaafException;
+import at.gv.egiz.eaaf.core.impl.idp.module.test.DummyProtocolAuthService;
+import at.gv.egiz.eaaf.core.impl.idp.module.test.DummySpConfiguration;
+import at.gv.egiz.eaaf.core.impl.idp.module.test.TestRequestImpl;
+import at.gv.egiz.eaaf.core.impl.idp.process.spring.test.DummyTransactionStorage.DummyDbEntry;
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration(locations = {
+ "/SpringTest-context_tasks_test.xml",
+ "/SpringTest-context_basic_mapConfig.xml"
+})
+public class IdAustriaAuthSignalControllerTest {
+
+ @Autowired(required = true)
+ private IdAustriaClientAuthSignalController controller;
+ @Autowired(required = true)
+ private ITransactionStorage cache;
+ @Autowired(required = true)
+ private IPendingRequestIdGenerationStrategy pendingReqGeneration;
+ @Autowired(required = true)
+ private IRequestStorage reqStorage;
+ @Autowired(required = true)
+ private IConfiguration basicConfig;
+ @Autowired private ITransactionStorage transactionStorage;
+
+ @Autowired private DummyProtocolAuthService protAuthService;
+
+ @Test
+ public void noRelayState() throws IOException, EaafException {
+ final MockHttpServletRequest httpReq =
+ new MockHttpServletRequest("POST", "https://localhost/authhandler");
+ final MockHttpServletResponse httpResp = new MockHttpServletResponse();
+
+ controller.performAuthentication(httpReq, httpResp);
+ Assert.assertEquals("httpStausCode", 200, httpResp.getStatus());
+
+ final String errorId = protAuthService.getErrorKey();
+ final Object error = cache.get(errorId);
+ Assert.assertNotNull("Error is null", error);
+ org.springframework.util.Assert.isInstanceOf(byte[].class,
+ ((DummyDbEntry) error).getObj());
+ final Object errorObj = SerializationUtils.deserialize((byte[]) ((DummyDbEntry) error).getObj());
+ org.springframework.util.Assert.isInstanceOf(ExceptionContainer.class, errorObj);
+ org.springframework.util.Assert.isInstanceOf(EaafException.class,
+ ((ExceptionContainer) errorObj).getExceptionThrown());
+
+ }
+
+ @Test
+ public void validRelayStateNoPendingReqId() throws EaafException, IOException {
+ final String pendingReqId = pendingReqGeneration.generateExternalPendingRequestId();
+ final MockHttpServletRequest httpReq =
+ new MockHttpServletRequest("POST", "https://localhost/authhandler");
+ httpReq.addParameter(IdAustriaClientAuthSignalController.HTTP_PARAM_RELAYSTATE, pendingReqId);
+ final MockHttpServletResponse httpResp = new MockHttpServletResponse();
+
+ controller.performAuthentication(httpReq, httpResp);
+ Assert.assertEquals("httpStausCode", 200, httpResp.getStatus());
+
+ final String errorId = protAuthService.getErrorKey();
+ final Object error = cache.get(errorId);
+ Assert.assertNotNull("Error is null", error);
+ org.springframework.util.Assert.isInstanceOf(byte[].class,
+ ((DummyDbEntry) error).getObj());
+ final Object errorObj = SerializationUtils.deserialize((byte[]) ((DummyDbEntry) error).getObj());
+ org.springframework.util.Assert.isInstanceOf(ExceptionContainer.class, errorObj);
+ org.springframework.util.Assert.isInstanceOf(EaafException.class,
+ ((ExceptionContainer) errorObj).getExceptionThrown());
+ //TODO:
+ Assert.assertEquals("ErrorCode not match", "auth.26",
+ ((EaafException) ((ExceptionContainer) errorObj).getExceptionThrown()).getErrorId());
+
+ }
+
+ @Test
+ public void validRelayStateSuspectPendingReqId() throws EaafException, IOException {
+ String relayState = RandomStringUtils.randomAlphanumeric(10);
+ transactionStorage.put(relayState, false, -1);
+
+ final MockHttpServletRequest httpReq =
+ new MockHttpServletRequest("POST", "https://localhost/authhandler");
+ httpReq.addParameter(IdAustriaClientAuthSignalController.HTTP_PARAM_RELAYSTATE, relayState);
+ final MockHttpServletResponse httpResp = new MockHttpServletResponse();
+
+ controller.performAuthentication(httpReq, httpResp);
+ Assert.assertEquals("httpStausCode", 200, httpResp.getStatus());
+
+ final String errorId = protAuthService.getErrorKey();
+ final Object error = cache.get(errorId);
+ Assert.assertNotNull("Error is null", error);
+ org.springframework.util.Assert.isInstanceOf(byte[].class,
+ ((DummyDbEntry) error).getObj());
+ final Object errorObj = SerializationUtils.deserialize((byte[]) ((DummyDbEntry) error).getObj());
+ org.springframework.util.Assert.isInstanceOf(ExceptionContainer.class, errorObj);
+ org.springframework.util.Assert.isInstanceOf(EaafException.class,
+ ((ExceptionContainer) errorObj).getExceptionThrown());
+ //TODO:
+ Assert.assertEquals("ErrorCode not match", "auth.26",
+ ((EaafException) ((ExceptionContainer) errorObj).getExceptionThrown()).getErrorId());
+
+ Assert.assertNull("RelayState was not removed", transactionStorage.get(relayState));
+
+ }
+
+ @Test
+ public void validRelayStateNoPendingReq() throws EaafException, IOException {
+ final String pendingReqId = pendingReqGeneration.generateExternalPendingRequestId();
+ String relayState = RandomStringUtils.randomAlphanumeric(10);
+ transactionStorage.put(relayState, pendingReqId, -1);
+
+ final MockHttpServletRequest httpReq =
+ new MockHttpServletRequest("POST", "https://localhost/authhandler");
+ httpReq.addParameter(IdAustriaClientAuthSignalController.HTTP_PARAM_RELAYSTATE, relayState);
+ final MockHttpServletResponse httpResp = new MockHttpServletResponse();
+
+ controller.performAuthentication(httpReq, httpResp);
+ Assert.assertEquals("httpStausCode", 200, httpResp.getStatus());
+
+ final String errorId = protAuthService.getErrorKey();
+ final Object error = cache.get(errorId);
+ Assert.assertNotNull("Error is null", error);
+ org.springframework.util.Assert.isInstanceOf(byte[].class,
+ ((DummyDbEntry) error).getObj());
+ final Object errorObj = SerializationUtils.deserialize((byte[]) ((DummyDbEntry) error).getObj());
+ org.springframework.util.Assert.isInstanceOf(ExceptionContainer.class, errorObj);
+ org.springframework.util.Assert.isInstanceOf(EaafException.class,
+ ((ExceptionContainer) errorObj).getExceptionThrown());
+ Assert.assertEquals("ErrorCode not match", "auth.28",
+ ((EaafException) ((ExceptionContainer) errorObj).getExceptionThrown()).getErrorId());
+
+ Assert.assertNull("RelayState was not removed", transactionStorage.get(relayState));
+
+ }
+
+ @Test
+ public void validRelayStateWithPendingReq() throws EaafException, IOException {
+ final String pendingReqId = pendingReqGeneration.generateExternalPendingRequestId();
+
+ String relayState = RandomStringUtils.randomAlphanumeric(10);
+ transactionStorage.put(relayState, pendingReqId, -1);
+
+ final TestRequestImpl pendingReq = new TestRequestImpl();
+ pendingReq.setPendingReqId(pendingReqId);
+ pendingReq.setAuthUrl("http://localhost/idp");
+ final Map<String, String> spConfigMap = new HashMap<>();
+ spConfigMap.put(EaafConfigConstants.SERVICE_UNIQUEIDENTIFIER, "http://test.sp");
+ final DummySpConfiguration spConfig = new DummySpConfiguration(spConfigMap, basicConfig);
+ pendingReq.setSpConfig(spConfig);
+ reqStorage.storePendingRequest(pendingReq);
+
+ final MockHttpServletRequest httpReq =
+ new MockHttpServletRequest("POST", "https://localhost/authhandler");
+ httpReq.addParameter(IdAustriaClientAuthSignalController.HTTP_PARAM_RELAYSTATE, relayState);
+ final MockHttpServletResponse httpResp = new MockHttpServletResponse();
+
+ controller.performAuthentication(httpReq, httpResp);
+
+ Assert.assertEquals("httpStausCode", 200, httpResp.getStatus());
+
+ final String errorId = protAuthService.getErrorKey();
+ final Object error = cache.get(errorId);
+ Assert.assertNotNull("Error is null", error);
+ org.springframework.util.Assert.isInstanceOf(byte[].class,
+ ((DummyDbEntry) error).getObj());
+ final Object errorObj = SerializationUtils.deserialize((byte[]) ((DummyDbEntry) error).getObj());
+ org.springframework.util.Assert.isInstanceOf(ExceptionContainer.class, errorObj);
+ org.springframework.util.Assert.isInstanceOf(EaafException.class,
+ ((ExceptionContainer) errorObj).getExceptionThrown());
+ Assert.assertEquals("ErrorCode not match",
+ "PendingRequest object is not of type 'RequestImpl.class'",
+ ((EaafException) ((ExceptionContainer) errorObj).getExceptionThrown()).getErrorId());
+ }
+}
diff --git a/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/idaustriaclient/IdAustriaClientAuthHealthCheckTest.java b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/idaustriaclient/IdAustriaClientAuthHealthCheckTest.java
new file mode 100644
index 00000000..a912f344
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/idaustriaclient/IdAustriaClientAuthHealthCheckTest.java
@@ -0,0 +1,130 @@
+package at.asitplus.eidas.specific.modules.auth.eidas.v2.test.idaustriaclient;
+
+import java.time.Instant;
+import java.time.temporal.ChronoUnit;
+
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport;
+import org.opensaml.core.xml.io.MarshallingException;
+import org.opensaml.core.xml.io.UnmarshallingException;
+import org.opensaml.core.xml.util.XMLObjectSupport;
+import org.opensaml.saml.saml2.metadata.EntityDescriptor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.actuate.health.Health;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+import org.w3c.dom.Element;
+
+import at.asitplus.eidas.specific.core.test.config.dummy.MsConnectorDummyConfigMap;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.idaustriaclient.IdAustriaClientAuthConstants;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.idaustriaclient.provider.IdAustriaClientAuthHealthCheck;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.idaustriaclient.provider.IdAustriaClientAuthMetadataProvider;
+import at.gv.egiz.eaaf.modules.pvp2.api.utils.IPvp2CredentialProvider;
+import at.gv.egiz.eaaf.modules.pvp2.exception.CredentialsNotAvailableException;
+import at.gv.egiz.eaaf.modules.pvp2.exception.SamlSigningException;
+import at.gv.egiz.eaaf.modules.pvp2.impl.opensaml.initialize.EaafOpenSaml3xInitializer;
+import at.gv.egiz.eaaf.modules.pvp2.impl.utils.Saml2Utils;
+import net.shibboleth.utilities.java.support.resolver.ResolverException;
+import net.shibboleth.utilities.java.support.xml.SerializeSupport;
+import net.shibboleth.utilities.java.support.xml.XMLParserException;
+import okhttp3.HttpUrl;
+import okhttp3.mockwebserver.MockResponse;
+import okhttp3.mockwebserver.MockWebServer;
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration(locations = {
+ "/SpringTest-context_tasks_test.xml",
+ "/SpringTest-context_basic_mapConfig.xml"
+})
+public class IdAustriaClientAuthHealthCheckTest {
+
+ @Autowired private IdAustriaClientAuthHealthCheck toCheck;
+ @Autowired protected MsConnectorDummyConfigMap config;
+ @Autowired private IPvp2CredentialProvider credentialProvider;
+ @Autowired IdAustriaClientAuthMetadataProvider provider;
+
+ private static MockWebServer mockWebServer;
+ private static HttpUrl mockServerUrl;
+
+ /**
+ * JUnit class initializer.
+ *
+ * @throws Exception In case of an OpenSAML3 initialization error
+ */
+ @BeforeClass
+ public static void classInitializer() throws Exception {
+ EaafOpenSaml3xInitializer.eaafInitialize();
+
+ mockWebServer = new MockWebServer();
+ mockServerUrl = mockWebServer.url("/sp/metadata");
+
+ }
+
+ @Test
+ public void notActive() {
+ //set-up test
+ config.putConfigValue(IdAustriaClientAuthConstants.CONFIG_PROPS_ID_AUSTRIA_ENTITYID,
+ null);
+
+ //perform check
+ Health status = toCheck.health();
+
+ //evaluate status
+ Assert.assertEquals("wrong status", Health.unknown().build().getStatus(), status.getStatus());
+
+ }
+
+ @Test
+ public void success() throws SamlSigningException, CredentialsNotAvailableException,
+ XMLParserException, UnmarshallingException, MarshallingException {
+
+ //set-up test
+ config.putConfigValue(IdAustriaClientAuthConstants.CONFIG_PROPS_ID_AUSTRIA_ENTITYID,
+ mockServerUrl.url().toString());
+ injectValidHttpMetadata(mockServerUrl.url().toString());
+
+ //perform check
+ Health status = toCheck.health();
+
+ //evaluate status
+ Assert.assertEquals("wrong status", Health.up().build().getStatus(), status.getStatus());
+
+ }
+
+ @Test
+ public void invalid() throws SamlSigningException, CredentialsNotAvailableException,
+ XMLParserException, UnmarshallingException, MarshallingException, ResolverException {
+ //set-up test
+ provider.clear();
+ config.putConfigValue(IdAustriaClientAuthConstants.CONFIG_PROPS_ID_AUSTRIA_ENTITYID,
+ "http://localhost:1234/junit/metadata");
+
+ //perform check
+ Health status = toCheck.health();
+
+ //evaluate status
+ Assert.assertEquals("wrong status", Health.outOfService().build().getStatus(), status.getStatus());
+
+ }
+
+ private String injectValidHttpMetadata(String dynEntityId) throws XMLParserException,
+ UnmarshallingException, MarshallingException, SamlSigningException, CredentialsNotAvailableException {
+ final EntityDescriptor metadata = (EntityDescriptor) XMLObjectSupport.unmarshallFromInputStream(
+ XMLObjectProviderRegistrySupport.getParserPool(),
+ IdAustriaClientAuthHealthCheckTest.class.getResourceAsStream("/data/idp_metadata_no_sig.xml"));
+ metadata.setValidUntil(Instant.now().plus(1, ChronoUnit.DAYS));
+ metadata.setSignature(null);
+ metadata.setEntityID(dynEntityId);
+ Saml2Utils.signSamlObject(metadata, credentialProvider.getMetaDataSigningCredential(), true);
+ final Element metadataElement = XMLObjectSupport.marshall(metadata);
+ mockWebServer.enqueue(new MockResponse().setResponseCode(200)
+ .setBody(SerializeSupport.nodeToString(metadataElement))
+ .setHeader("Content-Type", "text/html;charset=utf-8"));
+ return dynEntityId;
+
+}
+
+}
diff --git a/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/idaustriaclient/IdAustriaClientAuthMetadataControllerTest.java b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/idaustriaclient/IdAustriaClientAuthMetadataControllerTest.java
new file mode 100644
index 00000000..b7f27204
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/idaustriaclient/IdAustriaClientAuthMetadataControllerTest.java
@@ -0,0 +1,136 @@
+package at.asitplus.eidas.specific.modules.auth.eidas.v2.test.idaustriaclient;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport;
+import org.opensaml.core.xml.io.UnmarshallingException;
+import org.opensaml.core.xml.util.XMLObjectSupport;
+import org.opensaml.saml.common.xml.SAMLConstants;
+import org.opensaml.saml.metadata.resolver.filter.FilterException;
+import org.opensaml.saml.metadata.resolver.filter.MetadataFilterContext;
+import org.opensaml.saml.saml2.metadata.EntityDescriptor;
+import org.opensaml.saml.saml2.metadata.SPSSODescriptor;
+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.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.idaustriaclient.IdAustriaClientAuthConstants;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.idaustriaclient.controller.IdAustriaClientAuthMetadataController;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.idaustriaclient.provider.IdAustriaClientAuthCredentialProvider;
+import at.gv.egiz.eaaf.core.exceptions.EaafException;
+import at.gv.egiz.eaaf.modules.pvp2.exception.CredentialsNotAvailableException;
+import at.gv.egiz.eaaf.modules.pvp2.impl.opensaml.initialize.EaafOpenSaml3xInitializer;
+import at.gv.egiz.eaaf.modules.pvp2.impl.validation.metadata.SchemaValidationFilter;
+import at.gv.egiz.eaaf.modules.pvp2.impl.validation.metadata.SimpleMetadataSignatureVerificationFilter;
+import net.shibboleth.utilities.java.support.xml.XMLParserException;
+
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration(locations = {
+ "/SpringTest-context_tasks_test.xml",
+ "/SpringTest-context_basic_mapConfig.xml"
+})
+@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS)
+public class IdAustriaClientAuthMetadataControllerTest {
+
+ private MockHttpServletRequest httpReq;
+ private MockHttpServletResponse httpResp;
+
+ @Autowired private IdAustriaClientAuthMetadataController controller;
+ @Autowired private IdAustriaClientAuthCredentialProvider credProvider;
+
+ /**
+ * JUnit class initializer.
+ *
+ * @throws Exception In case of an OpenSAML3 initialization error
+ */
+ @BeforeClass
+ public static void initialize() throws Exception {
+ EaafOpenSaml3xInitializer.eaafInitialize();
+
+ }
+
+ /**
+ * Single jUnit-test set-up.
+ */
+ @Before
+ public void testSetup() {
+ httpReq = new MockHttpServletRequest("GET", "http://localhost/authhandler");
+ httpReq.setContextPath("/authhandler");
+ httpResp = new MockHttpServletResponse();
+
+ }
+
+ @Test
+ public void buildMetadataValidInEidMode() throws IOException, EaafException,
+ XMLParserException, UnmarshallingException, FilterException {
+
+ //build metdata
+ controller.getSpMetadata(httpReq, httpResp);
+
+ //check result
+ validateResponse(6);
+
+ }
+
+ private void validateResponse(int numberOfRequestedAttributes) throws UnsupportedEncodingException,
+ XMLParserException, UnmarshallingException, FilterException, CredentialsNotAvailableException {
+ Assert.assertEquals("HTTP Statuscode", 200, httpResp.getStatus());
+ Assert.assertEquals("ContentType", "text/xml; charset=utf-8", httpResp.getContentType());
+ Assert.assertEquals("ContentEncoding", "UTF-8", httpResp.getCharacterEncoding());
+
+ final String metadataXml = httpResp.getContentAsString();
+ Assert.assertNotNull("XML Metadata", metadataXml);
+
+ final EntityDescriptor metadata = (EntityDescriptor) XMLObjectSupport.unmarshallFromInputStream(
+ XMLObjectProviderRegistrySupport.getParserPool(), new ByteArrayInputStream(metadataXml.getBytes("UTF-8")));
+
+ Assert.assertEquals("EntityId",
+ "http://localhost/authhandler" + IdAustriaClientAuthConstants.ENDPOINT_METADATA,
+ metadata.getEntityID());
+
+ MetadataFilterContext filterContext = new MetadataFilterContext();
+
+ //check XML scheme
+ final SchemaValidationFilter schemaFilter = new SchemaValidationFilter();
+ schemaFilter.filter(metadata, filterContext);
+
+ //check signature
+ final SimpleMetadataSignatureVerificationFilter sigFilter =
+ new SimpleMetadataSignatureVerificationFilter(credProvider.getKeyStore().getFirst(),
+ metadata.getEntityID());
+ sigFilter.filter(metadata, filterContext);
+
+ //check content
+ final SPSSODescriptor spSsoDesc = metadata.getSPSSODescriptor(SAMLConstants.SAML20P_NS);
+ Assert.assertNotNull("SPSSODescr.", spSsoDesc);
+
+ Assert.assertFalse("AssertionConsumerServices",
+ spSsoDesc.getAssertionConsumerServices().isEmpty());
+
+ Assert.assertFalse("KeyDescriptors",
+ spSsoDesc.getKeyDescriptors().isEmpty());
+ Assert.assertEquals("#KeyDescriptors", 2, spSsoDesc.getKeyDescriptors().size());
+
+ Assert.assertFalse("NameIDFormats",
+ spSsoDesc.getNameIDFormats().isEmpty());
+ Assert.assertEquals("wrong NameIDFormats", "urn:oasis:names:tc:SAML:2.0:nameid-format:persistent",
+ spSsoDesc.getNameIDFormats().get(0).getURI());
+
+ Assert.assertFalse("AttributeConsumingServices",
+ spSsoDesc.getAttributeConsumingServices().isEmpty());
+ Assert.assertEquals("#RequestAttributes", numberOfRequestedAttributes,
+ spSsoDesc.getAttributeConsumingServices().get(0).getRequestedAttributes().size());
+
+ }
+}
diff --git a/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/idaustriaclient/IdAustriaClientAuthMetadataProviderFirstTest.java b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/idaustriaclient/IdAustriaClientAuthMetadataProviderFirstTest.java
new file mode 100644
index 00000000..c4dd5d2e
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/idaustriaclient/IdAustriaClientAuthMetadataProviderFirstTest.java
@@ -0,0 +1,239 @@
+package at.asitplus.eidas.specific.modules.auth.eidas.v2.test.idaustriaclient;
+
+import java.io.IOException;
+import java.time.Instant;
+import java.time.temporal.ChronoUnit;
+
+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.opensaml.core.criterion.EntityIdCriterion;
+import org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport;
+import org.opensaml.core.xml.io.MarshallingException;
+import org.opensaml.core.xml.io.UnmarshallingException;
+import org.opensaml.core.xml.util.XMLObjectSupport;
+import org.opensaml.saml.saml2.metadata.EntityDescriptor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+import org.w3c.dom.Element;
+
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.idaustriaclient.provider.IdAustriaClientAuthMetadataProvider;
+import at.gv.egiz.eaaf.modules.pvp2.api.metadata.IPvp2MetadataProvider;
+import at.gv.egiz.eaaf.modules.pvp2.api.utils.IPvp2CredentialProvider;
+import at.gv.egiz.eaaf.modules.pvp2.exception.CredentialsNotAvailableException;
+import at.gv.egiz.eaaf.modules.pvp2.exception.Pvp2MetadataException;
+import at.gv.egiz.eaaf.modules.pvp2.exception.SamlSigningException;
+import at.gv.egiz.eaaf.modules.pvp2.impl.metadata.PvpMetadataResolverFactory;
+import at.gv.egiz.eaaf.modules.pvp2.impl.opensaml.initialize.EaafOpenSaml3xInitializer;
+import at.gv.egiz.eaaf.modules.pvp2.impl.utils.Saml2Utils;
+import at.gv.egiz.eaaf.modules.pvp2.test.metadata.MetadataResolverTest;
+import net.shibboleth.utilities.java.support.resolver.CriteriaSet;
+import net.shibboleth.utilities.java.support.resolver.ResolverException;
+import net.shibboleth.utilities.java.support.xml.SerializeSupport;
+import net.shibboleth.utilities.java.support.xml.XMLParserException;
+import okhttp3.HttpUrl;
+import okhttp3.mockwebserver.MockResponse;
+import okhttp3.mockwebserver.MockWebServer;
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration(locations = {
+ "/SpringTest-context_tasks_test.xml",
+ "/SpringTest-context_basic_mapConfig.xml"
+})
+public class IdAustriaClientAuthMetadataProviderFirstTest {
+
+ @Autowired
+ IPvp2CredentialProvider credentialProvider;
+ @Autowired
+ IdAustriaClientAuthMetadataProvider provider;
+ @Autowired
+ PvpMetadataResolverFactory resolverFactory;
+
+ private static MockWebServer mockWebServer;
+ private static HttpUrl mockServerUrl;
+
+ /**
+ * JUnit class initializer.
+ *
+ * @throws Exception In case of an OpenSAML3 initialization error
+ */
+ @BeforeClass
+ public static void classInitializer() throws Exception {
+ EaafOpenSaml3xInitializer.eaafInitialize();
+
+ mockWebServer = new MockWebServer();
+ mockServerUrl = mockWebServer.url("/sp/metadata");
+
+ }
+
+ /**
+ * jUnit test set-up.
+ *
+ * @throws ResolverException
+ *
+ */
+ @Before
+ public void testSetup() {
+ provider.fullyDestroy();
+
+ }
+
+ @Test
+ public void simpleManuelAddingTest() throws Pvp2MetadataException, ResolverException {
+ final IPvp2MetadataProvider resolver1 = resolverFactory.createMetadataProvider(
+ "classpath:/data/idp_metadata_sig_notvalid.xml",
+ null, "junit", null);
+ Assert.assertNotNull("Resolver 1 is null", resolver1);
+ provider.addMetadataResolverIntoChain(resolver1);
+
+ final IPvp2MetadataProvider resolver2 = resolverFactory.createMetadataProvider(
+ "classpath:/data/idp_metadata_sig_valid_wrong_alg.xml",
+ null, "junit", null);
+ Assert.assertNotNull("Resolver 2 is null", resolver2);
+ provider.addMetadataResolverIntoChain(resolver2);
+
+ final EntityDescriptor entity1 = provider.getEntityDescriptor("https://localEntity");
+ Assert.assertNotNull("Entity 1 not found", entity1);
+
+ final EntityDescriptor entity2 = provider.getEntityDescriptor(
+ "https://vidp.gv.at/ms_connector/pvp/metadata");
+ Assert.assertNotNull("Entity 2 not found", entity2);
+
+ final EntityDescriptor entity3 = provider.getEntityDescriptor("https://egiz.gv.at/abababa");
+ Assert.assertNull("Entity 3 found", entity3);
+
+ }
+
+ @Test
+ public void dynamicLoadingNoValidSignature() throws ResolverException {
+ final EntityDescriptor entity = provider.getEntityDescriptor("classpath:/data/idp_metadata_no_sig2.xml");
+ Assert.assertNull("Entity found", entity);
+
+ }
+
+ @Test
+ public void dynamicLoadingValidSignature() throws XMLParserException, UnmarshallingException,
+ SamlSigningException, CredentialsNotAvailableException, MarshallingException, ResolverException {
+
+ final String entityId = injectValidHttpMetadata();
+ final EntityDescriptor entity = provider.getEntityDescriptor(entityId);
+ Assert.assertNotNull("Entity not found", entity);
+
+ }
+
+ @Test
+ public void reloadNotPossible() throws XMLParserException, UnmarshallingException,
+ SamlSigningException, CredentialsNotAvailableException, MarshallingException, ResolverException {
+
+ final String entityId = injectValidHttpMetadata();
+ final EntityDescriptor entity = provider.getEntityDescriptor(entityId);
+ Assert.assertNotNull("Entity not found", entity);
+ Assert.assertNotNull("Entity not found",
+ provider.resolveSingle(generateEntityIdCreteria(entityId)));
+
+ Assert.assertFalse("Refresh should not be possible",
+ provider.refreshMetadataProvider(entityId));
+
+ final EntityDescriptor entity2 = provider.getEntityDescriptor(entityId);
+ Assert.assertNull("Entity not found", entity2);
+ Assert.assertNull("Entity not found",
+ provider.resolveSingle(generateEntityIdCreteria(entityId)));
+
+ Assert.assertFalse("Last refresh", provider.wasLastRefreshSuccess());
+
+ }
+
+ @Test
+ public void refeshTest() throws Pvp2MetadataException, ResolverException {
+ Assert.assertFalse("Last refresh", provider.wasLastRefreshSuccess());
+ Assert.assertNull("LastRefresh", provider.getLastRefresh());
+ Assert.assertNull("LastSuccessfulRefresh", provider.getLastSuccessfulRefresh());
+ Assert.assertNull("LastUpdate", provider.getLastUpdate());
+
+ final IPvp2MetadataProvider resolver1 = resolverFactory.createMetadataProvider(
+ "classpath:/data/idp_metadata_sig_notvalid.xml",
+ null, "junit", null);
+ Assert.assertNotNull("Resolver 1 is null", resolver1);
+ provider.addMetadataResolverIntoChain(resolver1);
+
+ final IPvp2MetadataProvider resolver2 = resolverFactory.createMetadataProvider(
+ "classpath:/data/idp_metadata_sig_valid_wrong_alg.xml",
+ null, "junit", null);
+ Assert.assertNotNull("Resolver 2 is null", resolver2);
+ provider.addMetadataResolverIntoChain(resolver2);
+
+ provider.refresh();
+
+ Assert.assertTrue("Last refresh", provider.wasLastRefreshSuccess());
+ Assert.assertNotNull("LastRefresh", provider.getLastRefresh());
+ Assert.assertNotNull("LastSuccessfulRefresh", provider.getLastSuccessfulRefresh());
+ Assert.assertNotNull("LastUpdate", provider.getLastUpdate());
+
+ }
+
+ @Test
+ public void reloadPossible() throws XMLParserException, UnmarshallingException,
+ SamlSigningException, CredentialsNotAvailableException, MarshallingException, ResolverException,
+ IOException {
+
+ mockWebServer.shutdown();
+ mockWebServer = new MockWebServer();
+ mockServerUrl = mockWebServer.url("/sp/metadata");
+
+ final String entityId = injectValidHttpMetadata();
+ final EntityDescriptor entity = provider.getEntityDescriptor(entityId);
+ Assert.assertNotNull("Entity not found", entity);
+ Assert.assertNotNull("Entity not found",
+ provider.resolveSingle(generateEntityIdCreteria(entityId)));
+
+ Assert.assertFalse("Last refresh", provider.wasLastRefreshSuccess());
+
+ injectValidHttpMetadata(entityId);
+ Assert.assertTrue("Refresh should not be possible",
+ provider.refreshMetadataProvider(entityId));
+
+ final EntityDescriptor entity2 = provider.getEntityDescriptor(entityId);
+ Assert.assertNotNull("Entity not found", entity2);
+ Assert.assertNotNull("Entity not found",
+ provider.resolveSingle(generateEntityIdCreteria(entityId)));
+
+ Assert.assertFalse("Last refresh", provider.wasLastRefreshSuccess());
+
+ }
+
+ private String injectValidHttpMetadata() throws SamlSigningException, CredentialsNotAvailableException,
+ XMLParserException, UnmarshallingException, MarshallingException {
+ return injectValidHttpMetadata(mockServerUrl.url().toString()
+ + "/" + RandomStringUtils.randomAlphabetic(5));
+ }
+
+ private String injectValidHttpMetadata(String dynEntityId) throws XMLParserException,
+ UnmarshallingException,
+ MarshallingException, SamlSigningException, CredentialsNotAvailableException {
+ final EntityDescriptor metadata = (EntityDescriptor) XMLObjectSupport.unmarshallFromInputStream(
+ XMLObjectProviderRegistrySupport.getParserPool(),
+ MetadataResolverTest.class.getResourceAsStream("/data/idp_metadata_no_sig.xml"));
+ metadata.setValidUntil(Instant.now().plus(1, ChronoUnit.DAYS));
+ metadata.setSignature(null);
+ metadata.setEntityID(dynEntityId);
+ Saml2Utils.signSamlObject(metadata, credentialProvider.getMetaDataSigningCredential(), true);
+ final Element metadataElement = XMLObjectSupport.marshall(metadata);
+ mockWebServer.enqueue(new MockResponse().setResponseCode(200)
+ .setBody(SerializeSupport.nodeToString(metadataElement))
+ .setHeader("Content-Type", "text/html;charset=utf-8"));
+
+ return dynEntityId;
+
+ }
+
+ private CriteriaSet generateEntityIdCreteria(String entityId) {
+ final CriteriaSet result = new CriteriaSet();
+ result.add(new EntityIdCriterion(entityId));
+ return result;
+
+ }
+}
diff --git a/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/idaustriaclient/IdAustriaClientAuthMetadataProviderSecondTest.java b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/idaustriaclient/IdAustriaClientAuthMetadataProviderSecondTest.java
new file mode 100644
index 00000000..3ee6ddcd
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/idaustriaclient/IdAustriaClientAuthMetadataProviderSecondTest.java
@@ -0,0 +1,66 @@
+package at.asitplus.eidas.specific.modules.auth.eidas.v2.test.idaustriaclient;
+
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.opensaml.saml.saml2.metadata.EntityDescriptor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.idaustriaclient.provider.IdAustriaClientAuthMetadataProvider;
+import at.gv.egiz.eaaf.modules.pvp2.impl.opensaml.initialize.EaafOpenSaml3xInitializer;
+import net.shibboleth.utilities.java.support.resolver.ResolverException;
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration(locations = {
+ "/SpringTest-context_tasks_test.xml",
+ "/SpringTest-context_basic_mapConfig.xml"
+})
+public class IdAustriaClientAuthMetadataProviderSecondTest {
+
+ @Autowired
+ IdAustriaClientAuthMetadataProvider provider;
+
+ /**
+ * JUnit class initializer.
+ *
+ * @throws Exception In case of an OpenSAML3 initialization error
+ */
+ @BeforeClass
+ public static void classInitializer() throws Exception {
+ EaafOpenSaml3xInitializer.eaafInitialize();
+
+ }
+
+ /**
+ * jUnit test set-up.
+ *
+ * @throws ResolverException
+ *
+ */
+ @Before
+ public void testSetup() {
+ provider.fullyDestroy();
+
+ }
+
+ @Test
+ public void notTrustedX509CertsInTrustStore() throws ResolverException {
+ final EntityDescriptor entity = provider.getEntityDescriptor("classpath:/data/idp_metadata_no_sig2.xml");
+ Assert.assertNull("Entity found", entity);
+
+ }
+
+ @Test
+ public void readStaticInfos() {
+ Assert.assertEquals("wrong providerId",
+ IdAustriaClientAuthMetadataProvider.PROVIDER_ID, provider.getId());
+
+ provider.runGarbageCollector();
+
+ }
+
+}
diff --git a/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/idaustriaclient/IdAustriaClientCredentialProviderTest.java b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/idaustriaclient/IdAustriaClientCredentialProviderTest.java
new file mode 100644
index 00000000..bdc0df15
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/idaustriaclient/IdAustriaClientCredentialProviderTest.java
@@ -0,0 +1,414 @@
+package at.asitplus.eidas.specific.modules.auth.eidas.v2.test.idaustriaclient;
+
+import org.apache.commons.lang3.RandomStringUtils;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.BeansException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.ApplicationContext;
+import org.springframework.test.annotation.DirtiesContext;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+import com.google.common.base.Optional;
+import com.google.common.base.Predicates;
+import com.google.common.base.Throwables;
+import com.google.common.collect.FluentIterable;
+
+import at.asitplus.eidas.specific.core.test.config.dummy.MsConnectorDummyConfigMap;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.idaustriaclient.IdAustriaClientAuthConstants;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.idaustriaclient.provider.IdAustriaClientAuthCredentialProvider;
+import at.gv.egiz.eaaf.core.exceptions.EaafConfigurationException;
+import at.gv.egiz.eaaf.core.exceptions.EaafException;
+import at.gv.egiz.eaaf.core.exceptions.EaafFactoryException;
+import at.gv.egiz.eaaf.modules.pvp2.api.credential.EaafX509Credential;
+import at.gv.egiz.eaaf.modules.pvp2.exception.CredentialsNotAvailableException;
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration(locations = {
+ "/SpringTest-context_basic_lazy.xml",
+ "/SpringTest-context_basic_mapConfig.xml"
+})
+@DirtiesContext
+public class IdAustriaClientCredentialProviderTest {
+
+ private static final String PATH_JKS = "../keystore/junit_test.jks";
+ private static final String ALIAS_METADATA = "meta";
+ private static final String ALIAS_SIGN = "sig";
+ private static final String ALIAS_ENC = "enc";
+ private static final String PASSWORD = "password";
+
+ @Autowired
+ private ApplicationContext context;
+ @Autowired(required = true)
+ protected MsConnectorDummyConfigMap config;
+
+ /**
+ * jUnit test initializer.
+ */
+ @Before
+ public void initialize() {
+ config.putConfigValue(IdAustriaClientAuthConstants.CONFIG_PROPS_KEYSTORE_PATH, PATH_JKS);
+ config.putConfigValue(IdAustriaClientAuthConstants.CONFIG_PROPS_KEYSTORE_PASSWORD, PASSWORD);
+
+ config.removeConfigValue(IdAustriaClientAuthConstants.CONFIG_PROPS_SIGN_METADATA_ALIAS);
+ config.removeConfigValue(IdAustriaClientAuthConstants.CONFIG_PROPS_SIGN_METADATA_KEY_PASSWORD);
+
+ config.removeConfigValue(IdAustriaClientAuthConstants.CONFIG_PROPS_SIGN_SIGNING_ALIAS);
+ config.removeConfigValue(IdAustriaClientAuthConstants.CONFIG_PROPS_SIGN_SIGNING_KEY_PASSWORD);
+
+ config.removeConfigValue(IdAustriaClientAuthConstants.CONFIG_PROPS_ENCRYPTION_ALIAS);
+ config.removeConfigValue(IdAustriaClientAuthConstants.CONFIG_PROPS_ENCRYPTION_KEY_PASSWORD);
+
+ }
+
+ @Test
+ @DirtiesContext
+ public void noKeyStoreUrl() {
+ config.removeConfigValue(IdAustriaClientAuthConstants.CONFIG_PROPS_KEYSTORE_PATH);
+ try {
+ context.getBean(IdAustriaClientAuthCredentialProvider.class);
+ Assert.fail("No KeyStore not detected");
+
+ } catch (final BeansException e) {
+ org.springframework.util.Assert.isInstanceOf(EaafConfigurationException.class,
+ e.getCause(), "Wrong exception");
+ }
+
+ }
+
+ @Test
+ @DirtiesContext
+ public void noKeyStore() {
+ config.putConfigValue(IdAustriaClientAuthConstants.CONFIG_PROPS_KEYSTORE_PATH,
+ "src/test/resources/config/notExist.p12");
+ try {
+ context.getBean(IdAustriaClientAuthCredentialProvider.class);
+ Assert.fail("No KeyStore not detected");
+
+ } catch (final BeansException e) {
+ final Optional<Throwable> eaafException = FluentIterable.from(
+ Throwables.getCausalChain(e)).filter(
+ Predicates.instanceOf(EaafConfigurationException.class)).first();
+ Assert.assertTrue("Wrong exception", eaafException.isPresent());
+ Assert.assertEquals("Wrong errorId", "internal.keystore.06",
+ ((EaafException) eaafException.get()).getErrorId());
+
+ }
+
+ }
+
+ @Test
+ @DirtiesContext
+ public void noWrongKeyStorePassword() {
+ config.putConfigValue(IdAustriaClientAuthConstants.CONFIG_PROPS_KEYSTORE_PASSWORD, "test");
+ try {
+ context.getBean(IdAustriaClientAuthCredentialProvider.class);
+ Assert.fail("No KeyStore not detected");
+
+ } catch (final BeansException e) {
+ final Optional<Throwable> eaafException = FluentIterable.from(
+ Throwables.getCausalChain(e)).filter(
+ Predicates.instanceOf(EaafFactoryException.class)).first();
+ Assert.assertTrue("Wrong exception", eaafException.isPresent());
+ Assert.assertEquals("Wrong errorId", "internal.keystore.06",
+ ((EaafException) eaafException.get()).getErrorId());
+
+ }
+
+ }
+
+ @Test
+ @DirtiesContext
+ public void notKeyConfigurationWrongAlias() {
+ final IdAustriaClientAuthCredentialProvider credential = context.getBean(
+ IdAustriaClientAuthCredentialProvider.class);
+
+ Assert.assertNotNull("Credetialprovider", credential);
+ Assert.assertNotNull("Friendlyname", credential.getFriendlyName());
+
+ try {
+ config.putConfigValue(IdAustriaClientAuthConstants.CONFIG_PROPS_SIGN_METADATA_ALIAS,
+ RandomStringUtils.randomAlphabetic(5));
+ credential.getMetaDataSigningCredential();
+ Assert.fail("No Metadata signing credentials not detected");
+
+ } catch (final CredentialsNotAvailableException e) {
+ Assert.assertTrue("Wrong errorCode", e.getMessage().contains("internal.pvp.01"));
+
+ }
+
+ try {
+ config.putConfigValue(IdAustriaClientAuthConstants.CONFIG_PROPS_SIGN_SIGNING_ALIAS,
+ RandomStringUtils.randomAlphabetic(5));
+ credential.getMessageSigningCredential();
+ Assert.fail("No Metadata signing credentials not detected");
+
+ } catch (final CredentialsNotAvailableException e) {
+ Assert.assertTrue("Wrong errorCode", e.getMessage().contains("internal.pvp.01"));
+
+ }
+
+ try {
+ config.putConfigValue(IdAustriaClientAuthConstants.CONFIG_PROPS_ENCRYPTION_ALIAS,
+ RandomStringUtils.randomAlphabetic(5));
+ credential.getMessageEncryptionCredential();
+ Assert.fail("No Metadata signing credentials not detected");
+
+ } catch (final CredentialsNotAvailableException e) {
+ Assert.assertTrue("Wrong errorCode", e.getMessage().contains("internal.pvp.01"));
+
+ }
+
+ }
+
+ @Test
+ @DirtiesContext
+ public void notKeyConfigurationWrongPassword() {
+ final IdAustriaClientAuthCredentialProvider credential = context.getBean(
+ IdAustriaClientAuthCredentialProvider.class);
+
+ Assert.assertNotNull("Credetialprovider", credential);
+ Assert.assertNotNull("Friendlyname", credential.getFriendlyName());
+
+ try {
+ config.putConfigValue(IdAustriaClientAuthConstants.CONFIG_PROPS_SIGN_METADATA_KEY_PASSWORD,
+ RandomStringUtils.randomAlphabetic(5));
+ credential.getMetaDataSigningCredential();
+ Assert.fail("No Metadata signing credentials not detected");
+
+ } catch (final CredentialsNotAvailableException e) {
+ Assert.assertTrue("Wrong errorCode", e.getMessage().contains("internal.pvp.01"));
+
+ }
+
+ try {
+ config.putConfigValue(IdAustriaClientAuthConstants.CONFIG_PROPS_SIGN_SIGNING_KEY_PASSWORD,
+ RandomStringUtils.randomAlphabetic(5));
+ credential.getMessageSigningCredential();
+ Assert.fail("No message signing credentials not detected");
+
+ } catch (final CredentialsNotAvailableException e) {
+ Assert.assertTrue("Wrong errorCode", e.getMessage().contains("internal.pvp.01"));
+
+ }
+
+ try {
+ config.putConfigValue(IdAustriaClientAuthConstants.CONFIG_PROPS_ENCRYPTION_KEY_PASSWORD,
+ RandomStringUtils.randomAlphabetic(5));
+ final EaafX509Credential encCred = credential.getMessageEncryptionCredential();
+ Assert.assertNull("No encryption signing credentials not detected", encCred);
+
+ } catch (final CredentialsNotAvailableException e) {
+ Assert.assertTrue("Wrong errorCode", e.getMessage().contains("internal.pvp.01"));
+
+ }
+
+ }
+
+ @Test
+ @DirtiesContext
+ public void notKeyConfigurationValidAliasWrongPassword() {
+ final IdAustriaClientAuthCredentialProvider credential = context.getBean(
+ IdAustriaClientAuthCredentialProvider.class);
+
+ Assert.assertNotNull("Credetialprovider", credential);
+ Assert.assertNotNull("Friendlyname", credential.getFriendlyName());
+
+ try {
+ config.putConfigValue(IdAustriaClientAuthConstants.CONFIG_PROPS_SIGN_METADATA_ALIAS,
+ ALIAS_METADATA);
+ config.putConfigValue(IdAustriaClientAuthConstants.CONFIG_PROPS_SIGN_METADATA_KEY_PASSWORD,
+ RandomStringUtils.randomAlphabetic(5));
+ credential.getMetaDataSigningCredential();
+ Assert.fail("No Metadata signing credentials not detected");
+
+ } catch (final CredentialsNotAvailableException e) {
+ Assert.assertTrue("Wrong errorCode", e.getMessage().contains("internal.pvp.01"));
+
+ }
+
+ try {
+ config.putConfigValue(IdAustriaClientAuthConstants.CONFIG_PROPS_SIGN_SIGNING_ALIAS,
+ ALIAS_SIGN);
+ config.putConfigValue(IdAustriaClientAuthConstants.CONFIG_PROPS_SIGN_SIGNING_KEY_PASSWORD,
+ RandomStringUtils.randomAlphabetic(5));
+ credential.getMessageSigningCredential();
+ Assert.fail("No Metadata signing credentials not detected");
+
+ } catch (final CredentialsNotAvailableException e) {
+ Assert.assertTrue("Wrong errorCode", e.getMessage().contains("internal.pvp.01"));
+
+ }
+
+ try {
+ config.putConfigValue(IdAustriaClientAuthConstants.CONFIG_PROPS_ENCRYPTION_ALIAS,
+ ALIAS_ENC);
+ config.putConfigValue(IdAustriaClientAuthConstants.CONFIG_PROPS_ENCRYPTION_KEY_PASSWORD,
+ RandomStringUtils.randomAlphabetic(5));
+ credential.getMessageEncryptionCredential();
+ Assert.fail("No Metadata signing credentials not detected");
+
+ } catch (final CredentialsNotAvailableException e) {
+ Assert.assertTrue("Wrong errorCode", e.getMessage().contains("internal.pvp.01"));
+
+ }
+ }
+
+ @Test
+ @DirtiesContext
+ public void notKeyConfigurationWrongAliasValidPassword() {
+ final IdAustriaClientAuthCredentialProvider credential = context.getBean(
+ IdAustriaClientAuthCredentialProvider.class);
+
+ Assert.assertNotNull("Credetialprovider", credential);
+ Assert.assertNotNull("Friendlyname", credential.getFriendlyName());
+
+ try {
+ config.putConfigValue(IdAustriaClientAuthConstants.CONFIG_PROPS_SIGN_METADATA_ALIAS,
+ RandomStringUtils.randomAlphabetic(5));
+ config.putConfigValue(IdAustriaClientAuthConstants.CONFIG_PROPS_SIGN_METADATA_KEY_PASSWORD,
+ PASSWORD);
+ credential.getMetaDataSigningCredential();
+ Assert.fail("No Metadata signing credentials not detected");
+
+ } catch (final CredentialsNotAvailableException e) {
+ Assert.assertTrue("Wrong errorCode", e.getMessage().contains("internal.pvp.01"));
+
+ }
+
+ try {
+ config.putConfigValue(IdAustriaClientAuthConstants.CONFIG_PROPS_SIGN_SIGNING_ALIAS,
+ RandomStringUtils.randomAlphabetic(5));
+ config.putConfigValue(IdAustriaClientAuthConstants.CONFIG_PROPS_SIGN_SIGNING_KEY_PASSWORD,
+ PASSWORD);
+ credential.getMessageSigningCredential();
+ Assert.fail("No Metadata signing credentials not detected");
+
+ } catch (final CredentialsNotAvailableException e) {
+ Assert.assertTrue("Wrong errorCode", e.getMessage().contains("internal.pvp.01"));
+
+ }
+
+ try {
+ config.putConfigValue(IdAustriaClientAuthConstants.CONFIG_PROPS_ENCRYPTION_ALIAS,
+ RandomStringUtils.randomAlphabetic(5));
+ config.putConfigValue(IdAustriaClientAuthConstants.CONFIG_PROPS_ENCRYPTION_KEY_PASSWORD,
+ PASSWORD);
+ credential.getMessageEncryptionCredential();
+ Assert.fail("No Metadata signing credentials not detected");
+
+ } catch (final CredentialsNotAvailableException e) {
+ Assert.assertTrue("Wrong errorCode", e.getMessage().contains("internal.pvp.01"));
+
+ }
+ }
+
+ @Test
+ @DirtiesContext
+ public void validonfiguration() throws CredentialsNotAvailableException {
+ final IdAustriaClientAuthCredentialProvider credential = context.getBean(
+ IdAustriaClientAuthCredentialProvider.class);
+
+ Assert.assertNotNull("Credetialprovider", credential);
+ Assert.assertNotNull("Friendlyname", credential.getFriendlyName());
+
+ config.putConfigValue(IdAustriaClientAuthConstants.CONFIG_PROPS_SIGN_METADATA_ALIAS,
+ ALIAS_METADATA);
+ config.putConfigValue(IdAustriaClientAuthConstants.CONFIG_PROPS_SIGN_METADATA_KEY_PASSWORD,
+ PASSWORD);
+ credential.getMetaDataSigningCredential();
+
+ config.putConfigValue(IdAustriaClientAuthConstants.CONFIG_PROPS_SIGN_SIGNING_ALIAS,
+ ALIAS_SIGN);
+ config.putConfigValue(IdAustriaClientAuthConstants.CONFIG_PROPS_SIGN_SIGNING_KEY_PASSWORD,
+ PASSWORD);
+ credential.getMessageSigningCredential();
+
+ config.putConfigValue(IdAustriaClientAuthConstants.CONFIG_PROPS_ENCRYPTION_ALIAS,
+ ALIAS_ENC);
+ config.putConfigValue(IdAustriaClientAuthConstants.CONFIG_PROPS_ENCRYPTION_KEY_PASSWORD,
+ PASSWORD);
+ credential.getMessageEncryptionCredential();
+
+ }
+
+ @Test
+ @DirtiesContext
+ public void notKeyConfiguration() {
+ final IdAustriaClientAuthCredentialProvider credential = context.getBean(
+ IdAustriaClientAuthCredentialProvider.class);
+
+ Assert.assertNotNull("Credetialprovider", credential);
+ Assert.assertNotNull("Friendlyname", credential.getFriendlyName());
+
+ try {
+ credential.getMetaDataSigningCredential();
+ Assert.fail("No Metadata signing credentials not detected");
+
+ } catch (final CredentialsNotAvailableException e) {
+ Assert.assertTrue("Wrong errorCode", e.getMessage().contains("internal.pvp.01"));
+
+ }
+
+ try {
+ credential.getMessageSigningCredential();
+ Assert.fail("No message signing credentials not detected");
+
+ } catch (final CredentialsNotAvailableException e) {
+ Assert.assertTrue("Wrong errorCode", e.getMessage().contains("internal.pvp.01"));
+
+ }
+
+ try {
+ final EaafX509Credential encCred = credential.getMessageEncryptionCredential();
+ Assert.assertNull("No encryption signing credentials not detected", encCred);
+
+ } catch (final CredentialsNotAvailableException e) {
+ Assert.assertTrue("Wrong errorCode", e.getMessage().contains("internal.pvp.01"));
+
+ }
+
+ }
+
+ @Test
+ @DirtiesContext
+ public void notKeyConfigurationPkcs12() {
+ config.putConfigValue(IdAustriaClientAuthConstants.CONFIG_PROPS_KEYSTORE_PATH,
+ "../keystore/pvp.p12");
+ final IdAustriaClientAuthCredentialProvider credential = context.getBean(
+ IdAustriaClientAuthCredentialProvider.class);
+
+ Assert.assertNotNull("Credetialprovider", credential);
+ Assert.assertNotNull("Friendlyname", credential.getFriendlyName());
+
+ try {
+ credential.getMetaDataSigningCredential();
+ Assert.fail("No Metadata signing credentials not detected");
+
+ } catch (final CredentialsNotAvailableException e) {
+ Assert.assertTrue("Wrong errorCode", e.getMessage().contains("internal.pvp.01"));
+
+ }
+
+ try {
+ credential.getMessageSigningCredential();
+ Assert.fail("No message signing credentials not detected");
+
+ } catch (final CredentialsNotAvailableException e) {
+ Assert.assertTrue("Wrong errorCode", e.getMessage().contains("internal.pvp.01"));
+
+ }
+
+ try {
+ final EaafX509Credential encCred = credential.getMessageEncryptionCredential();
+ Assert.assertNull("No encryption signing credentials not detected", encCred);
+
+ } catch (final CredentialsNotAvailableException e) {
+ Assert.assertTrue("Wrong errorCode", e.getMessage().contains("internal.pvp.01"));
+
+ }
+ }
+}
diff --git a/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/AlternativeSearchTaskWithRegisterTest.java b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/AlternativeSearchTaskWithRegisterTest.java
new file mode 100644
index 00000000..3814c632
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/AlternativeSearchTaskWithRegisterTest.java
@@ -0,0 +1,1042 @@
+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.assertFalse;
+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.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+
+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.Mockito;
+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.ernp.ErnpRestClient.ErnpRegisterResult;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.clients.ernp.IErnpClient;
+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.exception.EidPostProcessingException;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.exception.EidasAttributeException;
+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.RegisterOperationStatus;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.service.RegisterSearchService.RegisterStatusResults;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.tasks.AlternativeSearchTask;
+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.bmi.namespace.zmr_su.zmr._20040201.EidasIdentitaetAnlageType;
+import at.gv.bmi.namespace.zmr_su.zmr._20040201.EidasSuchdatenType;
+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.EaafException;
+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 AlternativeSearchTaskWithRegisterTest {
+
+ @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 AlternativeSearchTask 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 {
+ if (zmrMock == null) {
+ zmrMock = soap.mock(ServicePort.class, "http://localhost:1234/demozmr");
+
+ }
+
+ registerSearchService = new RegisterSearchService(handlers, zmrClient, ernpClient);
+ task = new AlternativeSearchTask(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();
+
+ }
+
+
+ @Test
+ @SneakyThrows
+ public void missingStateInfoFirstEidasData() {
+ // inject matching intermediate state
+ RegisterStatusResults matchingState = new RegisterStatusResults(null,
+ Arrays.asList(RegisterResult.builder()
+ .bpk("")
+ .givenName("XXXKlaus - Maria")
+ .familyName("XXXvon Brandenburg")
+ .dateOfBirth("1994-12-31")
+ .pseudonym(Arrays.asList("7cEYasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit"))
+ .build()),
+ Collections.emptyList());
+ MatchingTaskUtils.storeIntermediateMatchingResult(pendingReq, matchingState );
+
+ //inject alternative eIDAS data
+ pendingReq.getSessionData(AuthProcessDataWrapper.class).setGenericDataToSession(
+ Constants.DATA_FULL_EIDAS_RESPONSE_ALTERNATIVE,
+ buildDummyAuthResponse("XXXKlaus - Maria", "XXXvon Brandenburg",
+ "DE/AT/7cEYasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit", "1994-12-31"));
+
+
+ // execute task
+ TaskExecutionException exception = assertThrows(TaskExecutionException.class,
+ () -> task.execute(pendingReq, executionContext));
+
+ // validate state
+ assertTrue("Wrong exception", (exception.getOriginalException() instanceof WorkflowException));
+ assertEquals("wrong errorparam 1", "step11", ((EaafException) exception.getOriginalException()).getParams()[0]);
+ assertTrue("Wrong flag 'step11'",
+ ((WorkflowException) exception.getOriginalException()).isRequiresManualFix());
+ assertEquals("wrong errorparam 1", "No initial eIDAS authn data",
+ ((EaafException) exception.getOriginalException()).getParams()[1]);
+
+
+ }
+
+ @Test
+ @SneakyThrows
+ public void missingStateInfoIntermediateMatchingState() {
+ //inject initial eIDAS data
+ MatchingTaskUtils.storeInitialEidasData(pendingReq, SimpleEidasData.builder()
+ .personalIdentifier("DE/AT/7cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit")
+ .pseudonym("cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit")
+ .givenName("XXXKlaus - Maria")
+ .familyName("XXXvon Brandenburg")
+ .dateOfBirth("1994-12-31")
+ .build());
+
+ //inject alternative eIDAS data
+ pendingReq.getSessionData(AuthProcessDataWrapper.class).setGenericDataToSession(
+ Constants.DATA_FULL_EIDAS_RESPONSE_ALTERNATIVE,
+ buildDummyAuthResponse("XXXKlaus - Maria", "XXXvon Brandenburg",
+ "DE/AT/7cEYasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit", "1994-12-31"));
+
+
+ // execute task
+ TaskExecutionException exception = assertThrows(TaskExecutionException.class,
+ () -> task.execute(pendingReq, executionContext));
+
+ // validate state
+ assertTrue("Wrong exception", (exception.getOriginalException() instanceof WorkflowException));
+ assertEquals("wrong errorparam 1", "step11", ((EaafException) exception.getOriginalException()).getParams()[0]);
+ assertTrue("Wrong flag 'step11'",
+ ((WorkflowException) exception.getOriginalException()).isRequiresManualFix());
+ assertEquals("wrong errorparam 1", "No intermediate matching-state",
+ ((EaafException) exception.getOriginalException()).getParams()[1]);
+
+ }
+
+ @Test
+ @SneakyThrows
+ public void countryCodeNotMatch() {
+ //inject initial eIDAS data
+ MatchingTaskUtils.storeInitialEidasData(pendingReq, SimpleEidasData.builder()
+ .personalIdentifier("DE/AT/7cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit")
+ .pseudonym("cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit")
+ .givenName("XXXKlaus - Maria")
+ .familyName("XXXvon Brandenburg")
+ .dateOfBirth("1994-12-31")
+ .citizenCountryCode("DE")
+ .build());
+
+ // inject matching intermediate state
+ RegisterStatusResults matchingState = new RegisterStatusResults(null,
+ Arrays.asList(RegisterResult.builder()
+ .bpk("")
+ .givenName("XXXKlaus - Maria")
+ .familyName("XXXvon Brandenburg")
+ .dateOfBirth("1994-12-31")
+ .pseudonym(Arrays.asList("7cEYasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit"))
+ .build()),
+ Collections.emptyList());
+ MatchingTaskUtils.storeIntermediateMatchingResult(pendingReq, matchingState );
+
+ //inject alternative eIDAS data
+ pendingReq.getSessionData(AuthProcessDataWrapper.class).setGenericDataToSession(
+ Constants.DATA_FULL_EIDAS_RESPONSE_ALTERNATIVE,
+ buildDummyAuthResponse("XXXKlaus - Maria", "XXXvon Brandenburg",
+ "EE/AT/7cEYasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit", "1994-12-31"));
+
+
+ // execute task
+ TaskExecutionException exception = assertThrows(TaskExecutionException.class,
+ () -> task.execute(pendingReq, executionContext));
+
+ // validate state
+ assertTrue("Wrong exception", (exception.getOriginalException() instanceof WorkflowException));
+ assertEquals("wrong errorparam 1", "step11", ((EaafException) exception.getOriginalException()).getParams()[0]);
+ assertTrue("Wrong flag 'step11'",
+ ((WorkflowException) exception.getOriginalException()).isRequiresManualFix());
+ assertEquals("wrong errorparam 1", "Country Code of alternative eIDAS authn not matching",
+ ((EaafException) exception.getOriginalException()).getParams()[1]);
+
+ }
+
+ @Test
+ @SneakyThrows
+ public void mdsNoMatch() {
+ //inject initial eIDAS data
+ MatchingTaskUtils.storeInitialEidasData(pendingReq, SimpleEidasData.builder()
+ .personalIdentifier("DE/AT/7cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit")
+ .pseudonym("cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit")
+ .givenName("XXXKlaus - Maria")
+ .familyName("XXXvon Brandenburg")
+ .dateOfBirth("1994-12-31")
+ .citizenCountryCode("DE")
+ .build());
+
+ // inject matching intermediate state
+ RegisterStatusResults matchingState = new RegisterStatusResults(null,
+ Arrays.asList(RegisterResult.builder()
+ .bpk("")
+ .givenName("XXXKlaus - Maria")
+ .familyName("XXXvon Brandenburg")
+ .dateOfBirth("1994-12-31")
+ .pseudonym(Arrays.asList("7cEYasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit"))
+ .build()),
+ Collections.emptyList());
+ MatchingTaskUtils.storeIntermediateMatchingResult(pendingReq, matchingState );
+
+ //inject alternative eIDAS data
+ pendingReq.getSessionData(AuthProcessDataWrapper.class).setGenericDataToSession(
+ Constants.DATA_FULL_EIDAS_RESPONSE_ALTERNATIVE,
+ buildDummyAuthResponse("XXXClaus - Maria", "XXXvon Brandenburg",
+ "DE/AT/7cEYasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit", "1995-12-31"));
+
+
+ // execute task
+ TaskExecutionException exception = assertThrows(TaskExecutionException.class,
+ () -> task.execute(pendingReq, executionContext));
+
+ // validate state
+ assertTrue("Wrong exception", (exception.getOriginalException() instanceof WorkflowException));
+ assertEquals("wrong errorparam 1", "step11", ((EaafException) exception.getOriginalException()).getParams()[0]);
+ assertTrue("Wrong flag 'step11'",
+ ((WorkflowException) exception.getOriginalException()).isRequiresManualFix());
+ assertEquals("wrong errorparam 1", "MDS of alternative eIDAS authn does not match initial authn",
+ ((EaafException) exception.getOriginalException()).getParams()[1]);
+
+ }
+
+ @Test
+ @SneakyThrows
+ public void seachPersonalIdMoreThanOneResult() {
+ //inject initial eIDAS data
+ MatchingTaskUtils.storeInitialEidasData(pendingReq, SimpleEidasData.builder()
+ .personalIdentifier("DE/AT/7cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit")
+ .pseudonym("cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit")
+ .givenName("XXXKlaus - Maria")
+ .familyName("XXXvon Brandenburg")
+ .dateOfBirth("1994-12-31")
+ .citizenCountryCode("DE")
+ .build());
+
+ // inject matching intermediate state
+ RegisterStatusResults matchingState = new RegisterStatusResults(
+ new RegisterOperationStatus(new BigInteger(RandomStringUtils.randomNumeric(5))),
+ Arrays.asList(RegisterResult.builder()
+ .bpk("")
+ .givenName("XXXKlaus - Maria")
+ .familyName("XXXvon Brandenburg")
+ .dateOfBirth("1994-12-31")
+ .pseudonym(Arrays.asList("7cEYasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit"))
+ .build()),
+ Collections.emptyList());
+ MatchingTaskUtils.storeIntermediateMatchingResult(pendingReq, matchingState);
+
+ //inject alternative eIDAS data
+ pendingReq.getSessionData(AuthProcessDataWrapper.class).setGenericDataToSession(
+ Constants.DATA_FULL_EIDAS_RESPONSE_ALTERNATIVE,
+ buildDummyAuthResponse("XXXKlaus - Maria", "XXXvon Brandenburg",
+ "DE/AT/7cEYasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit", "1994-12-31"));
+
+ // inject response
+ final ArgumentCaptor<RequestType> zmrReq = ArgumentCaptor.forClass(RequestType.class);
+ when(zmrMock.service(zmrReq.capture(), 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));
+ assertEquals("wrong errorparam 1", "searchWithPersonalIdentifier", ((EaafException) exception.getOriginalException()).getParams()[0]);
+ assertTrue("Wrong flag 'step11'",
+ ((WorkflowException) exception.getOriginalException()).isRequiresManualFix());
+
+ // validate request
+ assertEquals("wrong number of req.", 1, zmrReq.getAllValues().size());
+ checkBasicRequestParameters(zmrReq.getValue(), ZmrClientTest.PROCESS_TASK_SEARCH,
+ matchingState.getOperationStatus().getZmrProcessId(), "jUnit123456");
+ assertNotNull("Personensuche req.", zmrReq.getValue().getPersonSuchenRequest());
+ checkEidasDocumentResult(zmrReq.getValue().getPersonSuchenRequest().getEidasSuchdaten(),
+ "http://eidas.europa.eu/attributes/naturalperson/PersonIdentifier",
+ "DE", "7cEYasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit");
+
+ }
+
+ @Test
+ @SneakyThrows
+ public void seachPersonalIdNoBpkMatchWithIntermediateResults() {
+ //inject initial eIDAS data
+ MatchingTaskUtils.storeInitialEidasData(pendingReq, SimpleEidasData.builder()
+ .personalIdentifier("DE/AT/7cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit")
+ .pseudonym("cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit")
+ .givenName("XXXKlaus - Maria")
+ .familyName("XXXvon Brandenburg")
+ .dateOfBirth("1994-12-31")
+ .citizenCountryCode("DE")
+ .build());
+
+ // inject matching intermediate state
+ RegisterStatusResults matchingState = new RegisterStatusResults(null,
+ Arrays.asList(RegisterResult.builder()
+ .bpk("notExists")
+ .givenName("XXXKlaus - Maria")
+ .familyName("XXXvon Brandenburg")
+ .dateOfBirth("1994-12-31")
+ .pseudonym(Arrays.asList("7cEYasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit"))
+ .build()),
+ Collections.emptyList());
+ MatchingTaskUtils.storeIntermediateMatchingResult(pendingReq, matchingState );
+
+ //inject alternative eIDAS data
+ pendingReq.getSessionData(AuthProcessDataWrapper.class).setGenericDataToSession(
+ Constants.DATA_FULL_EIDAS_RESPONSE_ALTERNATIVE,
+ buildDummyAuthResponse("XXXKlaus - Maria", "XXXvon Brandenburg",
+ "DE/AT/7cEYasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit", "1994-12-31"));
+
+ // inject response
+ final ArgumentCaptor<RequestType> zmrReq = ArgumentCaptor.forClass(RequestType.class);
+ 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"));
+
+ Mockito.when(ernpClient.searchWithPersonIdentifier(any(), any()))
+ .thenReturn(emptyErnpRegisterResult());
+
+ // execute task
+ TaskExecutionException exception = assertThrows(TaskExecutionException.class,
+ () -> task.execute(pendingReq, executionContext));
+
+ // validate state
+ assertTrue("Wrong exception", (exception.getOriginalException() instanceof WorkflowException));
+ assertEquals("wrong errorparam 1", "step7bKittProcess", ((EaafException) exception.getOriginalException()).getParams()[0]);
+ assertFalse("Wrong flag 'step11'",
+ ((WorkflowException) exception.getOriginalException()).isRequiresManualFix());
+ assertEquals("wrong errorparam 1", "Register result from alternativ authentication does not fit into intermediate state",
+ ((EaafException) exception.getOriginalException()).getParams()[1]);
+
+ // validate request
+ assertEquals("wrong number of req.", 1, zmrReq.getAllValues().size());
+ assertNotNull("Personensuche req.", zmrReq.getValue().getPersonSuchenRequest());
+ checkEidasDocumentResult(zmrReq.getValue().getPersonSuchenRequest().getEidasSuchdaten(),
+ "http://eidas.europa.eu/attributes/naturalperson/PersonIdentifier",
+ "DE", "7cEYasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit");
+
+ }
+
+ @Test
+ @SneakyThrows
+ public void seachPersonalIdSuccess() {
+ //inject initial eIDAS data
+ MatchingTaskUtils.storeInitialEidasData(pendingReq, SimpleEidasData.builder()
+ .personalIdentifier("DE/AT/7cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit")
+ .pseudonym("cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit")
+ .givenName("XXXKlaus - Maria")
+ .familyName("XXXvon Brandenburg")
+ .dateOfBirth("1994-12-31")
+ .citizenCountryCode("DE")
+ .build());
+
+ // inject matching intermediate state
+ RegisterStatusResults matchingState = new RegisterStatusResults(
+ new RegisterOperationStatus(new BigInteger(RandomStringUtils.randomNumeric(5))),
+ Arrays.asList(RegisterResult.builder()
+ .bpk("UgeknNsc26lVuB7U/uYGVmWtnnA=")
+ .givenName("XXXKlaus - Maria")
+ .familyName("XXXvon Brandenburg")
+ .dateOfBirth("1994-12-31")
+ .pseudonym(Arrays.asList("7cEYasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit"))
+ .build()),
+ Collections.emptyList());
+ MatchingTaskUtils.storeIntermediateMatchingResult(pendingReq, matchingState );
+
+ //inject alternative eIDAS data
+ pendingReq.getSessionData(AuthProcessDataWrapper.class).setGenericDataToSession(
+ Constants.DATA_FULL_EIDAS_RESPONSE_ALTERNATIVE,
+ buildDummyAuthResponse("XXXKlaus - Maria", "XXXvon Brandenburg",
+ "DE/AT/7cEYasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit", "1994-12-31"));
+
+ // inject response
+ final ArgumentCaptor<RequestType> zmrReq = ArgumentCaptor.forClass(RequestType.class);
+ when(zmrMock.service(zmrReq.capture(), any()))
+ .thenReturn(loadResponseFromFile("/data/zmr/seq_1-8_search_with_personalId_only_resp.xml"))
+ .thenReturn(loadResponseFromFile("/data/zmr/seq_3-4_kitt_get_latest_version_resp.xml"))
+ .thenReturn(loadResponseFromFile("/data/zmr/seq_3-6_kitt_update_resp.xml"))
+ .thenReturn(loadResponseFromFile("/data/zmr/seq_3-8_kitt_get_latest_version_resp.xml"))
+ .thenThrow(new RuntimeException("This request is not needed any more"));
+
+ Mockito.when(ernpClient.searchWithPersonIdentifier(any(), any()))
+ .thenReturn(emptyErnpRegisterResult());
+ Mockito.when(ernpClient.searchWithMds(any(), any(), any(), any()))
+ .thenReturn(emptyErnpRegisterResult());
+ Mockito.when(ernpClient.update(any(), any()))
+ .thenThrow(new IllegalStateException("ERnP update should not be neccessary"));
+
+ // execute task
+ 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",
+ "XXXClaus - Maria", "1994-12-31", "DE");
+ assertNull("wrong executionContextFlag 'alternative eIDAS result'",
+ executionContext.get(Constants.TRANSITION_TO_GENERATE_OTHER_LOGIN_METHOD_GUI_TASK));
+
+
+ // validate request
+ assertEquals("wrong number of req.", 4, zmrReq.getAllValues().size());
+ assertNotNull("Personensuche req.", zmrReq.getAllValues().get(0).getPersonSuchenRequest());
+ checkBasicRequestParameters(zmrReq.getAllValues().get(0), ZmrClientTest.PROCESS_TASK_SEARCH,
+ matchingState.getOperationStatus().getZmrProcessId(), "jUnit123456");
+ checkEidasDocumentResult(zmrReq.getAllValues().get(0).getPersonSuchenRequest().getEidasSuchdaten(),
+ "http://eidas.europa.eu/attributes/naturalperson/PersonIdentifier",
+ "DE", "7cEYasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit");
+
+
+ assertNotNull("Personensuche KITT req.", zmrReq.getAllValues().get(1).getPersonSuchenRequest());
+ checkBasicRequestParameters(zmrReq.getAllValues().get(1), ZmrClientTest.PROCESS_TASK_SEARCH,
+ new BigInteger("367100000000079"), "jUnit123456");
+
+ assertNotNull("PersonAender KITT req.", zmrReq.getAllValues().get(2).getPersonAendernRequest());
+ checkBasicRequestParameters(zmrReq.getAllValues().get(2), ZmrClientTest.PROCESS_TASK_UPDATE,
+ new BigInteger("367100000000079"), "jUnit123456");
+
+ assertEquals("wrong number of eIDAS Docs to Add", 4,
+ zmrReq.getAllValues().get(2).getPersonAendernRequest().getEidasIdentitaetAnlage().size());
+ checkEidasDocumentAdd(zmrReq.getAllValues().get(2).getPersonAendernRequest().getEidasIdentitaetAnlage(),
+ "http://eidas.europa.eu/attributes/naturalperson/DateOfBirth", "DE", "1994-12-31");
+ checkEidasDocumentAdd(zmrReq.getAllValues().get(2).getPersonAendernRequest().getEidasIdentitaetAnlage(),
+ "http://eidas.europa.eu/attributes/naturalperson/CurrentGivenName", "DE", "XXXKlaus - Maria");
+ checkEidasDocumentAdd(zmrReq.getAllValues().get(2).getPersonAendernRequest().getEidasIdentitaetAnlage(),
+ "http://eidas.europa.eu/attributes/naturalperson/CurrentFamilyName", "DE", "XXXvon Brandenburg");
+
+ assertNotNull("Personensuche KITT req.", zmrReq.getAllValues().get(3).getPersonSuchenRequest());
+ checkBasicRequestParameters(zmrReq.getAllValues().get(3), ZmrClientTest.PROCESS_TASK_SEARCH,
+ new BigInteger("367100000000079"), "jUnit123456");
+
+ }
+
+ @Test
+ @SneakyThrows
+ public void seachCcSpecificSuccess() {
+ //inject initial eIDAS data
+ MatchingTaskUtils.storeInitialEidasData(pendingReq, SimpleEidasData.builder()
+ .personalIdentifier("DE/AT/7cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit")
+ .pseudonym("cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit")
+ .givenName("XXXKlaus - Maria")
+ .familyName("XXXvon Brandenburg")
+ .dateOfBirth("1994-12-31")
+ .citizenCountryCode("DE")
+ .build());
+
+ // inject matching intermediate state
+ RegisterStatusResults matchingState = new RegisterStatusResults(
+ new RegisterOperationStatus(new BigInteger(RandomStringUtils.randomNumeric(5))),
+ Arrays.asList(RegisterResult.builder()
+ .bpk("UgeknNsc26lVuB7U/uYGVmWtnnA=")
+ .givenName("XXXKlaus - Maria")
+ .familyName("XXXvon Brandenburg")
+ .dateOfBirth("1994-12-31")
+ .pseudonym(Arrays.asList("7cEYasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit"))
+ .build()),
+ Collections.emptyList());
+ MatchingTaskUtils.storeIntermediateMatchingResult(pendingReq, matchingState );
+
+ //inject alternative eIDAS data
+ pendingReq.getSessionData(AuthProcessDataWrapper.class).setGenericDataToSession(
+ Constants.DATA_FULL_EIDAS_RESPONSE_ALTERNATIVE,
+ buildDummyAuthResponse("XXXKlaus - Maria", "XXXvon Brandenburg",
+ "DE/AT/7cEYasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit", "1994-12-31",
+ null, "Hintergigritzpotschn", "XXXvon Heuburg"));
+
+ // inject response
+ final ArgumentCaptor<RequestType> zmrReq = ArgumentCaptor.forClass(RequestType.class);
+ when(zmrMock.service(zmrReq.capture(), any()))
+ .thenReturn(loadResponseFromFile("/data/zmr/empty_zmr_result.xml"))
+ .thenReturn(loadResponseFromFile("/data/zmr/seq_1-8_search_with_personalId_only_resp.xml"))
+ .thenReturn(loadResponseFromFile("/data/zmr/seq_3-4_kitt_get_latest_version_resp.xml"))
+ .thenReturn(loadResponseFromFile("/data/zmr/seq_3-6_kitt_update_resp.xml"))
+ .thenReturn(loadResponseFromFile("/data/zmr/seq_3-8_kitt_get_latest_version_resp.xml"))
+ .thenReturn(loadResponseFromFile("/data/zmr/seq_3-10_kitt_update_resp.xml"))
+ .thenThrow(new RuntimeException("This request is not needed any more"));
+
+ Mockito.when(ernpClient.searchWithPersonIdentifier(any(), any()))
+ .thenReturn(emptyErnpRegisterResult());
+ Mockito.when(ernpClient.searchCountrySpecific(any(), any()))
+ .thenReturn(emptyErnpRegisterResult());
+ Mockito.when(ernpClient.searchWithMds(any(), any(), any(), any()))
+ .thenReturn(emptyErnpRegisterResult());
+ Mockito.when(ernpClient.update(any(), any()))
+ .thenThrow(new IllegalStateException("ERnP update should not be neccessary"));
+
+ // execute task
+ 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",
+ "XXXClaus - Maria", "1994-12-31", "DE");
+ assertNull("wrong executionContextFlag 'alternative eIDAS result'",
+ executionContext.get(Constants.TRANSITION_TO_GENERATE_OTHER_LOGIN_METHOD_GUI_TASK));
+
+
+ // validate request
+ assertEquals("wrong number of req.", 6, zmrReq.getAllValues().size());
+ assertNotNull("Personensuche req.", zmrReq.getAllValues().get(0).getPersonSuchenRequest());
+ checkBasicRequestParameters(zmrReq.getAllValues().get(0), ZmrClientTest.PROCESS_TASK_SEARCH,
+ matchingState.getOperationStatus().getZmrProcessId(), "jUnit123456");
+ checkEidasDocumentResult(zmrReq.getAllValues().get(0).getPersonSuchenRequest().getEidasSuchdaten(),
+ "http://eidas.europa.eu/attributes/naturalperson/PersonIdentifier",
+ "DE", "7cEYasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit");
+
+ assertNotNull("Personensuche CC-specific req.", zmrReq.getAllValues().get(0).getPersonSuchenRequest());
+ checkBasicRequestParameters(zmrReq.getAllValues().get(1), ZmrClientTest.PROCESS_TASK_SEARCH,
+ new BigInteger("367100000000079"), "jUnit123456");
+ checkEidasDocumentResult(zmrReq.getAllValues().get(1).getPersonSuchenRequest().getEidasSuchdaten(),
+ "http://eidas.europa.eu/attributes/naturalperson/PlaceOfBirth",
+ "DE", "Hintergigritzpotschn");
+ checkEidasDocumentResult(zmrReq.getAllValues().get(1).getPersonSuchenRequest().getEidasSuchdaten(),
+ "http://eidas.europa.eu/attributes/naturalperson/BirthName",
+ "DE", "XXXvon Heuburg");
+
+
+ assertNotNull("Personensuche KITT req.", zmrReq.getAllValues().get(2).getPersonSuchenRequest());
+ checkBasicRequestParameters(zmrReq.getAllValues().get(2), ZmrClientTest.PROCESS_TASK_SEARCH,
+ new BigInteger("367100000000079"), "jUnit123456");
+
+ assertNotNull("PersonAender KITT req.", zmrReq.getAllValues().get(3).getPersonAendernRequest());
+ checkBasicRequestParameters(zmrReq.getAllValues().get(3), ZmrClientTest.PROCESS_TASK_UPDATE,
+ new BigInteger("367100000000079"), "jUnit123456");
+
+ assertNotNull("Personensuche KITT req.", zmrReq.getAllValues().get(4).getPersonSuchenRequest());
+ checkBasicRequestParameters(zmrReq.getAllValues().get(4), ZmrClientTest.PROCESS_TASK_SEARCH,
+ new BigInteger("367100000000079"), "jUnit123456");
+
+ assertNotNull("PersonAender KITT req.", zmrReq.getAllValues().get(5).getPersonAendernRequest());
+ checkBasicRequestParameters(zmrReq.getAllValues().get(5), ZmrClientTest.PROCESS_TASK_UPDATE,
+ new BigInteger("367100000000079"), "jUnit123456");
+ }
+
+ @Test
+ @SneakyThrows
+ public void seachCcSpecificNotPossible() {
+ //inject initial eIDAS data
+ MatchingTaskUtils.storeInitialEidasData(pendingReq, SimpleEidasData.builder()
+ .personalIdentifier("DE/AT/7cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit")
+ .pseudonym("cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit")
+ .givenName("XXXKlaus - Maria")
+ .familyName("XXXvon Brandenburg")
+ .dateOfBirth("1994-12-31")
+ .citizenCountryCode("EE")
+ .build());
+
+ // inject matching intermediate state
+ RegisterStatusResults matchingState = new RegisterStatusResults(
+ new RegisterOperationStatus(new BigInteger(RandomStringUtils.randomNumeric(5))),
+ Arrays.asList(RegisterResult.builder()
+ .bpk("UgeknNsc26lVuB7U/uYGVmWtnnA=")
+ .givenName("XXXKlaus - Maria")
+ .familyName("XXXvon Brandenburg")
+ .dateOfBirth("1994-12-31")
+ .pseudonym(Arrays.asList("7cEYasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit"))
+ .build()),
+ Collections.emptyList());
+ MatchingTaskUtils.storeIntermediateMatchingResult(pendingReq, matchingState );
+
+ //inject alternative eIDAS data
+ pendingReq.getSessionData(AuthProcessDataWrapper.class).setGenericDataToSession(
+ Constants.DATA_FULL_EIDAS_RESPONSE_ALTERNATIVE,
+ buildDummyAuthResponse("XXXKlaus - Maria", "XXXvon Brandenburg",
+ "EE/AT/7cEYasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit", "1994-12-31",
+ null, "Hintergigritzpotschn", "XXXvon Heuburg"));
+
+ // inject response
+ final ArgumentCaptor<RequestType> zmrReq = ArgumentCaptor.forClass(RequestType.class);
+ when(zmrMock.service(zmrReq.capture(), any()))
+ .thenReturn(loadResponseFromFile("/data/zmr/empty_zmr_result.xml"))
+ .thenThrow(new RuntimeException("This request is not needed any more"));
+
+ Mockito.when(ernpClient.searchWithPersonIdentifier(any(), any()))
+ .thenReturn(emptyErnpRegisterResult());
+
+ // execute task
+ task.execute(pendingReq, executionContext);
+
+ // validate state
+ assertNotNull("find no eIDAS inbut data", MatchingTaskUtils.getInitialEidasData(pendingReq));
+ assertNull("final matching result", MatchingTaskUtils.getFinalMatchingResult(pendingReq));
+ assertEquals("wrong executionContextFlag 'alternative eIDAS result'", true,
+ executionContext.get(Constants.TRANSITION_TO_GENERATE_OTHER_LOGIN_METHOD_GUI_TASK));
+
+
+ // validate request
+ assertEquals("wrong number of req.", 1, zmrReq.getAllValues().size());
+ assertNotNull("Personensuche req.", zmrReq.getAllValues().get(0).getPersonSuchenRequest());
+ checkBasicRequestParameters(zmrReq.getAllValues().get(0), ZmrClientTest.PROCESS_TASK_SEARCH,
+ matchingState.getOperationStatus().getZmrProcessId(), "jUnit123456");
+ checkEidasDocumentResult(zmrReq.getAllValues().get(0).getPersonSuchenRequest().getEidasSuchdaten(),
+ "http://eidas.europa.eu/attributes/naturalperson/PersonIdentifier",
+ "EE", "7cEYasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit");
+
+ }
+
+ @Test
+ @SneakyThrows
+ public void seachCcSpecificMoreThanOneResult() {
+ //inject initial eIDAS data
+ MatchingTaskUtils.storeInitialEidasData(pendingReq, SimpleEidasData.builder()
+ .personalIdentifier("DE/AT/7cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit")
+ .pseudonym("cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit")
+ .givenName("XXXKlaus - Maria")
+ .familyName("XXXvon Brandenburg")
+ .dateOfBirth("1994-12-31")
+ .citizenCountryCode("DE")
+ .build());
+
+ // inject matching intermediate state
+ RegisterStatusResults matchingState = new RegisterStatusResults(
+ new RegisterOperationStatus(new BigInteger(RandomStringUtils.randomNumeric(5))),
+ Arrays.asList(RegisterResult.builder()
+ .bpk("UgeknNsc26lVuB7U/uYGVmWtnnA=")
+ .givenName("XXXKlaus - Maria")
+ .familyName("XXXvon Brandenburg")
+ .dateOfBirth("1994-12-31")
+ .pseudonym(Arrays.asList("7cEYasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit"))
+ .build()),
+ Collections.emptyList());
+ MatchingTaskUtils.storeIntermediateMatchingResult(pendingReq, matchingState );
+
+ //inject alternative eIDAS data
+ pendingReq.getSessionData(AuthProcessDataWrapper.class).setGenericDataToSession(
+ Constants.DATA_FULL_EIDAS_RESPONSE_ALTERNATIVE,
+ buildDummyAuthResponse("XXXKlaus - Maria", "XXXvon Brandenburg",
+ "DE/AT/7cEYasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit", "1994-12-31",
+ null, "Hintergigritzpotschn", "XXXvon Heuburg"));
+
+ // inject response
+ final ArgumentCaptor<RequestType> zmrReq = ArgumentCaptor.forClass(RequestType.class);
+ when(zmrMock.service(zmrReq.capture(), any()))
+ .thenReturn(loadResponseFromFile("/data/zmr/empty_zmr_result.xml"))
+ .thenReturn(loadResponseFromFile("/data/zmr/search_with_personalId_only_resp_moreThanOne.xml"))
+ .thenThrow(new RuntimeException("This request is not needed any more"));
+
+ Mockito.when(ernpClient.searchWithPersonIdentifier(any(), any()))
+ .thenReturn(emptyErnpRegisterResult());
+ Mockito.when(ernpClient.searchWithMds(any(), any(), any(), any()))
+ .thenReturn(emptyErnpRegisterResult());
+ Mockito.when(ernpClient.update(any(), any()))
+ .thenThrow(new IllegalStateException("ERnP update should not be neccessary"));
+
+ // execute task
+ TaskExecutionException exception = assertThrows(TaskExecutionException.class,
+ () -> task.execute(pendingReq, executionContext));
+
+ // validate state
+ assertTrue("Wrong exception", (exception.getOriginalException() instanceof WorkflowException));
+ assertEquals("wrong errorparam 1", "searchWithCountrySpecifics", ((EaafException) exception.getOriginalException()).getParams()[0]);
+ assertTrue("Wrong flag 'step11'",
+ ((WorkflowException) exception.getOriginalException()).isRequiresManualFix());
+
+
+ // validate request
+ assertEquals("wrong number of req.", 2, zmrReq.getAllValues().size());
+ assertNotNull("Personensuche req.", zmrReq.getAllValues().get(0).getPersonSuchenRequest());
+ checkBasicRequestParameters(zmrReq.getAllValues().get(0), ZmrClientTest.PROCESS_TASK_SEARCH,
+ matchingState.getOperationStatus().getZmrProcessId(), "jUnit123456");
+ checkEidasDocumentResult(zmrReq.getAllValues().get(0).getPersonSuchenRequest().getEidasSuchdaten(),
+ "http://eidas.europa.eu/attributes/naturalperson/PersonIdentifier",
+ "DE", "7cEYasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit");
+
+ assertNotNull("Personensuche CC-specific req.", zmrReq.getAllValues().get(0).getPersonSuchenRequest());
+ checkBasicRequestParameters(zmrReq.getAllValues().get(1), ZmrClientTest.PROCESS_TASK_SEARCH,
+ new BigInteger("367100000000079"), "jUnit123456");
+ checkEidasDocumentResult(zmrReq.getAllValues().get(1).getPersonSuchenRequest().getEidasSuchdaten(),
+ "http://eidas.europa.eu/attributes/naturalperson/PlaceOfBirth",
+ "DE", "Hintergigritzpotschn");
+ checkEidasDocumentResult(zmrReq.getAllValues().get(1).getPersonSuchenRequest().getEidasSuchdaten(),
+ "http://eidas.europa.eu/attributes/naturalperson/BirthName",
+ "DE", "XXXvon Heuburg");
+
+ }
+
+ @Test
+ @SneakyThrows
+ public void seachCcSpecificEmptyResult() {
+ //inject initial eIDAS data
+ MatchingTaskUtils.storeInitialEidasData(pendingReq, SimpleEidasData.builder()
+ .personalIdentifier("DE/AT/7cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit")
+ .pseudonym("cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit")
+ .givenName("XXXKlaus - Maria")
+ .familyName("XXXvon Brandenburg")
+ .dateOfBirth("1994-12-31")
+ .citizenCountryCode("DE")
+ .build());
+
+ // inject matching intermediate state
+ RegisterStatusResults matchingState = new RegisterStatusResults(
+ new RegisterOperationStatus(new BigInteger(RandomStringUtils.randomNumeric(5))),
+ Arrays.asList(RegisterResult.builder()
+ .bpk("UgeknNsc26lVuB7U/uYGVmWtnnA=")
+ .givenName("XXXKlaus - Maria")
+ .familyName("XXXvon Brandenburg")
+ .dateOfBirth("1994-12-31")
+ .pseudonym(Arrays.asList("7cEYasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit"))
+ .build()),
+ Collections.emptyList());
+ MatchingTaskUtils.storeIntermediateMatchingResult(pendingReq, matchingState );
+
+ //inject alternative eIDAS data
+ pendingReq.getSessionData(AuthProcessDataWrapper.class).setGenericDataToSession(
+ Constants.DATA_FULL_EIDAS_RESPONSE_ALTERNATIVE,
+ buildDummyAuthResponse("XXXKlaus - Maria", "XXXvon Brandenburg",
+ "DE/AT/7cEYasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit", "1994-12-31",
+ null, "Hintergigritzpotschn", "XXXvon Heuburg"));
+
+ // inject response
+ final ArgumentCaptor<RequestType> zmrReq = ArgumentCaptor.forClass(RequestType.class);
+ when(zmrMock.service(zmrReq.capture(), any()))
+ .thenReturn(loadResponseFromFile("/data/zmr/empty_zmr_result.xml"))
+ .thenReturn(loadResponseFromFile("/data/zmr/empty_zmr_result.xml"))
+ .thenThrow(new RuntimeException("This request is not needed any more"));
+
+ Mockito.when(ernpClient.searchWithPersonIdentifier("7cEYasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit", "DE"))
+ .thenReturn(emptyErnpRegisterResult());
+ Mockito.when(ernpClient.searchCountrySpecific(any(), any()))
+ .thenReturn(emptyErnpRegisterResult());
+ Mockito.when(ernpClient.update(any(), any()))
+ .thenThrow(new IllegalStateException("ERnP update should not be neccessary"));
+
+
+ // execute task
+ task.execute(pendingReq, executionContext);
+
+ // validate state
+ assertNotNull("find no eIDAS inbut data", MatchingTaskUtils.getInitialEidasData(pendingReq));
+ assertNull("final matching result", MatchingTaskUtils.getFinalMatchingResult(pendingReq));
+ assertEquals("wrong executionContextFlag 'alternative eIDAS result'", true,
+ executionContext.get(Constants.TRANSITION_TO_GENERATE_OTHER_LOGIN_METHOD_GUI_TASK));
+ assertEquals("matching failed flag", true, executionContext.get(Constants.CONTEXT_FLAG_ADVANCED_MATCHING_FAILED));
+ assertEquals("failed reason", "module.eidasauth.matching.25", executionContext.get(Constants.CONTEXT_FLAG_ADVANCED_MATCHING_FAILED_REASON));
+
+
+
+ // validate request
+ assertEquals("wrong number of req.", 2, zmrReq.getAllValues().size());
+ assertNotNull("Personensuche req.", zmrReq.getAllValues().get(0).getPersonSuchenRequest());
+ checkBasicRequestParameters(zmrReq.getAllValues().get(0), ZmrClientTest.PROCESS_TASK_SEARCH,
+ matchingState.getOperationStatus().getZmrProcessId(), "jUnit123456");
+ checkEidasDocumentResult(zmrReq.getAllValues().get(0).getPersonSuchenRequest().getEidasSuchdaten(),
+ "http://eidas.europa.eu/attributes/naturalperson/PersonIdentifier",
+ "DE", "7cEYasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit");
+
+ assertNotNull("Personensuche CC-specific req.", zmrReq.getAllValues().get(0).getPersonSuchenRequest());
+ checkBasicRequestParameters(zmrReq.getAllValues().get(1), ZmrClientTest.PROCESS_TASK_SEARCH,
+ new BigInteger("367100000000079"), "jUnit123456");
+ checkEidasDocumentResult(zmrReq.getAllValues().get(1).getPersonSuchenRequest().getEidasSuchdaten(),
+ "http://eidas.europa.eu/attributes/naturalperson/PlaceOfBirth",
+ "DE", "Hintergigritzpotschn");
+ checkEidasDocumentResult(zmrReq.getAllValues().get(1).getPersonSuchenRequest().getEidasSuchdaten(),
+ "http://eidas.europa.eu/attributes/naturalperson/BirthName",
+ "DE", "XXXvon Heuburg");
+
+ }
+
+ @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());
+ }
+
+ private void checkEidasDocumentResult(List<EidasSuchdatenType> list, String type, String cc, String value) {
+ Optional<EidasSuchdatenType> eidasDoc = list.stream()
+ .filter(el -> type.equals(el.getEidasArt()))
+ .findFirst();
+
+ assertTrue("eidas doc: " + type, eidasDoc.isPresent());
+ assertEquals("eIDAS docType", type, eidasDoc.get().getEidasArt());
+ assertEquals("eIDAS docValue", value, eidasDoc.get().getEidasWert());
+ assertEquals("eIDAS docCC", cc, eidasDoc.get().getStaatscode2());
+
+ }
+
+
+ private void checkEidasDocumentAdd(List<EidasIdentitaetAnlageType> list, String type, String cc, String value) {
+ Optional<EidasIdentitaetAnlageType> eidasDoc = list.stream()
+ .filter(el -> type.equals(el.getEidasArt()))
+ .findFirst();
+
+ assertTrue("eidas doc: " + type, eidasDoc.isPresent());
+ assertEquals("eIDAS docType", type, eidasDoc.get().getEidasArt());
+ assertEquals("eIDAS docValue", value, eidasDoc.get().getEidasWert());
+ assertEquals("eIDAS docCC", cc, eidasDoc.get().getStaatscode2());
+ }
+
+ @NotNull
+ private ErnpRegisterResult emptyErnpRegisterResult() {
+ return new ErnpRegisterResult(Collections.emptyList());
+ }
+
+
+}
diff --git a/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/CreateIdentityLinkTaskEidNewTest.java b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/CreateIdentityLinkTaskEidNewTest.java
index f8971705..023c196c 100644
--- a/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/CreateIdentityLinkTaskEidNewTest.java
+++ b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/CreateIdentityLinkTaskEidNewTest.java
@@ -4,7 +4,7 @@ import static at.asitplus.eidas.specific.core.MsEidasNodeConstants.PROP_CONFIG_S
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
-import static org.powermock.api.mockito.PowerMockito.when;
+import static org.mockito.Mockito.when;
import java.net.URISyntaxException;
import java.security.KeyStore;
@@ -23,6 +23,8 @@ import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
import org.apache.commons.lang3.RandomStringUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.joda.time.DateTime;
import org.jose4j.jwa.AlgorithmConstraints;
import org.jose4j.jwa.AlgorithmConstraints.ConstraintType;
import org.jose4j.jws.AlgorithmIdentifiers;
@@ -32,7 +34,6 @@ import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
-import org.powermock.core.classloader.annotations.PrepareForTest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.mock.web.MockHttpServletResponse;
@@ -45,15 +46,24 @@ import org.springframework.web.context.request.ServletRequestAttributes;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.github.skjolber.mockito.soap.SoapServiceRule;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
import at.asitplus.eidas.specific.core.MsEidasNodeConstants;
import at.asitplus.eidas.specific.core.test.config.dummy.MsConnectorDummyConfigMap;
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.SimpleEidasData;
+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.SzrCommunicationException;
import at.asitplus.eidas.specific.modules.auth.eidas.v2.service.EidasAttributeRegistry;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.service.ICcSpecificEidProcessingService;
import at.asitplus.eidas.specific.modules.auth.eidas.v2.tasks.CreateIdentityLinkTask;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.utils.EidasResponseUtils;
import at.asitplus.eidas.specific.modules.auth.eidas.v2.utils.JoseUtils;
import at.asitplus.eidas.specific.modules.auth.eidas.v2.utils.JoseUtils.JwsResult;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.utils.MatchingTaskUtils;
import at.gv.egiz.eaaf.core.api.IRequest;
import at.gv.egiz.eaaf.core.api.IRequestStorage;
import at.gv.egiz.eaaf.core.api.data.EaafConfigConstants;
@@ -73,8 +83,10 @@ import at.gv.egiz.eaaf.core.impl.idp.module.test.TestRequestImpl;
import at.gv.egiz.eaaf.core.impl.idp.process.ExecutionContextImpl;
import at.gv.egiz.eaaf.core.impl.utils.Random;
import eu.eidas.auth.commons.attribute.AttributeDefinition;
+import eu.eidas.auth.commons.attribute.AttributeValue;
import eu.eidas.auth.commons.attribute.ImmutableAttributeMap;
import eu.eidas.auth.commons.attribute.ImmutableAttributeMap.Builder;
+import eu.eidas.auth.commons.protocol.eidas.impl.PostalAddress;
import eu.eidas.auth.commons.protocol.impl.AuthenticationResponse;
import lombok.val;
import szrservices.GetIdentityLinkEidasResponse;
@@ -86,7 +98,6 @@ import szrservices.SignContentEntry;
import szrservices.SignContentResponseType;
@RunWith(SpringJUnit4ClassRunner.class)
-@PrepareForTest(CreateIdentityLinkTask.class)
@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_CLASS)
@ContextConfiguration(locations = {
"/SpringTest-context_tasks_test.xml",
@@ -105,6 +116,9 @@ public class CreateIdentityLinkTaskEidNewTest {
EaafKeyStoreFactory keyStoreFactory;
@Autowired
+ ICcSpecificEidProcessingService eidPostProcessor;
+
+ @Autowired
private IRequestStorage requestStorage;
final ExecutionContext executionContext = new ExecutionContextImpl();
@@ -123,25 +137,27 @@ public class CreateIdentityLinkTaskEidNewTest {
AlgorithmIdentifiers.RSA_PSS_USING_SHA512));
private static ObjectMapper mapper = new ObjectMapper();
-
+
private AuthenticationResponse response;
-
+ private MatchedPersonResult matchingInfos;
+
@Rule
public final SoapServiceRule soap = SoapServiceRule.newInstance();
/**
* jUnit test set-up.
+ * @throws EidasAttributeException
+ * @throws EidPostProcessingException
*/
@Before
- public void setUp() throws EaafStorageException, URISyntaxException {
+ public void setUp() throws EaafStorageException, URISyntaxException, EidPostProcessingException, EidasAttributeException {
httpReq = new MockHttpServletRequest("POST", "https://localhost/authhandler");
httpResp = new MockHttpServletResponse();
RequestContextHolder.resetRequestAttributes();
RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(httpReq, httpResp));
-
+
basicConfig.putConfigValue("eidas.ms.auth.eIDAS.szrclient.debug.useDummySolution", "false");
- basicConfig.putConfigValue("eidas.ms.auth.eIDAS.szrclient.workarounds.use.getidentitylink.for.ida", "true");
final Map<String, String> spConfig = new HashMap<>();
spConfig.put(EaafConfigConstants.SERVICE_UNIQUEIDENTIFIER, "testSp");
@@ -153,14 +169,27 @@ public class CreateIdentityLinkTaskEidNewTest {
response = buildDummyAuthResponse(false);
pendingReq.getSessionData(AuthProcessDataWrapper.class)
.setGenericDataToSession(Constants.DATA_FULL_EIDAS_RESPONSE, response);
-
+
+ final Map<String, Object> eidasAttributes = convertEidasAttrToSimpleMap(
+ response.getAttributes().getAttributeMap());
+ final SimpleEidasData eidData = eidPostProcessor.postProcess(eidasAttributes);
+ MatchingTaskUtils.storeInitialEidasData(pendingReq, eidData);
+
+ matchingInfos = MatchedPersonResult.builder()
+ .bpk(RandomStringUtils.randomAlphabetic(5))
+ .givenName(eidData.getGivenName())
+ .familyName(eidData.getFamilyName())
+ .dateOfBirth(eidData.getDateOfBirth())
+ .countryCode(eidData.getCitizenCountryCode())
+ .build();
+ MatchingTaskUtils.storeFinalMatchingResult(pendingReq, matchingInfos);
pendingReq.setSpConfig(oaParam);
pendingReq.setPendingReqId(at.gv.egiz.eaaf.core.impl.utils.Random.nextProcessReferenceValue());
pendingReq.setAuthUrl("http://test.com/");
pendingReq.setTransactionId("avaasbav");
pendingReq.setPiiTransactionId(RandomStringUtils.randomAlphanumeric(10));
-
+
executionContext.put(MsEidasNodeConstants.REQ_PARAM_SELECTED_COUNTRY, "XX");
executionContext.put(EaafConstants.PROCESS_ENGINE_REQUIRES_NO_POSTAUTH_REDIRECT, true);
@@ -173,27 +202,39 @@ 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");
+
+ SimpleEidasData eidData = eidPostProcessor.postProcess(
+ convertEidasAttrToSimpleMap(response.getAttributes().getAttributeMap()));
+ MatchingTaskUtils.storeInitialEidasData(pendingReq, eidData);
+
+ matchingInfos = MatchedPersonResult.builder()
+ .bpk(RandomStringUtils.randomAlphabetic(5))
+ .givenName(eidData.getGivenName())
+ .familyName(eidData.getFamilyName())
+ .dateOfBirth(eidData.getDateOfBirth())
+ .countryCode(eidData.getCitizenCountryCode())
+ .build();
+ MatchingTaskUtils.storeFinalMatchingResult(pendingReq, matchingInfos);
+
String vsz = RandomStringUtils.randomNumeric(10);
- when(szrMock, "getStammzahlEncrypted", any(), any()).thenReturn(vsz);
- val signContentResp = new SignContentResponseType();
+ when(szrMock.getStammzahlEncrypted(any(), any())).thenReturn(vsz);
+ SignContentResponseType signContentResp = new SignContentResponseType();
final SignContentEntry signContentEntry = new SignContentEntry();
signContentEntry.setValue(RandomStringUtils.randomAlphanumeric(10));
signContentResp.getOut().add(signContentEntry);
- when(szrMock, "signContent", any(), any(), any()).thenReturn(signContentResp);
+ when(szrMock.signContent(any(), any(), any())).thenReturn(signContentResp);
String randomTestSp = RandomStringUtils.randomAlphabetic(10);
pendingReq.setRawDataToTransaction(MsEidasNodeConstants.DATA_REQUESTERID, randomTestSp);
-
+
//perform test
task.execute(pendingReq, executionContext);
- //validate state
+ //validate state
// check if pendingRequest was stored
IRequest storedPendingReq = requestStorage.getPendingRequest(pendingReq.getPendingRequestId());
Assert.assertNotNull("pendingReq not stored", storedPendingReq);
-
+
//check data in session
final AuthProcessDataWrapper authProcessData = storedPendingReq.getSessionData(AuthProcessDataWrapper.class);
Assert.assertNotNull("AuthProcessData", authProcessData);
@@ -201,16 +242,12 @@ public class CreateIdentityLinkTaskEidNewTest {
String authBlock = authProcessData.getGenericDataFromSession(MsEidasNodeConstants.AUTH_DATA_SZR_AUTHBLOCK, String.class);
Assert.assertNotNull("AuthBlock", authBlock);
-
+
Assert.assertTrue("EID process", authProcessData.isEidProcess());
Assert.assertTrue("foreigner process", authProcessData.isForeigner());
- Assert.assertEquals("EID-ISSUING_NATION", "LU",
+ Assert.assertEquals("EID-ISSUING_NATION", "LU",
authProcessData.getGenericDataFromSession(PvpAttributeDefinitions.EID_ISSUING_NATION_NAME, String.class));
- Assert.assertNotNull("LoA is null", authProcessData.getQaaLevel());
- Assert.assertEquals("LoA", response.getLevelOfAssurance(),
- authProcessData.getQaaLevel());
-
-
+
// check authblock signature
final AlgorithmConstraints constraints = new AlgorithmConstraints(ConstraintType.PERMIT,
BINDING_AUTH_ALGORITHM_WHITELIST_SIGNING.toArray(new String[BINDING_AUTH_ALGORITHM_WHITELIST_SIGNING.size()]));
@@ -218,52 +255,47 @@ public class CreateIdentityLinkTaskEidNewTest {
X509Certificate[] trustedCerts = EaafKeyStoreUtils
.getPrivateKeyAndCertificates(keyStore.getFirst(), ALIAS, PW.toCharArray(), true, "junit").getSecond();
JwsResult result = JoseUtils.validateSignature(authBlock, Arrays.asList(trustedCerts), constraints);
- Assert.assertTrue("AuthBlock not valid", result.isValid());
- JsonNode authBlockJson = mapper.readTree(result.getPayLoad());
+ Assert.assertTrue("AuthBlock not valid", result.isValid());
+ JsonNode authBlockJson = mapper.readTree(result.getPayLoad());
Assert.assertNotNull("deserialized AuthBlock", authBlockJson);
-
- Assert.assertNotNull("no piiTransactionId in pendingRequesdt",
+
+ Assert.assertNotNull("no piiTransactionId in pendingRequesdt",
storedPendingReq.getUniquePiiTransactionIdentifier());
- Assert.assertEquals("piiTransactionId", storedPendingReq.getUniquePiiTransactionIdentifier(),
+ Assert.assertEquals("piiTransactionId", storedPendingReq.getUniquePiiTransactionIdentifier(),
authBlockJson.get("piiTransactionId").asText());
- Assert.assertEquals("appId", randomTestSp, authBlockJson.get("appId").asText());
+ Assert.assertEquals("appId", randomTestSp, authBlockJson.get("appId").asText());
Assert.assertFalse("'challenge' is null", authBlockJson.get("challenge").asText().isEmpty());
Assert.assertFalse("'timestamp' is null", authBlockJson.get("timestamp").asText().isEmpty());
Assert.assertFalse("binding pubKey", authBlockJson.has("bindingPublicKey"));
+
// check vsz request
ArgumentCaptor<PersonInfoType> argument4 = ArgumentCaptor.forClass(PersonInfoType.class);
- ArgumentCaptor<Boolean> argument5 = ArgumentCaptor.forClass(Boolean.class);
+ ArgumentCaptor<Boolean> argument5 = ArgumentCaptor.forClass(Boolean.class);
verify(szrMock, times(1)).getStammzahlEncrypted(argument4.capture(), argument5.capture());
-
+
Boolean param5 = argument5.getValue();
- Assert.assertFalse("insertERnP flag", param5);
+ Assert.assertFalse("insertERnP flag", param5);
PersonInfoType person = argument4.getValue();
- 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("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());
-
+ 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.assertNull("TravelDocument", person.getTravelDocument());
+
// check bcBind singing request
ArgumentCaptor<Boolean> argument1 = ArgumentCaptor.forClass(Boolean.class);
ArgumentCaptor<List<JwsHeaderParam>> argument2 = ArgumentCaptor.forClass(List.class);
@@ -271,66 +303,67 @@ public class CreateIdentityLinkTaskEidNewTest {
verify(szrMock, times(1)).signContent(argument1.capture(), argument2.capture(), argument3.capture());
Boolean param1 = argument1.getValue();
Assert.assertFalse("addCert flag", param1);
-
+
List<JwsHeaderParam> param2 = argument2.getValue();
- Assert.assertNotNull("JWS Headers", param2);
+ Assert.assertNotNull("JWS Headers", param2);
Assert.assertFalse("JWS Headers empty", param2.isEmpty());
Assert.assertEquals("Wrong JWS header size", 1, param2.size());
Assert.assertEquals("Missing JWS header key", "urn:at.gv.eid:bindtype", param2.get(0).getKey());
Assert.assertEquals("Missing JWS header value", "urn:at.gv.eid:eidasBind", param2.get(0).getValue());
-
+
List<SignContentEntry> param3 = argument3.getValue();
Assert.assertNotNull("sign Payload", param3);
- Assert.assertEquals("wrong sign-payload size", 1, param3.size());
- Assert.assertNotNull("payload", param3.get(0).getValue().getBytes());
+ Assert.assertEquals("wrong sign-payload size", 1, param3.size());
+ Assert.assertNotNull("payload", param3.get(0).getValue().getBytes());
JsonNode bcBind = mapper.readTree(param3.get(0).getValue().getBytes());
Assert.assertNotNull("bcbind req", bcBind);
-
+
Assert.assertEquals("vsz", vsz, bcBind.get("urn:eidgvat:attributes.vsz.value").asText());
- Assert.assertEquals("eid status", "urn:eidgvat:eid.status.eidas",
+ Assert.assertEquals("eid status", "urn:eidgvat:eid.status.eidas",
bcBind.get("urn:eidgvat:attributes.eid.status").asText());
Assert.assertTrue("pubKeys", bcBind.has("urn:eidgvat:attributes.user.pubkeys"));
- Assert.assertTrue("pubKeys", bcBind.get("urn:eidgvat:attributes.user.pubkeys").isArray());
+ Assert.assertTrue("pubKeys", bcBind.get("urn:eidgvat:attributes.user.pubkeys").isArray());
Iterator<JsonNode> pubKeys = bcBind.get("urn:eidgvat:attributes.user.pubkeys").elements();
Assert.assertTrue("No PubKey", pubKeys.hasNext());
- Assert.assertEquals("Wrong pubKey",
+ Assert.assertEquals("Wrong pubKey",
"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmxcB5jnrAwGn7xjgVFv1UBUv1pluwDRFQx7x5O6rSn7pblYfwaWeKa8y"
+ "jS5BDDaZ00mhhnSlm2XByNrkg5yBGetTgBGtQVAxV5apfuAWN8TS3uSXgdZol7Khd6kraUITtnulvLe8tNaboom5P0zN6UxbJN"
+ "NVLishVp80HiRXiDbplCTUk8b5cYtmivdb0+5JBTa7L5N/anRVnHHoJCXgNPTouO8daUHZbG1mPk0HgqD8rhZ+OBzE+APKH9No"
- + "agedSrGRDLdIgZxkrg0mxmfsZQIi2wdJSi3y0PAjEps/s4j0nmw9bPRgCMNLBqqjxtN5JKC8E1yyLm7YefXv/nPaMwIDAQAB",
+ + "agedSrGRDLdIgZxkrg0mxmfsZQIi2wdJSi3y0PAjEps/s4j0nmw9bPRgCMNLBqqjxtN5JKC8E1yyLm7YefXv/nPaMwIDAQAB",
pubKeys.next().asText());
Assert.assertFalse("More than one PubKey", pubKeys.hasNext());
-
+
}
@Test
- public void successfulProcessWithStandardInfosWithoutIdl() throws Exception {
+ public void successfulProcessWithDataFromMatching() throws Exception {
//initialize test
- basicConfig.putConfigValue("eidas.ms.auth.eIDAS.szrclient.workarounds.use.getidentitylink.for.ida", "false");
-
String vsz = RandomStringUtils.randomNumeric(10);
- when(szrMock, "getStammzahlEncrypted", any(), any()).thenReturn(vsz);
- val signContentResp = new SignContentResponseType();
+ when(szrMock.getStammzahlEncrypted(any(), any())).thenReturn(vsz);
+ SignContentResponseType signContentResp = new SignContentResponseType();
final SignContentEntry signContentEntry = new SignContentEntry();
signContentEntry.setValue(RandomStringUtils.randomAlphanumeric(10));
signContentResp.getOut().add(signContentEntry);
- when(szrMock, "signContent", any(), any(), any()).thenReturn(signContentResp);
-
+
+ when(szrMock.signContent(any(), any(), any())).thenReturn(signContentResp);
+
String randomTestSp = RandomStringUtils.randomAlphabetic(10);
String bindingPubKey = RandomStringUtils.randomAlphabetic(10);
pendingReq.setRawDataToTransaction(MsEidasNodeConstants.DATA_REQUESTERID, randomTestSp);
pendingReq.setRawDataToTransaction(MsEidasNodeConstants.EID_BINDING_PUBLIC_KEY_NAME, bindingPubKey);
+
//perform test
task.execute(pendingReq, executionContext);
-
- //validate state
+
+
+ //validate state
// check if pendingRequest was stored
IRequest storedPendingReq = requestStorage.getPendingRequest(pendingReq.getPendingRequestId());
Assert.assertNotNull("pendingReq not stored", storedPendingReq);
-
+
//check data in session
final AuthProcessDataWrapper authProcessData = storedPendingReq.getSessionData(AuthProcessDataWrapper.class);
Assert.assertNotNull("AuthProcessData", authProcessData);
@@ -339,6 +372,7 @@ public class CreateIdentityLinkTaskEidNewTest {
// check authblock signature
String authBlock = authProcessData.getGenericDataFromSession(MsEidasNodeConstants.AUTH_DATA_SZR_AUTHBLOCK, String.class);
Assert.assertNotNull("AuthBlock", authBlock);
+
final AlgorithmConstraints constraints = new AlgorithmConstraints(ConstraintType.PERMIT,
BINDING_AUTH_ALGORITHM_WHITELIST_SIGNING.toArray(new String[BINDING_AUTH_ALGORITHM_WHITELIST_SIGNING.size()]));
Pair<KeyStore, Provider> keyStore = getKeyStore();
@@ -361,122 +395,108 @@ public class CreateIdentityLinkTaskEidNewTest {
Assert.assertTrue("EID process", authProcessData.isEidProcess());
Assert.assertTrue("foreigner process", authProcessData.isForeigner());
- Assert.assertEquals("EID-ISSUING_NATION", "LU",
+ Assert.assertEquals("EID-ISSUING_NATION", "LU",
authProcessData.getGenericDataFromSession(PvpAttributeDefinitions.EID_ISSUING_NATION_NAME, String.class));
- Assert.assertNotNull("LoA is null", authProcessData.getQaaLevel());
- Assert.assertEquals("LoA", response.getLevelOfAssurance(),
- authProcessData.getQaaLevel());
-
+
// check vsz request
ArgumentCaptor<PersonInfoType> argument4 = ArgumentCaptor.forClass(PersonInfoType.class);
- ArgumentCaptor<Boolean> argument5 = ArgumentCaptor.forClass(Boolean.class);
+ 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);
+ Assert.assertFalse("insertERnP flag", param5);
PersonInfoType person = argument4.getValue();
- Assert.assertEquals("FamilyName",
- response.getAttributes().getAttributeValuesByFriendlyName("FamilyName").getFirstValue(
- response.getAttributes().getDefinitionsByFriendlyName("FamilyName").iterator().next()),
+ Assert.assertEquals("FamilyName",
+ matchingInfos.getFamilyName(),
person.getPerson().getName().getFamilyName());
- Assert.assertEquals("GivenName",
- response.getAttributes().getAttributeValuesByFriendlyName("FirstName").getFirstValue(
- response.getAttributes().getDefinitionsByFriendlyName("FirstName").iterator().next()),
+ Assert.assertEquals("GivenName",
+ matchingInfos.getGivenName(),
person.getPerson().getName().getGivenName());
- Assert.assertEquals("DateOfBirth",
- response.getAttributes().getAttributeValuesByFriendlyName("DateOfBirth").getFirstValue(
- response.getAttributes().getDefinitionsByFriendlyName("DateOfBirth").iterator().next())
- .toString().split("T")[0],
+ Assert.assertEquals("DateOfBirth",
+ matchingInfos.getDateOfBirth(),
person.getPerson().getDateOfBirth());
+ Assert.assertEquals("bPK",
+ matchingInfos.getBpk(),
+ person.getPerson().getIdentification().getValue());
+ Assert.assertEquals("bPKType",
+ EaafConstants.URN_PREFIX_CDID + "ZP",
+ person.getPerson().getIdentification().getType());
- 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());
+ Assert.assertNull("PlaceOfBirth", person.getPerson().getPlaceOfBirth());
+ Assert.assertNull("BirthName", person.getPerson().getAlternativeName());
+
}
@Test
public void successfulProcessWithStandardInfos() throws Exception {
- //initialize test
- setSzrResponseIdentityLink("/data/szr/szr_resp_valid_1.xml");
+ //initialize test
String vsz = RandomStringUtils.randomNumeric(10);
- when(szrMock, "getStammzahlEncrypted", any(), any()).thenReturn(vsz);
+ when(szrMock.getStammzahlEncrypted(any(), any())).thenReturn(vsz);
val signContentResp = new SignContentResponseType();
final SignContentEntry signContentEntry = new SignContentEntry();
signContentEntry.setValue(RandomStringUtils.randomAlphanumeric(10));
signContentResp.getOut().add(signContentEntry);
- when(szrMock, "signContent", any(), any(), any()).thenReturn(signContentResp);
-
+ when(szrMock.signContent(any(), any(), any())).thenReturn(signContentResp);
+
String randomTestSp = RandomStringUtils.randomAlphabetic(10);
- String bindingPubKey = RandomStringUtils.randomAlphabetic(10);
pendingReq.setRawDataToTransaction(MsEidasNodeConstants.DATA_REQUESTERID, randomTestSp);
- pendingReq.setRawDataToTransaction(MsEidasNodeConstants.EID_BINDING_PUBLIC_KEY_NAME, bindingPubKey);
-
+
//perform test
task.execute(pendingReq, executionContext);
- //validate state
+ //validate state
// check if pendingRequest was stored
IRequest storedPendingReq = requestStorage.getPendingRequest(pendingReq.getPendingRequestId());
Assert.assertNotNull("pendingReq not stored", storedPendingReq);
-
+
//check data in session
final AuthProcessDataWrapper authProcessData = storedPendingReq.getSessionData(AuthProcessDataWrapper.class);
Assert.assertNotNull("AuthProcessData", authProcessData);
Assert.assertNotNull("eidasBind", authProcessData.getGenericDataFromSession(MsEidasNodeConstants.AUTH_DATA_EIDAS_BIND, String.class));
- // check authblock signature
String authBlock = authProcessData.getGenericDataFromSession(MsEidasNodeConstants.AUTH_DATA_SZR_AUTHBLOCK, String.class);
Assert.assertNotNull("AuthBlock", authBlock);
- final AlgorithmConstraints constraints = new AlgorithmConstraints(ConstraintType.PERMIT,
- BINDING_AUTH_ALGORITHM_WHITELIST_SIGNING.toArray(new String[BINDING_AUTH_ALGORITHM_WHITELIST_SIGNING.size()]));
- Pair<KeyStore, Provider> keyStore = getKeyStore();
- X509Certificate[] trustedCerts = EaafKeyStoreUtils
- .getPrivateKeyAndCertificates(keyStore.getFirst(), ALIAS, PW.toCharArray(), true, "junit").getSecond();
- JwsResult result = JoseUtils.validateSignature(authBlock, Arrays.asList(trustedCerts), constraints);
- Assert.assertTrue("AuthBlock not valid", result.isValid());
- JsonNode authBlockJson = mapper.readTree(result.getPayLoad());
- Assert.assertNotNull("deserialized AuthBlock", authBlockJson);
-
- Assert.assertNotNull("no piiTransactionId in pendingRequesdt",
- storedPendingReq.getUniquePiiTransactionIdentifier());
- Assert.assertEquals("piiTransactionId", storedPendingReq.getUniquePiiTransactionIdentifier(),
- authBlockJson.get("piiTransactionId").asText());
- Assert.assertEquals("appId", randomTestSp, authBlockJson.get("appId").asText());
- Assert.assertFalse("'challenge' is null", authBlockJson.get("challenge").asText().isEmpty());
- Assert.assertFalse("'timestamp' is null", authBlockJson.get("timestamp").asText().isEmpty());
- Assert.assertTrue("binding pubKey", authBlockJson.has("bindingPublicKey"));
- Assert.assertEquals("binding PubKey", bindingPubKey, authBlockJson.get("bindingPublicKey").asText());
-
+
Assert.assertTrue("EID process", authProcessData.isEidProcess());
Assert.assertTrue("foreigner process", authProcessData.isForeigner());
- Assert.assertEquals("EID-ISSUING_NATION", "LU",
+ Assert.assertEquals("EID-ISSUING_NATION", "LU",
authProcessData.getGenericDataFromSession(PvpAttributeDefinitions.EID_ISSUING_NATION_NAME, String.class));
- Assert.assertNotNull("LoA is null", authProcessData.getQaaLevel());
- Assert.assertEquals("LoA", response.getLevelOfAssurance(),
- authProcessData.getQaaLevel());
-
+
// check vsz request
ArgumentCaptor<PersonInfoType> argument4 = ArgumentCaptor.forClass(PersonInfoType.class);
- ArgumentCaptor<Boolean> argument5 = ArgumentCaptor.forClass(Boolean.class);
+ ArgumentCaptor<Boolean> argument5 = ArgumentCaptor.forClass(Boolean.class);
verify(szrMock, times(1)).getStammzahlEncrypted(argument4.capture(), argument5.capture());
-
+
+ Boolean param5 = argument5.getValue();
+ 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.assertNull("PlaceOfBirth", person.getPerson().getPlaceOfBirth());
+ Assert.assertNull("BirthName", person.getPerson().getAlternativeName());
+ Assert.assertNull("TravelDocument", person.getTravelDocument());
+
}
@Test
public void getStammzahlEncryptedExceptionTest() throws Exception {
try {
- setSzrResponseIdentityLink("/data/szr/szr_resp_valid_1.xml");
- when(szrMock, "getStammzahlEncrypted", any(), any()).thenReturn(null);
+ when(szrMock.getStammzahlEncrypted(any(), any())).thenReturn(null);
task.execute(pendingReq, executionContext);
+
} catch (TaskExecutionException e) {
Assert.assertEquals("Incorrect exception thrown", e.getMessage(),
"IdentityLink generation for foreign person " + "FAILED.");
@@ -489,10 +509,10 @@ 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);
+ when(szrMock.getStammzahlEncrypted(any(), any())).thenReturn(RandomStringUtils.randomNumeric(10));
+ when(szrMock.signContent(any(), any(), any())).thenReturn(null);
task.execute(pendingReq, executionContext);
+
} catch (TaskExecutionException e) {
Assert.assertEquals("Incorrect exception thrown", e.getMessage(),
"IdentityLink generation for foreign person " + "FAILED.");
@@ -507,12 +527,12 @@ public class CreateIdentityLinkTaskEidNewTest {
//initialize test
setSzrResponseIdentityLink("/data/szr/szr_resp_valid_1.xml");
String vsz = RandomStringUtils.randomNumeric(10);
- when(szrMock, "getStammzahlEncrypted", any(), any()).thenReturn(vsz);
+ when(szrMock.getStammzahlEncrypted(any(), any())).thenReturn(vsz);
val signContentResp = new SignContentResponseType();
final SignContentEntry signContentEntry = new SignContentEntry();
signContentEntry.setValue(RandomStringUtils.randomAlphanumeric(10));
signContentResp.getOut().add(signContentEntry);
- when(szrMock, "signContent", any(), any(), any()).thenReturn(signContentResp);
+ when(szrMock.signContent(any(), any(), any())).thenReturn(signContentResp);
String randomTestSp = RandomStringUtils.randomAlphabetic(10);
String bindingPubKey = RandomStringUtils.randomAlphabetic(10);
@@ -596,7 +616,7 @@ public class CreateIdentityLinkTaskEidNewTest {
Constants.eIDAS_ATTR_PLACEOFBIRTH).first();
final AttributeDefinition attributeDef6 = attrRegistry.getCoreAttributeRegistry().getByFriendlyName(
Constants.eIDAS_ATTR_BIRTHNAME).first();
-
+
final Builder attributeMap = ImmutableAttributeMap.builder();
attributeMap.put(attributeDef, "LU/AT/" + RandomStringUtils.randomNumeric(64));
attributeMap.put(attributeDef2, RandomStringUtils.randomAlphabetic(10));
@@ -611,7 +631,7 @@ public class CreateIdentityLinkTaskEidNewTest {
}
attributeMap.put(attributeDef6, RandomStringUtils.randomAlphabetic(10));
-
+
}
val b = new AuthenticationResponse.Builder();
@@ -625,4 +645,53 @@ public class CreateIdentityLinkTaskEidNewTest {
.attributes(attributeMap.build())
.build();
}
+
+ private Map<String, Object> convertEidasAttrToSimpleMap(
+ ImmutableMap<AttributeDefinition<?>, ImmutableSet<? extends AttributeValue<?>>> attributeMap) {
+ final Map<String, Object> result = new HashMap<>();
+ for (final AttributeDefinition<?> el : attributeMap.keySet()) {
+ final Class<?> parameterizedType = el.getParameterizedType();
+ if (DateTime.class.equals(parameterizedType)) {
+ convertDateTime(attributeMap, result, el);
+ } else if (PostalAddress.class.equals(parameterizedType)) {
+ convertPostalAddress(attributeMap, result, el);
+ } else {
+ convertString(attributeMap, result, el);
+ }
+ }
+ return result;
+ }
+
+ private void convertString(ImmutableMap<AttributeDefinition<?>,
+ ImmutableSet<? extends AttributeValue<?>>> attributeMap,
+ Map<String, Object> result, AttributeDefinition<?> el) {
+ final List<String> natPersonIdObj = EidasResponseUtils
+ .translateStringListAttribute(el, attributeMap.get(el));
+ final String stringAttr = natPersonIdObj.get(0);
+ if (StringUtils.isNotEmpty(stringAttr)) {
+ result.put(el.getFriendlyName(), stringAttr);
+
+ }
+ }
+
+ private void convertPostalAddress(ImmutableMap<AttributeDefinition<?>,
+ ImmutableSet<? extends AttributeValue<?>>> attributeMap,
+ Map<String, Object> result, AttributeDefinition<?> el) {
+ final PostalAddress addressAttribute = EidasResponseUtils
+ .translateAddressAttribute(el, attributeMap.get(el).asList());
+ if (addressAttribute != null) {
+ result.put(el.getFriendlyName(), addressAttribute);
+
+ }
+ }
+
+ private void convertDateTime(ImmutableMap<AttributeDefinition<?>,
+ ImmutableSet<? extends AttributeValue<?>>> attributeMap,
+ Map<String, Object> result, AttributeDefinition<?> el) {
+ final DateTime attribute = EidasResponseUtils.translateDateAttribute(el, attributeMap.get(el).asList());
+ if (attribute != null) {
+ result.put(el.getFriendlyName(), attribute);
+
+ }
+ }
}
diff --git a/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/CreateIdentityLinkTaskTest.java b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/CreateIdentityLinkTaskTest.java
index a9d2f332..5c528532 100644
--- a/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/CreateIdentityLinkTaskTest.java
+++ b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/CreateIdentityLinkTaskTest.java
@@ -5,20 +5,22 @@ import static org.mockito.ArgumentMatchers.any;
import java.net.URISyntaxException;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
-import javax.annotation.Nonnull;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
import org.apache.commons.lang3.RandomStringUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.jetbrains.annotations.NotNull;
+import org.joda.time.DateTime;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
-import org.powermock.core.classloader.annotations.PrepareForTest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.mock.web.MockHttpServletResponse;
@@ -29,12 +31,21 @@ import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import com.github.skjolber.mockito.soap.SoapServiceRule;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
import at.asitplus.eidas.specific.core.MsEidasNodeConstants;
import at.asitplus.eidas.specific.core.test.config.dummy.MsConnectorDummyConfigMap;
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.SimpleEidasData;
+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.service.EidasAttributeRegistry;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.service.ICcSpecificEidProcessingService;
import at.asitplus.eidas.specific.modules.auth.eidas.v2.tasks.CreateIdentityLinkTask;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.utils.EidasResponseUtils;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.utils.MatchingTaskUtils;
import at.gv.egiz.eaaf.core.api.IRequest;
import at.gv.egiz.eaaf.core.api.IRequestStorage;
import at.gv.egiz.eaaf.core.api.data.EaafConfigConstants;
@@ -51,7 +62,9 @@ import at.gv.egiz.eaaf.core.impl.idp.module.test.TestRequestImpl;
import at.gv.egiz.eaaf.core.impl.idp.process.ExecutionContextImpl;
import at.gv.egiz.eaaf.core.impl.utils.Random;
import eu.eidas.auth.commons.attribute.AttributeDefinition;
+import eu.eidas.auth.commons.attribute.AttributeValue;
import eu.eidas.auth.commons.attribute.ImmutableAttributeMap;
+import eu.eidas.auth.commons.protocol.eidas.impl.PostalAddress;
import eu.eidas.auth.commons.protocol.impl.AuthenticationResponse;
import lombok.val;
import szrservices.GetBPK;
@@ -62,7 +75,6 @@ import szrservices.SZR;
import szrservices.SZRException_Exception;
@RunWith(SpringJUnit4ClassRunner.class)
-@PrepareForTest(CreateIdentityLinkTask.class)
@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_CLASS)
@ContextConfiguration(locations = {
"/SpringTest-context_tasks_test.xml",
@@ -81,7 +93,10 @@ public class CreateIdentityLinkTaskTest {
EaafKeyStoreFactory keyStoreFactory;
@Autowired
- private IRequestStorage requestStorage;
+ ICcSpecificEidProcessingService eidPostProcessor;
+
+ @Autowired
+ IRequestStorage requestStorage;
final ExecutionContext executionContext = new ExecutionContextImpl();
private MockHttpServletRequest httpReq;
@@ -89,18 +104,21 @@ public class CreateIdentityLinkTaskTest {
private TestRequestImpl pendingReq;
private DummySpConfiguration oaParam;
private SZR szrMock;
-
+
+ private MatchedPersonResult matchingInfos;
private AuthenticationResponse response;
private Map<String, String> spConfig;
-
+
@Rule
public final SoapServiceRule soap = SoapServiceRule.newInstance();
/**
* jUnit test set-up.
+ * @throws EidasAttributeException
+ * @throws EidPostProcessingException
*/
@Before
- public void setUp() throws EaafStorageException, URISyntaxException {
+ public void setUp() throws EaafStorageException, URISyntaxException, EidPostProcessingException, EidasAttributeException {
httpReq = new MockHttpServletRequest("POST", "https://localhost/authhandler");
httpResp = new MockHttpServletResponse();
@@ -110,7 +128,7 @@ public class CreateIdentityLinkTaskTest {
basicConfig.putConfigValue("eidas.ms.auth.eIDAS.szrclient.debug.useDummySolution", "false");
basicConfig.putConfigValue("eidas.ms.auth.eIDAS.szrclient.revisionlog.eidmapping.active", "false");
basicConfig.putConfigValue("eidas.ms.auth.eIDAS.szrclient.params.useSZRForbPKCalculation", "false");
-
+
spConfig = new HashMap<>();
spConfig.put(EaafConfigConstants.SERVICE_UNIQUEIDENTIFIER, "testSp");
spConfig.put("target", "urn:publicid:gv.at:cdid+XX");
@@ -119,42 +137,55 @@ public class CreateIdentityLinkTaskTest {
pendingReq = new TestRequestImpl();
response = buildDummyAuthResponse();
-
+ final Map<String, Object> eidasAttributes = convertEidasAttrToSimpleMap(
+ response.getAttributes().getAttributeMap());
+ final SimpleEidasData eidData = eidPostProcessor.postProcess(eidasAttributes);
+ MatchingTaskUtils.storeInitialEidasData(pendingReq, eidData);
pendingReq.getSessionData(AuthProcessDataWrapper.class)
.setGenericDataToSession(Constants.DATA_FULL_EIDAS_RESPONSE, response);
+
+ matchingInfos = MatchedPersonResult.builder()
+ .bpk(RandomStringUtils.randomAlphabetic(5))
+ .givenName(eidData.getGivenName())
+ .familyName(eidData.getFamilyName())
+ .dateOfBirth(eidData.getDateOfBirth())
+ .countryCode(eidData.getCitizenCountryCode())
+ .build();
+ MatchingTaskUtils.storeFinalMatchingResult(pendingReq, matchingInfos);
+
pendingReq.setSpConfig(oaParam);
pendingReq.setPendingReqId(at.gv.egiz.eaaf.core.impl.utils.Random.nextProcessReferenceValue());
pendingReq.setAuthUrl("http://test.com/");
pendingReq.setTransactionId("avaasbav");
pendingReq.setPiiTransactionId(RandomStringUtils.randomAlphanumeric(10));
-
+
executionContext.put(MsEidasNodeConstants.REQ_PARAM_SELECTED_COUNTRY, "XX");
executionContext.put(EaafConstants.PROCESS_ENGINE_REQUIRES_NO_POSTAUTH_REDIRECT, true);
szrMock = soap.mock(SZR.class, "http://localhost:1234/demoszr");
}
-
+
@Test
public void buildIdentityLink() throws Exception {
- //initialize test
+ //initialize test
setSzrResponseIdentityLink("/data/szr/szr_resp_valid_1.xml");
-
+
String randomTestSp = RandomStringUtils.randomAlphabetic(10);
pendingReq.setRawDataToTransaction(MsEidasNodeConstants.DATA_REQUESTERID, randomTestSp);
-
+
basicConfig.putConfigValue("eidas.ms.auth.eIDAS.szrclient.debug.useDummySolution", "false");
-
-
+
+
//perform test
task.execute(pendingReq, executionContext);
-
- //validate state
+
+ //validate state
// check if pendingRequest was stored
IRequest storedPendingReq = requestStorage.getPendingRequest(pendingReq.getPendingRequestId());
Assert.assertNotNull("pendingReq not stored", storedPendingReq);
-
+
//check data in session
final AuthProcessDataWrapper authProcessData = storedPendingReq.getSessionData(AuthProcessDataWrapper.class);
Assert.assertNotNull("AuthProcessData", authProcessData);
@@ -162,15 +193,12 @@ public class CreateIdentityLinkTaskTest {
String authBlock = authProcessData.getGenericDataFromSession(MsEidasNodeConstants.AUTH_DATA_SZR_AUTHBLOCK, String.class);
Assert.assertNull("AuthBlock", authBlock);
-
+
Assert.assertFalse("EID process", authProcessData.isEidProcess());
Assert.assertTrue("foreigner process", authProcessData.isForeigner());
- Assert.assertEquals("EID-ISSUING_NATION", "LU",
+ Assert.assertEquals("EID-ISSUING_NATION", "LU",
authProcessData.getGenericDataFromSession(PvpAttributeDefinitions.EID_ISSUING_NATION_NAME, String.class));
- Assert.assertNotNull("LoA is null", authProcessData.getQaaLevel());
- Assert.assertEquals("LoA", response.getLevelOfAssurance(),
- authProcessData.getQaaLevel());
-
+
Assert.assertNotNull("IDL", authProcessData.getIdentityLink());
checkElement("Mustermann", authProcessData.getIdentityLink().getFamilyName());
checkElement("Hans", authProcessData.getIdentityLink().getGivenName());
@@ -178,12 +206,69 @@ public class CreateIdentityLinkTaskTest {
checkElement("urn:publicid:gv.at:baseid", authProcessData.getIdentityLink().getIdentificationType());
checkElement("k+zDM1BVpN1WJO4x7ZQ3ng==", authProcessData.getIdentityLink().getIdentificationValue());
Assert.assertNotNull(authProcessData.getIdentityLink().getSerializedSamlAssertion());
- Assert.assertNotNull(authProcessData.getIdentityLink().getSamlAssertion());
-
+ Assert.assertNotNull(authProcessData.getIdentityLink().getSamlAssertion());
+
Assert.assertNotNull("no bPK", authProcessData.getGenericDataFromSession(PvpAttributeDefinitions.BPK_NAME));
- Assert.assertEquals("wrong bPK", "XX:FkXtOaSSeR3elyL9KLLvijIYDMU=",
+ Assert.assertEquals("wrong bPK", "XX:FkXtOaSSeR3elyL9KLLvijIYDMU=",
authProcessData.getGenericDataFromSession(PvpAttributeDefinitions.BPK_NAME));
+
+ }
+
+ @Test
+ public void successfulProcessWithDataFromMatching() throws Exception {
+ //initialize test
+ setSzrResponseIdentityLink("/data/szr/szr_resp_valid_1.xml");
+
+ String randomTestSp = RandomStringUtils.randomAlphabetic(10);
+ pendingReq.setRawDataToTransaction(MsEidasNodeConstants.DATA_REQUESTERID, randomTestSp);
+
+ basicConfig.putConfigValue("eidas.ms.auth.eIDAS.szrclient.debug.useDummySolution", "false");
+
+ MatchedPersonResult matchingInfos = MatchedPersonResult.builder()
+ .bpk(RandomStringUtils.randomAlphabetic(5))
+ .givenName(RandomStringUtils.randomAlphabetic(5))
+ .familyName(RandomStringUtils.randomAlphabetic(5))
+ .dateOfBirth(RandomStringUtils.randomAlphabetic(5))
+ .countryCode(RandomStringUtils.randomAlphabetic(2).toUpperCase())
+ .build();
+
+ MatchingTaskUtils.storeFinalMatchingResult(pendingReq, matchingInfos);
+ //perform test
+ task.execute(pendingReq, executionContext);
+
+
+ //validate state
+ // check if pendingRequest was stored
+ IRequest storedPendingReq = requestStorage.getPendingRequest(pendingReq.getPendingRequestId());
+ Assert.assertNotNull("pendingReq not stored", storedPendingReq);
+
+ //check data in session
+ final AuthProcessDataWrapper authProcessData = storedPendingReq.getSessionData(AuthProcessDataWrapper.class);
+ Assert.assertNotNull("AuthProcessData", authProcessData);
+ Assert.assertNull("eidasBind", authProcessData.getGenericDataFromSession(MsEidasNodeConstants.AUTH_DATA_EIDAS_BIND, String.class));
+
+ String authBlock = authProcessData.getGenericDataFromSession(MsEidasNodeConstants.AUTH_DATA_SZR_AUTHBLOCK, String.class);
+ Assert.assertNull("AuthBlock", authBlock);
+
+ Assert.assertFalse("EID process", authProcessData.isEidProcess());
+ Assert.assertTrue("foreigner process", authProcessData.isForeigner());
+ Assert.assertEquals("EID-ISSUING_NATION", "LU",
+ authProcessData.getGenericDataFromSession(PvpAttributeDefinitions.EID_ISSUING_NATION_NAME, String.class));
+
+ Assert.assertNotNull("IDL", authProcessData.getIdentityLink());
+ checkElement("Mustermann", authProcessData.getIdentityLink().getFamilyName());
+ checkElement("Hans", authProcessData.getIdentityLink().getGivenName());
+ checkElement("1989-05-05", authProcessData.getIdentityLink().getDateOfBirth());
+ checkElement("urn:publicid:gv.at:baseid", authProcessData.getIdentityLink().getIdentificationType());
+ checkElement("k+zDM1BVpN1WJO4x7ZQ3ng==", authProcessData.getIdentityLink().getIdentificationValue());
+ Assert.assertNotNull(authProcessData.getIdentityLink().getSerializedSamlAssertion());
+ Assert.assertNotNull(authProcessData.getIdentityLink().getSamlAssertion());
+
+ Assert.assertNotNull("no bPK", authProcessData.getGenericDataFromSession(PvpAttributeDefinitions.BPK_NAME));
+ Assert.assertEquals("wrong bPK", "XX:FkXtOaSSeR3elyL9KLLvijIYDMU=",
+ authProcessData.getGenericDataFromSession(PvpAttributeDefinitions.BPK_NAME));
+
}
@Test
@@ -191,22 +276,22 @@ public class CreateIdentityLinkTaskTest {
//initialize test
setSzrResponseIdentityLink("/data/szr/szr_resp_valid_1.xml");
spConfig.put("target", EaafConstants.URN_PREFIX_WBPK + "FN+123456i");
-
+
String randomTestSp = RandomStringUtils.randomAlphabetic(10);
pendingReq.setRawDataToTransaction(MsEidasNodeConstants.DATA_REQUESTERID, randomTestSp);
-
+
basicConfig.putConfigValue("eidas.ms.auth.eIDAS.szrclient.debug.useDummySolution", "false");
basicConfig.putConfigValue("eidas.ms.auth.eIDAS.szrclient.revisionlog.eidmapping.active", "true");
-
+
//perform test
task.execute(pendingReq, executionContext);
-
- //validate state
+
+ //validate state
// check if pendingRequest was stored
IRequest storedPendingReq = requestStorage.getPendingRequest(pendingReq.getPendingRequestId());
Assert.assertNotNull("pendingReq not stored", storedPendingReq);
-
+
//check data in session
final AuthProcessDataWrapper authProcessData = storedPendingReq.getSessionData(AuthProcessDataWrapper.class);
Assert.assertNotNull("AuthProcessData", authProcessData);
@@ -214,42 +299,39 @@ public class CreateIdentityLinkTaskTest {
String authBlock = authProcessData.getGenericDataFromSession(MsEidasNodeConstants.AUTH_DATA_SZR_AUTHBLOCK, String.class);
Assert.assertNull("AuthBlock", authBlock);
-
+
Assert.assertFalse("EID process", authProcessData.isEidProcess());
Assert.assertTrue("foreigner process", authProcessData.isForeigner());
- Assert.assertEquals("EID-ISSUING_NATION", "LU",
+ Assert.assertEquals("EID-ISSUING_NATION", "LU",
authProcessData.getGenericDataFromSession(PvpAttributeDefinitions.EID_ISSUING_NATION_NAME, String.class));
- Assert.assertNotNull("LoA is null", authProcessData.getQaaLevel());
- Assert.assertEquals("LoA", response.getLevelOfAssurance(),
- authProcessData.getQaaLevel());
-
+
Assert.assertNotNull("no bPK", authProcessData.getGenericDataFromSession(PvpAttributeDefinitions.BPK_NAME));
- Assert.assertEquals("wrong bPK", "FN+123456i:D26vJncPS2W790RH/LP04V+vNOQ=",
+ Assert.assertEquals("wrong bPK", "FN+123456i:D26vJncPS2W790RH/LP04V+vNOQ=",
authProcessData.getGenericDataFromSession(PvpAttributeDefinitions.BPK_NAME));
-
+
}
-
+
@Test
public void buildIdentityLinkWithEidasBpk() throws Exception {
//initialize test
setSzrResponseIdentityLink("/data/szr/szr_resp_valid_2.xml");
spConfig.put("target", EaafConstants.URN_PREFIX_EIDAS + "AT+EU");
-
+
String randomTestSp = RandomStringUtils.randomAlphabetic(10);
pendingReq.setRawDataToTransaction(MsEidasNodeConstants.DATA_REQUESTERID, randomTestSp);
-
+
basicConfig.putConfigValue("eidas.ms.auth.eIDAS.szrclient.debug.useDummySolution", "false");
basicConfig.putConfigValue("eidas.ms.auth.eIDAS.szrclient.revisionlog.eidmapping.active", "true");
-
+
//perform test
task.execute(pendingReq, executionContext);
-
- //validate state
+
+ //validate state
// check if pendingRequest was stored
IRequest storedPendingReq = requestStorage.getPendingRequest(pendingReq.getPendingRequestId());
Assert.assertNotNull("pendingReq not stored", storedPendingReq);
-
+
//check data in session
final AuthProcessDataWrapper authProcessData = storedPendingReq.getSessionData(AuthProcessDataWrapper.class);
Assert.assertNotNull("AuthProcessData", authProcessData);
@@ -257,80 +339,77 @@ public class CreateIdentityLinkTaskTest {
String authBlock = authProcessData.getGenericDataFromSession(MsEidasNodeConstants.AUTH_DATA_SZR_AUTHBLOCK, String.class);
Assert.assertNull("AuthBlock", authBlock);
-
+
Assert.assertFalse("EID process", authProcessData.isEidProcess());
Assert.assertTrue("foreigner process", authProcessData.isForeigner());
- Assert.assertEquals("EID-ISSUING_NATION", "LU",
+ Assert.assertEquals("EID-ISSUING_NATION", "LU",
authProcessData.getGenericDataFromSession(PvpAttributeDefinitions.EID_ISSUING_NATION_NAME, String.class));
- Assert.assertNotNull("LoA is null", authProcessData.getQaaLevel());
- Assert.assertEquals("LoA", response.getLevelOfAssurance(),
- authProcessData.getQaaLevel());
-
+
Assert.assertNotNull("IDL", authProcessData.getIdentityLink());
checkElement("Musterfrau", authProcessData.getIdentityLink().getFamilyName());
checkElement("Martina", authProcessData.getIdentityLink().getGivenName());
checkElement("1991-04-15", authProcessData.getIdentityLink().getDateOfBirth());
checkElement("urn:publicid:gv.at:baseid", authProcessData.getIdentityLink().getIdentificationType());
checkElement("k+zDM1BV1312312332x7ZQ3ng==", authProcessData.getIdentityLink().getIdentificationValue());
-
+
Assert.assertNotNull("no bPK", authProcessData.getGenericDataFromSession(PvpAttributeDefinitions.BPK_NAME));
- Assert.assertEquals("wrong bPK", "AT+EU:AT/EU/1+wqDl059/02Ptny0g+LyuLDJV0=",
+ Assert.assertEquals("wrong bPK", "AT+EU:AT/EU/1+wqDl059/02Ptny0g+LyuLDJV0=",
authProcessData.getGenericDataFromSession(PvpAttributeDefinitions.BPK_NAME));
-
+
}
-
+
@Test
public void buildIdentityLinkWithUnknownBpk() throws Exception {
//initialize test
setSzrResponseIdentityLink("/data/szr/szr_resp_valid_1.xml");
spConfig.put("target", "urn:notextis:1234");
-
+
String randomTestSp = RandomStringUtils.randomAlphabetic(10);
pendingReq.setRawDataToTransaction(MsEidasNodeConstants.DATA_REQUESTERID, randomTestSp);
-
+
basicConfig.putConfigValue("eidas.ms.auth.eIDAS.szrclient.debug.useDummySolution", "false");
basicConfig.putConfigValue("eidas.ms.auth.eIDAS.szrclient.revisionlog.eidmapping.active", "true");
-
+
try {
task.execute(pendingReq, executionContext);
Assert.fail("unknown bPKType not detected");
-
+
} catch (TaskExecutionException e) {
- Assert.assertEquals("ErrorId", "builder.33",
+ Assert.assertEquals("ErrorId", "builder.33",
((EaafException) e.getOriginalException()).getErrorId());
Assert.assertEquals("wrong parameter size", 1, ((EaafException) e.getOriginalException())
.getParams().length);
- }
+ }
}
-
+
@Test
public void noBpkResult() throws Exception {
//initialize test
setSzrResponseIdentityLink("/data/szr/szr_resp_valid_1.xml");
GetBPKResponse getBpkResp = new GetBPKResponse();
org.mockito.Mockito.when(szrMock.getBPK(any(GetBPK.class))).thenReturn(getBpkResp );
-
+
spConfig.put("target", "urn:notextis:1234");
-
+
String randomTestSp = RandomStringUtils.randomAlphabetic(10);
pendingReq.setRawDataToTransaction(MsEidasNodeConstants.DATA_REQUESTERID, randomTestSp);
-
+
basicConfig.putConfigValue("eidas.ms.auth.eIDAS.szrclient.debug.useDummySolution", "false");
basicConfig.putConfigValue("eidas.ms.auth.eIDAS.szrclient.revisionlog.eidmapping.active", "true");
basicConfig.putConfigValue("eidas.ms.auth.eIDAS.szrclient.params.useSZRForbPKCalculation", "true");
-
+
try {
task.execute(pendingReq, executionContext);
Assert.fail("unknown bPKType not detected");
-
+
} catch (TaskExecutionException e) {
- Assert.assertEquals("ErrorId", "ernb.01",
+ Assert.assertEquals("ErrorId", "ernb.01",
((EaafException) e.getOriginalException()).getErrorId());
-
- }
+
+ }
}
-
+
@Test
public void bPKFromSzr() throws Exception {
//initialize test
@@ -339,25 +418,25 @@ public class CreateIdentityLinkTaskTest {
GetBPKResponse getBpkResp = new GetBPKResponse();
getBpkResp.getGetBPKReturn().add(bpk);
org.mockito.Mockito.when(szrMock.getBPK(any(GetBPK.class))).thenReturn(getBpkResp );
-
+
spConfig.put("target", "urn:notextis:1234");
-
+
String randomTestSp = RandomStringUtils.randomAlphabetic(10);
pendingReq.setRawDataToTransaction(MsEidasNodeConstants.DATA_REQUESTERID, randomTestSp);
-
+
basicConfig.putConfigValue("eidas.ms.auth.eIDAS.szrclient.debug.useDummySolution", "false");
basicConfig.putConfigValue("eidas.ms.auth.eIDAS.szrclient.revisionlog.eidmapping.active", "true");
basicConfig.putConfigValue("eidas.ms.auth.eIDAS.szrclient.params.useSZRForbPKCalculation", "true");
-
+
//execute test
task.execute(pendingReq, executionContext);
-
-
- //validate state
+
+
+ //validate state
// check if pendingRequest was stored
IRequest storedPendingReq = requestStorage.getPendingRequest(pendingReq.getPendingRequestId());
Assert.assertNotNull("pendingReq not stored", storedPendingReq);
-
+
//check data in session
final AuthProcessDataWrapper authProcessData = storedPendingReq.getSessionData(AuthProcessDataWrapper.class);
Assert.assertNotNull("AuthProcessData", authProcessData);
@@ -365,58 +444,17 @@ public class CreateIdentityLinkTaskTest {
String authBlock = authProcessData.getGenericDataFromSession(MsEidasNodeConstants.AUTH_DATA_SZR_AUTHBLOCK, String.class);
Assert.assertNull("AuthBlock", authBlock);
-
+
Assert.assertFalse("EID process", authProcessData.isEidProcess());
Assert.assertTrue("foreigner process", authProcessData.isForeigner());
- Assert.assertEquals("EID-ISSUING_NATION", "LU",
+ Assert.assertEquals("EID-ISSUING_NATION", "LU",
authProcessData.getGenericDataFromSession(PvpAttributeDefinitions.EID_ISSUING_NATION_NAME, String.class));
- Assert.assertNotNull("LoA is null", authProcessData.getQaaLevel());
- Assert.assertEquals("LoA", response.getLevelOfAssurance(),
- authProcessData.getQaaLevel());
-
+
Assert.assertNotNull("no bPK", authProcessData.getGenericDataFromSession(PvpAttributeDefinitions.BPK_NAME));
- Assert.assertEquals("wrong bPK", bpk,
+ Assert.assertEquals("wrong bPK", bpk,
authProcessData.getGenericDataFromSession(PvpAttributeDefinitions.BPK_NAME));
}
- @Test
- public void buildDummyIdl() throws Exception {
- //initialize test
- String randomTestSp = RandomStringUtils.randomAlphabetic(10);
- pendingReq.setRawDataToTransaction(MsEidasNodeConstants.DATA_REQUESTERID, randomTestSp);
-
- basicConfig.putConfigValue("eidas.ms.auth.eIDAS.szrclient.debug.useDummySolution", "true");
-
-
- //perform test
- task.execute(pendingReq, executionContext);
-
-
- //validate state
- // check if pendingRequest was stored
- IRequest storedPendingReq = requestStorage.getPendingRequest(pendingReq.getPendingRequestId());
- Assert.assertNotNull("pendingReq not stored", storedPendingReq);
-
- //check data in session
- final AuthProcessDataWrapper authProcessData = storedPendingReq.getSessionData(AuthProcessDataWrapper.class);
- Assert.assertNotNull("AuthProcessData", authProcessData);
- Assert.assertNull("eidasBind", authProcessData.getGenericDataFromSession(MsEidasNodeConstants.AUTH_DATA_EIDAS_BIND, String.class));
-
- String authBlock = authProcessData.getGenericDataFromSession(MsEidasNodeConstants.AUTH_DATA_SZR_AUTHBLOCK, String.class);
- Assert.assertNull("AuthBlock", authBlock);
-
- Assert.assertFalse("EID process", authProcessData.isEidProcess());
- Assert.assertTrue("foreigner process", authProcessData.isForeigner());
- Assert.assertEquals("EID-ISSUING_NATION", "LU",
- authProcessData.getGenericDataFromSession(PvpAttributeDefinitions.EID_ISSUING_NATION_NAME, String.class));
- Assert.assertNotNull("LoA is null", authProcessData.getQaaLevel());
- Assert.assertEquals("LoA", response.getLevelOfAssurance(),
- authProcessData.getQaaLevel());
-
- Assert.assertNotNull("IDL", authProcessData.getIdentityLink());
-
- }
-
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,
@@ -433,8 +471,8 @@ public class CreateIdentityLinkTaskTest {
Assert.assertEquals(expected, value);
}
-
- @Nonnull
+
+ @NotNull
private AuthenticationResponse buildDummyAuthResponse() throws URISyntaxException {
final AttributeDefinition attributeDef = attrRegistry.getCoreAttributeRegistry().getByFriendlyName(
Constants.eIDAS_ATTR_PERSONALIDENTIFIER).first();
@@ -444,7 +482,7 @@ public class CreateIdentityLinkTaskTest {
Constants.eIDAS_ATTR_CURRENTGIVENNAME).first();
final AttributeDefinition attributeDef4 = attrRegistry.getCoreAttributeRegistry().getByFriendlyName(
Constants.eIDAS_ATTR_DATEOFBIRTH).first();
-
+
final ImmutableAttributeMap attributeMap = ImmutableAttributeMap.builder()
.put(attributeDef, "LU/AT/" + RandomStringUtils.randomNumeric(64))
.put(attributeDef2, RandomStringUtils.randomAlphabetic(10))
@@ -461,4 +499,54 @@ public class CreateIdentityLinkTaskTest {
.attributes(attributeMap)
.build();
}
+
+ private Map<String, Object> convertEidasAttrToSimpleMap(
+ ImmutableMap<AttributeDefinition<?>, ImmutableSet<? extends AttributeValue<?>>> attributeMap) {
+ final Map<String, Object> result = new HashMap<>();
+ for (final AttributeDefinition<?> el : attributeMap.keySet()) {
+ final Class<?> parameterizedType = el.getParameterizedType();
+ if (DateTime.class.equals(parameterizedType)) {
+ convertDateTime(attributeMap, result, el);
+ } else if (PostalAddress.class.equals(parameterizedType)) {
+ convertPostalAddress(attributeMap, result, el);
+ } else {
+ convertString(attributeMap, result, el);
+ }
+ }
+ return result;
+ }
+
+ private void convertString(ImmutableMap<AttributeDefinition<?>,
+ ImmutableSet<? extends AttributeValue<?>>> attributeMap,
+ Map<String, Object> result, AttributeDefinition<?> el) {
+ final List<String> natPersonIdObj = EidasResponseUtils
+ .translateStringListAttribute(el, attributeMap.get(el));
+ final String stringAttr = natPersonIdObj.get(0);
+ if (StringUtils.isNotEmpty(stringAttr)) {
+ result.put(el.getFriendlyName(), stringAttr);
+
+ }
+ }
+
+ private void convertPostalAddress(ImmutableMap<AttributeDefinition<?>,
+ ImmutableSet<? extends AttributeValue<?>>> attributeMap,
+ Map<String, Object> result, AttributeDefinition<?> el) {
+ final PostalAddress addressAttribute = EidasResponseUtils
+ .translateAddressAttribute(el, attributeMap.get(el).asList());
+ if (addressAttribute != null) {
+ result.put(el.getFriendlyName(), addressAttribute);
+
+ }
+ }
+
+ private void convertDateTime(ImmutableMap<AttributeDefinition<?>,
+ ImmutableSet<? extends AttributeValue<?>>> attributeMap,
+ Map<String, Object> result, AttributeDefinition<?> el) {
+ final DateTime attribute = EidasResponseUtils.translateDateAttribute(el, attributeMap.get(el).asList());
+ if (attribute != null) {
+ result.put(el.getFriendlyName(), attribute);
+
+ }
+ }
+
}
diff --git a/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/CreateNewErnpEntryTaskTest.java b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/CreateNewErnpEntryTaskTest.java
new file mode 100644
index 00000000..985a5e14
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/CreateNewErnpEntryTaskTest.java
@@ -0,0 +1,198 @@
+package at.asitplus.eidas.specific.modules.auth.eidas.v2.test.tasks;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertThrows;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.any;
+
+import java.net.URISyntaxException;
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.commons.lang3.RandomStringUtils;
+import org.jetbrains.annotations.NotNull;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+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 at.asitplus.eidas.specific.modules.auth.eidas.v2.clients.ernp.ErnpRestClient;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.clients.ernp.ErnpRestClient.ErnpRegisterResult;
+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.exception.WorkflowException;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.tasks.CreateNewErnpEntryTask;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.utils.MatchingTaskUtils;
+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.module.test.TestRequestImpl;
+import at.gv.egiz.eaaf.core.impl.idp.process.ExecutionContextImpl;
+import lombok.SneakyThrows;
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration(locations = {
+ "/SpringTest-context_tasks_test.xml",
+ "/SpringTest-context_basic_mapConfig.xml"
+})
+@DirtiesContext(classMode = ClassMode.BEFORE_CLASS)
+public class CreateNewErnpEntryTaskTest {
+
+ CreateNewErnpEntryTask task;
+
+ @Mock ErnpRestClient ernpClient;
+
+ final ExecutionContext executionContext = new ExecutionContextImpl();
+ private TestRequestImpl pendingReq;
+
+ /**
+ * jUnit test set-up.
+ */
+ @Before
+ public void setUp() throws URISyntaxException, EaafStorageException {
+ task = new CreateNewErnpEntryTask(ernpClient);
+
+ MockHttpServletRequest httpReq = new MockHttpServletRequest("POST", "https://localhost/authhandler");
+ MockHttpServletResponse httpResp = new MockHttpServletResponse();
+ RequestContextHolder.resetRequestAttributes();
+ RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(httpReq, httpResp));
+
+ pendingReq = new TestRequestImpl();
+ pendingReq.setPendingReqId(RandomStringUtils.randomAlphanumeric(10));
+
+ }
+
+
+ @Test
+ @SneakyThrows
+ public void missingEidasData() {
+ Mockito.when(ernpClient.add(any()))
+ .thenThrow(new IllegalStateException("add ERnP entry should not be neccessary"));
+
+ TaskExecutionException error = assertThrows("wrong exception", TaskExecutionException.class,
+ () -> task.execute(pendingReq, executionContext));
+
+ assertEquals("wrong pendingRequestId", pendingReq.getPendingRequestId(), error.getPendingRequestID());
+ assertTrue("Wrong exception", (error.getOriginalException() instanceof WorkflowException));
+ assertTrue("Wrong flag 'manualFixNeeded'",
+ ((WorkflowException) error.getOriginalException()).isRequiresManualFix());
+
+ }
+
+ @Test
+ @SneakyThrows
+ public void noErnpResponse() {
+ SimpleEidasData input = buildInputData();
+ Mockito.when(ernpClient.add(input))
+ .thenReturn(ernpRegisterResult(Arrays.asList()));
+
+ TaskExecutionException error = assertThrows("wrong exception", TaskExecutionException.class,
+ () -> task.execute(pendingReq, executionContext));
+
+ assertEquals("wrong pendingRequestId", pendingReq.getPendingRequestId(), error.getPendingRequestID());
+ assertTrue("Wrong exception", (error.getOriginalException() instanceof WorkflowException));
+ assertTrue("Wrong flag 'manualFixNeeded'",
+ ((WorkflowException) error.getOriginalException()).isRequiresManualFix());
+
+ }
+
+ @Test
+ @SneakyThrows
+ public void moreThanOneErnpResponse() {
+ String bpk = RandomStringUtils.randomAlphabetic(5);
+ SimpleEidasData input = buildInputData();
+ Mockito.when(ernpClient.add(input))
+ .thenReturn(ernpRegisterResult(Arrays.asList(buildErnpResultEntry(input, bpk), buildRandomResultEntry())));
+
+ TaskExecutionException error = assertThrows("wrong exception", TaskExecutionException.class,
+ () -> task.execute(pendingReq, executionContext));
+
+ assertEquals("wrong pendingRequestId", pendingReq.getPendingRequestId(), error.getPendingRequestID());
+ assertTrue("Wrong exception", (error.getOriginalException() instanceof WorkflowException));
+ assertTrue("Wrong flag 'manualFixNeeded'",
+ ((WorkflowException) error.getOriginalException()).isRequiresManualFix());
+
+ }
+
+ @Test
+ @SneakyThrows
+ public void insertErnpSuccess() {
+ String bpk = RandomStringUtils.randomAlphabetic(5);
+ SimpleEidasData input = buildInputData();
+ Mockito.when(ernpClient.add(input))
+ .thenReturn(ernpRegisterResult(Arrays.asList(buildErnpResultEntry(input, bpk))));
+
+ // perform test
+ task.execute(pendingReq, executionContext);
+
+ // validate state
+ MatchedPersonResult result = MatchingTaskUtils.getFinalMatchingResult(pendingReq);
+ assertNotNull("no matching result", result);
+ assertEquals("familyname", input.getFamilyName(), result.getFamilyName());
+ assertEquals("givenyname", input.getGivenName(), result.getGivenName());
+ assertEquals("dateOfBirth", input.getDateOfBirth(), result.getDateOfBirth());
+ assertEquals("bpk", bpk, result.getBpk());
+ assertEquals("countryCode", input.getCitizenCountryCode(), result.getCountryCode());
+
+ }
+
+
+ @NotNull
+ private ErnpRegisterResult ernpRegisterResult(List<RegisterResult> registerResult) {
+ return new ErnpRegisterResult(registerResult);
+
+ }
+
+ private RegisterResult buildErnpResultEntry(SimpleEidasData input, String bpk) {
+ return buildErnpResultEntry(input.getFamilyName(), input.getGivenName(), input.getDateOfBirth(), bpk);
+
+ }
+
+ private RegisterResult buildRandomResultEntry() {
+ return buildErnpResultEntry(RandomStringUtils.randomAlphabetic(5), RandomStringUtils.randomAlphabetic(5),
+ RandomStringUtils.randomAlphabetic(5), RandomStringUtils.randomAlphabetic(5));
+
+ }
+
+ private RegisterResult buildErnpResultEntry(String familyName, String givenName, String birthday, String bpk) {
+ return RegisterResult.builder()
+ .bpk(bpk)
+ .dateOfBirth(birthday)
+ .givenName(givenName)
+ .familyName(familyName)
+ .build();
+
+ }
+
+ private SimpleEidasData buildInputData() throws EaafStorageException {
+ String cc = RandomStringUtils.randomAlphabetic(5).toUpperCase();
+ String pseudonym = RandomStringUtils.randomAlphabetic(5);
+ String familyName = RandomStringUtils.randomAlphabetic(5);
+ String givenName = RandomStringUtils.randomAlphabetic(5);
+ String birthday = RandomStringUtils.randomNumeric(4) + "-"
+ + RandomStringUtils.randomNumeric(2) + "-" + RandomStringUtils.randomNumeric(2);
+
+ SimpleEidasData input = SimpleEidasData.builder()
+ .familyName(familyName)
+ .givenName(givenName)
+ .dateOfBirth(birthday)
+ .personalIdentifier(cc + "/AT/" + pseudonym)
+ .pseudonym(pseudonym)
+ .citizenCountryCode(cc)
+ .build();
+ MatchingTaskUtils.storeInitialEidasData(pendingReq, input);
+ return input;
+
+ }
+}
diff --git a/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/GenerateAustrianResidenceGuiTaskTest.java b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/GenerateAustrianResidenceGuiTaskTest.java
new file mode 100644
index 00000000..1fc96e10
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/GenerateAustrianResidenceGuiTaskTest.java
@@ -0,0 +1,172 @@
+package at.asitplus.eidas.specific.modules.auth.eidas.v2.test.tasks;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import java.io.UnsupportedEncodingException;
+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;
+import org.springframework.context.i18n.LocaleContextHolder;
+import org.springframework.mock.web.MockHttpServletRequest;
+import org.springframework.mock.web.MockHttpServletResponse;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+import org.springframework.test.context.web.WebAppConfiguration;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.json.JsonMapper;
+
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.tasks.GenerateAustrianResidenceGuiTask;
+import at.gv.egiz.eaaf.core.exceptions.TaskExecutionException;
+import at.gv.egiz.eaaf.core.impl.idp.module.test.TestRequestImpl;
+import at.gv.egiz.eaaf.core.impl.idp.process.ExecutionContextImpl;
+import lombok.SneakyThrows;
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration(locations = {
+ "/SpringTest-context_tasks_test.xml",
+ "/SpringTest-context_basic_mapConfig.xml",
+ "/common_gui.beans.xml"
+})
+@WebAppConfiguration
+public class GenerateAustrianResidenceGuiTaskTest {
+
+
+ @Autowired
+ GenerateAustrianResidenceGuiTask task;
+
+ private ExecutionContextImpl executionContext = new ExecutionContextImpl();
+ private TestRequestImpl pendingReq;
+ private MockHttpServletRequest httpReq;
+ private MockHttpServletResponse httpResp;
+
+ @BeforeClass
+ public static void classInitializer() {
+ Locale.setDefault(Locale.ENGLISH);
+
+ }
+
+ /**
+ * jUnit test set-up.
+ */
+ @Before
+ public void initialize() {
+ httpReq = new MockHttpServletRequest("POST", "https://localhost/ms_connector");
+ httpResp = new MockHttpServletResponse();
+ RequestContextHolder.resetRequestAttributes();
+ RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(httpReq, httpResp));
+
+ pendingReq = new TestRequestImpl();
+ pendingReq.setAuthUrl("https://localhost/ms_connector");
+ pendingReq.setPendingReqId(RandomStringUtils.randomAlphanumeric(10));
+
+ LocaleContextHolder.resetLocaleContext();
+
+ }
+
+ @Test
+ @SneakyThrows
+ public void jsonResponse() throws TaskExecutionException, UnsupportedEncodingException {
+ httpReq.addHeader("Accept", "application/json");
+
+ task.execute(pendingReq, executionContext);
+
+ //result validation
+ Assert.assertEquals("httpStausCode", 200, httpResp.getStatus());
+ Assert.assertEquals("http ContentType", "application/json;charset=UTF-8", httpResp.getContentType());
+ final String content = httpResp.getContentAsString();
+ assertNotNull("response body is null", content);
+ Assert.assertFalse("response body is empty", content.isEmpty());
+ final JsonNode json = new JsonMapper().readTree(content);
+ assertNotNull("response body is null", json);
+ checkJsonElement(json, "wizardEndpoint", "https://localhost/ms_connector/residency/search");
+
+ }
+
+ @Test
+ @SneakyThrows
+ public void jsonResponseWithError() throws TaskExecutionException, UnsupportedEncodingException {
+ httpReq.addHeader("Accept", "application/json");
+
+ String reason = RandomStringUtils.randomAlphabetic(5);
+ executionContext.put(Constants.CONTEXT_FLAG_ADVANCED_MATCHING_FAILED, true);
+ executionContext.put(Constants.CONTEXT_FLAG_ADVANCED_MATCHING_FAILED_REASON, reason);
+
+ task.execute(pendingReq, executionContext);
+
+ //result validation
+ Assert.assertEquals("httpStausCode", 200, httpResp.getStatus());
+ Assert.assertEquals("http ContentType", "application/json;charset=UTF-8", httpResp.getContentType());
+ final String content = httpResp.getContentAsString();
+ assertNotNull("response body is null", content);
+ Assert.assertFalse("response body is empty", content.isEmpty());
+ final JsonNode json = new JsonMapper().readTree(content);
+ assertNotNull("response body is null", json);
+ checkJsonElement(json, "wizardEndpoint", "https://localhost/ms_connector/residency/search");
+
+ assertNotNull("advancedMatchFailed", json.get(Constants.HTML_FORM_ADVANCED_MATCHING_FAILED));
+ assertTrue("advancedMatchFailed", json.get(Constants.HTML_FORM_ADVANCED_MATCHING_FAILED).asBoolean());
+ assertNotNull("advancedMatchingFailedReason", json.get(Constants.HTML_FORM_ADVANCED_MATCHING_FAILED_REASON));
+ assertEquals("advancedMatchingFailedReason", reason,
+ json.get(Constants.HTML_FORM_ADVANCED_MATCHING_FAILED_REASON).asText());
+
+ }
+
+ @Test
+ @SneakyThrows
+ public void htmlResponse() throws TaskExecutionException, UnsupportedEncodingException {
+
+ task.execute(pendingReq, executionContext);
+
+ //result validation
+ Assert.assertEquals("httpStausCode", 200, httpResp.getStatus());
+ Assert.assertEquals("http ContentType", "text/html;charset=UTF-8", httpResp.getContentType());
+ final String content = httpResp.getContentAsString();
+ assertNotNull("response body is null", content);
+ Assert.assertFalse("response body is empty", content.isEmpty());
+ assertTrue("no wizard endpoint", content.contains("https://localhost/ms_connector/residency/search"));
+
+ }
+
+ @Test
+ @SneakyThrows
+ public void htmlResponseWithError() throws TaskExecutionException, UnsupportedEncodingException {
+
+ String reason = RandomStringUtils.randomAlphabetic(5);
+ executionContext.put(Constants.CONTEXT_FLAG_ADVANCED_MATCHING_FAILED, true);
+ executionContext.put(Constants.CONTEXT_FLAG_ADVANCED_MATCHING_FAILED_REASON, reason);
+
+ task.execute(pendingReq, executionContext);
+
+ //result validation
+ Assert.assertEquals("httpStausCode", 200, httpResp.getStatus());
+ Assert.assertEquals("http ContentType", "text/html;charset=UTF-8", httpResp.getContentType());
+ final String content = httpResp.getContentAsString();
+ assertNotNull("response body is null", content);
+ Assert.assertFalse("response body is empty", content.isEmpty());
+ assertTrue("no wizard endpoint", content.contains("https://localhost/ms_connector/residency/search"));
+
+ Assert.assertTrue("missing errorfield", content.contains("<div id=\"matchingError\""));
+ Assert.assertTrue("missing errorfield", content.contains(reason));
+
+ }
+
+ private void checkJsonElement(JsonNode json, String key, String expected) {
+ assertTrue("no element: " + key, json.has(key));
+ assertEquals("wrong element:" + key, expected, json.get(key).asText());
+
+ }
+
+
+}
diff --git a/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/GenerateMobilePhoneSignatureRequestTaskTest.java b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/GenerateMobilePhoneSignatureRequestTaskTest.java
new file mode 100644
index 00000000..ffa02ccd
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/GenerateMobilePhoneSignatureRequestTaskTest.java
@@ -0,0 +1,282 @@
+package at.asitplus.eidas.specific.modules.auth.eidas.v2.test.tasks;
+
+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.springframework.util.Assert.isInstanceOf;
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.util.Base64;
+import java.util.Map;
+
+import org.apache.commons.lang3.RandomStringUtils;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport;
+import org.opensaml.core.xml.util.XMLObjectSupport;
+import org.opensaml.saml.common.xml.SAMLConstants;
+import org.opensaml.saml.saml2.core.AuthnRequest;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.ApplicationContext;
+import org.springframework.mock.web.MockHttpServletRequest;
+import org.springframework.mock.web.MockHttpServletResponse;
+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 at.asitplus.eidas.specific.core.test.config.dummy.MsConnectorDummyConfigMap;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.idaustriaclient.IdAustriaClientAuthConstants;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.idaustriaclient.provider.IdAustriaClientAuthMetadataProvider;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.tasks.GenerateMobilePhoneSignatureRequestTask;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.test.dummy.DummyOA;
+import at.gv.egiz.eaaf.core.api.data.EaafConstants;
+import at.gv.egiz.eaaf.core.api.gui.IVelocityGuiBuilderConfiguration;
+import at.gv.egiz.eaaf.core.api.idp.process.ExecutionContext;
+import at.gv.egiz.eaaf.core.api.storage.ITransactionStorage;
+import at.gv.egiz.eaaf.core.exceptions.EaafConfigurationException;
+import at.gv.egiz.eaaf.core.exceptions.TaskExecutionException;
+import at.gv.egiz.eaaf.core.impl.idp.module.gui.DummyGuiBuilderConfigurationFactory;
+import at.gv.egiz.eaaf.core.impl.idp.module.test.TestRequestImpl;
+import at.gv.egiz.eaaf.core.impl.idp.process.ExecutionContextImpl;
+import at.gv.egiz.eaaf.modules.pvp2.exception.CredentialsNotAvailableException;
+import at.gv.egiz.eaaf.modules.pvp2.exception.Pvp2MetadataException;
+import at.gv.egiz.eaaf.modules.pvp2.impl.message.PvpSProfileRequest;
+import at.gv.egiz.eaaf.modules.pvp2.impl.metadata.PvpMetadataResolverFactory;
+import at.gv.egiz.eaaf.modules.pvp2.impl.opensaml.initialize.EaafOpenSaml3xInitializer;
+import at.gv.egiz.eaaf.modules.pvp2.impl.utils.Saml2Utils;
+import at.gv.egiz.eaaf.modules.pvp2.impl.validation.TrustEngineFactory;
+import at.gv.egiz.eaaf.modules.pvp2.impl.verification.SamlVerificationEngine;
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration(locations = {
+ "/SpringTest-context_tasks_test.xml",
+ "/SpringTest-context_basic_mapConfig.xml",
+ "classpath:/eaaf_pvp_sp.beans.xml"
+})
+
+public class GenerateMobilePhoneSignatureRequestTaskTest {
+
+ private static final String METADATA_PATH = "classpath:/data/idp_metadata_classpath_entity.xml";
+ private static final String METADATA_SP_PATH = "classpath:/data/sp_metadata_junit.xml";
+
+ @Autowired(required = true)
+ private ApplicationContext context;
+ @Autowired(required = true)
+ protected MsConnectorDummyConfigMap authConfig;
+ @Autowired
+ private IdAustriaClientAuthMetadataProvider metadataProvider;
+ @Autowired
+ private PvpMetadataResolverFactory metadataFactory;
+ @Autowired
+ private DummyGuiBuilderConfigurationFactory guiBuilderConfigFactory;
+ @Autowired
+ private SamlVerificationEngine samlVerifyEngine;
+ @Autowired
+ private ITransactionStorage transactionStorage;
+
+ final ExecutionContext executionContext = new ExecutionContextImpl();
+ private MockHttpServletRequest httpReq;
+ private MockHttpServletResponse httpResp;
+ private TestRequestImpl pendingReq;
+ private DummyOA oaParam;
+
+ private GenerateMobilePhoneSignatureRequestTask task;
+
+ /**
+ * JUnit class initializer.
+ *
+ * @throws Exception In case of an OpenSAML3 initialization error
+ */
+ @BeforeClass
+ public static void initialize() throws Exception {
+ EaafOpenSaml3xInitializer.eaafInitialize();
+
+ }
+
+ /**
+ * jUnit test set-up.
+ *
+ * @throws Exception In case of an set-up error
+ */
+ @Before
+ public void setUp() throws Exception {
+ task = (GenerateMobilePhoneSignatureRequestTask) context.getBean(
+ "GenerateMobilePhoneSignatureRequestTask");
+
+ httpReq = new MockHttpServletRequest("POST", "https://localhost/authhandler");
+ httpResp = new MockHttpServletResponse();
+ RequestContextHolder.resetRequestAttributes();
+ RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(httpReq, httpResp));
+
+ authConfig.putConfigValue(IdAustriaClientAuthConstants.CONFIG_PROPS_ID_AUSTRIA_ENTITYID,
+ METADATA_PATH);
+ authConfig.putConfigValue(IdAustriaClientAuthConstants.CONFIG_PROPS_SIGN_SIGNING_ALIAS,
+ "sig");
+
+ oaParam = new DummyOA();
+ oaParam.setUniqueAppId("http://test.com/test");
+ oaParam.setBmiUniqueIdentifier(oaParam.getUniqueIdentifier() + "#" + RandomStringUtils.randomAlphanumeric(
+ 5));
+ oaParam.setTargetIdentifier(
+ EaafConstants.URN_PREFIX_CDID + RandomStringUtils.randomAlphabetic(2));
+ oaParam.setEidasEnabled(true);
+
+ pendingReq = new TestRequestImpl();
+ pendingReq.setPendingReqId(RandomStringUtils.randomAlphanumeric(10));
+ pendingReq.setSpConfig(oaParam);
+ pendingReq.setAuthUrl("https://localhost/authhandler");
+
+ metadataProvider.fullyDestroy();
+ guiBuilderConfigFactory.setVelocityBuilderConfig(createDummyGuiConfig());
+
+ }
+
+ @Test
+ public void noMetadataAvailableOnGlobalConfig() {
+ authConfig.removeConfigValue(IdAustriaClientAuthConstants.CONFIG_PROPS_ID_AUSTRIA_ENTITYID);
+
+ final TaskExecutionException e = assertThrows(TaskExecutionException.class,
+ () -> task.execute(pendingReq, executionContext));
+
+ assertEquals(pendingReq.getPendingRequestId(), e.getPendingRequestID());
+ assertNotNull(e.getOriginalException());
+ isInstanceOf(EaafConfigurationException.class, e.getOriginalException());
+ assertEquals("module.eidasauth.00", ((EaafConfigurationException) e.getOriginalException()).getErrorId());
+ }
+
+ @Test
+ public void wrongMetadataAvailableOnGlobalConfig() {
+ authConfig.putConfigValue(IdAustriaClientAuthConstants.CONFIG_PROPS_ID_AUSTRIA_ENTITYID,
+ "http://wrong.path/" + RandomStringUtils.randomAlphabetic(5));
+
+ final TaskExecutionException e = assertThrows(TaskExecutionException.class,
+ () -> task.execute(pendingReq, executionContext));
+ assertNotNull(e.getPendingRequestID());
+ assertEquals(pendingReq.getPendingRequestId(), e.getPendingRequestID());
+ assertNotNull(e.getOriginalException());
+ isInstanceOf(EaafConfigurationException.class, e.getOriginalException());
+ assertEquals("module.eidasauth.idaustria.02",
+ ((EaafConfigurationException) e.getOriginalException()).getErrorId());
+ }
+
+ @Test
+ public void noMetadataSigningKeyStore() throws Pvp2MetadataException {
+ authConfig.removeConfigValue(IdAustriaClientAuthConstants.CONFIG_PROPS_SIGN_SIGNING_ALIAS);
+
+ metadataProvider.addMetadataResolverIntoChain(
+ metadataFactory.createMetadataProvider(METADATA_PATH, null, "jUnitTest", null));
+
+ final TaskExecutionException e = assertThrows(TaskExecutionException.class,
+ () -> task.execute(pendingReq, executionContext));
+ assertNotNull(e.getPendingRequestID());
+ assertEquals(pendingReq.getPendingRequestId(), e.getPendingRequestID());
+ assertNotNull(e.getOriginalException());
+ isInstanceOf(CredentialsNotAvailableException.class, e.getOriginalException());
+ assertEquals("internal.pvp.01",
+ ((CredentialsNotAvailableException) e.getOriginalException()).getErrorId());
+ }
+
+ @Test
+ public void success() throws Exception {
+ metadataProvider.addMetadataResolverIntoChain(
+ metadataFactory.createMetadataProvider(METADATA_PATH, null, "jUnitTest", null));
+ pendingReq.setTransactionId(RandomStringUtils.randomAlphanumeric(10));
+
+ task.execute(pendingReq, executionContext);
+
+ validate();
+
+ }
+
+ private void validate() throws Exception {
+ assertEquals("HTTP Statuscode", 200, httpResp.getStatus());
+ assertEquals("ContentType", "text/html;charset=UTF-8", httpResp.getContentType());
+ assertEquals("ContentEncoding", "UTF-8", httpResp.getCharacterEncoding());
+
+ final String html = httpResp.getContentAsString();
+ assertNotNull("XML Metadata", html);
+
+ final int startIndex = html.indexOf("SAMLRequest=");
+ assertTrue("No SAMLRequest in html", startIndex >= 0);
+ final String authnXml = html.substring(startIndex + "SAMLRequest=".length());
+
+ // check if relaystate was stored
+ final int startIndexRelayState = html.indexOf("RelayState=");
+ assertTrue("wrong RelayState in HTML",
+ startIndexRelayState >= 0);
+ final String relayState = html.substring(startIndexRelayState + "RelayState=".length(), startIndex);
+ final String storedPendingReqId = transactionStorage.get(relayState, String.class);
+ assertEquals("relayStore not map to pendingRequestId",
+ pendingReq.getPendingRequestId(), storedPendingReqId);
+
+ final AuthnRequest authnRequest = (AuthnRequest) XMLObjectSupport.unmarshallFromInputStream(
+ XMLObjectProviderRegistrySupport.getParserPool(), new ByteArrayInputStream(
+ Base64.getDecoder().decode(authnXml)));
+
+ assertNotNull("AuthnReq", authnRequest);
+ assertNotNull("Issuer", authnRequest.getIssuer());
+ assertEquals("EntityId",
+ "https://localhost/authhandler" + IdAustriaClientAuthConstants.ENDPOINT_METADATA,
+ authnRequest.getIssuer().getValue());
+
+ // check XML scheme
+ Saml2Utils.schemeValidation(authnRequest);
+
+ // check signature
+ final PvpSProfileRequest msg = new PvpSProfileRequest(
+ authnRequest,
+ SAMLConstants.SAML2_POST_BINDING_URI);
+ msg.setEntityID(authnRequest.getIssuer().getValue());
+ metadataProvider.addMetadataResolverIntoChain(
+ metadataFactory.createMetadataProvider(METADATA_SP_PATH, null, "jUnit SP", null));
+ samlVerifyEngine.verify(msg, TrustEngineFactory.getSignatureKnownKeysTrustEngine(metadataProvider));
+
+ assertNull("RequestedAuthnContext", authnRequest.getRequestedAuthnContext());
+
+ }
+
+ private IVelocityGuiBuilderConfiguration createDummyGuiConfig() {
+ return new IVelocityGuiBuilderConfiguration() {
+
+ @Override
+ public Map<String, Object> getViewParameters() {
+ return null;
+ }
+
+ @Override
+ public String getViewName() {
+ return "SAML2 Post-Binding";
+ }
+
+ @Override
+ public String getDefaultContentType() {
+ return null;
+ }
+
+ @Override
+ public InputStream getTemplate(String viewName) {
+ return GenerateMobilePhoneSignatureRequestTaskTest.class.getResourceAsStream(
+ "/data/pvp_postbinding_template.html");
+ }
+
+ @Override
+ public String getClasspathTemplateDir() {
+ return null;
+
+ }
+
+ @Override
+ public boolean isWriteAsynch() {
+ return false;
+
+ }
+ };
+ }
+
+}
diff --git a/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/GenerateOtherLoginMethodGuiTaskTest.java b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/GenerateOtherLoginMethodGuiTaskTest.java
new file mode 100644
index 00000000..496158fa
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/GenerateOtherLoginMethodGuiTaskTest.java
@@ -0,0 +1,293 @@
+package at.asitplus.eidas.specific.modules.auth.eidas.v2.test.tasks;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+
+import java.io.UnsupportedEncodingException;
+import java.text.MessageFormat;
+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;
+import org.springframework.context.i18n.LocaleContextHolder;
+import org.springframework.mock.web.MockHttpServletRequest;
+import org.springframework.mock.web.MockHttpServletResponse;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+import org.springframework.test.context.web.WebAppConfiguration;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.json.JsonMapper;
+
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.SelectedLoginMethod;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.tasks.GenerateOtherLoginMethodGuiTask;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.tasks.ReceiveOtherLoginMethodGuiResponseTask;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.test.dummy.DummyOA;
+import at.gv.egiz.eaaf.core.api.IRequestStorage;
+import at.gv.egiz.eaaf.core.api.data.EaafConstants;
+import at.gv.egiz.eaaf.core.exceptions.TaskExecutionException;
+import at.gv.egiz.eaaf.core.impl.idp.module.test.TestRequestImpl;
+import at.gv.egiz.eaaf.core.impl.idp.process.ExecutionContextImpl;
+import lombok.SneakyThrows;
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration(locations = {
+ "/SpringTest-context_tasks_test.xml",
+ "/SpringTest-context_basic_mapConfig.xml",
+ "/common_gui.beans.xml"
+})
+@WebAppConfiguration
+public class GenerateOtherLoginMethodGuiTaskTest {
+
+ private static final String TEST_PATTER_REQ_PARAM =
+ "<input type=\"hidden\" name=\"loginSelection\" value=\"{0}\">";
+
+ @Autowired
+ GenerateOtherLoginMethodGuiTask task;
+
+ @Autowired IRequestStorage storage;
+
+ private ExecutionContextImpl executionContext;
+ private TestRequestImpl pendingReq;
+ private MockHttpServletRequest httpReq;
+ private MockHttpServletResponse httpResp;
+
+ @BeforeClass
+ public static void classInitializer() {
+ Locale.setDefault(Locale.ENGLISH);
+
+ }
+
+ /**
+ * jUnit test set-up.
+ */
+ @Before
+ public void initialize() {
+ httpReq = new MockHttpServletRequest("POST", "https://localhost/ms_connector");
+ httpResp = new MockHttpServletResponse();
+ RequestContextHolder.resetRequestAttributes();
+ RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(httpReq, httpResp));
+
+ pendingReq = new TestRequestImpl();
+ pendingReq.setAuthUrl("https://localhost/ms_connector");
+ pendingReq.setPendingReqId(RandomStringUtils.randomAlphanumeric(10));
+ pendingReq.setSpConfig(new DummyOA());
+
+ executionContext = new ExecutionContextImpl();
+
+ LocaleContextHolder.resetLocaleContext();
+ }
+
+
+ @Test
+ @SneakyThrows
+ public void unsetExecutionContextParameters() throws TaskExecutionException, UnsupportedEncodingException {
+ httpReq.addHeader("Accept", "application/json");
+ ReceiveOtherLoginMethodGuiResponseTask.ALL_EXECUTIONCONTEXT_PARAMETERS.forEach(
+ el -> executionContext.put(el, RandomStringUtils.randomAlphabetic(5)));
+
+ // execute test
+ task.execute(pendingReq, executionContext);
+
+ //result validation
+ Assert.assertEquals("httpStausCode", 200, httpResp.getStatus());
+ Assert.assertEquals("http ContentType", "application/json;charset=UTF-8", httpResp.getContentType());
+
+ ReceiveOtherLoginMethodGuiResponseTask.ALL_EXECUTIONCONTEXT_PARAMETERS.forEach(
+ el -> assertNull("executionContext parameter: " + el, executionContext.get(el)));
+
+ // remove pendingRequestId and changeLanguage because it's added by default
+ executionContext.remove(EaafConstants.PROCESS_ENGINE_PENDINGREQUESTID);
+ executionContext.remove("changeLanguage");
+
+ // in case of 'ReceiveOtherLoginMethodGuiResponseTask.ALL_EXECUTIONCONTEXT_PARAMETERS' does not include all parameters
+ assertTrue("ExecutionContext is not empty", executionContext.keySet().isEmpty());
+
+ }
+
+
+ @Test
+ @SneakyThrows
+ public void jsonResponseInsertErnp() throws TaskExecutionException, UnsupportedEncodingException {
+ String reason = RandomStringUtils.randomAlphabetic(5);
+ executionContext.put(Constants.TRANSITION_TO_REQUESTING_NEW_ERNP_ENTRY_TASK, true);
+ httpReq.addHeader("Accept", "application/json");
+
+ task.execute(pendingReq, executionContext);
+
+ //result validation
+ Assert.assertEquals("httpStausCode", 200, httpResp.getStatus());
+ Assert.assertEquals("http ContentType", "application/json;charset=UTF-8", httpResp.getContentType());
+ final String content = httpResp.getContentAsString();
+ assertNotNull("response body is null", content);
+ Assert.assertFalse("response body is empty", content.isEmpty());
+ final JsonNode json = new JsonMapper().readTree(content);
+ assertNotNull("response body is null", json);
+ assertNull("advancedMatchFailed", json.get(Constants.HTML_FORM_ADVANCED_MATCHING_FAILED));
+ assertNotNull("createNewErnpEntry", json.get(Constants.HTML_FORM_CREATE_NEW_ERNP_ENTRY));
+ assertTrue("createNewErnpEntry", json.get(Constants.HTML_FORM_CREATE_NEW_ERNP_ENTRY).asBoolean());
+
+ assertNull("advancedMatchingFailedReason", json.get(Constants.HTML_FORM_ADVANCED_MATCHING_FAILED_REASON));
+
+ assertNotNull("pendingRequest not stored",
+ storage.getPendingRequest(pendingReq.getPendingRequestId()));
+
+ }
+
+ @Test
+ @SneakyThrows
+ public void jsonResponseMathingFailed() throws TaskExecutionException, UnsupportedEncodingException {
+ String reason = RandomStringUtils.randomAlphabetic(5);
+ executionContext.put(Constants.CONTEXT_FLAG_ADVANCED_MATCHING_FAILED, true);
+ executionContext.put(Constants.CONTEXT_FLAG_ADVANCED_MATCHING_FAILED_REASON, reason);
+ httpReq.addHeader("Accept", "application/json");
+
+ task.execute(pendingReq, executionContext);
+
+ //result validation
+ Assert.assertEquals("httpStausCode", 200, httpResp.getStatus());
+ Assert.assertEquals("http ContentType", "application/json;charset=UTF-8", httpResp.getContentType());
+ final String content = httpResp.getContentAsString();
+ assertNotNull("response body is null", content);
+ Assert.assertFalse("response body is empty", content.isEmpty());
+ final JsonNode json = new JsonMapper().readTree(content);
+ assertNotNull("response body is null", json);
+ assertNotNull("advancedMatchFailed", json.get(Constants.HTML_FORM_ADVANCED_MATCHING_FAILED));
+ assertTrue("advancedMatchFailed", json.get(Constants.HTML_FORM_ADVANCED_MATCHING_FAILED).asBoolean());
+ assertNotNull("advancedMatchingFailedReason", json.get(Constants.HTML_FORM_ADVANCED_MATCHING_FAILED_REASON));
+ assertEquals("advancedMatchingFailedReason", reason,
+ json.get(Constants.HTML_FORM_ADVANCED_MATCHING_FAILED_REASON).asText());
+
+ assertNotNull("createNewErnpEntry", json.get(Constants.HTML_FORM_CREATE_NEW_ERNP_ENTRY));
+ assertFalse("createNewErnpEntry", json.get(Constants.HTML_FORM_CREATE_NEW_ERNP_ENTRY).asBoolean());
+
+ assertNotNull("pendingRequest not stored",
+ storage.getPendingRequest(pendingReq.getPendingRequestId()));
+
+ }
+
+ @Test
+ public void insertErnpRequested() throws TaskExecutionException, UnsupportedEncodingException {
+ executionContext.put(Constants.TRANSITION_TO_REQUESTING_NEW_ERNP_ENTRY_TASK, true);
+
+ task.execute(pendingReq, executionContext);
+
+ Assert.assertEquals("Wrong http StatusCode", 200, httpResp.getStatus());
+ Assert.assertEquals("Wrong http ContentType", "text/html;charset=UTF-8", httpResp.getContentType());
+
+ String html = httpResp.getContentAsString();
+ Assert.assertNotNull("html result is null", html);
+ Assert.assertFalse("html result is empty", html.isEmpty());
+ Assert.assertTrue("No language selector with pendingRequestId",
+ html.contains("/otherLoginMethod?lang=en&amp;pendingid=" + pendingReq.getPendingRequestId()));
+ Assert.assertTrue("Missing eIDAS infos",
+ html.contains(MessageFormat.format(TEST_PATTER_REQ_PARAM, SelectedLoginMethod.ADD_ME_AS_NEW)));
+
+ }
+
+ @Test
+ public void advancedMatchingFailedMsg() throws TaskExecutionException, UnsupportedEncodingException {
+ executionContext.put(Constants.CONTEXT_FLAG_ADVANCED_MATCHING_FAILED, true);
+
+ task.execute(pendingReq, executionContext);
+
+ String html = doBasicValidation();
+ Assert.assertFalse("Missing eIDAS infos",
+ html.contains(MessageFormat.format(TEST_PATTER_REQ_PARAM, SelectedLoginMethod.ADD_ME_AS_NEW)));
+ Assert.assertTrue("missing errorfield",
+ html.contains("<div id=\"matchingError\""));
+
+ }
+
+ @Test
+ public void advancedMatchingFailedMsgWithDetails() throws TaskExecutionException, UnsupportedEncodingException {
+ String reason = RandomStringUtils.randomAlphabetic(5);
+ executionContext.put(Constants.CONTEXT_FLAG_ADVANCED_MATCHING_FAILED, true);
+ executionContext.put(Constants.CONTEXT_FLAG_ADVANCED_MATCHING_FAILED_REASON, reason);
+
+ task.execute(pendingReq, executionContext);
+
+ String html = doBasicValidation();
+ Assert.assertTrue("missing errorfield",
+ html.contains("<div id=\"matchingError\""));
+ Assert.assertTrue("missing errorfield",
+ html.contains(reason));
+
+ }
+
+ @Test
+ public void validHtmlResponseWithOutLocale() throws TaskExecutionException, UnsupportedEncodingException {
+
+ task.execute(pendingReq, executionContext);
+
+ doBasicValidation();
+
+ }
+
+ @Test
+ public void validHtmlResponseWithDE() throws TaskExecutionException, UnsupportedEncodingException {
+ LocaleContextHolder.setLocale(Locale.GERMAN);
+ httpReq.addHeader("Accept-Language", "de");
+
+ task.execute(pendingReq, executionContext);
+
+ doBasicValidation();
+
+ }
+
+ @Test
+ public void validHtmlResponseWithEN() throws TaskExecutionException, UnsupportedEncodingException {
+ LocaleContextHolder.setLocale(Locale.ENGLISH);
+
+ task.execute(pendingReq, executionContext);
+
+ doBasicValidation();
+
+ }
+
+ @Test
+ public void validHtmlResponseWithFR() throws TaskExecutionException, UnsupportedEncodingException {
+ LocaleContextHolder.setLocale(Locale.FRANCE);
+ httpReq.addHeader("Accept-Language", "fr");
+
+ task.execute(pendingReq, executionContext);
+
+ doBasicValidation();
+
+ }
+
+ private String doBasicValidation() throws UnsupportedEncodingException {
+ Assert.assertEquals("Wrong http StatusCode", 200, httpResp.getStatus());
+ Assert.assertEquals("Wrong http ContentType", "text/html;charset=UTF-8", httpResp.getContentType());
+
+ String html = httpResp.getContentAsString();
+ Assert.assertNotNull("html result is null", html);
+ Assert.assertFalse("html result is empty", html.isEmpty());
+
+ Assert.assertTrue("Missing IDA Login",
+ html.contains(MessageFormat.format(TEST_PATTER_REQ_PARAM, SelectedLoginMethod.MOBILE_PHONE_SIGNATURE_LOGIN)));
+ Assert.assertTrue("Missing residence infos",
+ html.contains(MessageFormat.format(TEST_PATTER_REQ_PARAM, SelectedLoginMethod.NO_OTHER_LOGIN)));
+ Assert.assertTrue("Missing eIDAS infos",
+ html.contains(MessageFormat.format(TEST_PATTER_REQ_PARAM, SelectedLoginMethod.EIDAS_LOGIN)));
+
+ Assert.assertTrue("No language selector with pendingRequestId",
+ html.contains("/otherLoginMethod?lang=en&amp;pendingid=" + pendingReq.getPendingRequestId()));
+ Assert.assertTrue("No country-selection form",
+ html.contains("<form method=\"post\" action=\"/otherLoginMethod\">"));
+
+ return html;
+
+ }
+}
diff --git a/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/InitialSearchTaskTest.java b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/InitialSearchTaskTest.java
new file mode 100644
index 00000000..74ac065e
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/InitialSearchTaskTest.java
@@ -0,0 +1,939 @@
+/*
+ * 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.assertFalse;
+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.ArgumentMatchers.eq;
+
+import java.math.BigInteger;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Random;
+
+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.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+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 at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.clients.ernp.ErnpRestClient.ErnpRegisterResult;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.clients.ernp.IErnpClient;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.clients.zmr.IZmrClient;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.clients.zmr.ZmrSoapClient;
+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.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.exception.ZmrCommunicationException;
+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.utils.MatchingTaskUtils;
+import at.gv.bmi.namespace.zmr_su.zmr._20040201.PersonSuchenRequest;
+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;
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration(locations = {
+ "/SpringTest-context_tasks_test.xml",
+ "/SpringTest-context_basic_mapConfig.xml"
+})
+@DirtiesContext(classMode = ClassMode.BEFORE_CLASS)
+public class InitialSearchTaskTest {
+
+
+ private static final String EE = "EE";
+ private static final String DE = "DE";
+
+ private static final String EE_ST = EE + "/ST/";
+ private static final String DE_ST = DE + "/ST/";
+
+ @Mock
+ private IZmrClient zmrClient;
+ @Mock
+ private IErnpClient ernpClient;
+
+ @Autowired
+ private List<CountrySpecificDetailSearchProcessor> handlers;
+ private RegisterSearchService registerSearchService;
+
+ private final ICcSpecificEidProcessingService eidPostProcessor = createEidPostProcessor();
+ private InitialSearchTask task;
+
+ final ExecutionContext executionContext = new ExecutionContextImpl();
+ private TestRequestImpl pendingReq;
+ private final String randomBpk = RandomStringUtils.randomNumeric(6);
+ private final String randomPseudonym = RandomStringUtils.randomNumeric(10);
+ private final String randomPersonalIdentifier_DE = DE_ST + randomPseudonym;
+ private final String randomPersonalIdentifier_EE = EE_ST + randomPseudonym;
+ private final String randomFamilyName = randomAlphabetic(10);
+ private final String randomGivenName = randomAlphabetic(10);
+ private final String randomPlaceOfBirth = randomAlphabetic(10);
+ private final String randomBirthName = randomAlphabetic(10);
+ private final String randomBirthDate = "2011-01-" + (10 + new Random().nextInt(18));
+
+ /**
+ * jUnit test set-up.
+ */
+ @Before
+ public void setUp() throws URISyntaxException, EaafStorageException {
+ 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));
+
+ final AuthenticationResponse response = buildDummyAuthResponseRandomPerson();
+ pendingReq = new TestRequestImpl();
+ pendingReq.getSessionData(AuthProcessDataWrapper.class)
+ .setGenericDataToSession(Constants.DATA_FULL_EIDAS_RESPONSE, response);
+ }
+
+ @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);
+ }
+ };
+ }
+
+ /**
+ * One match, but register update needed
+ */
+ @Test
+ @DirtiesContext
+ public void singlePersonalIdMatchUpdateNecessary_Zmr() throws Exception {
+ String oldGivenName = randomAlphabetic(10);
+ String placeOfBirth = randomAlphabetic(10);
+ RegisterResult firstZmrResult = randomRegisterResult(oldGivenName, randomBpk, placeOfBirth);
+ Mockito.when(zmrClient.searchWithPersonIdentifier(null, randomPseudonym, DE))
+ .thenReturn(zmrRegisterResult(firstZmrResult));
+
+ Mockito.when(zmrClient.searchCountrySpecific(any(), any(), any()))
+ .thenThrow(new IllegalStateException("CountrySpecific search search should not be neccessary"));
+ Mockito.when(zmrClient.searchWithMds(any(), any(), any(), any(), any()))
+ .thenThrow(new IllegalStateException("MDS search should not be neccessary"));
+ Mockito.when(zmrClient.update(any(), any(), any()))
+ .thenReturn(zmrRegisterResult(firstZmrResult));
+
+ Mockito.when(ernpClient.searchWithPersonIdentifier(randomPseudonym, DE))
+ .thenReturn(emptyErnpRegisterResult());
+ Mockito.when(ernpClient.searchWithMds(any(), any(), any(), any()))
+ .thenThrow(new IllegalStateException("MDS search should not be neccessary"));
+ Mockito.when(ernpClient.update(any(), any()))
+ .thenThrow(new IllegalStateException("ERnP update should not be neccessary"));
+
+ // 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, randomBpk, randomFamilyName, oldGivenName, randomBirthDate, DE);
+
+ }
+
+ /**
+ *
+ * One match, but register update needed.
+ *
+ * @throws EidasSAuthenticationException
+ */
+ @Test
+ @DirtiesContext
+ public void singlePersonalIdMatchUpdateNecessary_Ernp() throws TaskExecutionException, EidasSAuthenticationException {
+ Mockito.when(zmrClient.searchWithPersonIdentifier(null, randomPseudonym, DE))
+ .thenReturn(emptyZmrRegisterResult());
+ Mockito.when(zmrClient.searchCountrySpecific(any(), any(), any()))
+ .thenThrow(new IllegalStateException("CountrySpecific search search should not be neccessary"));
+ Mockito.when(zmrClient.searchWithMds(any(), any(), any(), any(), any()))
+ .thenThrow(new IllegalStateException("MDS search should not be neccessary"));
+ Mockito.when(zmrClient.update(any(), any(), any()))
+ .thenThrow(new IllegalStateException("ZMR update should not be neccessary"));
+
+ String oldRandomGivenName = randomAlphabetic(10);
+ Mockito.when(ernpClient.searchWithPersonIdentifier(randomPseudonym, DE))
+ .thenReturn(ernpRegisterResult(randomRegisterResult(oldRandomGivenName, randomBpk)));
+ Mockito.when(ernpClient.searchCountrySpecific(any(), any()))
+ .thenThrow(new IllegalStateException("CountrySpecific search search should not be neccessary"));
+ Mockito.when(ernpClient.searchWithMds(any(), any(), any(), any()))
+ .thenThrow(new IllegalStateException("MDS search should not be neccessary"));
+ Mockito.when(ernpClient.update(any(), any()))
+ .thenReturn(ernpRegisterResult(RegisterResult.builder()
+ .bpk(randomBpk)
+ .dateOfBirth(randomBirthDate)
+ .givenName(randomGivenName)
+ .familyName(randomFamilyName)
+ .build()));
+
+ // execute test
+ task.execute(pendingReq, executionContext);
+
+ // validate state
+ checkMatchingSuccessState(pendingReq, randomBpk, randomFamilyName, randomGivenName, randomBirthDate, DE);
+ }
+
+
+
+ /**
+ * Two matches by PersonalId found in ZMR
+ *
+ * @throws EidasSAuthenticationException
+ */
+ @Test
+ @DirtiesContext
+ public void multiPersonalIdMatch_Zmr() throws EidasSAuthenticationException {
+ String newRandomGivenName = randomAlphabetic(10);
+ Mockito.when(zmrClient.searchWithPersonIdentifier(null, randomPseudonym, DE))
+ .thenReturn(new ZmrRegisterResult(Arrays.asList(randomRegisterResult(), randomRegisterResult(newRandomGivenName, randomBpk)), generateRandomProcessId()));
+ Mockito.when(ernpClient.searchWithPersonIdentifier(randomPseudonym, DE))
+ .thenReturn(emptyErnpRegisterResult());
+
+ // 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());
+
+ }
+
+ /**
+ * Two matches by PersonalId found in ZMR
+ *
+ * @throws EidasSAuthenticationException
+ */
+ @Test
+ @DirtiesContext
+ public void withErrorFromZmr() throws EidasSAuthenticationException {
+ Mockito.when(zmrClient.searchWithPersonIdentifier(null, randomPseudonym, DE))
+ .thenThrow(new ZmrCommunicationException("jUnit ZMR error", null));
+ Mockito.when(ernpClient.searchWithPersonIdentifier(randomPseudonym, DE))
+ .thenReturn(emptyErnpRegisterResult());
+
+ // execute task
+ TaskExecutionException exception = assertThrows(TaskExecutionException.class,
+ () -> task.execute(pendingReq, executionContext));
+
+
+ // validate state
+ assertTrue("Wrong exception", (exception.getOriginalException() instanceof WorkflowException));
+ assertFalse("Wrong flag 'manualFixNeeded'",
+ ((WorkflowException) exception.getOriginalException()).isRequiresManualFix());
+
+ }
+
+ /**
+ * Two matches by PersonalId found in ErnP
+ *
+ * @throws EidasSAuthenticationException
+ */
+ @Test
+ @DirtiesContext
+ public void multiPersonalIdMatch_Ernp() throws EidasSAuthenticationException {
+ Mockito.when(zmrClient.searchWithPersonIdentifier(null, randomPseudonym, DE))
+ .thenReturn(emptyZmrRegisterResult());
+ String newRandomGivenName = randomAlphabetic(10);
+ Mockito.when(ernpClient.searchWithPersonIdentifier(randomPseudonym, DE))
+ .thenReturn(ernpRegisterResult(
+ Arrays.asList(randomRegisterResult(), randomRegisterResult(newRandomGivenName, randomBpk))));
+
+ // 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());
+
+ }
+
+ /**
+ * Two matches by PersonalId
+ *
+ * @throws EidasSAuthenticationException
+ */
+ @Test
+ @DirtiesContext
+ public void multiPersonalIdMatch_ErnpAndZmr() throws EidasSAuthenticationException {
+ Mockito.when(zmrClient.searchWithPersonIdentifier(null, randomPseudonym, DE))
+ .thenReturn(zmrRegisterResult(randomRegisterResult()));
+ Mockito.when(ernpClient.searchWithPersonIdentifier(randomPseudonym, DE))
+ .thenReturn(ernpRegisterResult(randomRegisterResult()));
+
+ // 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());
+
+ }
+
+ /**
+ * One match by PersonalId, no register update needed
+ */
+ @Test
+ @DirtiesContext
+ public void singlePersonalIdMatchNoUpdate_Ernp() throws Exception {
+ Mockito.when(zmrClient.searchWithPersonIdentifier(null, randomPseudonym, DE))
+ .thenReturn(emptyZmrRegisterResult());
+ Mockito.when(ernpClient.searchWithPersonIdentifier(randomPseudonym, DE))
+ .thenReturn(ernpRegisterResult(randomRegisterResult()));
+
+ Mockito.when(zmrClient.update(any(), any(), any()))
+ .thenThrow(new IllegalStateException("ZMR update should not be neccessary"));
+ Mockito.when(ernpClient.update(any(), any()))
+ .thenThrow(new IllegalStateException("ERnP update should not be neccessary"));
+
+ // execute test
+ task.execute(pendingReq, executionContext);
+
+ // validate state
+ checkMatchingSuccessState(pendingReq, randomBpk, randomFamilyName, randomGivenName, randomBirthDate, DE);
+ }
+
+ /**
+ * One match by PersonalId, no register update needed
+ */
+ @Test
+ @DirtiesContext
+ public void singlePersonalIdMatchNoUpdate_Zmr() throws Exception {
+ Mockito.when(zmrClient.searchWithPersonIdentifier(null, randomPseudonym, DE))
+ .thenReturn(zmrRegisterResult(randomRegisterResult()));
+ Mockito.when(ernpClient.searchWithPersonIdentifier(randomPseudonym, DE))
+ .thenReturn(emptyErnpRegisterResult());
+
+ Mockito.when(zmrClient.update(any(), any(), any()))
+ .thenThrow(new IllegalStateException("ZMR update should not be neccessary"));
+ Mockito.when(ernpClient.update(any(), any()))
+ .thenThrow(new IllegalStateException("ERnP update should not be neccessary"));
+
+ // execute test
+ task.execute(pendingReq, executionContext);
+
+ // validate state
+ checkMatchingSuccessState(pendingReq, randomBpk, randomFamilyName, randomGivenName, randomBirthDate, DE);
+ }
+
+ /**
+ * Find single person in ZMR by country specifics.
+ */
+ @Test
+ @DirtiesContext
+ public void singlePersonFindWithCountySpecifics_Zmr() throws Exception {
+ final AuthenticationResponse response = buildDummyAuthResponseDE(randomGivenName, randomFamilyName,
+ randomPersonalIdentifier_DE, randomBirthDate, randomPlaceOfBirth, randomBirthName);
+ TestRequestImpl pendingReq1 = new TestRequestImpl();
+ pendingReq1.getSessionData(AuthProcessDataWrapper.class)
+ .setGenericDataToSession(Constants.DATA_FULL_EIDAS_RESPONSE, response);
+
+ BigInteger zmrProcessId = generateRandomProcessId();
+ RegisterResult zmrResult = RegisterResult.builder()
+ .bpk(randomBpk)
+ .pseudonym(Collections.singletonList(randomPseudonym))
+ .givenName(randomGivenName)
+ .familyName(randomFamilyName)
+ .dateOfBirth(randomBirthDate)
+ .placeOfBirth(randomPlaceOfBirth)
+ .birthName(randomBirthName)
+ .build();
+ Mockito.when(zmrClient.searchWithPersonIdentifier(null, randomPseudonym, DE))
+ .thenReturn(new ZmrRegisterResult(Collections.emptyList(), zmrProcessId));
+ Mockito.when(zmrClient.searchCountrySpecific(eq(zmrProcessId), any(PersonSuchenRequest.class), eq(DE)))
+ .thenReturn(zmrRegisterResult(zmrResult, zmrProcessId));
+ RegisterResult randomRegisterResult = RegisterResult.builder()
+ .bpk(randomBpk)
+ .pseudonym(Arrays.asList(randomPseudonym, RandomStringUtils.randomAlphanumeric(10)))
+ .givenName(randomGivenName)
+ .familyName(randomFamilyName)
+ .dateOfBirth(randomBirthDate)
+ .placeOfBirth(randomPlaceOfBirth)
+ .birthName(randomBirthName)
+ .build();
+ Mockito.when(zmrClient.update(eq(zmrProcessId), eq(zmrResult), any()))
+ .thenReturn(zmrRegisterResult(randomRegisterResult, zmrProcessId));
+ Mockito.when(zmrClient.searchWithMds(any(), any(), any(), any(), any()))
+ .thenThrow(new IllegalStateException("MDS search should not be neccessary"));
+
+ Mockito.when(ernpClient.searchWithPersonIdentifier(randomPseudonym, DE))
+ .thenReturn(emptyErnpRegisterResult());
+ Mockito.when(ernpClient.searchCountrySpecific(any(), eq(DE)))
+ .thenReturn(emptyErnpRegisterResult());
+ Mockito.when(ernpClient.searchWithMds(any(), any(), any(), eq(DE)))
+ .thenThrow(new IllegalStateException("ERnP MDS search should not be neccessary"));
+ Mockito.when(ernpClient.update(any(), any()))
+ .thenThrow(new IllegalStateException("ERnP update should not be neccessary"));
+ Mockito.when(ernpClient.add(any()))
+ .thenThrow(new IllegalStateException("ERnP add-entity should not be neccessary"));
+
+ // execute test
+ task.execute(pendingReq1, executionContext);
+
+ // validate state
+ checkMatchingSuccessState(pendingReq1, randomBpk, randomFamilyName, randomGivenName, randomBirthDate, DE);
+
+ }
+
+ /**
+ * Multiple matches found in ZMR by country specifics.
+ */
+ @Test
+ @DirtiesContext
+ public void multiplePersonFindWithCountySpecifics_Zmr() throws Exception {
+ String newRandomPseudonym = randomPersonalIdentifier_DE + RandomStringUtils.randomNumeric(2);
+ String newRandomBpk = randomBpk + RandomStringUtils.randomNumeric(6);
+ final AuthenticationResponse response = buildDummyAuthResponseDE(randomGivenName, randomFamilyName,
+ randomPersonalIdentifier_DE,
+ randomBirthDate, randomPlaceOfBirth, randomBirthName);
+ TestRequestImpl pendingReq1 = new TestRequestImpl();
+ pendingReq1.getSessionData(AuthProcessDataWrapper.class)
+ .setGenericDataToSession(Constants.DATA_FULL_EIDAS_RESPONSE, response);
+
+ BigInteger zmrProcessId = generateRandomProcessId();
+ Mockito.when(zmrClient.searchWithPersonIdentifier(null, randomPseudonym, DE))
+ .thenReturn(new ZmrRegisterResult(Collections.emptyList(), zmrProcessId));
+ RegisterResult randomResult1 = RegisterResult.builder()
+ .bpk(randomBpk)
+ .pseudonym(Collections.singletonList(randomPseudonym))
+ .givenName(randomGivenName)
+ .familyName(randomFamilyName)
+ .dateOfBirth(randomBirthDate)
+ .placeOfBirth(randomPlaceOfBirth)
+ .birthName(randomBirthName)
+ .build();
+ RegisterResult randomResult2 = RegisterResult.builder()
+ .bpk(newRandomBpk)
+ .pseudonym(Collections.singletonList(newRandomPseudonym))
+ .givenName(randomGivenName)
+ .familyName(randomFamilyName)
+ .dateOfBirth(randomBirthDate)
+ .placeOfBirth(randomPlaceOfBirth)
+ .birthName(randomBirthName)
+ .build();
+ Mockito.when(zmrClient.searchCountrySpecific(eq(zmrProcessId), any(PersonSuchenRequest.class), eq(DE)))
+ .thenReturn(new ZmrRegisterResult(Arrays.asList(randomResult1, randomResult2), zmrProcessId));
+
+ Mockito.when(ernpClient.searchWithPersonIdentifier(randomPseudonym, DE))
+ .thenReturn(emptyErnpRegisterResult());
+ Mockito.when(ernpClient.searchCountrySpecific(any(), eq(DE)))
+ .thenReturn(emptyErnpRegisterResult());
+ Mockito.when(ernpClient.update(any(), any()))
+ .thenThrow(new IllegalStateException("ERnP update should not be neccessary"));
+
+ // execute task
+ TaskExecutionException exception = assertThrows(TaskExecutionException.class,
+ () -> task.execute(pendingReq1, executionContext));
+
+ // validate state
+ assertTrue("Wrong exception", (exception.getOriginalException() instanceof WorkflowException));
+ assertTrue("Wrong flag 'manualFixNeeded'",
+ ((WorkflowException) exception.getOriginalException()).isRequiresManualFix());
+
+ }
+
+ /**
+ * Multiple matches found in ZMR and ERnP by country specifics.
+ */
+ @Test
+ @DirtiesContext
+ public void multiplePersonFindWithCountySpecifics_ZmrAndErnp() throws Exception {
+ final AuthenticationResponse response = buildDummyAuthResponseDE(randomGivenName, randomFamilyName,
+ randomPersonalIdentifier_DE,
+ randomBirthDate, randomPlaceOfBirth, randomBirthName);
+ TestRequestImpl pendingReq1 = new TestRequestImpl();
+ pendingReq1.getSessionData(AuthProcessDataWrapper.class)
+ .setGenericDataToSession(Constants.DATA_FULL_EIDAS_RESPONSE, response);
+
+ BigInteger zmrProcessId = generateRandomProcessId();
+ Mockito.when(zmrClient.searchWithPersonIdentifier(null, randomPseudonym, DE))
+ .thenReturn(new ZmrRegisterResult(Collections.emptyList(), zmrProcessId));
+ RegisterResult randomResult1 = RegisterResult.builder()
+ .bpk(randomBpk)
+ .pseudonym(Collections.singletonList(randomPseudonym))
+ .givenName(randomGivenName)
+ .familyName(randomFamilyName)
+ .dateOfBirth(randomBirthDate)
+ .placeOfBirth(randomPlaceOfBirth)
+ .birthName(randomBirthName)
+ .build();
+ Mockito.when(zmrClient.searchCountrySpecific(eq(zmrProcessId), any(PersonSuchenRequest.class), eq(DE)))
+ .thenReturn(new ZmrRegisterResult(Arrays.asList(randomResult1), zmrProcessId));
+
+ Mockito.when(ernpClient.searchWithPersonIdentifier(randomPseudonym, DE))
+ .thenReturn(emptyErnpRegisterResult());
+ Mockito.when(ernpClient.searchCountrySpecific(any(), eq(DE)))
+ .thenReturn(ernpRegisterResult(randomRegisterResult()));
+ Mockito.when(ernpClient.update(any(), any()))
+ .thenThrow(new IllegalStateException("ERnP update should not be neccessary"));
+
+ // execute task
+ TaskExecutionException exception = assertThrows(TaskExecutionException.class,
+ () -> task.execute(pendingReq1, executionContext));
+
+ // validate state
+ assertTrue("Wrong exception", (exception.getOriginalException() instanceof WorkflowException));
+ assertTrue("Wrong flag 'manualFixNeeded'",
+ ((WorkflowException) exception.getOriginalException()).isRequiresManualFix());
+
+ }
+
+ /**
+ * Multiple matches found in ERnP by country specifics.
+ */
+ @Test
+ @DirtiesContext
+ public void multiplePersonFindWithCountySpecifics_Ernp() throws Exception {
+ final AuthenticationResponse response = buildDummyAuthResponseDE(randomGivenName, randomFamilyName,
+ randomPersonalIdentifier_DE,
+ randomBirthDate, randomPlaceOfBirth, randomBirthName);
+ TestRequestImpl pendingReq1 = new TestRequestImpl();
+ pendingReq1.getSessionData(AuthProcessDataWrapper.class)
+ .setGenericDataToSession(Constants.DATA_FULL_EIDAS_RESPONSE, response);
+
+ BigInteger zmrProcessId = generateRandomProcessId();
+ Mockito.when(zmrClient.searchWithPersonIdentifier(null, randomPseudonym, DE))
+ .thenReturn(new ZmrRegisterResult(Collections.emptyList(), zmrProcessId));
+ Mockito.when(zmrClient.searchCountrySpecific(eq(zmrProcessId), any(PersonSuchenRequest.class), eq(DE)))
+ .thenReturn(new ZmrRegisterResult(Arrays.asList(), zmrProcessId));
+
+ Mockito.when(ernpClient.searchWithPersonIdentifier(randomPseudonym, DE))
+ .thenReturn(emptyErnpRegisterResult());
+ Mockito.when(ernpClient.searchCountrySpecific(any(), eq(DE)))
+ .thenReturn(ernpRegisterResult(Arrays.asList(randomRegisterResult(), randomRegisterResult())));
+ Mockito.when(ernpClient.update(any(), any()))
+ .thenThrow(new IllegalStateException("ERnP update should not be neccessary"));
+
+ // execute task
+ TaskExecutionException exception = assertThrows(TaskExecutionException.class,
+ () -> task.execute(pendingReq1, executionContext));
+
+ // validate state
+ assertTrue("Wrong exception", (exception.getOriginalException() instanceof WorkflowException));
+ assertTrue("Wrong flag 'manualFixNeeded'",
+ ((WorkflowException) exception.getOriginalException()).isRequiresManualFix());
+
+ }
+
+ /**
+ * NO match found in ZMR and ErnP with Initial and MDS search
+ *
+ * @throws EidasSAuthenticationException
+ * @throws URISyntaxException
+ * @throws EaafStorageException
+ */
+ @Test
+ @DirtiesContext
+ public void noResultByAnySearch() throws TaskExecutionException, EidasSAuthenticationException, URISyntaxException, EaafStorageException {
+ BigInteger zmrProcessId = generateRandomProcessId();
+ pendingReq.getSessionData(AuthProcessDataWrapper.class)
+ .setGenericDataToSession(Constants.DATA_FULL_EIDAS_RESPONSE,
+ buildDummyAuthResponse(randomGivenName, randomFamilyName, randomPersonalIdentifier_EE, randomBirthDate));
+
+ Mockito.when(zmrClient.searchWithPersonIdentifier(null, randomPseudonym, EE))
+ .thenReturn(new ZmrRegisterResult(Collections.emptyList(), zmrProcessId));
+ Mockito.when(zmrClient.searchWithMds(zmrProcessId, randomGivenName, randomFamilyName, randomBirthDate, EE))
+ .thenReturn(new ZmrRegisterResult(Collections.emptyList(), zmrProcessId));
+ Mockito.when(zmrClient.update(any(), any(), any()))
+ .thenThrow(new IllegalStateException("ZMR update should not be neccessary"));
+
+ Mockito.when(ernpClient.searchWithPersonIdentifier(randomPseudonym, EE))
+ .thenReturn(emptyErnpRegisterResult());
+ Mockito.when(ernpClient.searchWithMds(randomGivenName, randomFamilyName, randomBirthDate, EE))
+ .thenReturn(new ErnpRegisterResult(Collections.emptyList()));
+ Mockito.when(ernpClient.update(any(), any()))
+ .thenThrow(new IllegalStateException("ZMR update should not be neccessary"));
+
+ // execute task
+ task.execute(pendingReq, executionContext);
+
+
+ // validate state
+ assertNotNull("find no eIDAS inbut data", MatchingTaskUtils.getInitialEidasData(pendingReq));
+
+ assertNull("Find intermediate matching data but matching should be finished",
+ MatchingTaskUtils.getIntermediateMatchingResult(pendingReq));
+ assertNull("Find final matching data but no match sould be found",
+ MatchingTaskUtils.getFinalMatchingResult(pendingReq));
+
+ Boolean transitionGUI = (Boolean) executionContext.get(Constants.TRANSITION_TO_GENERATE_OTHER_LOGIN_METHOD_GUI_TASK);
+ Assert.assertNull("Wrong transition", transitionGUI);
+ Boolean transitionErnb = (Boolean) executionContext.get(Constants.TRANSITION_TO_CREATE_NEW_ERNP_ENTRY_TASK);
+ Assert.assertTrue("Wrong transition", transitionErnb);
+
+ }
+
+ /**
+ * Find one match with MDS search in ERnP.
+ */
+ @Test
+ @DirtiesContext
+ public void resultByMdsSearch_Ernb() throws TaskExecutionException, EidasSAuthenticationException, URISyntaxException, EaafStorageException {
+ BigInteger zmrProcessId = generateRandomProcessId();
+ pendingReq.getSessionData(AuthProcessDataWrapper.class)
+ .setGenericDataToSession(Constants.DATA_FULL_EIDAS_RESPONSE,
+ buildDummyAuthResponse(randomGivenName, randomFamilyName, randomPersonalIdentifier_EE, randomBirthDate));
+
+ Mockito.when(zmrClient.searchWithPersonIdentifier(null, randomPseudonym, EE))
+ .thenReturn(new ZmrRegisterResult(Collections.emptyList(), zmrProcessId));
+ Mockito.when(zmrClient.searchWithMds(zmrProcessId, randomGivenName, randomFamilyName, randomBirthDate, EE))
+ .thenReturn(new ZmrRegisterResult(Collections.emptyList(), zmrProcessId));
+
+ Mockito.when(ernpClient.searchWithPersonIdentifier(randomPseudonym, EE))
+ .thenReturn(emptyErnpRegisterResult());
+ Mockito.when(ernpClient.searchWithMds(randomGivenName, randomFamilyName, randomBirthDate, EE))
+ .thenReturn(ernpRegisterResult(randomRegisterResult()));
+
+ // execute test
+ task.execute(pendingReq, executionContext);
+
+ // validate state
+ checkIntermediateResult(1);
+
+ }
+
+ /**
+ * Find one match with MDS search in ZMR.
+ */
+ @Test
+ @DirtiesContext
+ public void resultByMdsSearch_Zmr() throws TaskExecutionException, EidasSAuthenticationException {
+ BigInteger zmrProcessId = generateRandomProcessId();
+ Mockito.when(zmrClient.searchWithPersonIdentifier(null, randomPseudonym, DE))
+ .thenReturn(new ZmrRegisterResult(Collections.emptyList(), zmrProcessId));
+ Mockito.when(zmrClient.searchWithMds(zmrProcessId, randomGivenName, randomFamilyName, randomBirthDate, DE))
+ .thenReturn(zmrRegisterResult(randomRegisterResult(), zmrProcessId));
+ Mockito.when(zmrClient.update(any(), any(), any()))
+ .thenThrow(new IllegalStateException("ZMR update should not be neccessary"));
+
+ Mockito.when(ernpClient.searchWithPersonIdentifier(randomPseudonym, DE)).thenReturn(
+ emptyErnpRegisterResult());
+ Mockito.when(ernpClient.searchWithMds(randomGivenName, randomFamilyName, randomBirthDate, DE))
+ .thenReturn(emptyErnpRegisterResult());
+ Mockito.when(ernpClient.update(any(), any()))
+ .thenThrow(new IllegalStateException("ERnP update should not be neccessary"));
+
+
+
+ // execute test
+ task.execute(pendingReq, executionContext);
+
+ // validate state
+ checkIntermediateResult(1);
+
+ }
+
+ /**
+ * Find matches with MDS search in ZMR and ERnP.
+ */
+ @Test
+ @DirtiesContext
+ public void resultByMdsSearch_ZmrAndErnp() throws TaskExecutionException, EidasSAuthenticationException {
+ BigInteger zmrProcessId = generateRandomProcessId();
+ Mockito.when(zmrClient.searchWithPersonIdentifier(null, randomPseudonym, DE))
+ .thenReturn(new ZmrRegisterResult(Collections.emptyList(), zmrProcessId));
+ Mockito.when(zmrClient.searchWithMds(zmrProcessId, randomGivenName, randomFamilyName, randomBirthDate, DE))
+ .thenReturn(zmrRegisterResult(randomRegisterResult(), zmrProcessId));
+ Mockito.when(zmrClient.update(any(), any(), any()))
+ .thenThrow(new IllegalStateException("ZMR update should not be neccessary"));
+
+ Mockito.when(ernpClient.searchWithPersonIdentifier(randomPseudonym, DE)).thenReturn(
+ emptyErnpRegisterResult());
+ Mockito.when(ernpClient.searchWithMds(randomGivenName, randomFamilyName, randomBirthDate, DE))
+ .thenReturn(ernpRegisterResult(randomRegisterResult()));
+ Mockito.when(ernpClient.update(any(), any()))
+ .thenThrow(new IllegalStateException("ERnP update should not be neccessary"));
+
+
+
+ // execute test
+ task.execute(pendingReq, executionContext);
+
+ // validate state
+ checkIntermediateResult(2);
+
+ }
+
+ /**
+ * resultByMdsSearch
+ */
+ @Test
+ @DirtiesContext
+ public void multipleResultsByMdsSearch() throws TaskExecutionException, EidasSAuthenticationException {
+ BigInteger zmrProcessId = generateRandomProcessId();
+ Mockito.when(zmrClient.searchWithPersonIdentifier(null, randomPseudonym, DE))
+ .thenReturn(new ZmrRegisterResult(Collections.emptyList(), zmrProcessId));
+ Mockito.when(zmrClient.searchCountrySpecific(eq(zmrProcessId), any(PersonSuchenRequest.class), any(String.class)))
+ .thenReturn(new ZmrRegisterResult(Collections.emptyList(), zmrProcessId));
+ Mockito.when(zmrClient.searchWithMds(zmrProcessId, randomGivenName, randomFamilyName, randomBirthDate, DE))
+ .thenReturn(zmrRegisterResult(randomRegisterResult(randomBpk + "2"), zmrProcessId));
+ Mockito.when(zmrClient.update(any(), any(), any()))
+ .thenThrow(new IllegalStateException("ZMR update should not be neccessary"));
+
+ Mockito.when(ernpClient.searchWithPersonIdentifier(randomPseudonym, DE))
+ .thenReturn(emptyErnpRegisterResult());
+ Mockito.when(ernpClient.searchWithMds(randomGivenName, randomFamilyName, randomBirthDate, DE))
+ .thenReturn(ernpRegisterResult(Arrays.asList(randomRegisterResult(), randomRegisterResult(randomBpk + "1"))));
+
+ // execute test
+ task.execute(pendingReq, executionContext);
+
+ // validate state
+ checkIntermediateResult(3);
+
+ }
+
+ @NotNull
+ private ZmrSoapClient.ZmrRegisterResult emptyZmrRegisterResult() {
+ return new ZmrRegisterResult(Collections.emptyList(), generateRandomProcessId());
+ }
+
+ @NotNull
+ private ErnpRegisterResult emptyErnpRegisterResult() {
+ return new ErnpRegisterResult(Collections.emptyList());
+ }
+
+ @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());
+ }
+
+ @NotNull
+ private ErnpRegisterResult ernpRegisterResult(RegisterResult registerResult) {
+ return new ErnpRegisterResult(Collections.singletonList(registerResult));
+ }
+
+ @NotNull
+ private ErnpRegisterResult ernpRegisterResult(List<RegisterResult> registerResult) {
+ return new ErnpRegisterResult(registerResult);
+ }
+
+ @NotNull
+ private RegisterResult randomRegisterResult() {
+ return randomRegisterResult(randomGivenName, randomBpk);
+ }
+
+ @NotNull
+ private RegisterResult randomRegisterResult(String randomBpk) {
+ return randomRegisterResult(randomGivenName, randomBpk);
+ }
+
+ @NotNull
+ private RegisterResult randomRegisterResult(String randomGivenName, String randomBpk) {
+ return RegisterResult.builder()
+ .bpk(randomBpk)
+ .pseudonym(Collections.singletonList(randomPseudonym))
+ .givenName(randomGivenName)
+ .familyName(randomFamilyName)
+ .dateOfBirth(randomBirthDate)
+ .build();
+ }
+
+ @NotNull
+ private RegisterResult randomRegisterResult(String randomGivenName, String randomBpk, String placeOfBirth) {
+ return RegisterResult.builder()
+ .bpk(randomBpk)
+ .pseudonym(Collections.singletonList(randomPseudonym))
+ .givenName(randomGivenName)
+ .familyName(randomFamilyName)
+ .dateOfBirth(randomBirthDate)
+ .placeOfBirth(placeOfBirth)
+ .build();
+ }
+
+ @NotNull
+ private AuthenticationResponse buildDummyAuthResponseRandomPerson() throws URISyntaxException {
+ return buildDummyAuthResponse(randomGivenName, randomFamilyName, DE_ST + randomPseudonym, randomBirthDate);
+ }
+
+ 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();
+ }
+
+}
diff --git a/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/InitialSearchTaskWithRegistersTest.java b/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..6d0e7c31
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/InitialSearchTaskWithRegistersTest.java
@@ -0,0 +1,683 @@
+/*
+ * 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.io.IOUtils;
+import org.apache.commons.lang3.RandomStringUtils;
+import org.jetbrains.annotations.NotNull;
+import org.junit.AfterClass;
+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.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.ernp.IErnpClient;
+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.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.ErnpRestClientTest;
+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;
+import okhttp3.mockwebserver.MockResponse;
+import okhttp3.mockwebserver.MockWebServer;
+
+@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();
+
+ @Autowired IErnpClient ernpClient;
+ @Autowired IZmrClient zmrClient;
+ @Autowired List<CountrySpecificDetailSearchProcessor> handlers;
+
+ private RegisterSearchService registerSearchService;
+
+ private ServicePort zmrMock = null;
+
+ private static MockWebServer mockWebServer;
+
+ 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);
+
+ mockWebServer = new MockWebServer();
+ mockWebServer.start(1718);
+
+ }
+
+ @AfterClass
+ @SneakyThrows
+ public static void resetTestEnviroment() {
+ mockWebServer.shutdown();
+
+ }
+
+ /**
+ * jUnit test set-up.
+ */
+ @Before
+ @SneakyThrows
+ public void setUp() throws URISyntaxException, EaafStorageException {
+ 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
+ * <p>
+ * <b>Check if ZMR update request is NOT executed in case of MDS change!</b>
+ * </p>
+ */
+ @Test
+ @DirtiesContext
+ public void singlePersonalIdMatchUpdateNecessary_ZmrNotDone() 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"))
+
+ //perform prepair-update request
+ .thenReturn(loadResponseFromFile("/data/zmr/seq_1-8_search_with_personalId_only_resp.xml"))
+
+ //do not make an update because, MDS update is not allowed and no other data has been changed
+ .thenThrow(new RuntimeException("This request is not needed any more"));
+
+ mockWebServer.enqueue(new MockResponse().setResponseCode(200)
+ .setBody("{}")
+ .setHeader("Content-Type", "application/json;charset=utf-8"));
+
+
+ // 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.", 2, zmrReq.getAllValues().size());
+ assertNotNull("Personensuche req.", zmrReq.getValue().getPersonSuchenRequest());
+ checkBasicRequestParameters(zmrReq.getValue(), ZmrClientTest.PROCESS_TASK_SEARCH,
+ new BigInteger("367100000000079"), "jUnit123456");
+
+ }
+
+ /**
+ * One match, but register update needed
+ * <p>
+ * <b>Check if ZMR update request is executed in case of other data than MDS change!</b>
+ * </p>
+ */
+ @Test
+ @DirtiesContext
+ public void singlePersonalIdMatchUpdateNecessary_ZmrDone() throws Exception {
+
+ String oldGivenName = "XXXClaus - Maria";
+ String placeOfBirth = RandomStringUtils.randomAlphabetic(5);
+
+ //inject eIDAS data
+ pendingReq.getSessionData(AuthProcessDataWrapper.class).setGenericDataToSession(
+ Constants.DATA_FULL_EIDAS_RESPONSE,
+ buildDummyAuthResponse(oldGivenName, "XXXvon Brandenburg",
+ "DE/AT/7cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit", "1994-12-31", null, placeOfBirth, null));
+
+ 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_no_additional_attributes.xml"))
+
+ //perform prepair-update request
+ .thenReturn(loadResponseFromFile("/data/zmr/seq_1-8_search_with_personalId_only_resp_no_additional_attributes.xml"))
+
+ //do make an update because, MDS DOES NOT change, but additional attribute was available
+ .thenReturn(loadResponseFromFile("/data/zmr/seq_3-6_kitt_update_resp.xml"));
+
+ mockWebServer.enqueue(new MockResponse().setResponseCode(200)
+ .setBody("{}")
+ .setHeader("Content-Type", "application/json;charset=utf-8"));
+
+ // 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.", 3, zmrReq.getAllValues().size());
+ assertNotNull("Personensuche req.", zmrReq.getAllValues().get(0).getPersonSuchenRequest());
+ checkBasicRequestParameters(zmrReq.getAllValues().get(0), ZmrClientTest.PROCESS_TASK_SEARCH, null, "jUnit123456");
+
+ assertNotNull("Personenupdate req.", zmrReq.getAllValues().get(2).getPersonAendernRequest());
+ checkBasicRequestParameters(zmrReq.getAllValues().get(2), ZmrClientTest.PROCESS_TASK_UPDATE,
+ new BigInteger("367100000000079"), "jUnit123456");
+ assertEquals("eIDAS attribute to add", 4,
+ zmrReq.getAllValues().get(2).getPersonAendernRequest().getEidasIdentitaetAnlage().size());
+ assertNull("ZMR update MDS", zmrReq.getAllValues().get(2).getPersonAendernRequest().getPersonAenderung());
+
+ }
+
+
+ /**
+ * 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_Ernp() throws Exception {
+ //inject eIDAS data
+ pendingReq.getSessionData(AuthProcessDataWrapper.class).setGenericDataToSession(
+ Constants.DATA_FULL_EIDAS_RESPONSE,
+ buildDummyAuthResponse("vdqZZIaA", "mRjMKAQc",
+ "DE/AT/nj1m79jm9z", "1996-01-01",
+ null, "VRNCAylF", "miEklFHC"));
+
+ 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
+ .thenThrow(new RuntimeException("This request is not needed any more"));
+
+ mockWebServer.enqueue(new MockResponse().setResponseCode(200) //personalId search
+ .setBody("{}")
+ .setHeader("Content-Type", "application/json;charset=utf-8"));
+ mockWebServer.enqueue(new MockResponse().setResponseCode(200) //CC specific search
+ .setBody(IOUtils.toString(
+ ErnpRestClientTest.class.getResourceAsStream("/data/ernp/2_search_with_cc_specific_resp.json"), "UTF-8"))
+ .setHeader("Content-Type", "application/json;charset=utf-8"));
+ mockWebServer.enqueue(new MockResponse().setResponseCode(200) //KITT search
+ .setBody(IOUtils.toString(
+ ErnpRestClientTest.class.getResourceAsStream("/data/ernp/2_kitt_search_latest_resp.json"), "UTF-8"))
+ .setHeader("Content-Type", "application/json;charset=utf-8"));
+ mockWebServer.enqueue(new MockResponse().setResponseCode(200) //KITT update
+ .setBody(IOUtils.toString(
+ ErnpRestClientTest.class.getResourceAsStream("/data/ernp/2_kitt_update_resp.json"), "UTF-8"))
+ .setHeader("Content-Type", "application/json;charset=utf-8"));
+
+ // execute test
+ task.execute(pendingReq, executionContext);
+
+ // validate state
+ checkMatchingSuccessState(pendingReq, "TBGoMlirU881e2jMGETa9WLx1+A=", "mRjMKAQc",
+ "vdqZZIaA", "1996-01-01", DE);
+
+ // 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 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"));
+
+ mockWebServer.enqueue(new MockResponse().setResponseCode(200)
+ .setBody("{}")
+ .setHeader("Content-Type", "application/json;charset=utf-8"));
+
+ mockWebServer.enqueue(new MockResponse().setResponseCode(200) //CC specific search
+ .setBody("{}")
+ .setHeader("Content-Type", "application/json;charset=utf-8"));
+
+
+ // 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"));
+
+ mockWebServer.enqueue(new MockResponse().setResponseCode(200)
+ .setBody("{}")
+ .setHeader("Content-Type", "application/json;charset=utf-8"));
+ mockWebServer.enqueue(new MockResponse().setResponseCode(200) //MDS specific search
+ .setBody("{}")
+ .setHeader("Content-Type", "application/json;charset=utf-8"));
+
+ // 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"));
+
+
+ mockWebServer.enqueue(new MockResponse().setResponseCode(200)
+ .setBody("{}")
+ .setHeader("Content-Type", "application/json;charset=utf-8"));
+ mockWebServer.enqueue(new MockResponse().setResponseCode(200) //CC specific search
+ .setBody("{}")
+ .setHeader("Content-Type", "application/json;charset=utf-8"));
+ mockWebServer.enqueue(new MockResponse().setResponseCode(200) //MDS specific search
+ .setBody(IOUtils.toString(
+ ErnpRestClientTest.class.getResourceAsStream("/data/ernp/3_search_with_mds_resp.json"), "UTF-8"))
+ .setHeader("Content-Type", "application/json;charset=utf-8"));
+
+
+ // execute test
+ task.execute(pendingReq, executionContext);
+
+ // validate state
+ checkIntermediateResult(3);
+
+ // 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/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/ReceiveAustrianResidenceGuiResponseTaskRegisterTest.java b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/ReceiveAustrianResidenceGuiResponseTaskRegisterTest.java
new file mode 100644
index 00000000..8d52baf3
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/ReceiveAustrianResidenceGuiResponseTaskRegisterTest.java
@@ -0,0 +1,339 @@
+package at.asitplus.eidas.specific.modules.auth.eidas.v2.test.tasks;
+
+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.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.when;
+
+import java.math.BigInteger;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBElement;
+import javax.xml.bind.JAXBException;
+import javax.xml.bind.Unmarshaller;
+
+import org.apache.commons.lang3.RandomStringUtils;
+import org.jetbrains.annotations.NotNull;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.i18n.LocaleContextHolder;
+import org.springframework.mock.web.MockHttpServletRequest;
+import org.springframework.mock.web.MockHttpServletResponse;
+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 com.google.common.collect.Lists;
+
+import at.asitplus.eidas.specific.core.test.config.dummy.MsConnectorDummyConfigMap;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.controller.AdresssucheController;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.controller.AdresssucheController.AdresssucheOutput;
+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.service.RegisterSearchService;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.service.RegisterSearchService.RegisterOperationStatus;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.service.RegisterSearchService.RegisterStatusResults;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.tasks.ReceiveAustrianResidenceGuiResponseTask;
+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.ResponseType;
+import at.gv.bmi.namespace.zmr_su.base._20040201_.ServicePort;
+import at.gv.egiz.eaaf.core.api.idp.process.ExecutionContext;
+import at.gv.egiz.eaaf.core.exceptions.EaafException;
+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 lombok.SneakyThrows;
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration(locations = {
+ "/SpringTest-context_tasks_test.xml",
+ "/SpringTest-context_basic_mapConfig.xml"
+})
+public class ReceiveAustrianResidenceGuiResponseTaskRegisterTest {
+
+ @Autowired
+ protected MsConnectorDummyConfigMap authConfig;
+
+ @Autowired
+ private RegisterSearchService registerSearchService;
+
+ @Rule
+ public SoapServiceRule soap = SoapServiceRule.newInstance();
+ private ServicePort zmrMock = null;
+ private static JAXBContext jaxbContext;
+
+ private ReceiveAustrianResidenceGuiResponseTask task;
+ private ExecutionContext executionContext;
+ private MockHttpServletRequest httpReq;
+ private MockHttpServletResponse httpResp;
+ private TestRequestImpl pendingReq;
+
+
+ /**
+ * 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.
+ *
+ * @throws Exception In case of an set-up error
+ */
+ @Before
+ public void setUp() throws Exception {
+ if (zmrMock == null) {
+ zmrMock = soap.mock(ServicePort.class, "http://localhost:1234/demozmr");
+
+ }
+
+ executionContext = new ExecutionContextImpl();
+ task = new ReceiveAustrianResidenceGuiResponseTask(registerSearchService);
+
+ httpReq = new MockHttpServletRequest("POST", "https://localhost/ms_connector");
+ httpResp = new MockHttpServletResponse();
+ RequestContextHolder.resetRequestAttributes();
+ RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(httpReq, httpResp));
+
+ pendingReq = new TestRequestImpl();
+ pendingReq.setAuthUrl("https://localhost/ms_connector");
+ pendingReq.setPendingReqId(RandomStringUtils.randomAlphanumeric(10));
+
+ LocaleContextHolder.resetLocaleContext();
+ }
+
+ @Test
+ public void canceledByUser() throws Exception {
+ RegisterStatusResults registerSearchResult = buildEmptyResult();
+ MatchingTaskUtils.storeIntermediateMatchingResult(pendingReq, registerSearchResult);
+ httpReq.setParameter(ReceiveAustrianResidenceGuiResponseTask.HTTP_PARAM_NO_RESIDENCE, "true");
+
+ task.execute(pendingReq, executionContext);
+
+ assertEquals("Transition To RequestInserErnp", true,
+ executionContext.get(Constants.TRANSITION_TO_REQUESTING_NEW_ERNP_ENTRY_TASK));
+ assertEquals("Transition To AddressSearchForm", false,
+ executionContext.get(Constants.TRANSITION_TO_GENERATE_GUI_QUERY_AUSTRIAN_RESIDENCE_TASK));
+ assertNull("matching failed flag", executionContext.get(Constants.CONTEXT_FLAG_ADVANCED_MATCHING_FAILED));
+ assertNull("no final matching result", MatchingTaskUtils.getFinalMatchingResult(pendingReq));
+
+ }
+
+ @Test
+ public void noRegisterResult() throws Exception {
+ setupUserInput();
+ setupEidasData();
+ RegisterStatusResults registerSearchResult = buildEmptyResult();
+ MatchingTaskUtils.storeIntermediateMatchingResult(pendingReq, registerSearchResult);
+
+ // inject ZMR response
+ when(zmrMock.service(any(), any()))
+ .thenReturn(loadResponseFromFile("/data/zmr/empty_zmr_result.xml"));
+
+ // execute task
+ task.execute(pendingReq, executionContext);
+
+ // validate state
+ assertEquals("Transition To RequestInserErnp", false, executionContext.get(Constants.TRANSITION_TO_REQUESTING_NEW_ERNP_ENTRY_TASK));
+ assertEquals("Transition To AddressSearchForm", true,
+ executionContext.get(Constants.TRANSITION_TO_GENERATE_GUI_QUERY_AUSTRIAN_RESIDENCE_TASK));
+ assertEquals("matching failed flag", true, executionContext.get(Constants.CONTEXT_FLAG_ADVANCED_MATCHING_FAILED));
+ assertEquals("failed reason", "module.eidasauth.matching.22", executionContext.get(Constants.CONTEXT_FLAG_ADVANCED_MATCHING_FAILED_REASON));
+ assertNull("no final matching result", MatchingTaskUtils.getFinalMatchingResult(pendingReq));
+
+ }
+
+ @Test
+ public void exactlyOneRegisterResult_Update() throws Exception {
+ setupUserInput();
+ SimpleEidasData eidasData = setupEidasData();
+ RegisterStatusResults registerSearchResult = buildResultWithOneMatch(buildMatchingRegisterResult(eidasData));
+ MatchingTaskUtils.storeIntermediateMatchingResult(pendingReq, registerSearchResult);
+
+ // inject ZMR response
+ when(zmrMock.service(any(), any()))
+ .thenReturn(loadResponseFromFile("/data/zmr/search_with_personalId_only_resp.xml"))
+ .thenReturn(loadResponseFromFile("/data/zmr/seq_3-4_kitt_get_latest_version_resp.xml"))
+ .thenReturn(loadResponseFromFile("/data/zmr/seq_3-6_kitt_update_resp.xml"));
+
+ task.execute(pendingReq, executionContext);
+
+ // validate state
+ assertNull("Transition To S9", executionContext.get(Constants.TRANSITION_TO_CREATE_NEW_ERNP_ENTRY_TASK));
+ MatchedPersonResult matchingResult = MatchingTaskUtils.getFinalMatchingResult(pendingReq);
+ assertNotNull("no final matching result", matchingResult);
+
+ }
+
+ @Test
+ public void exactlyOneRegisterResult_UpdateFailedByZmrError() throws Exception {
+ setupUserInput();
+ SimpleEidasData eidasData = setupEidasData();
+ RegisterStatusResults registerSearchResult = buildResultWithOneMatch(buildMatchingRegisterResult(eidasData));
+ MatchingTaskUtils.storeIntermediateMatchingResult(pendingReq, registerSearchResult);
+
+ // inject ZMR response
+ when(zmrMock.service(any(), any()))
+ .thenReturn(loadResponseFromFile("/data/zmr/search_with_personalId_only_resp.xml"))
+ .thenReturn(loadResponseFromFile("/data/zmr/seq_3-4_kitt_get_latest_version_resp.xml"))
+ .thenThrow(new RuntimeException("ZMR update should fail for that test"));
+
+ TaskExecutionException error = assertThrows("wrong exception", TaskExecutionException.class,
+ () -> task.execute(pendingReq, executionContext));
+
+ assertEquals("wrong errorId", "module.eidasauth.matching.04", ((EaafException) error.getOriginalException()).getErrorId());
+
+ }
+
+ @Test
+ public void zmrError() throws Exception {
+ setupUserInput();
+ setupEidasData();
+ RegisterStatusResults registerSearchResult = buildResultWithTwoMatches();
+ MatchingTaskUtils.storeIntermediateMatchingResult(pendingReq, registerSearchResult);
+
+ TaskExecutionException error = assertThrows("wrong exception", TaskExecutionException.class,
+ () -> task.execute(pendingReq, executionContext));
+
+ assertEquals("wrong errorId", "module.eidasauth.matching.03", ((EaafException) error.getOriginalException()).getErrorId());
+
+ }
+
+ @SneakyThrows
+ private void validateMatchedPerson(MatchedPersonResult current,
+ RegisterStatusResults registerUpdateResult) {
+ RegisterResult expected = registerUpdateResult.getResult();
+ assertEquals("familyName", expected.getFamilyName(), current.getFamilyName());
+ assertEquals("givenName", expected.getGivenName(), current.getGivenName());
+ assertEquals("birthday", expected.getDateOfBirth(), current.getDateOfBirth());
+ assertEquals("bpk", expected.getBpk(), current.getBpk());
+
+ }
+
+ @NotNull
+ private RegisterStatusResults buildEmptyResult() {
+ return new RegisterStatusResults(new RegisterOperationStatus(generateRandomProcessId()),
+ Collections.emptyList(), Collections.emptyList());
+
+ }
+
+ private BigInteger generateRandomProcessId() {
+ return new BigInteger(RandomStringUtils.randomNumeric(10));
+
+ }
+
+ @NotNull
+ private RegisterStatusResults buildResultWithOneMatch(RegisterResult registerResult) {
+ return new RegisterStatusResults(new RegisterOperationStatus(generateRandomProcessId()),
+ Collections.singletonList(registerResult), Collections.emptyList());
+
+ }
+
+ @NotNull
+ private RegisterStatusResults buildResultWithTwoMatches() {
+ List<RegisterResult> results = Lists.newArrayList(buildRandomRegisterResult(), buildRandomRegisterResult());
+ return new RegisterStatusResults(new RegisterOperationStatus(generateRandomProcessId()),
+ results, Collections.emptyList());
+
+ }
+
+ @NotNull
+ private RegisterResult buildRandomRegisterResult() {
+ return RegisterResult.builder()
+ .pseudonym(Arrays.asList(RandomStringUtils.randomAlphabetic(8)))
+ .givenName(RandomStringUtils.randomAlphabetic(8))
+ .familyName(RandomStringUtils.randomAlphabetic(8))
+ .dateOfBirth(RandomStringUtils.randomAlphabetic(8))
+ .bpk(RandomStringUtils.randomAlphabetic(8))
+ .build();
+
+ }
+
+ private RegisterResult buildMatchingRegisterResult(SimpleEidasData eidData) {
+ return RegisterResult.builder()
+ .pseudonym(Arrays.asList(eidData.getPseudonym()))
+ .givenName(eidData.getGivenName())
+ .familyName(eidData.getFamilyName())
+ .dateOfBirth(eidData.getDateOfBirth())
+ .bpk(RandomStringUtils.randomAlphabetic(8))
+ .build();
+
+ }
+
+ private RegisterResult buildNotMatchingRegisterResult(SimpleEidasData eidData) {
+ return RegisterResult.builder()
+ .pseudonym(Arrays.asList(eidData.getPseudonym() + RandomStringUtils.randomAlphabetic(8)))
+ .givenName(eidData.getGivenName())
+ .familyName(eidData.getFamilyName())
+ .dateOfBirth(eidData.getDateOfBirth())
+ .bpk(RandomStringUtils.randomAlphabetic(8))
+ .build();
+
+ }
+
+ private void setHttpParameters(AdresssucheOutput input) {
+ httpReq.setParameter(AdresssucheController.PARAM_STREET, input.getStreet());
+ httpReq.setParameter(AdresssucheController.PARAM_MUNIPICALITY, input.getMunicipality());
+ httpReq.setParameter(AdresssucheController.PARAM_NUMBER, input.getNumber());
+ httpReq.setParameter(AdresssucheController.PARAM_VILLAGE, input.getVillage());
+ httpReq.setParameter(AdresssucheController.PARAM_POSTLEITZAHL, input.getPostleitzahl());
+
+ }
+
+ @NotNull
+ private SimpleEidasData setupEidasData() throws EaafStorageException {
+ SimpleEidasData result = SimpleEidasData.builder()
+ .pseudonym(RandomStringUtils.randomAlphabetic(8))
+ .familyName(RandomStringUtils.randomAlphabetic(8))
+ .givenName(RandomStringUtils.randomAlphabetic(8))
+ .dateOfBirth("1970-01-01")
+ .build();
+ AuthProcessDataWrapper authProcessDataWrapper = pendingReq.getSessionData(AuthProcessDataWrapper.class);
+ authProcessDataWrapper.setGenericDataToSession(Constants.DATA_SIMPLE_EIDAS, result);
+ return result;
+ }
+
+ @NotNull
+ private AdresssucheOutput setupUserInput() {
+ AdresssucheOutput result = new AdresssucheOutput(
+ RandomStringUtils.randomAlphabetic(8),
+ RandomStringUtils.randomAlphabetic(8),
+ RandomStringUtils.randomAlphabetic(8),
+ RandomStringUtils.randomAlphabetic(8),
+ RandomStringUtils.randomAlphabetic(8));
+ setHttpParameters(result);
+ return result;
+ }
+
+ 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();
+
+ }
+
+}
diff --git a/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/ReceiveAustrianResidenceGuiResponseTaskTest.java b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/ReceiveAustrianResidenceGuiResponseTaskTest.java
new file mode 100644
index 00000000..d7c0acc4
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/ReceiveAustrianResidenceGuiResponseTaskTest.java
@@ -0,0 +1,320 @@
+package at.asitplus.eidas.specific.modules.auth.eidas.v2.test.tasks;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.mockito.ArgumentMatchers.eq;
+
+import java.math.BigInteger;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.commons.lang3.RandomStringUtils;
+import org.jetbrains.annotations.NotNull;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mockito;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.mock.mockito.MockBean;
+import org.springframework.context.i18n.LocaleContextHolder;
+import org.springframework.mock.web.MockHttpServletRequest;
+import org.springframework.mock.web.MockHttpServletResponse;
+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.google.common.collect.Lists;
+
+import at.asitplus.eidas.specific.core.test.config.dummy.MsConnectorDummyConfigMap;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.controller.AdresssucheController;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.controller.AdresssucheController.AdresssucheOutput;
+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.service.RegisterSearchService;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.service.RegisterSearchService.RegisterOperationStatus;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.service.RegisterSearchService.RegisterStatusResults;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.tasks.ReceiveAustrianResidenceGuiResponseTask;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.utils.MatchingTaskUtils;
+import at.gv.egiz.eaaf.core.api.idp.process.ExecutionContext;
+import at.gv.egiz.eaaf.core.exceptions.EaafStorageException;
+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 lombok.SneakyThrows;
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration(locations = {
+ "/SpringTest-context_tasks_test.xml",
+ "/SpringTest-context_basic_mapConfig.xml"
+})
+public class ReceiveAustrianResidenceGuiResponseTaskTest {
+
+ @Autowired
+ protected MsConnectorDummyConfigMap authConfig;
+
+ @MockBean
+ private RegisterSearchService registerSearchService;
+
+ private ReceiveAustrianResidenceGuiResponseTask task;
+
+ private ExecutionContext executionContext;
+ private MockHttpServletRequest httpReq;
+ private MockHttpServletResponse httpResp;
+ private TestRequestImpl pendingReq;
+
+ /**
+ * jUnit test set-up.
+ *
+ * @throws Exception In case of an set-up error
+ */
+ @Before
+ public void setUp() throws Exception {
+ executionContext = new ExecutionContextImpl();
+ task = new ReceiveAustrianResidenceGuiResponseTask(registerSearchService);
+
+ httpReq = new MockHttpServletRequest("POST", "https://localhost/ms_connector");
+ httpResp = new MockHttpServletResponse();
+ RequestContextHolder.resetRequestAttributes();
+ RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(httpReq, httpResp));
+
+ pendingReq = new TestRequestImpl();
+ pendingReq.setAuthUrl("https://localhost/ms_connector");
+ pendingReq.setPendingReqId(RandomStringUtils.randomAlphanumeric(10));
+
+ LocaleContextHolder.resetLocaleContext();
+ }
+
+ @Test
+ public void canceledByUser() throws Exception {
+ AdresssucheOutput userInput = setupUserInput();
+ SimpleEidasData eidasData = setupEidasData();
+ RegisterStatusResults registerSearchResult = buildEmptyResult();
+ mockRegisterSearch(userInput, registerSearchResult, eidasData);
+ MatchingTaskUtils.storeIntermediateMatchingResult(pendingReq, registerSearchResult);
+ httpReq.setParameter(ReceiveAustrianResidenceGuiResponseTask.HTTP_PARAM_NO_RESIDENCE, "true");
+
+ task.execute(pendingReq, executionContext);
+
+ assertEquals("Transition To RequestInserErnp", true,
+ executionContext.get(Constants.TRANSITION_TO_REQUESTING_NEW_ERNP_ENTRY_TASK));
+ assertEquals("Transition To AddressSearchForm", false,
+ executionContext.get(Constants.TRANSITION_TO_GENERATE_GUI_QUERY_AUSTRIAN_RESIDENCE_TASK));
+ assertNull("matching failed flag", executionContext.get(Constants.CONTEXT_FLAG_ADVANCED_MATCHING_FAILED));
+ assertNull("no final matching result", MatchingTaskUtils.getFinalMatchingResult(pendingReq));
+
+ }
+
+ @Test
+ public void noInputData() throws Exception {
+ RegisterStatusResults registerSearchResult = buildEmptyResult();
+ MatchingTaskUtils.storeIntermediateMatchingResult(pendingReq, registerSearchResult);
+
+ task.execute(pendingReq, executionContext);
+
+ assertEquals("Transition To RequestInserErnp", false, executionContext.get(Constants.TRANSITION_TO_REQUESTING_NEW_ERNP_ENTRY_TASK));
+ assertEquals("Transition To AddressSearchForm", true,
+ executionContext.get(Constants.TRANSITION_TO_GENERATE_GUI_QUERY_AUSTRIAN_RESIDENCE_TASK));
+ assertEquals("matching failed flag", true, executionContext.get(Constants.CONTEXT_FLAG_ADVANCED_MATCHING_FAILED));
+ assertEquals("failed reason", "module.eidasauth.matching.21", executionContext.get(Constants.CONTEXT_FLAG_ADVANCED_MATCHING_FAILED_REASON));
+ assertNull("no final matching result", MatchingTaskUtils.getFinalMatchingResult(pendingReq));
+
+ }
+
+ @Test
+ public void noRegisterResult() throws Exception {
+ AdresssucheOutput userInput = setupUserInput();
+ SimpleEidasData eidasData = setupEidasData();
+ RegisterStatusResults registerSearchResult = buildEmptyResult();
+ mockRegisterSearch(userInput, registerSearchResult, eidasData);
+ MatchingTaskUtils.storeIntermediateMatchingResult(pendingReq, registerSearchResult);
+
+ task.execute(pendingReq, executionContext);
+
+ assertEquals("Transition To RequestInserErnp", false, executionContext.get(Constants.TRANSITION_TO_REQUESTING_NEW_ERNP_ENTRY_TASK));
+ assertEquals("Transition To AddressSearchForm", true,
+ executionContext.get(Constants.TRANSITION_TO_GENERATE_GUI_QUERY_AUSTRIAN_RESIDENCE_TASK));
+ assertEquals("matching failed flag", true, executionContext.get(Constants.CONTEXT_FLAG_ADVANCED_MATCHING_FAILED));
+ assertEquals("failed reason", "module.eidasauth.matching.22", executionContext.get(Constants.CONTEXT_FLAG_ADVANCED_MATCHING_FAILED_REASON));
+ assertNull("no final matching result", MatchingTaskUtils.getFinalMatchingResult(pendingReq));
+
+ }
+
+ @Test
+ public void exactlyOneRegisterResult_NoUpdate() throws Exception {
+ AdresssucheOutput userInput = setupUserInput();
+ SimpleEidasData eidasData = setupEidasData();
+ RegisterStatusResults registerSearchResult = buildResultWithOneMatch(buildMatchingRegisterResult(eidasData));
+ MatchingTaskUtils.storeIntermediateMatchingResult(pendingReq, registerSearchResult);
+ mockRegisterSearch(userInput, registerSearchResult, eidasData);
+
+ task.execute(pendingReq, executionContext);
+
+ // validate state
+ assertNull("Transition To S9", executionContext.get(Constants.TRANSITION_TO_CREATE_NEW_ERNP_ENTRY_TASK));
+ MatchedPersonResult matchingResult = MatchingTaskUtils.getFinalMatchingResult(pendingReq);
+ assertNotNull("no final matching result", matchingResult);
+ validateMatchedPerson(matchingResult, registerSearchResult);
+
+ }
+
+ @Test
+ public void exactlyOneRegisterResult_UpdateRequired() throws Exception {
+ AdresssucheOutput userInput = setupUserInput();
+ SimpleEidasData eidasData = setupEidasData();
+ RegisterStatusResults registerSearchResult = buildResultWithOneMatch(buildNotMatchingRegisterResult(eidasData));
+ RegisterStatusResults registerUpdateResult = buildResultWithOneMatch(buildRandomRegisterResult());
+ MatchingTaskUtils.storeIntermediateMatchingResult(pendingReq, registerSearchResult);
+ mockRegisterSearch(userInput, registerSearchResult, eidasData);
+ Mockito.when(registerSearchService.step7aKittProcess(eq(registerSearchResult), eq(eidasData)))
+ .thenReturn(registerUpdateResult);
+
+ // perform test
+ task.execute(pendingReq, executionContext);
+
+ // validate state
+ assertNull("Transition To S9", executionContext.get(Constants.TRANSITION_TO_CREATE_NEW_ERNP_ENTRY_TASK));
+
+ MatchedPersonResult matchingResult = MatchingTaskUtils.getFinalMatchingResult(pendingReq);
+ assertNotNull("no final matching result", matchingResult);
+ validateMatchedPerson(matchingResult, registerUpdateResult);
+
+ }
+
+ @Test
+ public void moreThanOneRegisterResult() throws Exception {
+ AdresssucheOutput userInput = setupUserInput();
+ SimpleEidasData eidasData = setupEidasData();
+ RegisterStatusResults registerSearchResult = buildResultWithTwoMatches();
+ MatchingTaskUtils.storeIntermediateMatchingResult(pendingReq, registerSearchResult);
+ mockRegisterSearch(userInput, registerSearchResult, eidasData);
+
+ task.execute(pendingReq, executionContext);
+
+ assertEquals("Transition To RequestInserErnp", false, executionContext.get(Constants.TRANSITION_TO_REQUESTING_NEW_ERNP_ENTRY_TASK));
+ assertEquals("Transition To AddressSearchForm", true,
+ executionContext.get(Constants.TRANSITION_TO_GENERATE_GUI_QUERY_AUSTRIAN_RESIDENCE_TASK));
+ assertEquals("matching failed flag", true, executionContext.get(Constants.CONTEXT_FLAG_ADVANCED_MATCHING_FAILED));
+ assertEquals("failed reason", "module.eidasauth.matching.22", executionContext.get(Constants.CONTEXT_FLAG_ADVANCED_MATCHING_FAILED_REASON));
+ assertNull("no final matching result", MatchingTaskUtils.getFinalMatchingResult(pendingReq));
+
+ }
+
+ @SneakyThrows
+ private void validateMatchedPerson(MatchedPersonResult current,
+ RegisterStatusResults registerUpdateResult) {
+ RegisterResult expected = registerUpdateResult.getResult();
+ assertEquals("familyName", expected.getFamilyName(), current.getFamilyName());
+ assertEquals("givenName", expected.getGivenName(), current.getGivenName());
+ assertEquals("birthday", expected.getDateOfBirth(), current.getDateOfBirth());
+ assertEquals("bpk", expected.getBpk(), current.getBpk());
+
+ }
+
+ @SneakyThrows
+ private void mockRegisterSearch(AdresssucheOutput userInput, RegisterStatusResults registerSearchResult, SimpleEidasData eidasData ) {
+ Mockito.when(registerSearchService.searchWithResidence(eq(registerSearchResult.getOperationStatus()), eq(eidasData),
+ eq(userInput))).thenReturn(registerSearchResult);
+ }
+
+ @NotNull
+ private RegisterStatusResults buildEmptyResult() {
+ return new RegisterStatusResults(new RegisterOperationStatus(generateRandomProcessId()),
+ Collections.emptyList(), Collections.emptyList());
+
+ }
+
+ private BigInteger generateRandomProcessId() {
+ return new BigInteger(RandomStringUtils.randomNumeric(10));
+
+ }
+
+ @NotNull
+ private RegisterStatusResults buildResultWithOneMatch(RegisterResult registerResult) {
+ return new RegisterStatusResults(new RegisterOperationStatus(generateRandomProcessId()),
+ Collections.singletonList(registerResult), Collections.emptyList());
+
+ }
+
+ @NotNull
+ private RegisterStatusResults buildResultWithTwoMatches() {
+ List<RegisterResult> results = Lists.newArrayList(buildRandomRegisterResult(), buildRandomRegisterResult());
+ return new RegisterStatusResults(new RegisterOperationStatus(generateRandomProcessId()),
+ results, Collections.emptyList());
+
+ }
+
+ @NotNull
+ private RegisterResult buildRandomRegisterResult() {
+ return RegisterResult.builder()
+ .pseudonym(Arrays.asList(RandomStringUtils.randomAlphabetic(8)))
+ .givenName(RandomStringUtils.randomAlphabetic(8))
+ .familyName(RandomStringUtils.randomAlphabetic(8))
+ .dateOfBirth(RandomStringUtils.randomAlphabetic(8))
+ .bpk(RandomStringUtils.randomAlphabetic(8))
+ .build();
+
+ }
+
+ private RegisterResult buildMatchingRegisterResult(SimpleEidasData eidData) {
+ return RegisterResult.builder()
+ .pseudonym(Arrays.asList(eidData.getPseudonym()))
+ .givenName(eidData.getGivenName())
+ .familyName(eidData.getFamilyName())
+ .dateOfBirth(eidData.getDateOfBirth())
+ .bpk(RandomStringUtils.randomAlphabetic(8))
+ .build();
+
+ }
+
+ private RegisterResult buildNotMatchingRegisterResult(SimpleEidasData eidData) {
+ return RegisterResult.builder()
+ .pseudonym(Arrays.asList(eidData.getPseudonym() + RandomStringUtils.randomAlphabetic(8)))
+ .givenName(eidData.getGivenName())
+ .familyName(eidData.getFamilyName())
+ .dateOfBirth(eidData.getDateOfBirth())
+ .bpk(RandomStringUtils.randomAlphabetic(8))
+ .build();
+
+ }
+
+ private void setHttpParameters(AdresssucheOutput input) {
+ httpReq.setParameter(AdresssucheController.PARAM_STREET, input.getStreet());
+ httpReq.setParameter(AdresssucheController.PARAM_MUNIPICALITY, input.getMunicipality());
+ httpReq.setParameter(AdresssucheController.PARAM_NUMBER, input.getNumber());
+ httpReq.setParameter(AdresssucheController.PARAM_VILLAGE, input.getVillage());
+ httpReq.setParameter(AdresssucheController.PARAM_POSTLEITZAHL, input.getPostleitzahl());
+
+ }
+
+ @NotNull
+ private SimpleEidasData setupEidasData() throws EaafStorageException {
+ SimpleEidasData result = SimpleEidasData.builder()
+ .pseudonym(RandomStringUtils.randomAlphabetic(8))
+ .familyName(RandomStringUtils.randomAlphabetic(8))
+ .givenName(RandomStringUtils.randomAlphabetic(8))
+ .dateOfBirth("1970-01-01")
+ .build();
+ AuthProcessDataWrapper authProcessDataWrapper = pendingReq.getSessionData(AuthProcessDataWrapper.class);
+ authProcessDataWrapper.setGenericDataToSession(Constants.DATA_SIMPLE_EIDAS, result);
+ return result;
+ }
+
+ @NotNull
+ private AdresssucheOutput setupUserInput() {
+ AdresssucheOutput result = new AdresssucheOutput(
+ RandomStringUtils.randomAlphabetic(8),
+ RandomStringUtils.randomAlphabetic(8),
+ RandomStringUtils.randomAlphabetic(8),
+ RandomStringUtils.randomAlphabetic(8),
+ RandomStringUtils.randomAlphabetic(8));
+ setHttpParameters(result);
+ return result;
+ }
+
+
+}
diff --git a/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/ReceiveAuthnResponseTaskTest.java b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/ReceiveAuthnResponseTaskTest.java
new file mode 100644
index 00000000..842c8bf7
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/ReceiveAuthnResponseTaskTest.java
@@ -0,0 +1,254 @@
+package at.asitplus.eidas.specific.modules.auth.eidas.v2.test.tasks;
+
+import static at.asitplus.eidas.specific.core.MsEidasNodeConstants.PROP_CONFIG_SP_NEW_EID_MODE;
+
+import java.net.URISyntaxException;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.annotation.Nonnull;
+
+import org.apache.commons.lang3.RandomStringUtils;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+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.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+import at.asitplus.eidas.specific.core.MsEidasNodeConstants;
+import at.asitplus.eidas.specific.core.test.config.dummy.MsConnectorDummyConfigMap;
+import at.asitplus.eidas.specific.core.test.config.dummy.MsConnectorDummySpConfiguration;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.service.EidasAttributeRegistry;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.tasks.ReceiveAuthnResponseTask;
+import at.gv.egiz.eaaf.core.api.IRequest;
+import at.gv.egiz.eaaf.core.api.IRequestStorage;
+import at.gv.egiz.eaaf.core.api.data.EaafConfigConstants;
+import at.gv.egiz.eaaf.core.api.data.EaafConstants;
+import at.gv.egiz.eaaf.core.api.idp.process.ExecutionContext;
+import at.gv.egiz.eaaf.core.exceptions.EaafException;
+import at.gv.egiz.eaaf.core.exceptions.EaafStorageException;
+import at.gv.egiz.eaaf.core.exceptions.PendingReqIdValidationException;
+import at.gv.egiz.eaaf.core.exceptions.TaskExecutionException;
+import at.gv.egiz.eaaf.core.impl.idp.auth.data.EidAuthProcessDataWrapper;
+import at.gv.egiz.eaaf.core.impl.idp.module.test.TestRequestImpl;
+import at.gv.egiz.eaaf.core.impl.idp.process.ExecutionContextImpl;
+import at.gv.egiz.eaaf.core.impl.utils.Random;
+import eu.eidas.auth.commons.attribute.AttributeDefinition;
+import eu.eidas.auth.commons.attribute.ImmutableAttributeMap;
+import eu.eidas.auth.commons.protocol.impl.AuthenticationResponse;
+import lombok.val;
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_CLASS)
+@ContextConfiguration(locations = {
+ "/SpringTest-context_tasks_test.xml",
+ "/SpringTest-context_basic_mapConfig.xml"})
+public class ReceiveAuthnResponseTaskTest {
+
+ @Autowired(required = true)
+ private ReceiveAuthnResponseTask task;
+
+ @Autowired(required = true)
+ private MsConnectorDummyConfigMap basicConfig;
+ @Autowired
+ protected EidasAttributeRegistry attrRegistry;
+
+ @Autowired private IRequestStorage storage;
+
+ final ExecutionContext executionContext = new ExecutionContextImpl();
+ private MockHttpServletRequest httpReq;
+ private MockHttpServletResponse httpResp;
+ private TestRequestImpl pendingReq;
+ private MsConnectorDummySpConfiguration oaParam;
+
+ /**
+ * jUnit test set-up.
+ */
+ @Before
+ public void setUp() throws EaafStorageException, URISyntaxException {
+
+ httpReq = new MockHttpServletRequest("POST", "https://localhost/authhandler");
+ httpResp = new MockHttpServletResponse();
+ RequestContextHolder.resetRequestAttributes();
+ RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(httpReq, httpResp));
+
+ basicConfig.putConfigValue("eidas.ms.auth.eIDAS.szrclient.debug.useDummySolution", "false");
+ basicConfig.putConfigValue("eidas.ms.auth.eIDAS.eid.testidentity.default", "false");
+
+ final Map<String, String> spConfig = new HashMap<>();
+ spConfig.put(EaafConfigConstants.SERVICE_UNIQUEIDENTIFIER, "testSp");
+ spConfig.put("target", "urn:publicid:gv.at:cdid+XX");
+ spConfig.put(PROP_CONFIG_SP_NEW_EID_MODE, "true");
+ oaParam = new MsConnectorDummySpConfiguration(spConfig, basicConfig);
+ oaParam.setLoa(Arrays.asList(EaafConstants.EIDAS_LOA_HIGH));
+ pendingReq = new TestRequestImpl();
+
+ pendingReq.setSpConfig(oaParam);
+ pendingReq.setPendingReqId(at.gv.egiz.eaaf.core.impl.utils.Random.nextProcessReferenceValue());
+ pendingReq.setAuthUrl("http://test.com/");
+ pendingReq.setTransactionId("avaasbav");
+ pendingReq.setPiiTransactionId(RandomStringUtils.randomAlphanumeric(10));
+
+ executionContext.put(MsEidasNodeConstants.REQ_PARAM_SELECTED_COUNTRY, "LU");
+ executionContext.put(EaafConstants.PROCESS_ENGINE_REQUIRES_NO_POSTAUTH_REDIRECT, true);
+
+ }
+
+ @Test
+ public void missingEidasResponse() {
+ try {
+ task.execute(pendingReq, executionContext);
+ Assert.fail("No eIDAS response not detected");
+
+ } catch (TaskExecutionException e) {
+ Assert.assertEquals("ErrorId", "eidas.01",
+ ((EaafException) e.getOriginalException()).getErrorId());
+
+ }
+ }
+
+ @Test
+ public void notSuccessEidasResponse() throws URISyntaxException {
+ String statusCode = RandomStringUtils.randomAlphabetic(10);
+ httpReq.setAttribute(Constants.DATA_FULL_EIDAS_RESPONSE,
+ buildDummyAuthResponse(statusCode));
+
+
+ try {
+ task.execute(pendingReq, executionContext);
+ Assert.fail("No eIDAS response not detected");
+
+ } catch (TaskExecutionException e) {
+ Assert.assertEquals("ErrorId", "eidas.02",
+ ((EaafException) e.getOriginalException()).getErrorId());
+ Assert.assertEquals("wrong parameter size", 2, ((EaafException) e.getOriginalException())
+ .getParams().length);
+ Assert.assertEquals("wrong errorMsg", statusCode, ((EaafException) e
+ .getOriginalException()).getParams()[0]);
+
+ }
+ }
+
+ @Test
+ public void successAndForward() throws URISyntaxException, TaskExecutionException,
+ PendingReqIdValidationException, EaafStorageException {
+
+ AuthenticationResponse eidasResponse = buildDummyAuthResponse(Constants.SUCCESS_URI);
+ httpReq.setAttribute(Constants.DATA_FULL_EIDAS_RESPONSE, eidasResponse);
+
+ String alternativReturnEndpoint = "http://ms-connector.alternative/" + RandomStringUtils.randomAlphabetic(10);
+ pendingReq.setRawDataToTransaction(
+ MsEidasNodeConstants.EXECCONTEXT_PARAM_MSCONNECTOR_STAGING, alternativReturnEndpoint);
+
+ //execute test
+ task.execute(pendingReq, executionContext);
+
+ //validate state
+ Assert.assertEquals("msConnectorStage", true,
+ (Boolean) executionContext.get(MsEidasNodeConstants.EXECCONTEXT_PARAM_MSCONNECTOR_STAGING));
+
+ IRequest storedReq = storage.getPendingRequest(pendingReq.getPendingRequestId());
+ Assert.assertNotNull("pendingReq not stored", storedReq);
+ Assert.assertNull("staging info is not null", storedReq.getRawData(
+ MsEidasNodeConstants.EXECCONTEXT_PARAM_MSCONNECTOR_STAGING, String.class));
+
+ //validate state
+ Assert.assertEquals("Wrong http statusCode", 302, httpResp.getStatus());
+ Assert.assertNotNull("No redirect header", httpResp.getHeaderValue("Location"));
+ Assert.assertTrue("Wrong redirect endpoint",
+ ((String) httpResp.getHeaderValue("Location")).startsWith(alternativReturnEndpoint));
+
+
+ }
+
+ public void success() throws URISyntaxException, TaskExecutionException, PendingReqIdValidationException {
+ @Nonnull
+ AuthenticationResponse eidasResponse = buildDummyAuthResponse(Constants.SUCCESS_URI);
+ httpReq.setAttribute(Constants.DATA_FULL_EIDAS_RESPONSE, eidasResponse);
+ executionContext.put(MsEidasNodeConstants.REQ_PARAM_SELECTED_COUNTRY, "LU");
+
+ //execute test
+ task.execute(pendingReq, executionContext);
+
+ //validate state
+ IRequest storedReq = storage.getPendingRequest(pendingReq.getPendingRequestId());
+ Assert.assertNotNull("pendingReq not stored", storedReq);
+ final EidAuthProcessDataWrapper authProcessData = storedReq.getSessionData(EidAuthProcessDataWrapper.class);
+ Assert.assertEquals("LoA", eidasResponse.getLevelOfAssurance(), authProcessData.getQaaLevel());
+ Assert.assertNotNull("eIDAS response",
+ authProcessData.getGenericDataFromSession(Constants.DATA_FULL_EIDAS_RESPONSE));
+ Assert.assertEquals("eIDAS response", eidasResponse,
+ authProcessData.getGenericDataFromSession(Constants.DATA_FULL_EIDAS_RESPONSE));
+
+ Assert.assertFalse("testIdentity flag", authProcessData.isTestIdentity());
+
+ Assert.assertEquals("msConnectorStage", false,
+ (Boolean) executionContext.get(MsEidasNodeConstants.EXECCONTEXT_PARAM_MSCONNECTOR_STAGING));
+ }
+
+ @Test
+ public void successWithTestIdentity() throws URISyntaxException, TaskExecutionException, PendingReqIdValidationException {
+ basicConfig.putConfigValue("eidas.ms.auth.eIDAS.eid.testidentity.default", "true");
+
+ @Nonnull
+ AuthenticationResponse eidasResponse = buildDummyAuthResponse(Constants.SUCCESS_URI);
+ httpReq.setAttribute(Constants.DATA_FULL_EIDAS_RESPONSE, eidasResponse);
+ executionContext.put(MsEidasNodeConstants.REQ_PARAM_SELECTED_COUNTRY, "LU");
+
+ //execute test
+ task.execute(pendingReq, executionContext);
+
+ //validate state
+ IRequest storedReq = storage.getPendingRequest(pendingReq.getPendingRequestId());
+ Assert.assertNotNull("pendingReq not stored", storedReq);
+
+ final EidAuthProcessDataWrapper authProcessData = storedReq.getSessionData(EidAuthProcessDataWrapper.class);
+ Assert.assertEquals("LoA", eidasResponse.getLevelOfAssurance(), authProcessData.getQaaLevel());
+ Assert.assertNotNull("eIDAS response",
+ authProcessData.getGenericDataFromSession(Constants.DATA_FULL_EIDAS_RESPONSE));
+ Assert.assertEquals("eIDAS response", eidasResponse,
+ authProcessData.getGenericDataFromSession(Constants.DATA_FULL_EIDAS_RESPONSE));
+ Assert.assertTrue("testIdentity flag", authProcessData.isTestIdentity());
+
+ }
+
+
+
+ @Nonnull
+ private AuthenticationResponse buildDummyAuthResponse(String statusCode) throws URISyntaxException {
+ final AttributeDefinition attributeDef = attrRegistry.getCoreAttributeRegistry().getByFriendlyName(
+ Constants.eIDAS_ATTR_PERSONALIDENTIFIER).first();
+ final AttributeDefinition attributeDef2 = attrRegistry.getCoreAttributeRegistry().getByFriendlyName(
+ Constants.eIDAS_ATTR_CURRENTFAMILYNAME).first();
+ final AttributeDefinition attributeDef3 = attrRegistry.getCoreAttributeRegistry().getByFriendlyName(
+ Constants.eIDAS_ATTR_CURRENTGIVENNAME).first();
+ final AttributeDefinition attributeDef4 = attrRegistry.getCoreAttributeRegistry().getByFriendlyName(
+ Constants.eIDAS_ATTR_DATEOFBIRTH).first();
+
+ final ImmutableAttributeMap attributeMap = ImmutableAttributeMap.builder()
+ .put(attributeDef, "LU/AT/" + RandomStringUtils.randomNumeric(64))
+ .put(attributeDef2, RandomStringUtils.randomAlphabetic(10))
+ .put(attributeDef3, RandomStringUtils.randomAlphabetic(10)).put(attributeDef4, "2001-01-01").build();
+
+ val b = new AuthenticationResponse.Builder();
+ return b.id("_".concat(Random.nextHexRandom16()))
+ .issuer(RandomStringUtils.randomAlphabetic(10))
+ .subject(RandomStringUtils.randomAlphabetic(10))
+ .statusCode(statusCode)
+ .inResponseTo("_".concat(Random.nextHexRandom16()))
+ .subjectNameIdFormat("afaf")
+ .levelOfAssurance(EaafConstants.EIDAS_LOA_HIGH)
+ .attributes(attributeMap)
+ .build();
+ }
+
+}
diff --git a/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/ReceiveEidasResponseTaskTest.java b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/ReceiveEidasResponseTaskTest.java
index 3fa66aa8..4148b138 100644
--- a/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/ReceiveEidasResponseTaskTest.java
+++ b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/ReceiveEidasResponseTaskTest.java
@@ -14,7 +14,6 @@ import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
-import org.powermock.core.classloader.annotations.PrepareForTest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.mock.web.MockHttpServletResponse;
@@ -29,8 +28,7 @@ import at.asitplus.eidas.specific.core.test.config.dummy.MsConnectorDummyConfigM
import at.asitplus.eidas.specific.core.test.config.dummy.MsConnectorDummySpConfiguration;
import at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants;
import at.asitplus.eidas.specific.modules.auth.eidas.v2.service.EidasAttributeRegistry;
-import at.asitplus.eidas.specific.modules.auth.eidas.v2.tasks.CreateIdentityLinkTask;
-import at.asitplus.eidas.specific.modules.auth.eidas.v2.tasks.ReceiveAuthnResponseTask;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.tasks.ReceiveAuthnResponseAlternativeTask;
import at.gv.egiz.eaaf.core.api.IRequest;
import at.gv.egiz.eaaf.core.api.IRequestStorage;
import at.gv.egiz.eaaf.core.api.data.EaafConfigConstants;
@@ -50,7 +48,6 @@ import eu.eidas.auth.commons.protocol.impl.AuthenticationResponse;
import lombok.val;
@RunWith(SpringJUnit4ClassRunner.class)
-@PrepareForTest(CreateIdentityLinkTask.class)
@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_CLASS)
@ContextConfiguration(locations = {
"/SpringTest-context_tasks_test.xml",
@@ -58,21 +55,21 @@ import lombok.val;
public class ReceiveEidasResponseTaskTest {
@Autowired(required = true)
- private ReceiveAuthnResponseTask task;
+ private ReceiveAuthnResponseAlternativeTask task;
@Autowired(required = true)
private MsConnectorDummyConfigMap basicConfig;
@Autowired
protected EidasAttributeRegistry attrRegistry;
-
+
@Autowired private IRequestStorage storage;
-
+
final ExecutionContext executionContext = new ExecutionContextImpl();
private MockHttpServletRequest httpReq;
private MockHttpServletResponse httpResp;
private TestRequestImpl pendingReq;
private MsConnectorDummySpConfiguration oaParam;
-
+
/**
* jUnit test set-up.
*/
@@ -84,7 +81,6 @@ public class ReceiveEidasResponseTaskTest {
RequestContextHolder.resetRequestAttributes();
RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(httpReq, httpResp));
- basicConfig.putConfigValue("eidas.ms.auth.eIDAS.szrclient.debug.useDummySolution", "false");
basicConfig.putConfigValue("eidas.ms.auth.eIDAS.eid.testidentity.default", "false");
final Map<String, String> spConfig = new HashMap<>();
@@ -100,54 +96,53 @@ public class ReceiveEidasResponseTaskTest {
pendingReq.setAuthUrl("http://test.com/");
pendingReq.setTransactionId("avaasbav");
pendingReq.setPiiTransactionId(RandomStringUtils.randomAlphanumeric(10));
-
+
executionContext.put(MsEidasNodeConstants.REQ_PARAM_SELECTED_COUNTRY, "LU");
executionContext.put(EaafConstants.PROCESS_ENGINE_REQUIRES_NO_POSTAUTH_REDIRECT, true);
}
-
+
@Test
- public void missingEidasResponse() {
+ public void missingEidasResponse() {
try {
task.execute(pendingReq, executionContext);
Assert.fail("No eIDAS response not detected");
-
+
} catch (TaskExecutionException e) {
- Assert.assertEquals("ErrorId", "eidas.01",
+ Assert.assertEquals("ErrorId", "eidas.01",
((EaafException) e.getOriginalException()).getErrorId());
-
- }
+
+ }
}
-
+
@Test
- public void notSuccessEidasResponse() throws URISyntaxException {
+ public void notSuccessEidasResponse() throws URISyntaxException {
String statusCode = RandomStringUtils.randomAlphabetic(10);
- httpReq.setAttribute(Constants.DATA_FULL_EIDAS_RESPONSE,
+ httpReq.setAttribute(Constants.DATA_FULL_EIDAS_RESPONSE,
buildDummyAuthResponse(statusCode));
-
-
+
+
try {
task.execute(pendingReq, executionContext);
Assert.fail("No eIDAS response not detected");
-
+
} catch (TaskExecutionException e) {
- Assert.assertEquals("ErrorId", "eidas.02",
+ Assert.assertEquals("ErrorId", "eidas.02",
((EaafException) e.getOriginalException()).getErrorId());
Assert.assertEquals("wrong parameter size", 2, ((EaafException) e.getOriginalException())
.getParams().length);
Assert.assertEquals("wrong errorMsg", statusCode, ((EaafException) e
.getOriginalException()).getParams()[0]);
- }
+ }
}
-
+
@Test
public void successAndForward() throws URISyntaxException, TaskExecutionException,
PendingReqIdValidationException, EaafStorageException {
AuthenticationResponse eidasResponse = buildDummyAuthResponse(Constants.SUCCESS_URI);
httpReq.setAttribute(Constants.DATA_FULL_EIDAS_RESPONSE, eidasResponse);
- executionContext.put(MsEidasNodeConstants.REQ_PARAM_SELECTED_COUNTRY, "LU");
String alternativReturnEndpoint = "http://ms-connector.alternative/" + RandomStringUtils.randomAlphabetic(10);
pendingReq.setRawDataToTransaction(
@@ -174,25 +169,24 @@ public class ReceiveEidasResponseTaskTest {
}
- @Test
- public void success() throws URISyntaxException, TaskExecutionException, PendingReqIdValidationException {
+ public void success() throws URISyntaxException, TaskExecutionException, PendingReqIdValidationException {
@Nonnull
AuthenticationResponse eidasResponse = buildDummyAuthResponse(Constants.SUCCESS_URI);
httpReq.setAttribute(Constants.DATA_FULL_EIDAS_RESPONSE, eidasResponse);
-
+
//execute test
task.execute(pendingReq, executionContext);
-
+
//validate state
IRequest storedReq = storage.getPendingRequest(pendingReq.getPendingRequestId());
Assert.assertNotNull("pendingReq not stored", storedReq);
-
final EidAuthProcessDataWrapper authProcessData = storedReq.getSessionData(EidAuthProcessDataWrapper.class);
Assert.assertEquals("LoA", eidasResponse.getLevelOfAssurance(), authProcessData.getQaaLevel());
- Assert.assertNotNull("eIDAS response",
+ Assert.assertNotNull("eIDAS response",
authProcessData.getGenericDataFromSession(Constants.DATA_FULL_EIDAS_RESPONSE));
- Assert.assertEquals("eIDAS response", eidasResponse,
+ Assert.assertEquals("eIDAS response", eidasResponse,
authProcessData.getGenericDataFromSession(Constants.DATA_FULL_EIDAS_RESPONSE));
+
Assert.assertFalse("testIdentity flag", authProcessData.isTestIdentity());
Assert.assertEquals("msConnectorStage", false,
@@ -206,7 +200,6 @@ public class ReceiveEidasResponseTaskTest {
@Nonnull
AuthenticationResponse eidasResponse = buildDummyAuthResponse(Constants.SUCCESS_URI);
httpReq.setAttribute(Constants.DATA_FULL_EIDAS_RESPONSE, eidasResponse);
- executionContext.put(MsEidasNodeConstants.REQ_PARAM_SELECTED_COUNTRY, "LU");
//execute test
task.execute(pendingReq, executionContext);
@@ -218,9 +211,9 @@ public class ReceiveEidasResponseTaskTest {
final EidAuthProcessDataWrapper authProcessData = storedReq.getSessionData(EidAuthProcessDataWrapper.class);
Assert.assertEquals("LoA", eidasResponse.getLevelOfAssurance(), authProcessData.getQaaLevel());
Assert.assertNotNull("eIDAS response",
- authProcessData.getGenericDataFromSession(Constants.DATA_FULL_EIDAS_RESPONSE));
+ authProcessData.getGenericDataFromSession(Constants.DATA_FULL_EIDAS_RESPONSE_ALTERNATIVE));
Assert.assertEquals("eIDAS response", eidasResponse,
- authProcessData.getGenericDataFromSession(Constants.DATA_FULL_EIDAS_RESPONSE));
+ authProcessData.getGenericDataFromSession(Constants.DATA_FULL_EIDAS_RESPONSE_ALTERNATIVE));
Assert.assertTrue("testIdentity flag", authProcessData.isTestIdentity());
}
@@ -237,7 +230,7 @@ public class ReceiveEidasResponseTaskTest {
Constants.eIDAS_ATTR_CURRENTGIVENNAME).first();
final AttributeDefinition attributeDef4 = attrRegistry.getCoreAttributeRegistry().getByFriendlyName(
Constants.eIDAS_ATTR_DATEOFBIRTH).first();
-
+
final ImmutableAttributeMap attributeMap = ImmutableAttributeMap.builder()
.put(attributeDef, "LU/AT/" + RandomStringUtils.randomNumeric(64))
.put(attributeDef2, RandomStringUtils.randomAlphabetic(10))
@@ -254,5 +247,5 @@ public class ReceiveEidasResponseTaskTest {
.attributes(attributeMap)
.build();
}
-
+
}
diff --git a/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/ReceiveMobilePhoneSignatureResponseTaskTest.java b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/ReceiveMobilePhoneSignatureResponseTaskTest.java
new file mode 100644
index 00000000..034f06d1
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/ReceiveMobilePhoneSignatureResponseTaskTest.java
@@ -0,0 +1,502 @@
+package at.asitplus.eidas.specific.modules.auth.eidas.v2.test.tasks;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertThrows;
+import static org.springframework.util.Assert.isInstanceOf;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.math.BigInteger;
+import java.nio.charset.StandardCharsets;
+import java.time.Instant;
+import java.util.Arrays;
+import java.util.Base64;
+import java.util.Collections;
+import java.util.List;
+import java.util.Objects;
+
+import javax.xml.transform.TransformerException;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.RandomStringUtils;
+import org.jetbrains.annotations.NotNull;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Ignore;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport;
+import org.opensaml.core.xml.io.MarshallingException;
+import org.opensaml.core.xml.util.XMLObjectSupport;
+import org.opensaml.saml.saml2.core.Issuer;
+import org.opensaml.saml.saml2.core.Response;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.mock.mockito.MockBean;
+import org.springframework.mock.web.MockHttpServletRequest;
+import org.springframework.mock.web.MockHttpServletResponse;
+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.google.common.collect.Lists;
+
+import at.asitplus.eidas.specific.core.test.config.dummy.MsConnectorDummyConfigMap;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants;
+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.exception.ManualFixNecessaryException;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.idaustriaclient.IdAustriaClientAuthConstants;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.idaustriaclient.provider.IdAustriaClientAuthCredentialProvider;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.idaustriaclient.provider.IdAustriaClientAuthMetadataProvider;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.service.RegisterSearchService;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.service.RegisterSearchService.RegisterOperationStatus;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.service.RegisterSearchService.RegisterStatusResults;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.tasks.ReceiveMobilePhoneSignatureResponseTask;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.test.dummy.DummyOA;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.test.dummy.DummyPendingRequest;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.utils.MatchingTaskUtils;
+import at.gv.egiz.eaaf.core.api.data.EaafConstants;
+import at.gv.egiz.eaaf.core.api.idp.process.ExecutionContext;
+import at.gv.egiz.eaaf.core.exceptions.EaafException;
+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.process.ExecutionContextImpl;
+import at.gv.egiz.eaaf.core.impl.utils.DomUtils;
+import at.gv.egiz.eaaf.modules.pvp2.exception.Pvp2MetadataException;
+import at.gv.egiz.eaaf.modules.pvp2.impl.metadata.PvpMetadataResolverFactory;
+import at.gv.egiz.eaaf.modules.pvp2.impl.opensaml.initialize.EaafOpenSaml3xInitializer;
+import at.gv.egiz.eaaf.modules.pvp2.impl.utils.Saml2Utils;
+import at.gv.egiz.eaaf.modules.pvp2.sp.exception.AuthnResponseValidationException;
+import net.shibboleth.utilities.java.support.xml.ParserPool;
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration(locations = {
+ "/SpringTest-context_tasks_test.xml",
+ "/SpringTest-context_basic_mapConfig.xml"
+})
+public class ReceiveMobilePhoneSignatureResponseTaskTest {
+
+ private static final String METADATA_PATH = "classpath:/data/idp_metadata_classpath_entity.xml";
+ private static final String BPK_FROM_ID_AUSTRIA = "QVGm48cqcM4UcyhDTNGYmVdrIoY=";
+
+ @Autowired
+ protected MsConnectorDummyConfigMap authConfig;
+ @Autowired
+ private IdAustriaClientAuthMetadataProvider metadataProvider;
+ @Autowired
+ private IdAustriaClientAuthCredentialProvider credentialProvider;
+ @Autowired
+ private PvpMetadataResolverFactory metadataFactory;
+ @Autowired
+ private ReceiveMobilePhoneSignatureResponseTask task;
+ @MockBean
+ private RegisterSearchService registerSearchService;
+
+ private final ExecutionContext executionContext = new ExecutionContextImpl();
+ private MockHttpServletRequest httpReq;
+ private MockHttpServletResponse httpResp;
+ private DummyPendingRequest pendingReq;
+
+ /**
+ * JUnit class initializer.
+ *
+ * @throws Exception In case of an OpenSAML3 initialization error
+ */
+ @BeforeClass
+ public static void initialize() throws Exception {
+ EaafOpenSaml3xInitializer.eaafInitialize();
+ }
+
+ /**
+ * jUnit test set-up.
+ *
+ * @throws Exception In case of an set-up error
+ */
+ @Before
+ public void setUp() throws Exception {
+ httpReq = new MockHttpServletRequest("POST", "https://localhost/authhandler");
+ httpReq.setScheme("https");
+ httpReq.setServerPort(443);
+ httpReq.setContextPath("/authhandler");
+ httpResp = new MockHttpServletResponse();
+ RequestContextHolder.resetRequestAttributes();
+ RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(httpReq, httpResp));
+
+ authConfig.putConfigValue(IdAustriaClientAuthConstants.CONFIG_PROPS_ID_AUSTRIA_ENTITYID, METADATA_PATH);
+
+ DummyOA oaParam = new DummyOA();
+ oaParam.setUniqueAppId("http://test.com/test");
+ oaParam.setTargetIdentifier(EaafConstants.URN_PREFIX_CDID + RandomStringUtils.randomAlphabetic(2));
+
+ pendingReq = new DummyPendingRequest();
+ pendingReq.initialize(httpReq, authConfig);
+ pendingReq.setPendingRequestId(RandomStringUtils.randomAlphanumeric(10));
+ pendingReq.setOnlineApplicationConfiguration(oaParam);
+
+ metadataProvider.fullyDestroy();
+ }
+
+ @Test
+ public void unsupportedHttpMethod() {
+ httpReq = new MockHttpServletRequest("PUT", "https://localhost/authhandler");
+ RequestContextHolder.resetRequestAttributes();
+ RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(httpReq, httpResp));
+
+ TaskExecutionException e = assertThrows(TaskExecutionException.class,
+ () -> task.execute(pendingReq, executionContext));
+
+ assertEquals(pendingReq.getPendingRequestId(), e.getPendingRequestID());
+ isInstanceOf(AuthnResponseValidationException.class, e.getOriginalException());
+ assertEquals("sp.pvp2.03", ((AuthnResponseValidationException) e.getOriginalException()).getErrorId());
+ }
+
+ @Test
+ public void httpGetNoMessage() {
+ httpReq = new MockHttpServletRequest("GET", "https://localhost/authhandler");
+ RequestContextHolder.resetRequestAttributes();
+ RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(httpReq, httpResp));
+
+ TaskExecutionException e = assertThrows(TaskExecutionException.class,
+ () -> task.execute(pendingReq, executionContext));
+
+ assertEquals(pendingReq.getPendingRequestId(), e.getPendingRequestID());
+ isInstanceOf(AuthnResponseValidationException.class, e.getOriginalException());
+ assertEquals("sp.pvp2.12", ((AuthnResponseValidationException) e.getOriginalException()).getErrorId());
+
+ }
+
+ @Test
+ public void httpPostNoMessage() {
+ httpReq = new MockHttpServletRequest("POST", "https://localhost/authhandler");
+ RequestContextHolder.resetRequestAttributes();
+ RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(httpReq, httpResp));
+
+ TaskExecutionException e = assertThrows(TaskExecutionException.class,
+ () -> task.execute(pendingReq, executionContext));
+
+ assertEquals(pendingReq.getPendingRequestId(), e.getPendingRequestID());
+ isInstanceOf(AuthnResponseValidationException.class, e.getOriginalException());
+ assertEquals("sp.pvp2.12", ((AuthnResponseValidationException) e.getOriginalException()).getErrorId());
+ }
+
+ @Test
+ public void httpPostMessageNotSigned() throws IOException {
+ byte[] bytes = IOUtils.toByteArray(ReceiveMobilePhoneSignatureResponseTask.class
+ .getResourceAsStream("/data/Response_without_sig_classpath_entityid.xml"));
+ httpReq.addParameter("SAMLResponse", Base64.getEncoder().encodeToString(bytes));
+
+ TaskExecutionException e = assertThrows(TaskExecutionException.class,
+ () -> task.execute(pendingReq, executionContext));
+
+ assertEquals(pendingReq.getPendingRequestId(), e.getPendingRequestID());
+ isInstanceOf(AuthnResponseValidationException.class, e.getOriginalException());
+ assertEquals("sp.pvp2.12", ((AuthnResponseValidationException) e.getOriginalException()).getErrorId());
+
+ }
+
+ @Test
+ public void httpPostMessageWrongDestinationEndpoint() throws Exception {
+ initResponse("/data/Response_with_wrong_destination_endpoint.xml", true);
+
+ TaskExecutionException e = assertThrows(TaskExecutionException.class,
+ () -> task.execute(pendingReq, executionContext));
+
+ assertEquals(pendingReq.getPendingRequestId(), e.getPendingRequestID());
+ isInstanceOf(AuthnResponseValidationException.class, e.getOriginalException());
+ assertEquals("sp.pvp2.12", ((AuthnResponseValidationException) e.getOriginalException()).getErrorId());
+
+ }
+
+ @Test
+ public void httpPostValidSignedNoMetadata() throws Exception {
+ initResponse("/data/Response_without_sig_classpath_entityid.xml", true);
+
+ TaskExecutionException e = assertThrows(TaskExecutionException.class,
+ () -> task.execute(pendingReq, executionContext));
+
+ assertEquals(pendingReq.getPendingRequestId(), e.getPendingRequestID());
+ isInstanceOf(AuthnResponseValidationException.class, e.getOriginalException());
+ assertEquals("sp.pvp2.11", ((EaafException) e.getOriginalException()).getErrorId());
+ }
+
+ @Test
+ public void httpPostValidSignedAssertionOutDated() throws Exception {
+ setupMetadataResolver();
+ initResponse("/data/Response_without_sig_classpath_entityid.xml", false);
+
+ TaskExecutionException e = assertThrows(TaskExecutionException.class,
+ () -> task.execute(pendingReq, executionContext));
+
+ assertEquals(pendingReq.getPendingRequestId(), e.getPendingRequestID());
+ isInstanceOf(AuthnResponseValidationException.class, e.getOriginalException());
+ assertEquals("sp.pvp2.12", ((EaafException) e.getOriginalException()).getErrorId());
+ }
+
+ @Test
+ public void httpPostValidSignedAssertionFromWrongIdp() throws Exception {
+ authConfig.putConfigValue(IdAustriaClientAuthConstants.CONFIG_PROPS_ID_AUSTRIA_ENTITYID,
+ "http://wrong.idp/" + RandomStringUtils.randomAlphabetic(5));
+ setupMetadataResolver();
+ initResponse("/data/Response_without_sig_classpath_entityid.xml", true);
+
+ TaskExecutionException e = assertThrows(TaskExecutionException.class,
+ () -> task.execute(pendingReq, executionContext));
+
+ assertEquals(pendingReq.getPendingRequestId(), e.getPendingRequestID());
+ isInstanceOf(AuthnResponseValidationException.class, e.getOriginalException());
+ assertEquals("sp.pvp2.08", ((EaafException) e.getOriginalException()).getErrorId());
+ }
+
+ @Test
+ public void httpPostValidSignedAssertionMissingAttributes() throws Exception {
+ setupMetadataResolver();
+ initResponse("/data/Response_without_sig_classpath_entityid.xml", true);
+
+ TaskExecutionException e = assertThrows(TaskExecutionException.class,
+ () -> task.execute(pendingReq, executionContext));
+
+ assertEquals(pendingReq.getPendingRequestId(), e.getPendingRequestID());
+ isInstanceOf(AuthnResponseValidationException.class, e.getOriginalException());
+ assertEquals("sp.pvp2.12", ((EaafException) e.getOriginalException()).getErrorId());
+ }
+
+ @Test
+ public void httpPostValidSignedWithError() throws Exception {
+ setupMetadataResolver();
+ initResponse("/data/Response_without_sig_with_error.xml", true);
+
+ TaskExecutionException e = assertThrows(TaskExecutionException.class,
+ () -> task.execute(pendingReq, executionContext));
+
+ assertEquals(pendingReq.getPendingRequestId(), e.getPendingRequestID());
+ isInstanceOf(AuthnResponseValidationException.class, e.getOriginalException());
+ assertEquals("sp.pvp2.05", ((EaafException) e.getOriginalException()).getErrorId());
+ }
+
+ @Test
+ public void httpPostValidSignedWitUserStopErrorCode() throws Exception {
+ setupMetadataResolver();
+ initResponse("/data/Response_without_sig_with_error_userstop.xml", true);
+
+ task.execute(pendingReq, executionContext);
+
+ assertEquals("Transition To S16", true, executionContext.get(Constants.TRANSITION_TO_GENERATE_OTHER_LOGIN_METHOD_GUI_TASK));
+ assertEquals("matching failed flag", true, executionContext.get(Constants.CONTEXT_FLAG_ADVANCED_MATCHING_FAILED));
+ assertEquals("failed reason", "module.eidasauth.matching.23", executionContext.get(Constants.CONTEXT_FLAG_ADVANCED_MATCHING_FAILED_REASON));
+ assertNull("no final matching result", MatchingTaskUtils.getFinalMatchingResult(pendingReq));
+
+ }
+
+ @Test
+ public void httpPostValidSignedWithErrorAndNoSubCode() throws Exception {
+ setupMetadataResolver();
+ initResponse("/data/Response_without_sig_with_error_without_subcode.xml", true);
+
+ TaskExecutionException e = assertThrows(TaskExecutionException.class,
+ () -> task.execute(pendingReq, executionContext));
+
+ assertEquals(pendingReq.getPendingRequestId(), e.getPendingRequestID());
+ isInstanceOf(AuthnResponseValidationException.class, e.getOriginalException());
+ assertEquals("sp.pvp2.05", ((EaafException) e.getOriginalException()).getErrorId());
+ }
+
+ @Test
+ public void httpPostValidSignedWithErrorAndEmptySubCode() throws Exception {
+ setupMetadataResolver();
+ initResponse("/data/Response_without_sig_with_error_empty_subcode.xml", true);
+
+ TaskExecutionException e = assertThrows(TaskExecutionException.class,
+ () -> task.execute(pendingReq, executionContext));
+
+ assertEquals(pendingReq.getPendingRequestId(), e.getPendingRequestID());
+ isInstanceOf(AuthnResponseValidationException.class, e.getOriginalException());
+ assertEquals("sp.pvp2.05", ((EaafException) e.getOriginalException()).getErrorId());
+ }
+
+ @Test
+ public void httpPostValidSignedAssertionEidValidButNameMismatch() throws Exception {
+ setupMetadataResolver();
+ initResponse("/data/Response_with_EID.xml", true);
+ AuthProcessDataWrapper authProcessData = pendingReq.getSessionData(AuthProcessDataWrapper.class);
+ SimpleEidasData eidData = createEidasDataMatchingToSamlResponse()
+ .familyName("notmatching")
+ .build();
+ authProcessData.setGenericDataToSession(Constants.DATA_SIMPLE_EIDAS, eidData);
+
+
+ task.execute(pendingReq, executionContext);
+
+ assertEquals("Next task", true, executionContext.get(Constants.TRANSITION_TO_GENERATE_OTHER_LOGIN_METHOD_GUI_TASK));
+ assertEquals("matching failed flag", true, executionContext.get(Constants.CONTEXT_FLAG_ADVANCED_MATCHING_FAILED));
+ assertEquals("failed reason", "module.eidasauth.matching.24", executionContext.get(Constants.CONTEXT_FLAG_ADVANCED_MATCHING_FAILED_REASON));
+ assertNull("no final matching result", MatchingTaskUtils.getFinalMatchingResult(pendingReq));
+
+ }
+
+ //TODO: implement new test that this test makes no sense any more
+ @Ignore
+ @Test
+ public void httpPostValidSignedAssertionEidValid_NoRegisterResult() throws Exception {
+ setupMetadataResolver();
+ initResponse("/data/Response_with_EID.xml", true);
+ AuthProcessDataWrapper authProcessData = pendingReq.getSessionData(AuthProcessDataWrapper.class);
+ SimpleEidasData eidData = createEidasDataMatchingToSamlResponse().build();
+ authProcessData.setGenericDataToSession(Constants.DATA_SIMPLE_EIDAS, eidData);
+ RegisterStatusResults registerSearchResult = new RegisterStatusResults(new RegisterOperationStatus(generateRandomProcessId()),
+ Collections.emptyList(), Collections.emptyList());
+ MatchingTaskUtils.storeIntermediateMatchingResult(pendingReq, registerSearchResult);
+
+ task.execute(pendingReq, executionContext);
+
+ AuthProcessDataWrapper session = pendingReq.getSessionData(AuthProcessDataWrapper.class);
+ assertEquals("LoA", "http://eidas.europa.eu/LoA/low", session.getQaaLevel());
+ assertEquals("IssueInstant", "2014-03-05T06:39:51Z", session.getIssueInstantString());
+ assertEquals("Transition To S16", true, executionContext.get(Constants.TRANSITION_TO_GENERATE_GUI_QUERY_AUSTRIAN_RESIDENCE_TASK));
+ }
+
+ @Test
+ public void httpPostValidSignedAssertionEidValid_ExactlyOneRegisterResult() throws Exception {
+ setupMetadataResolver();
+ initResponse("/data/Response_with_EID.xml", true);
+ AuthProcessDataWrapper authProcessData = pendingReq.getSessionData(AuthProcessDataWrapper.class);
+ SimpleEidasData eidData = createEidasDataMatchingToSamlResponse().build();
+ authProcessData.setGenericDataToSession(Constants.DATA_SIMPLE_EIDAS, eidData);
+ RegisterStatusResults registerSearchResult = buildResultWithOneMatch();
+ MatchingTaskUtils.storeIntermediateMatchingResult(pendingReq, registerSearchResult);
+
+ task.execute(pendingReq, executionContext);
+
+ AuthProcessDataWrapper session = pendingReq.getSessionData(AuthProcessDataWrapper.class);
+ assertEquals("LoA", "http://eidas.europa.eu/LoA/low", session.getQaaLevel());
+ assertEquals("IssueInstant", "2014-03-05T06:39:51Z", session.getIssueInstantString());
+ assertNull("Transition To S16", executionContext.get(Constants.TRANSITION_TO_GENERATE_GUI_QUERY_AUSTRIAN_RESIDENCE_TASK));
+
+ //TODO: update this check because this task selects one result from MDS search result before and creates a new element
+ //Mockito.verify(registerSearchService).step7aKittProcess(eq(registerSearchResult), eq(eidData));
+ }
+
+ @Test
+ public void httpPostValidSignedAssertionEidValid_ExactlyOneRegisterResultDeprecadedBpkEnc() throws Exception {
+ setupMetadataResolver();
+ initResponse("/data/Response_with_EID_deprecated_bpk_encoding.xml", true);
+ AuthProcessDataWrapper authProcessData = pendingReq.getSessionData(AuthProcessDataWrapper.class);
+ SimpleEidasData eidData = createEidasDataMatchingToSamlResponse().build();
+ authProcessData.setGenericDataToSession(Constants.DATA_SIMPLE_EIDAS, eidData);
+ RegisterStatusResults registerSearchResult = buildResultWithOneMatch();
+ MatchingTaskUtils.storeIntermediateMatchingResult(pendingReq, registerSearchResult);
+
+ task.execute(pendingReq, executionContext);
+
+ AuthProcessDataWrapper session = pendingReq.getSessionData(AuthProcessDataWrapper.class);
+ assertEquals("LoA", "http://eidas.europa.eu/LoA/low", session.getQaaLevel());
+ assertEquals("IssueInstant", "2014-03-05T06:39:51Z", session.getIssueInstantString());
+ assertNull("Transition To S16", executionContext.get(Constants.TRANSITION_TO_GENERATE_GUI_QUERY_AUSTRIAN_RESIDENCE_TASK));
+
+ //TODO: update this check because this task selects one result from MDS search result before and creates a new element
+ //Mockito.verify(registerSearchService).step7aKittProcess(eq(registerSearchResult), eq(eidData));
+ }
+
+
+
+ //TODO: implement new test that this test makes no sense any more
+ @Ignore
+ @Test
+ public void httpPostValidSignedAssertionEidValid_MoreThanOneRegisterResult() throws Exception {
+ setupMetadataResolver();
+ initResponse("/data/Response_with_EID.xml", true);
+ AuthProcessDataWrapper authProcessData = pendingReq.getSessionData(AuthProcessDataWrapper.class);
+ SimpleEidasData eidData = createEidasDataMatchingToSamlResponse().build();
+ authProcessData.setGenericDataToSession(Constants.DATA_SIMPLE_EIDAS, eidData);
+
+ TaskExecutionException e = assertThrows(TaskExecutionException.class,
+ () -> task.execute(pendingReq, executionContext));
+
+
+ assertEquals(pendingReq.getPendingRequestId(), e.getPendingRequestID());
+ isInstanceOf(AuthnResponseValidationException.class, e.getOriginalException());
+ isInstanceOf(ManualFixNecessaryException.class, e.getOriginalException().getCause());
+ assertEquals("sp.pvp2.12", ((AuthnResponseValidationException) e.getOriginalException()).getErrorId());
+
+
+ AuthProcessDataWrapper session = pendingReq.getSessionData(AuthProcessDataWrapper.class);
+ assertNull("Transition To S16", executionContext.get(Constants.TRANSITION_TO_GENERATE_GUI_QUERY_AUSTRIAN_RESIDENCE_TASK));
+ }
+
+ @NotNull
+ private RegisterStatusResults buildResultWithOneMatch() {
+ return new RegisterStatusResults(new RegisterOperationStatus(generateRandomProcessId()),
+ Collections.singletonList(RegisterResult.builder()
+ .bpk(BPK_FROM_ID_AUSTRIA)
+ .pseudonym(Arrays.asList("bar"))
+ .givenName("foo")
+ .familyName("foo")
+ .dateOfBirth("bar")
+ .build()),
+ Collections.emptyList());
+
+ }
+
+ @NotNull
+ private RegisterStatusResults buildResultWithTwoMatches() {
+ List<RegisterResult> results = Lists.newArrayList(
+ RegisterResult.builder()
+ .bpk(BPK_FROM_ID_AUSTRIA)
+ .pseudonym(Arrays.asList("bar"))
+ .givenName("foo")
+ .familyName("foo")
+ .dateOfBirth("bar")
+ .build(),
+ RegisterResult.builder()
+ .bpk("bpk")
+ .pseudonym(Arrays.asList("pseudonym"))
+ .givenName("givenName")
+ .familyName("familyName")
+ .dateOfBirth("dateOfBirth")
+ .build());
+
+ return new RegisterStatusResults(new RegisterOperationStatus(generateRandomProcessId()),
+ results, Collections.emptyList());
+ }
+
+ private BigInteger generateRandomProcessId() {
+ return new BigInteger(RandomStringUtils.randomNumeric(10));
+
+ }
+
+ private SimpleEidasData.SimpleEidasDataBuilder createEidasDataMatchingToSamlResponse() {
+ // data from "/data/Response_with_EID.xml"
+ return SimpleEidasData.builder()
+ .familyName("Mustermann")
+ .givenName("Max")
+ .dateOfBirth("1940-01-01");
+ }
+
+ private void addSamlResponseToHttpReq(Response response) throws TransformerException, IOException, MarshallingException {
+ String node = DomUtils.serializeNode(XMLObjectSupport.getMarshaller(response).marshall(response));
+ String base64encoded = Base64.getEncoder().encodeToString(node.getBytes(StandardCharsets.UTF_8));
+ httpReq.addParameter("SAMLResponse", base64encoded);
+ }
+
+ private void initResponse(String responsePath, boolean validConditions) throws Exception {
+ InputStream inputStream = ReceiveMobilePhoneSignatureResponseTaskTest.class.getResourceAsStream(responsePath);
+ ParserPool parserPool = Objects.requireNonNull(XMLObjectProviderRegistrySupport.getParserPool());
+ Response response = (Response) XMLObjectSupport.unmarshallFromInputStream(parserPool, inputStream);
+ response.setIssueInstant(Instant.now());
+ Issuer issuer = Saml2Utils.createSamlObject(Issuer.class);
+ issuer.setValue("classpath:/data/idp_metadata_classpath_entity.xml");
+ response.setIssuer(issuer);
+ if (validConditions) {
+ response.getAssertions().get(0).getConditions().setNotOnOrAfter(Instant.now().plusSeconds(5*60));
+ }
+ Response signedResponse = Saml2Utils.signSamlObject(response, credentialProvider.getMessageSigningCredential(), true);
+ addSamlResponseToHttpReq(signedResponse);
+ }
+
+ private void setupMetadataResolver() throws Pvp2MetadataException {
+ metadataProvider.addMetadataResolverIntoChain(metadataFactory.createMetadataProvider(
+ METADATA_PATH, null, "jUnit IDP", null));
+ }
+
+}
diff --git a/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/ReceiveOtherLoginMethodGuiResponseTaskTest.java b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/ReceiveOtherLoginMethodGuiResponseTaskTest.java
new file mode 100644
index 00000000..750a17ce
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/ReceiveOtherLoginMethodGuiResponseTaskTest.java
@@ -0,0 +1,154 @@
+package at.asitplus.eidas.specific.modules.auth.eidas.v2.test.tasks;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+
+import org.apache.commons.lang3.RandomStringUtils;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.i18n.LocaleContextHolder;
+import org.springframework.mock.web.MockHttpServletRequest;
+import org.springframework.mock.web.MockHttpServletResponse;
+import org.springframework.test.context.ActiveProfiles;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+import org.springframework.test.context.web.WebAppConfiguration;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.SelectedLoginMethod;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.tasks.ReceiveOtherLoginMethodGuiResponseTask;
+import at.gv.egiz.eaaf.core.exceptions.TaskExecutionException;
+import at.gv.egiz.eaaf.core.impl.idp.module.test.TestRequestImpl;
+import at.gv.egiz.eaaf.core.impl.idp.process.ExecutionContextImpl;
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration(locations = {
+ "/SpringTest-context_tasks_test.xml",
+ "/SpringTest-context_basic_mapConfig.xml"
+})
+@ActiveProfiles(profiles = {"deprecatedConfig"})
+@WebAppConfiguration
+public class ReceiveOtherLoginMethodGuiResponseTaskTest {
+
+ @Autowired
+ private ReceiveOtherLoginMethodGuiResponseTask task;
+
+ private final ExecutionContextImpl executionContext = new ExecutionContextImpl();
+ private TestRequestImpl pendingReq;
+ private MockHttpServletRequest httpReq;
+ private MockHttpServletResponse httpResp;
+
+ /**
+ * jUnit class initializer.
+ */
+ @BeforeClass
+ public static void classInitializer() {
+ final String current = new java.io.File(".").toURI().toString();
+ System.setProperty("eidas.ms.configuration", current + "src/test/resources/config/junit_config_1.properties");
+ }
+
+ /**
+ * jUnit test set-up.
+ */
+ @Before
+ public void initialize() {
+ httpReq = new MockHttpServletRequest("POST", "https://localhost/ms_connector");
+ httpResp = new MockHttpServletResponse();
+ RequestContextHolder.resetRequestAttributes();
+ RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(httpReq, httpResp));
+
+ pendingReq = new TestRequestImpl();
+ pendingReq.setAuthUrl("https://localhost/ms_connector");
+ pendingReq.setPendingReqId(RandomStringUtils.randomAlphanumeric(10));
+
+ LocaleContextHolder.resetLocaleContext();
+ }
+
+ @Test
+ public void withMobileSignatureSelection() throws TaskExecutionException {
+ testTransition(SelectedLoginMethod.MOBILE_PHONE_SIGNATURE_LOGIN, Constants.TRANSITION_TO_GENERATE_MOBILE_PHONE_SIGNATURE_REQUEST_TASK);
+ assertEquals("return to selection", false, executionContext.get(Constants.TRANSITION_TO_GENERATE_OTHER_LOGIN_METHOD_GUI_TASK));
+
+ }
+
+ @Test
+ public void withEidasSelection() throws TaskExecutionException {
+ testTransition(SelectedLoginMethod.EIDAS_LOGIN, Constants.TRANSITION_TO_GENERATE_EIDAS_LOGIN);
+ assertEquals("return to selection", false, executionContext.get(Constants.TRANSITION_TO_GENERATE_OTHER_LOGIN_METHOD_GUI_TASK));
+
+ }
+
+ @Test
+ public void withNoOtherLoginSelection() throws TaskExecutionException {
+ testTransition(SelectedLoginMethod.NO_OTHER_LOGIN, Constants.TRANSITION_TO_GENERATE_GUI_QUERY_AUSTRIAN_RESIDENCE_TASK);
+ assertEquals("return to selection", false, executionContext.get(Constants.TRANSITION_TO_GENERATE_OTHER_LOGIN_METHOD_GUI_TASK));
+
+ }
+
+ @Test
+ public void withAddMeAsNewSelection() throws TaskExecutionException {
+ testTransition(SelectedLoginMethod.ADD_ME_AS_NEW, Constants.TRANSITION_TO_CREATE_NEW_ERNP_ENTRY_TASK);
+ assertEquals("return to selection", false, executionContext.get(Constants.TRANSITION_TO_GENERATE_OTHER_LOGIN_METHOD_GUI_TASK));
+
+ }
+
+ public void testTransition(SelectedLoginMethod loginMethod, String expectedTransition) throws TaskExecutionException {
+ httpReq.setParameter(Constants.REQ_SELECTED_LOGIN_METHOD_PARAMETER, loginMethod.name());
+ executionContext.put(Constants.CONTEXT_FLAG_ADVANCED_MATCHING_FAILED, true);
+
+ task.execute(pendingReq, executionContext);
+
+ assertFalse("wrong pendingReq auth flag", pendingReq.isAuthenticated());
+ assertFalse("wrong process-cancelled flag", executionContext.isProcessCancelled());
+ assertNotNull("no login-selection found", executionContext.get(Constants.REQ_SELECTED_LOGIN_METHOD_PARAMETER));
+ assertEquals("Wrong login-selection found", loginMethod.name(), executionContext.get(Constants.REQ_SELECTED_LOGIN_METHOD_PARAMETER));
+ assertEquals("Next task", true, executionContext.get(expectedTransition));
+ assertNull("find advancedMatchingError flag", executionContext.get(Constants.CONTEXT_FLAG_ADVANCED_MATCHING_FAILED));
+
+ }
+
+ public void withInvalidSelection() throws TaskExecutionException {
+ httpReq.setParameter(Constants.REQ_SELECTED_LOGIN_METHOD_PARAMETER, RandomStringUtils.randomAlphabetic(2));
+
+ task.execute(pendingReq, executionContext);
+
+ assertEquals("Next task", true, executionContext.get(Constants.TRANSITION_TO_GENERATE_OTHER_LOGIN_METHOD_GUI_TASK));
+ assertEquals("advancedMatchingError flag", true, executionContext.get(Constants.CONTEXT_FLAG_ADVANCED_MATCHING_FAILED));
+ }
+
+ @Test
+ public void withNullSelection() throws TaskExecutionException {
+ httpReq.setParameter(Constants.REQ_SELECTED_LOGIN_METHOD_PARAMETER, "null");
+
+ task.execute(pendingReq, executionContext);
+
+ assertEquals("Next task", true, executionContext.get(Constants.TRANSITION_TO_GENERATE_OTHER_LOGIN_METHOD_GUI_TASK));
+ assertEquals("advancedMatchingError flag", true, executionContext.get(Constants.CONTEXT_FLAG_ADVANCED_MATCHING_FAILED));
+ }
+
+ @Test
+ public void withEmptySelection() throws TaskExecutionException {
+ httpReq.setParameter(Constants.REQ_SELECTED_LOGIN_METHOD_PARAMETER, "");
+
+ task.execute(pendingReq, executionContext);
+
+ assertEquals("Next task", true, executionContext.get(Constants.TRANSITION_TO_GENERATE_OTHER_LOGIN_METHOD_GUI_TASK));
+ assertEquals("advancedMatchingError flag", true, executionContext.get(Constants.CONTEXT_FLAG_ADVANCED_MATCHING_FAILED));
+ }
+
+ @Test
+ public void withoutLoginMethodSelection() throws TaskExecutionException {
+
+ task.execute(pendingReq, executionContext);
+
+ assertEquals("Next task", true, executionContext.get(Constants.TRANSITION_TO_GENERATE_OTHER_LOGIN_METHOD_GUI_TASK));
+ assertEquals("advancedMatchingError flag", true, executionContext.get(Constants.CONTEXT_FLAG_ADVANCED_MATCHING_FAILED));
+ }
+}
diff --git a/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/utils/JoseUtilsTest.java b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/utils/JoseUtilsTest.java
index ad38e371..4da03622 100644
--- a/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/utils/JoseUtilsTest.java
+++ b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/utils/JoseUtilsTest.java
@@ -17,13 +17,11 @@ import org.jose4j.lang.JoseException;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
-import org.powermock.core.classloader.annotations.PrepareForTest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
-import at.asitplus.eidas.specific.modules.auth.eidas.v2.tasks.CreateIdentityLinkTask;
import at.asitplus.eidas.specific.modules.auth.eidas.v2.utils.JoseUtils;
import at.asitplus.eidas.specific.modules.auth.eidas.v2.utils.JoseUtils.JwsResult;
import at.gv.egiz.eaaf.core.exceptions.EaafException;
@@ -34,15 +32,14 @@ import at.gv.egiz.eaaf.core.impl.credential.KeyStoreConfiguration.KeyStoreType;
import at.gv.egiz.eaaf.core.impl.data.Pair;
@RunWith(SpringJUnit4ClassRunner.class)
-@PrepareForTest(CreateIdentityLinkTask.class)
@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_CLASS)
@ContextConfiguration(locations = {
"/SpringTest-context_tasks_test.xml",
"/SpringTest-context_basic_mapConfig.xml"})
public class JoseUtilsTest {
-
+
@Autowired private EaafKeyStoreFactory keyStoreFactory;
-
+
private static final List<String> AUTH_ALGORITHM_WHITELIST_SIGNING = Collections.unmodifiableList(
Arrays.asList(
AlgorithmIdentifiers.ECDSA_USING_P256_CURVE_AND_SHA256,
@@ -50,48 +47,48 @@ public class JoseUtilsTest {
AlgorithmIdentifiers.RSA_PSS_USING_SHA256,
AlgorithmIdentifiers.RSA_PSS_USING_SHA512));
-
+
@Test
public void missingKey() throws EaafException, JoseException, KeyStoreException, IOException {
-
+
KeyStoreConfiguration config = new KeyStoreConfiguration();
config.setFriendlyName("jUnittest");
config.setKeyStoreType(KeyStoreType.JKS);
config.setSoftKeyStoreFilePath("../data/junit.jks");
config.setSoftKeyStorePassword("password");
-
+
Pair<KeyStore, Provider> keyStore = keyStoreFactory.buildNewKeyStore(config);
String payLoad = RandomStringUtils.randomAlphanumeric(100);
-
+
//check signing
try {
JoseUtils.createSignature(keyStore, "notExist", "password".toCharArray(), payLoad , true, "jUnitTest");
Assert.fail("missing Key not detected");
-
- } catch (EaafException e) {
+
+ } catch (EaafException e) {
Assert.assertEquals("ErrorId", "internal.keystore.09", e.getErrorId());
-
+
}
}
-
+
@Test
public void createRsaSignature() throws EaafException, JoseException, KeyStoreException, IOException {
-
+
KeyStoreConfiguration config = new KeyStoreConfiguration();
config.setFriendlyName("jUnittest");
config.setKeyStoreType(KeyStoreType.JKS);
config.setSoftKeyStoreFilePath("../data/junit.jks");
config.setSoftKeyStorePassword("password");
-
+
Pair<KeyStore, Provider> keyStore = keyStoreFactory.buildNewKeyStore(config);
String payLoad = RandomStringUtils.randomAlphanumeric(100);
-
+
//check signing
String result = JoseUtils.createSignature(keyStore, "meta", "password".toCharArray(), payLoad , true, "jUnitTest");
-
+
Assert.assertNotNull("signed message", result);
Assert.assertFalse("signed msg empty", result.isEmpty());
-
+
//validate
List<X509Certificate> trustedCerts = EaafKeyStoreUtils.readCertsFromKeyStore(keyStore.getFirst());
@@ -99,30 +96,30 @@ public class JoseUtilsTest {
AUTH_ALGORITHM_WHITELIST_SIGNING
.toArray(new String[AUTH_ALGORITHM_WHITELIST_SIGNING.size()]));
JwsResult verify = JoseUtils.validateSignature(result, trustedCerts, constraints);
-
+
Assert.assertTrue("sig. verify", verify.isValid());
Assert.assertEquals("payload", payLoad, verify.getPayLoad());
-
+
}
-
+
@Test
public void createEccSignature() throws EaafException, JoseException, KeyStoreException, IOException {
-
+
KeyStoreConfiguration config = new KeyStoreConfiguration();
config.setFriendlyName("jUnittest");
config.setKeyStoreType(KeyStoreType.JKS);
config.setSoftKeyStoreFilePath("../data/junit.jks");
config.setSoftKeyStorePassword("password");
-
+
Pair<KeyStore, Provider> keyStore = keyStoreFactory.buildNewKeyStore(config);
String payLoad = RandomStringUtils.randomAlphanumeric(100);
-
+
//check signing
String result = JoseUtils.createSignature(keyStore, "sig", "password".toCharArray(), payLoad , true, "jUnitTest");
-
+
Assert.assertNotNull("signed message", result);
Assert.assertFalse("signed msg empty", result.isEmpty());
-
+
//validate
List<X509Certificate> trustedCerts = EaafKeyStoreUtils.readCertsFromKeyStore(keyStore.getFirst());
@@ -130,10 +127,10 @@ public class JoseUtilsTest {
AUTH_ALGORITHM_WHITELIST_SIGNING
.toArray(new String[AUTH_ALGORITHM_WHITELIST_SIGNING.size()]));
JwsResult verify = JoseUtils.validateSignature(result, trustedCerts, constraints);
-
+
Assert.assertTrue("sig. verify", verify.isValid());
Assert.assertEquals("payload", payLoad, verify.getPayLoad());
-
+
}
-
+
}
diff --git a/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/validation/EidasAttributePostProcessingTest.java b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/validation/EidasAttributePostProcessingTest.java
index 9bb51cd9..0a4ab851 100644
--- a/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/validation/EidasAttributePostProcessingTest.java
+++ b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/validation/EidasAttributePostProcessingTest.java
@@ -30,7 +30,7 @@ import java.text.SimpleDateFormat;
import java.util.HashMap;
import java.util.Map;
-import org.joda.time.DateTime;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.SimpleEidasData;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -41,7 +41,6 @@ import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants;
-import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.ErnbEidData;
import at.asitplus.eidas.specific.modules.auth.eidas.v2.service.CcSpecificEidProcessingService;
@RunWith(SpringJUnit4ClassRunner.class)
@@ -59,7 +58,7 @@ public class EidasAttributePostProcessingTest {
"DE/AT/532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25";
private static final String P1_GIVENNAME = "Max";
private static final String P1_FAMILYNAME = "Mustermann";
- private static final DateTime P1_DATEOFBIRTH = DateTime.now();
+ private static final String P1_DATEOFBIRTH = "2020-01-04";
private static final String P1_PLACEOFBIRTH = "Nirgendwo";
private static final String P1_BIRTHNAME = "Musterkind";
@@ -68,7 +67,7 @@ public class EidasAttributePostProcessingTest {
"DE/AT/532eaabd9574880dbf76b9b8cc00832c20A6ec113d682299550d7a6e0f345e25";
private static final String P3_GIVENNAME = "Max";
private static final String P3_FAMILYNAME = "Mustermann";
- private static final DateTime P3_DATEOFBIRTH = DateTime.now();
+ private static final String P3_DATEOFBIRTH = "2020-01-03";
private static final String P3_PLACEOFBIRTH = "Nirgendwo";
private static final String P3_BIRTHNAME = "Musterkind";
@@ -77,7 +76,7 @@ public class EidasAttributePostProcessingTest {
"DE/AT/532EAABD9574880DBF76B9B8CC00832C20A6EC113D682299550D7A6E0F345E25";
private static final String P4_GIVENNAME = "Max";
private static final String P4_FAMILYNAME = "Mustermann";
- private static final DateTime P4_DATEOFBIRTH = DateTime.now();
+ private static final String P4_DATEOFBIRTH = "2020-01-05";
private static final String P4_PLACEOFBIRTH = "Nirgendwo";
private static final String P4_BIRTHNAME = "Musterkind";
@@ -86,7 +85,7 @@ public class EidasAttributePostProcessingTest {
"DE/AT/532EAABD9574880DBF76B9B8CC00832C20A6EC113D682299550D7A6E0F345E251";
private static final String P5_GIVENNAME = "Max";
private static final String P5_FAMILYNAME = "Mustermann";
- private static final DateTime P5_DATEOFBIRTH = DateTime.now();
+ private static final String P5_DATEOFBIRTH = "2020-01-06";
private static final String P5_PLACEOFBIRTH = "Nirgendwo";
private static final String P5_BIRTHNAME = "Musterkind";
@@ -94,7 +93,7 @@ public class EidasAttributePostProcessingTest {
private static final String P6_eIDASID = "DE/AT/532EAABD9574880DBF76B9B8CC00832C20A6EC113D682299550D7A6E0F";
private static final String P6_GIVENNAME = "Max";
private static final String P6_FAMILYNAME = "Mustermann";
- private static final DateTime P6_DATEOFBIRTH = DateTime.now();
+ private static final String P6_DATEOFBIRTH = "2020-01-08";
private static final String P6_PLACEOFBIRTH = "Nirgendwo";
private static final String P6_BIRTHNAME = "Musterkind";
@@ -102,7 +101,7 @@ public class EidasAttributePostProcessingTest {
private static final String P7_eIDASID = "DE/AT/532EAABD9574880DBF76B9B8CC00832C20A6EC113D682299550D7A6E0F";
private static final String P7_GIVENNAME = "Max";
private static final String P7_FAMILYNAME = "Mustermann";
- private static final DateTime P7_DATEOFBIRTH = DateTime.now();
+ private static final String P7_DATEOFBIRTH = "2020-01-09";
private static final String P7_PLACEOFBIRTH = "Nirgendwo";
private static final String P7_BIRTHNAME = "Musterkind";
@@ -110,13 +109,13 @@ public class EidasAttributePostProcessingTest {
"EE/AT/asfasfasdfasdfasdfasdfasdfasvafasdfasdfasdfasdfasdfasvascasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasd";
private static final String P2_GIVENNAME = "Max";
private static final String P2_FAMILYNAME = "Mustermann";
- private static final DateTime P2_DATEOFBIRTH = DateTime.now();
+ private static final String P2_DATEOFBIRTH = "2020-01-10";
private static final String P2_PLACEOFBIRTH = "Nirgendwo";
private static final String P2_BIRTHNAME = "Musterkind";
/**
* jUnit class initializer.
- *
+ *
* @throws IOException In case of an error
*/
@BeforeClass
@@ -129,7 +128,7 @@ public class EidasAttributePostProcessingTest {
@Test
public void deWithHexLowerCase() throws Exception {
try {
- final ErnbEidData result = postProcessor.postProcess(
+ final SimpleEidasData result = postProcessor.postProcess(
generateInputData(
P1_eIDASID,
P1_FAMILYNAME,
@@ -156,7 +155,7 @@ public class EidasAttributePostProcessingTest {
@Test
public void deWithHexMixedCase() throws Exception {
try {
- final ErnbEidData result = postProcessor.postProcess(
+ final SimpleEidasData result = postProcessor.postProcess(
generateInputData(
P3_eIDASID,
P3_FAMILYNAME,
@@ -183,7 +182,7 @@ public class EidasAttributePostProcessingTest {
@Test
public void deWithHexUpperCase() throws Exception {
try {
- final ErnbEidData result = postProcessor.postProcess(
+ final SimpleEidasData result = postProcessor.postProcess(
generateInputData(
P4_eIDASID,
P4_FAMILYNAME,
@@ -270,7 +269,7 @@ public class EidasAttributePostProcessingTest {
@Test
public void eeTestCase() throws Exception {
try {
- final ErnbEidData result = postProcessor.postProcess(
+ final SimpleEidasData result = postProcessor.postProcess(
generateInputData(
P2_eIDASID,
P2_FAMILYNAME,
@@ -297,7 +296,7 @@ public class EidasAttributePostProcessingTest {
@Test
public void eeTestFamilyNameMissingCase() throws Exception {
try {
- final ErnbEidData result = postProcessor.postProcess(
+ final SimpleEidasData result = postProcessor.postProcess(
generateInputData(
P2_eIDASID,
null,
@@ -326,7 +325,7 @@ public class EidasAttributePostProcessingTest {
@Test
public void eeTestGivenNameMissingCase() throws Exception {
try {
- final ErnbEidData result = postProcessor.postProcess(
+ final SimpleEidasData result = postProcessor.postProcess(
generateInputData(
P2_eIDASID,
P2_FAMILYNAME,
@@ -355,7 +354,7 @@ public class EidasAttributePostProcessingTest {
@Test
public void eeTestDateOfBirthMissingCase() throws Exception {
try {
- final ErnbEidData result = postProcessor.postProcess(
+ final SimpleEidasData result = postProcessor.postProcess(
generateInputData(
P2_eIDASID,
P2_FAMILYNAME,
@@ -384,7 +383,7 @@ public class EidasAttributePostProcessingTest {
@Test
public void eeTestIdMissingCase() throws Exception {
try {
- final ErnbEidData result = postProcessor.postProcess(
+ final SimpleEidasData result = postProcessor.postProcess(
generateInputData(
null,
P2_FAMILYNAME,
@@ -411,7 +410,7 @@ public class EidasAttributePostProcessingTest {
}
private Map<String, Object> generateInputData(String id, String familyName, String givenName,
- DateTime dateOfBirth, String placeOfBirth, String birthName) {
+ String dateOfBirth, String placeOfBirth, String birthName) {
final Map<String, Object> result = new HashMap<>();
result.put(Constants.eIDAS_ATTR_PERSONALIDENTIFIER, id);
result.put(Constants.eIDAS_ATTR_CURRENTGIVENNAME, givenName);
@@ -423,8 +422,8 @@ public class EidasAttributePostProcessingTest {
}
- private void validate(ErnbEidData result, String id, String familyName, String givenName,
- DateTime dateOfBirth, String placeOfBirth, String birthName) {
+ private void validate(SimpleEidasData result, String id, String familyName, String givenName,
+ String dateOfBirth, String placeOfBirth, String birthName) {
if (!result.getPseudonym().equals(id)) {
fail(result.getPseudonym() + "is not equal to " + id);
}
@@ -441,12 +440,6 @@ public class EidasAttributePostProcessingTest {
fail(result.getDateOfBirth() + "is not equal to " + dateOfBirth);
}
- if (!result.getFormatedDateOfBirth().equals(new SimpleDateFormat("yyyy-MM-dd").format(dateOfBirth
- .toDate()))) {
- fail(result.getDateOfBirth() + "is not equal to " + new SimpleDateFormat("yyyy-MM-dd").format(
- dateOfBirth.toDate()));
- }
-
if (!result.getPlaceOfBirth().equals(placeOfBirth)) {
fail(result.getPlaceOfBirth() + "is not equal to " + placeOfBirth);
}
diff --git a/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/validation/EidasRequestPreProcessingFirstTest.java b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/validation/EidasRequestPreProcessingFirstTest.java
index 7ac41500..84da2344 100644
--- a/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/validation/EidasRequestPreProcessingFirstTest.java
+++ b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/validation/EidasRequestPreProcessingFirstTest.java
@@ -54,8 +54,11 @@ import eu.eidas.auth.commons.light.impl.LightRequest.Builder;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {
"/SpringTest-context_tasks_test.xml",
- "/SpringTest-context_basic_realConfig.xml"})
-@TestPropertySource(locations = {"classpath:/config/junit_config_de_attributes.properties"})
+ "/SpringTest-context_basic_realConfig.xml",
+ //"/SpringTest-context_basic_mapConfig.xml"
+ })
+@TestPropertySource(locations = {"classpath:/config/junit_config_de_attributes.properties", "classpath:/config" +
+ "/junit_config_1_springboot.properties"})
@DirtiesContext(classMode = ClassMode.AFTER_CLASS)
public class EidasRequestPreProcessingFirstTest {
diff --git a/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/validation/EidasRequestPreProcessingSecondTest.java b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/validation/EidasRequestPreProcessingSecondTest.java
index 9ee38296..9b061b55 100644
--- a/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/validation/EidasRequestPreProcessingSecondTest.java
+++ b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/validation/EidasRequestPreProcessingSecondTest.java
@@ -103,7 +103,7 @@ public class EidasRequestPreProcessingSecondTest {
final LightRequest lightReq = authnRequestBuilder.build();
- Assert.assertEquals("ProviderName is not Static", "myNode", lightReq.getProviderName());
+ Assert.assertEquals("ProviderName is not Static", "myNode", lightReq.getProviderName());//Fixme "myNode"
Assert.assertEquals("no PublicSP", "public", lightReq.getSpType());
Assert.assertEquals("Requested attribute size not match", 8, lightReq.getRequestedAttributes().size());
diff --git a/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/validation/EidasResponseValidatorTest.java b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/validation/EidasResponseValidatorTest.java
index b1f1b164..bbba56e2 100644
--- a/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/validation/EidasResponseValidatorTest.java
+++ b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/validation/EidasResponseValidatorTest.java
@@ -12,7 +12,6 @@ import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
-import org.powermock.core.classloader.annotations.PrepareForTest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.ContextConfiguration;
@@ -25,7 +24,6 @@ import at.asitplus.eidas.specific.core.test.config.dummy.MsConnectorDummySpConfi
import at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants;
import at.asitplus.eidas.specific.modules.auth.eidas.v2.exception.EidasValidationException;
import at.asitplus.eidas.specific.modules.auth.eidas.v2.service.EidasAttributeRegistry;
-import at.asitplus.eidas.specific.modules.auth.eidas.v2.tasks.CreateIdentityLinkTask;
import at.asitplus.eidas.specific.modules.auth.eidas.v2.validator.EidasResponseValidator;
import at.gv.egiz.eaaf.core.api.data.EaafConfigConstants;
import at.gv.egiz.eaaf.core.api.data.EaafConstants;
@@ -41,7 +39,6 @@ import eu.eidas.auth.commons.protocol.impl.AuthenticationResponse;
import lombok.val;
@RunWith(SpringJUnit4ClassRunner.class)
-@PrepareForTest(CreateIdentityLinkTask.class)
@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_CLASS)
@ContextConfiguration(locations = {
"/SpringTest-context_tasks_test.xml",
@@ -50,17 +47,17 @@ public class EidasResponseValidatorTest {
@Autowired private MsConnectorDummyConfigMap basicConfig;
@Autowired protected EidasAttributeRegistry attrRegistry;
-
+
private TestRequestImpl pendingReq;
private MsConnectorDummySpConfiguration oaParam;
-
-
+
+
/**
* jUnit test set-up.
*/
@Before
public void setUp() throws EaafStorageException, URISyntaxException {
-
+
final Map<String, String> spConfig = new HashMap<>();
spConfig.put(EaafConfigConstants.SERVICE_UNIQUEIDENTIFIER, "testSp");
spConfig.put("target", "urn:publicid:gv.at:cdid+XX");
@@ -74,250 +71,250 @@ public class EidasResponseValidatorTest {
pendingReq.setAuthUrl("http://test.com/");
pendingReq.setTransactionId("avaasbav");
pendingReq.setPiiTransactionId(RandomStringUtils.randomAlphanumeric(10));
-
+
}
-
-
+
+
@Test
public void loaFromResponseToLow() throws URISyntaxException {
//set-up
- ILightResponse eidasResponse = buildDummyAuthResponse(
- "LU/AT/" + RandomStringUtils.randomNumeric(10),
+ ILightResponse eidasResponse = buildDummyAuthResponse(
+ "LU/AT/" + RandomStringUtils.randomNumeric(10),
EaafConstants.EIDAS_LOA_LOW,
false);
String spCountry = "AT";
String citizenCountryCode = "XX";
-
+
//execute test
try {
EidasResponseValidator.validateResponse(pendingReq, eidasResponse, spCountry, citizenCountryCode, attrRegistry);
Assert.fail("Wrong eIDAS response not detected");
-
+
} catch (EidasValidationException e) {
- Assert.assertEquals("ErrorId", "eidas.06", e.getErrorId());
+ Assert.assertEquals("ErrorId", "eidas.06", e.getErrorId());
Assert.assertEquals("wrong parameter size", 1, e.getParams().length);
- Assert.assertEquals("wrong errorMsg", "http://eidas.europa.eu/LoA/low",
+ Assert.assertEquals("wrong errorMsg", "http://eidas.europa.eu/LoA/low",
e.getParams()[0]);
-
- }
+
+ }
}
-
+
@Test
public void noEidasSpCountry() throws URISyntaxException {
//set-up
- ILightResponse eidasResponse = buildDummyAuthResponse(
- "LU/AT/" + RandomStringUtils.randomNumeric(10),
+ ILightResponse eidasResponse = buildDummyAuthResponse(
+ "LU/AT/" + RandomStringUtils.randomNumeric(10),
EaafConstants.EIDAS_LOA_SUBSTANTIAL,
false);
String spCountry = null;
String citizenCountryCode = "LU";
-
+
oaParam.setLoa(Arrays.asList(EaafConstants.EIDAS_LOA_HIGH, EaafConstants.EIDAS_LOA_SUBSTANTIAL));
-
-
+
+
//execute test
try {
EidasResponseValidator.validateResponse(pendingReq, eidasResponse, spCountry, citizenCountryCode, attrRegistry);
Assert.fail("Wrong eIDAS response not detected");
-
+
} catch (EidasValidationException e) {
- Assert.assertEquals("ErrorId", "eidas.07", e.getErrorId());
+ Assert.assertEquals("ErrorId", "eidas.07", e.getErrorId());
Assert.assertEquals("wrong parameter size", 2, e.getParams().length);
- Assert.assertEquals("wrong errorMsg", "PersonIdentifier",
+ Assert.assertEquals("wrong errorMsg", "PersonIdentifier",
e.getParams()[0]);
- Assert.assertEquals("wrong errorMsg",
- "Destination country does not match to SP country",
+ Assert.assertEquals("wrong errorMsg",
+ "Destination country does not match to SP country",
e.getParams()[1]);
-
- }
+
+ }
}
-
+
@Test
public void noEidasResponseCountry() throws URISyntaxException {
//set-up
- ILightResponse eidasResponse = buildDummyAuthResponse(
- "LU/AT/" + RandomStringUtils.randomNumeric(10),
+ ILightResponse eidasResponse = buildDummyAuthResponse(
+ "LU/AT/" + RandomStringUtils.randomNumeric(10),
EaafConstants.EIDAS_LOA_SUBSTANTIAL,
false);
String spCountry = "AT";
String citizenCountryCode = null;
-
+
oaParam.setLoa(Arrays.asList(EaafConstants.EIDAS_LOA_HIGH, EaafConstants.EIDAS_LOA_SUBSTANTIAL));
-
-
+
+
//execute test
try {
EidasResponseValidator.validateResponse(pendingReq, eidasResponse, spCountry, citizenCountryCode, attrRegistry);
Assert.fail("Wrong eIDAS response not detected");
-
+
} catch (EidasValidationException e) {
- Assert.assertEquals("ErrorId", "eidas.07", e.getErrorId());
+ Assert.assertEquals("ErrorId", "eidas.07", e.getErrorId());
Assert.assertEquals("wrong parameter size", 2, e.getParams().length);
- Assert.assertEquals("wrong errorMsg", "PersonIdentifier",
+ Assert.assertEquals("wrong errorMsg", "PersonIdentifier",
e.getParams()[0]);
- Assert.assertEquals("wrong errorMsg",
- "Citizen country does not match to eIDAS-node country that generates the response",
+ Assert.assertEquals("wrong errorMsg",
+ "Citizen country does not match to eIDAS-node country that generates the response",
e.getParams()[1]);
-
- }
+
+ }
}
-
+
@Test
public void wrongEidasResponseCountry() throws URISyntaxException {
//set-up
- ILightResponse eidasResponse = buildDummyAuthResponse(
- "LU/AT/" + RandomStringUtils.randomNumeric(10),
+ ILightResponse eidasResponse = buildDummyAuthResponse(
+ "LU/AT/" + RandomStringUtils.randomNumeric(10),
EaafConstants.EIDAS_LOA_SUBSTANTIAL,
false);
String spCountry = "AT";
String citizenCountryCode = "XX";
-
+
oaParam.setLoa(Arrays.asList(EaafConstants.EIDAS_LOA_HIGH, EaafConstants.EIDAS_LOA_SUBSTANTIAL));
-
-
+
+
//execute test
try {
EidasResponseValidator.validateResponse(pendingReq, eidasResponse, spCountry, citizenCountryCode, attrRegistry);
Assert.fail("Wrong eIDAS response not detected");
-
+
} catch (EidasValidationException e) {
- Assert.assertEquals("ErrorId", "eidas.07", e.getErrorId());
+ Assert.assertEquals("ErrorId", "eidas.07", e.getErrorId());
Assert.assertEquals("wrong parameter size", 2, e.getParams().length);
- Assert.assertEquals("wrong errorMsg", "PersonIdentifier",
+ Assert.assertEquals("wrong errorMsg", "PersonIdentifier",
e.getParams()[0]);
- Assert.assertEquals("wrong errorMsg",
- "Citizen country does not match to eIDAS-node country that generates the response",
+ Assert.assertEquals("wrong errorMsg",
+ "Citizen country does not match to eIDAS-node country that generates the response",
e.getParams()[1]);
-
- }
+
+ }
}
-
+
@Test
public void missingPersonalIdentifier() throws URISyntaxException {
//set-up
- ILightResponse eidasResponse = buildDummyAuthResponse(
- null,
+ ILightResponse eidasResponse = buildDummyAuthResponse(
+ null,
EaafConstants.EIDAS_LOA_SUBSTANTIAL,
false);
String spCountry = "AT";
String citizenCountryCode = "LU";
-
+
oaParam.setLoa(Arrays.asList(EaafConstants.EIDAS_LOA_HIGH, EaafConstants.EIDAS_LOA_SUBSTANTIAL));
-
-
+
+
//execute test
try {
EidasResponseValidator.validateResponse(pendingReq, eidasResponse, spCountry, citizenCountryCode, attrRegistry);
Assert.fail("Wrong eIDAS response not detected");
-
+
} catch (EidasValidationException e) {
- Assert.assertEquals("ErrorId", "eidas.05", e.getErrorId());
+ Assert.assertEquals("ErrorId", "eidas.05", e.getErrorId());
Assert.assertEquals("wrong parameter size", 1, e.getParams().length);
- Assert.assertEquals("wrong errorMsg", "NO 'PersonalIdentifier' attriubte",
+ Assert.assertEquals("wrong errorMsg", "NO 'PersonalIdentifier' attriubte",
e.getParams()[0]);
-
- }
+
+ }
}
-
+
@Test
public void moreThanOnePersonalIdentifier() throws URISyntaxException {
//set-up
- ILightResponse eidasResponse = buildDummyAuthResponse(
- null,
+ ILightResponse eidasResponse = buildDummyAuthResponse(
+ null,
EaafConstants.EIDAS_LOA_SUBSTANTIAL,
true);
String spCountry = "AT";
String citizenCountryCode = "LU";
-
+
oaParam.setLoa(Arrays.asList(EaafConstants.EIDAS_LOA_HIGH, EaafConstants.EIDAS_LOA_SUBSTANTIAL));
-
-
+
+
//execute test
try {
EidasResponseValidator.validateResponse(pendingReq, eidasResponse, spCountry, citizenCountryCode, attrRegistry);
Assert.fail("Wrong eIDAS response not detected");
-
+
} catch (EidasValidationException e) {
- Assert.assertEquals("ErrorId", "eidas.05", e.getErrorId());
+ Assert.assertEquals("ErrorId", "eidas.05", e.getErrorId());
Assert.assertEquals("wrong parameter size", 1, e.getParams().length);
- Assert.assertEquals("wrong errorMsg", "NO 'PersonalIdentifier' attriubte",
+ Assert.assertEquals("wrong errorMsg", "NO 'PersonalIdentifier' attriubte",
e.getParams()[0]);
-
- }
+
+ }
}
-
+
@Test
public void emptyPersonalIdentifier() throws URISyntaxException {
//set-up
- ILightResponse eidasResponse = buildDummyAuthResponse(
- "",
+ ILightResponse eidasResponse = buildDummyAuthResponse(
+ "",
EaafConstants.EIDAS_LOA_SUBSTANTIAL,
false);
String spCountry = "AT";
String citizenCountryCode = "LU";
-
+
oaParam.setLoa(Arrays.asList(EaafConstants.EIDAS_LOA_HIGH, EaafConstants.EIDAS_LOA_SUBSTANTIAL));
-
-
+
+
//execute test
try {
EidasResponseValidator.validateResponse(pendingReq, eidasResponse, spCountry, citizenCountryCode, attrRegistry);
Assert.fail("Wrong eIDAS response not detected");
-
+
} catch (EidasValidationException e) {
- Assert.assertEquals("ErrorId", "eidas.07", e.getErrorId());
+ Assert.assertEquals("ErrorId", "eidas.07", e.getErrorId());
Assert.assertEquals("wrong parameter size", 2, e.getParams().length);
- Assert.assertEquals("wrong errorMsg", "PersonIdentifier",
+ Assert.assertEquals("wrong errorMsg", "PersonIdentifier",
e.getParams()[0]);
- Assert.assertEquals("wrong errorMsg",
- "Wrong identifier format",
+ Assert.assertEquals("wrong errorMsg",
+ "Wrong identifier format",
e.getParams()[1]);
-
- }
+
+ }
}
-
+
@Test
public void validResponse() throws URISyntaxException, EidasValidationException {
//set-up
-
+
String spCountry = RandomStringUtils.randomAlphabetic(2).toUpperCase();
String cCountry = RandomStringUtils.randomAlphabetic(2).toUpperCase();
-
- ILightResponse eidasResponse = buildDummyAuthResponse(
- cCountry + "/" + spCountry + "/" + RandomStringUtils.randomAlphanumeric(20),
+
+ ILightResponse eidasResponse = buildDummyAuthResponse(
+ cCountry + "/" + spCountry + "/" + RandomStringUtils.randomAlphanumeric(20),
EaafConstants.EIDAS_LOA_SUBSTANTIAL,
false);
-
+
oaParam.setLoa(Arrays.asList(EaafConstants.EIDAS_LOA_HIGH, EaafConstants.EIDAS_LOA_SUBSTANTIAL));
-
-
+
+
//execute test
EidasResponseValidator.validateResponse(pendingReq, eidasResponse, spCountry, cCountry, attrRegistry);
-
+
}
-
-
- private AuthenticationResponse buildDummyAuthResponse(String personalId, String loa, boolean moreThanOnePersonalId)
+
+
+ private AuthenticationResponse buildDummyAuthResponse(String personalId, String loa, boolean moreThanOnePersonalId)
throws URISyntaxException {
-
-
+
+
final AttributeDefinition personIdattributeDef = attrRegistry.getCoreAttributeRegistry().getByFriendlyName(
Constants.eIDAS_ATTR_PERSONALIDENTIFIER).first();
final Builder attributeMap = ImmutableAttributeMap.builder();
if (personalId != null) {
if (moreThanOnePersonalId) {
- ImmutableSet values = ImmutableSet.of(new StringAttributeValue(personalId),
+ ImmutableSet values = ImmutableSet.of(new StringAttributeValue(personalId),
new StringAttributeValue("XX/YY/" + RandomStringUtils.randomAlphanumeric(10)));
- attributeMap.put(personIdattributeDef, values);
-
+ attributeMap.put(personIdattributeDef, values);
+
} else {
attributeMap.put(personIdattributeDef, personalId);
-
- }
+
+ }
}
-
+
val b = new AuthenticationResponse.Builder();
return b.id("_".concat(Random.nextHexRandom16()))
.issuer(RandomStringUtils.randomAlphabetic(10))
diff --git a/modules/authmodule-eIDAS-v2/src/test/resources/SpringTest-context_basic_lazy.xml b/modules/authmodule-eIDAS-v2/src/test/resources/SpringTest-context_basic_lazy.xml
new file mode 100644
index 00000000..a567ecba
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/resources/SpringTest-context_basic_lazy.xml
@@ -0,0 +1,24 @@
+<?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"
+ 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" >
+
+ <context:annotation-config />
+
+ <import resource="classpath:/spring/eaaf_utils.beans.xml"/>
+
+ <bean id="idAustriaAuthCredentialProvider"
+ class="at.asitplus.eidas.specific.modules.auth.eidas.v2.idaustriaclient.provider.IdAustriaClientAuthCredentialProvider"
+ lazy-init="true" />
+
+ <bean id="dummyPvpConfig"
+ class="at.gv.egiz.eaaf.modules.pvp2.idp.test.dummy.DummyPvpConfiguration"
+ lazy-init="true" />
+
+</beans>
diff --git a/modules/authmodule-eIDAS-v2/src/test/resources/SpringTest-context_basic_test.xml b/modules/authmodule-eIDAS-v2/src/test/resources/SpringTest-context_basic_test.xml
index cd2888c1..f4fc72a7 100644
--- a/modules/authmodule-eIDAS-v2/src/test/resources/SpringTest-context_basic_test.xml
+++ b/modules/authmodule-eIDAS-v2/src/test/resources/SpringTest-context_basic_test.xml
@@ -12,6 +12,9 @@
<context:annotation-config />
+
+ <bean id="eidasConnectorMessageSource"
+ class="at.asitplus.eidas.specific.modules.auth.eidas.v2.config.EidasConnectorMessageSource"/>
<bean id="SZRClientForeIDAS"
class="at.asitplus.eidas.specific.modules.auth.eidas.v2.szr.SzrClient" />
diff --git a/modules/authmodule-eIDAS-v2/src/test/resources/SpringTest-context_ccSearchProcessor_test.xml b/modules/authmodule-eIDAS-v2/src/test/resources/SpringTest-context_ccSearchProcessor_test.xml
new file mode 100644
index 00000000..6f071b38
--- /dev/null
+++ b/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/modules/authmodule-eIDAS-v2/src/test/resources/SpringTest-context_tasks_test.xml b/modules/authmodule-eIDAS-v2/src/test/resources/SpringTest-context_tasks_test.xml
index 6d6bb51e..0afa0d7d 100644
--- a/modules/authmodule-eIDAS-v2/src/test/resources/SpringTest-context_tasks_test.xml
+++ b/modules/authmodule-eIDAS-v2/src/test/resources/SpringTest-context_tasks_test.xml
@@ -18,6 +18,8 @@
<import resource="SpringTest-context_authManager.xml" />
<import resource="SpringTest-context_basic_test.xml" />
+ <import resource="classpath:/eidas_v2_auth.beans.xml"/>
+ <import resource="classpath:/eaaf_pvp.beans.xml" />
<bean id="mvcGUIBuilderImpl"
class="at.gv.egiz.eaaf.core.impl.gui.builder.SpringMvcGuiFormBuilderImpl" />
@@ -25,6 +27,15 @@
<bean id="springManagedSpecificConnectorCommunicationService"
class="at.asitplus.eidas.specific.modules.auth.eidas.v2.test.dummy.DummySpecificCommunicationService" />
+ <bean id="dummyPvpConfig"
+ class="at.gv.egiz.eaaf.modules.pvp2.idp.test.dummy.DummyPvpConfiguration" />
+
+ <bean id="dummyGuiConfigFactory"
+ class="at.gv.egiz.eaaf.core.impl.idp.module.gui.DummyGuiBuilderConfigurationFactory" />
+
+ <bean id="dummyVelocityBuilder"
+ class="at.gv.egiz.eaaf.core.impl.idp.module.gui.DummyVelocityGuiFormBuilder" />
+
<bean id="specificConnectorAttributesFileWithPath"
class="java.lang.String">
<constructor-arg
@@ -37,31 +48,5 @@
value="src/test/resources/config/additional-attributes.xml" />
</bean>
- <bean id="attributeRegistry"
- class="at.asitplus.eidas.specific.modules.auth.eidas.v2.service.EidasAttributeRegistry">
- <property name="eidasAttributesFile"
- ref="specificConnectorAttributesFileWithPath" />
- <property name="additionalAttributesFile"
- ref="specificConnectorAdditionalAttributesFileWithPath" />
- </bean>
-
- <bean id="authBlockSigningService"
- class="at.asitplus.eidas.specific.modules.auth.eidas.v2.service.AuthBlockSigningService" />
-
- <bean id="EidasSignalServlet"
- class="at.asitplus.eidas.specific.modules.auth.eidas.v2.EidasSignalServlet" />
-
- <!-- Authentication Process Tasks -->
- <bean id="ConnecteIDASNodeTask"
- class="at.asitplus.eidas.specific.modules.auth.eidas.v2.tasks.GenerateAuthnRequestTask"
- scope="prototype" />
-
- <bean id="ReceiveResponseFromeIDASNodeTask"
- class="at.asitplus.eidas.specific.modules.auth.eidas.v2.tasks.ReceiveAuthnResponseTask"
- scope="prototype" />
-
- <bean id="CreateIdentityLinkTask"
- class="at.asitplus.eidas.specific.modules.auth.eidas.v2.tasks.CreateIdentityLinkTask"
- scope="prototype" />
</beans> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/test/resources/config/junit_config_1.properties b/modules/authmodule-eIDAS-v2/src/test/resources/config/junit_config_1.properties
index a662379c..d84777f3 100644
--- a/modules/authmodule-eIDAS-v2/src/test/resources/config/junit_config_1.properties
+++ b/modules/authmodule-eIDAS-v2/src/test/resources/config/junit_config_1.properties
@@ -8,15 +8,20 @@ eidas.ms.context.use.clustermode=true
eidas.ms.monitoring.eIDASNode.metadata.url=
+eidas.ms.client.http.connection.timeout.socket=5
+eidas.ms.client.http.connection.timeout.connection=5
+eidas.ms.client.http.connection.timeout.request=5
+
+
##Specific logger configuration
eidas.ms.technicallog.write.MDS.into.techlog=true
eidas.ms.revisionlog.write.MDS.into.revisionlog=true
eidas.ms.revisionlog.logIPAddressOfUser=true
##Directory for static Web content
-eidas.ms.webcontent.static.directory=webcontent/
-eidas.ms.webcontent.templates=templates/
-eidas.ms.webcontent.properties=properties/messages
+eidas.ms.webcontent.static.directory=../../../../../../basicConfig/webcontent/
+eidas.ms.webcontent.templates=../../../../../../basicConfig/templates/
+eidas.ms.webcontent.properties=../../../../../../basicConfig/properties/messages
## extended validation of pending-request Id's
eidas.ms.core.pendingrequestid.maxlifetime=300
@@ -88,6 +93,26 @@ eidas.ms.auth.eIDAS.node_v2.attributes.requested.representation.4=LegalPerson,tr
eidas.ms.auth.eIDAS.node_v2.attributes.requested.representation.5=LegalName,true
+#### matching######
+# ZMR communication
+eidas.ms.auth.eIDAS.zmrclient.endpoint=http://localhost:1234/demozmr
+eidas.ms.auth.eIDAS.zmrclient.req.organisation.behoerdennr=jUnit123456
+eidas.ms.auth.eIDAS.zmrclient.req.update.reason.code=EIDAS-KITT
+
+
+
+# ERnP communication
+eidas.ms.auth.eIDAS.ernpclient.endpoint=http://localhost:1718/demoernp
+eidas.ms.auth.eIDAS.ernpclient.req.organisation.behoerdennr=jUnit123456
+eidas.ms.auth.eIDAS.client.common.ssl.keyStore.type=jks
+eidas.ms.auth.eIDAS.client.common.ssl.keyStore.path=../keystore/junit_test.jks
+eidas.ms.auth.eIDAS.client.common.ssl.keyStore.password=password
+eidas.ms.auth.eIDAS.client.common.ssl.key.alias=meta
+eidas.ms.auth.eIDAS.client.common.ssl.key.password=password
+
+
+
+#### SP End-Points #####
## PVP2 S-Profile end-point configuration
eidas.ms.pvp2.keystore.path=keys/.....
eidas.ms.pvp2.keystore.password=
@@ -114,4 +139,28 @@ eidas.ms.configuration.sp.disableRegistrationRequirement=
eidas.ms.configuration.restrictions.baseID.spTransmission=
eidas.ms.configuration.auth.default.countrycode=
eidas.ms.configuration.pvp.scheme.validation=
-eidas.ms.configuration.pvp.enable.entitycategories= \ No newline at end of file
+eidas.ms.configuration.pvp.enable.entitycategories=
+
+
+
+
+## PVP2 S-Profile ID Austria client configuration
+
+eidas.ms.modules.idaustriaclient.keystore.path=../keystore/junit_test.jks
+eidas.ms.modules.idaustriaclient.keystore.password=password
+eidas.ms.modules.idaustriaclient.keystore.type=jks
+
+eidas.ms.modules.idaustriaclient.metadata.sign.alias=meta
+eidas.ms.modules.idaustriaclient.metadata.sign.password=password
+eidas.ms.modules.idaustriaclient.request.sign.alias=sig
+eidas.ms.modules.idaustriaclient.request.sign.password=password
+eidas.ms.modules.idaustriaclient.response.encryption.alias=enc
+eidas.ms.modules.idaustriaclient.response.encryption.password=password
+
+eidas.ms.modules.idaustriaclient.truststore.path=../keystore/junit_test.jks
+eidas.ms.modules.idaustriaclient.truststore.password=password
+eidas.ms.modules.idaustriaclient.truststore.type=jks
+
+eidas.ms.modules.idaustriaclient.idaustria.idp.entityId=
+eidas.ms.modules.idaustriaclient.idaustria.idp.metadataUrl=
+
diff --git a/modules/authmodule-eIDAS-v2/src/test/resources/config/junit_config_1_springboot.properties b/modules/authmodule-eIDAS-v2/src/test/resources/config/junit_config_1_springboot.properties
new file mode 100644
index 00000000..0cc89a4a
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/resources/config/junit_config_1_springboot.properties
@@ -0,0 +1,143 @@
+## embbeded Tomcat
+tomcat.workingdir=./target/work
+tomcat.ajp.enabled=true
+tomcat.ajp.port=8009
+tomcat.ajp.networkAddress=127.0.0.1
+tomcat.ajp.additionalAttributes.secretrequired=true
+tomcat.ajp.additionalAttributes.secret=junit
+
+## Basic service configuration
+eidas.ms.context.url.prefix=http://localhost
+eidas.ms.core.configRootDir=file:./src/test/resources/config/
+
+eidas.ms.context.use.clustermode=true
+
+##Monitoring
+eidas.ms.monitoring.eIDASNode.metadata.url=http://localhost:40900/mockup
+
+## extended validation of pending-request Id's
+eidas.ms.core.pendingrequestid.digist.secret=pendingReqIdSecret
+
+## eIDAS Ref. Implementation connector ###
+eidas.ms.auth.eIDAS.node_v2.forward.endpoint=http://eidas.node/junit
+
+eidas.ms.auth.eIDAS.szrclient.useTestService=true
+eidas.ms.auth.eIDAS.szrclient.endpoint.prod=
+eidas.ms.auth.eIDAS.szrclient.endpoint.test=http://localhost:1234/demoszr
+eidas.ms.auth.eIDAS.szrclient.ssl.keyStore.type=jks
+eidas.ms.auth.eIDAS.szrclient.ssl.keyStore.path=keys/junit.jks
+eidas.ms.auth.eIDAS.szrclient.ssl.keyStore.password=password
+eidas.ms.auth.eIDAS.szrclient.ssl.trustStore.path=
+eidas.ms.auth.eIDAS.szrclient.ssl.trustStore.password=
+
+#tech. AuthBlock signing for E-ID process
+eidas.ms.auth.eIDAS.authblock.keystore.password=f/+saJBc3a}*/T^s
+eidas.ms.auth.eIDAS.authblock.keystore.friendlyName=connectorkeypair
+eidas.ms.auth.eIDAS.authblock.keystore.path=keys/teststore.jks
+eidas.ms.auth.eIDAS.authblock.keystore.type=jks
+eidas.ms.auth.eIDAS.authblock.key.alias=connectorkeypair
+eidas.ms.auth.eIDAS.authblock.key.password=f/+saJBc3a}*/T^s
+
+
+#Raw eIDAS Id data storage
+eidas.ms.auth.eIDAS.szrclient.debug.logfullmessages=true
+eidas.ms.auth.eIDAS.szrclient.debug.useDummySolution=false
+
+
+#### matching######
+# ZMR communication
+eidas.ms.auth.eIDAS.zmrclient.endpoint=http://localhost:1234/demoszr
+eidas.ms.auth.eIDAS.zmrclient.ssl.keyStore.type=jks
+eidas.ms.auth.eIDAS.zmrclient.ssl.keyStore.path=keys/junit.jks
+eidas.ms.auth.eIDAS.zmrclient.ssl.keyStore.password=password
+eidas.ms.auth.eIDAS.zmrclient.ssl.trustStore.path=
+eidas.ms.auth.eIDAS.zmrclient.ssl.trustStore.password=
+
+eidas.ms.auth.eIDAS.zmrclient.req.organisation.behoerdennr=jUnit123456
+eidas.ms.auth.eIDAS.zmrclient.req.update.reason.code=EIDAS-KITT
+eidas.ms.auth.eIDAS.zmrclient.req.update.reason.text=KITT for eIDAS Matching
+
+# ERnP communication
+eidas.ms.auth.eIDAS.ernpclient.endpoint=http://localhost:1718/demoernp
+eidas.ms.auth.eIDAS.ernpclient.req.organisation.behoerdennr=jUnit123456
+eidas.ms.auth.eIDAS.client.common.ssl.keyStore.type=jks
+eidas.ms.auth.eIDAS.client.common.ssl.keyStore.path=../keystore/junit_test.jks
+eidas.ms.auth.eIDAS.client.common.ssl.keyStore.password=password
+eidas.ms.auth.eIDAS.client.common.ssl.key.alias=meta
+eidas.ms.auth.eIDAS.client.common.ssl.key.password=password
+
+
+
+#### SP End-Points #####
+## PVP2 S-Profile end-point configuration
+eidas.ms.pvp2.keystore.type=jks
+eidas.ms.pvp2.keystore.path=keys/junit.jks
+eidas.ms.pvp2.keystore.password=password
+eidas.ms.pvp2.key.metadata.alias=meta
+eidas.ms.pvp2.key.metadata.password=password
+eidas.ms.pvp2.key.signing.alias=sig
+eidas.ms.pvp2.key.signing.password=password
+eidas.ms.pvp2.metadata.validity=24
+
+eidas.ms.pvp2.metadata.organisation.name=JUnit
+eidas.ms.pvp2.metadata.organisation.friendyname=For testing with jUnit
+eidas.ms.pvp2.metadata.organisation.url=http://junit.test
+eidas.ms.pvp2.metadata.contact.givenname=Max
+eidas.ms.pvp2.metadata.contact.surname=Mustermann
+eidas.ms.pvp2.metadata.contact.email=max@junit.test
+
+## Service Provider configuration
+eidas.ms.sp.0.uniqueID=https://demo.egiz.gv.at/demoportal_moaid-2.0/sp/eidas/metadata
+eidas.ms.sp.0.pvp2.metadata.truststore=keys/junit.jks
+eidas.ms.sp.0.pvp2.metadata.truststore.password=password
+eidas.ms.sp.0.friendlyName=jUnit test
+eidas.ms.sp.0.newEidMode=true
+
+#eidas.ms.sp.0.pvp2.metadata.url=
+#eidas.ms.sp.0.policy.allowed.requested.targets=.*
+#eidas.ms.sp.0.policy.hasBaseIdTransferRestriction=false
+
+## Service Provider configuration
+eidas.ms.sp.1.uniqueID=https://demo.egiz.gv.at/junit_test
+eidas.ms.sp.1.pvp2.metadata.truststore=keys/junit.jks
+eidas.ms.sp.1.pvp2.metadata.truststore.password=password
+eidas.ms.sp.1.friendlyName=jUnit test
+eidas.ms.sp.1.pvp2.metadata.url=http://junit.test/metadata
+eidas.ms.sp.1.policy.allowed.requested.targets=test
+eidas.ms.sp.1.policy.hasBaseIdTransferRestriction=true
+
+## PVP2 S-Profile client configuration
+#eidas.ms.modules.idaustriaclient.keystore.type=jks
+#eidas.ms.modules.idaustriaclient.keystore.path=keys/junit.jks1
+#eidas.ms.modules.idaustriaclient.keystore.password=password
+#eidas.ms.modules.idaustriaclient.key.metadata.alias=meta
+#eidas.ms.modules.idaustriaclient.key.metadata.password=password
+#eidas.ms.modules.idaustriaclient.key.signing.alias=sig
+#eidas.ms.modules.idaustriaclient.key.signing.password=password
+#eidas.ms.modules.idaustriaclient.metadata.validity=24
+
+eidas.ms.modules.idaustriaclient.keystore.path=keys/junit_test.jks
+eidas.ms.modules.idaustriaclient.keystore.password=password
+eidas.ms.modules.idaustriaclient.keystore.type=jks
+
+eidas.ms.modules.idaustriaclient.metadata.sign.alias=meta
+eidas.ms.modules.idaustriaclient.metadata.sign.password=password
+eidas.ms.modules.idaustriaclient.request.sign.alias=sig
+eidas.ms.modules.idaustriaclient.request.sign.password=password
+eidas.ms.modules.idaustriaclient.response.encryption.alias=enc
+eidas.ms.modules.idaustriaclient.response.encryption.password=password
+
+eidas.ms.modules.idaustriaclient.truststore.path=keys/junit_test.jks
+eidas.ms.modules.idaustriaclient.truststore.password=password
+eidas.ms.modules.idaustriaclient.truststore.type=jks
+
+eidas.ms.modules.idaustriaclient.idaustria.idp.entityId=
+eidas.ms.modules.idaustriaclient.idaustria.idp.metadataUrl=
+
+eidas.ms.modules.idaustriaclient.metadata.organisation.name=JUnit
+eidas.ms.modules.idaustriaclient.metadata.organisation.friendyname=For testing with jUnit
+eidas.ms.modules.idaustriaclient.metadata.organisation.url=http://junit.test
+eidas.ms.modules.idaustriaclient.metadata.contact.givenname=Max
+eidas.ms.modules.idaustriaclient.metadata.contact.surname=Mustermann
+eidas.ms.modules.idaustriaclient.metadata.contact.email=max@junit.test
+
diff --git a/modules/authmodule-eIDAS-v2/src/test/resources/config/junit_config_2.properties b/modules/authmodule-eIDAS-v2/src/test/resources/config/junit_config_2.properties
index 7c5e5a40..f07f86f6 100644
--- a/modules/authmodule-eIDAS-v2/src/test/resources/config/junit_config_2.properties
+++ b/modules/authmodule-eIDAS-v2/src/test/resources/config/junit_config_2.properties
@@ -86,6 +86,13 @@ eidas.ms.auth.eIDAS.node_v2.attributes.requested.representation.4=LegalPerson,tr
eidas.ms.auth.eIDAS.node_v2.attributes.requested.representation.5=LegalName,true
+#### matching######
+# ZMR communication
+eidas.ms.auth.eIDAS.zmrclient.endpoint=http://localhost:1234/demoszr
+eidas.ms.auth.eIDAS.zmrclient.req.organisation.behoerdennr=jUnit123456
+eidas.ms.auth.eIDAS.zmrclient.req.update.reason.code=EIDAS-KITT
+
+
## PVP2 S-Profile end-point configuration
eidas.ms.pvp2.keystore.path=keys/.....
eidas.ms.pvp2.keystore.password=
diff --git a/modules/authmodule-eIDAS-v2/src/test/resources/config/junit_config_3.properties b/modules/authmodule-eIDAS-v2/src/test/resources/config/junit_config_3.properties
index c830d447..7b975752 100644
--- a/modules/authmodule-eIDAS-v2/src/test/resources/config/junit_config_3.properties
+++ b/modules/authmodule-eIDAS-v2/src/test/resources/config/junit_config_3.properties
@@ -88,6 +88,13 @@ eidas.ms.auth.eIDAS.node_v2.attributes.requested.representation.4=LegalPerson,tr
eidas.ms.auth.eIDAS.node_v2.attributes.requested.representation.5=LegalName,true
+#### matching######
+# ZMR communication
+eidas.ms.auth.eIDAS.zmrclient.endpoint=http://localhost:1234/demoszr
+eidas.ms.auth.eIDAS.zmrclient.req.organisation.behoerdennr=jUnit123456
+eidas.ms.auth.eIDAS.zmrclient.req.update.reason.code=EIDAS-KITT
+
+
## PVP2 S-Profile end-point configuration
eidas.ms.pvp2.keystore.path=keys/.....
eidas.ms.pvp2.keystore.password=
diff --git a/modules/authmodule-eIDAS-v2/src/test/resources/config/junit_config_4.properties b/modules/authmodule-eIDAS-v2/src/test/resources/config/junit_config_4.properties
index 01e72069..7fda2871 100644
--- a/modules/authmodule-eIDAS-v2/src/test/resources/config/junit_config_4.properties
+++ b/modules/authmodule-eIDAS-v2/src/test/resources/config/junit_config_4.properties
@@ -86,6 +86,13 @@ eidas.ms.auth.eIDAS.node_v2.attributes.requested.representation.4=LegalPerson,tr
eidas.ms.auth.eIDAS.node_v2.attributes.requested.representation.5=LegalName,true
+#### matching######
+# ZMR communication
+eidas.ms.auth.eIDAS.zmrclient.endpoint=http://localhost:1234/demoszr
+eidas.ms.auth.eIDAS.zmrclient.req.organisation.behoerdennr=jUnit123456
+eidas.ms.auth.eIDAS.zmrclient.req.update.reason.code=EIDAS-KITT
+
+
## PVP2 S-Profile end-point configuration
eidas.ms.pvp2.keystore.path=keys/.....
eidas.ms.pvp2.keystore.password=
diff --git a/modules/authmodule-eIDAS-v2/src/test/resources/config/junit_config_de_attributes.properties b/modules/authmodule-eIDAS-v2/src/test/resources/config/junit_config_de_attributes.properties
index 6b235667..0cdb4459 100644
--- a/modules/authmodule-eIDAS-v2/src/test/resources/config/junit_config_de_attributes.properties
+++ b/modules/authmodule-eIDAS-v2/src/test/resources/config/junit_config_de_attributes.properties
@@ -88,6 +88,13 @@ eidas.ms.auth.eIDAS.node_v2.attributes.requested.representation.4=LegalPerson,tr
eidas.ms.auth.eIDAS.node_v2.attributes.requested.representation.5=LegalName,true
+#### matching######
+# ZMR communication
+eidas.ms.auth.eIDAS.zmrclient.endpoint=http://localhost:1234/demoszr
+eidas.ms.auth.eIDAS.zmrclient.req.organisation.behoerdennr=jUnit123456
+eidas.ms.auth.eIDAS.zmrclient.req.update.reason.code=EIDAS-KITT
+
+
## PVP2 S-Profile end-point configuration
eidas.ms.pvp2.keystore.path=keys/.....
eidas.ms.pvp2.keystore.password=
diff --git a/modules/authmodule-eIDAS-v2/src/test/resources/config/keys/junit_test.jks b/modules/authmodule-eIDAS-v2/src/test/resources/config/keys/junit_test.jks
new file mode 100644
index 00000000..ee6254a9
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/resources/config/keys/junit_test.jks
Binary files differ
diff --git a/modules/authmodule-eIDAS-v2/src/test/resources/config/keys/teststore.jks b/modules/authmodule-eIDAS-v2/src/test/resources/config/keys/teststore.jks
new file mode 100644
index 00000000..fcc6400c
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/resources/config/keys/teststore.jks
Binary files differ
diff --git a/modules/authmodule-eIDAS-v2/src/test/resources/data/Response_with_EID.xml b/modules/authmodule-eIDAS-v2/src/test/resources/data/Response_with_EID.xml
new file mode 100644
index 00000000..10701c29
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/resources/data/Response_with_EID.xml
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<saml2p:Response xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol" Destination="https://localhost/authhandler/sp/idaustria/post" InResponseTo="_aeebfae3ce681fe3ddcaf213a42f01d3" IssueInstant="2014-03-05T06:39:51.017Z" Version="2.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+ <saml2:Issuer xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity">classpath:/data/idp_metadata_classpath_entity.xml</saml2:Issuer>
+ <saml2p:Status>
+ <saml2p:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success"/>
+ </saml2p:Status>
+ <saml2:Assertion xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" ID="_602c3236bffaf71ac3ac88674e76ff9f" IssueInstant="2014-03-05T06:39:51.017Z" Version="2.0">
+ <saml2:Issuer Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity">https://demo.egiz.gv.at/demoportal_moaid-2.0/pvp/metadata</saml2:Issuer>
+ <saml2:Subject>
+ <saml2:NameID Format="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent" NameQualifier="urn:publicid:gv.at:cdid+BF">QVGm48cqcM4UcyhDTNGYmVdrIoY=</saml2:NameID>
+ <saml2:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
+ <saml2:SubjectConfirmationData InResponseTo="_aeebfae3ce681fe3ddcaf213a42f01d3" NotOnOrAfter="2014-03-05T06:44:51.017Z" Recipient="https://localhost/authhandler/sp/idaustria/post"/>
+ </saml2:SubjectConfirmation>
+ </saml2:Subject>
+ <saml2:Conditions NotBefore="2014-03-05T06:39:51.017Z" NotOnOrAfter="2014-03-05T06:44:51.017Z">
+ <saml2:AudienceRestriction>
+ <saml2:Audience>https://localhost/authhandler/sp/idaustria/metadata</saml2:Audience>
+ </saml2:AudienceRestriction>
+ </saml2:Conditions>
+ <saml2:AuthnStatement AuthnInstant="2014-03-05T06:39:51.017Z" SessionIndex="_c0c683509a8ff6ac372a9cf9c5c5a406">
+ <saml2:AuthnContext>
+ <saml2:AuthnContextClassRef>http://eidas.europa.eu/LoA/high</saml2:AuthnContextClassRef>
+ </saml2:AuthnContext>
+ </saml2:AuthnStatement>
+ <saml2:AttributeStatement>
+ <saml2:Attribute FriendlyName="PRINCIPAL-NAME" Name="urn:oid:1.2.40.0.10.2.1.1.261.20" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
+ <saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">Mustermann</saml2:AttributeValue>
+ </saml2:Attribute>
+ <saml2:Attribute FriendlyName="PVP-VERSION" Name="urn:oid:1.2.40.0.10.2.1.1.261.10" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
+ <saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">2.1</saml2:AttributeValue>
+ </saml2:Attribute>
+ <saml2:Attribute FriendlyName="EID-CITIZEN-QAA-EIDAS-LEVEL" Name="urn:oid:1.2.40.0.10.2.1.1.261.108" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
+ <saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">http://eidas.europa.eu/LoA/low</saml2:AttributeValue>
+ </saml2:Attribute>
+ <saml2:Attribute FriendlyName="EID-ISSUING-NATION" Name="urn:oid:1.2.40.0.10.2.1.1.261.32" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
+ <saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">IT</saml2:AttributeValue>
+ </saml2:Attribute>
+ <saml2:Attribute FriendlyName="GIVEN-NAME" Name="urn:oid:2.5.4.42" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
+ <saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">Max</saml2:AttributeValue>
+ </saml2:Attribute>
+ <saml2:Attribute FriendlyName="BIRTHDATE" Name="urn:oid:1.2.40.0.10.2.1.1.55" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
+ <saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">1940-01-01</saml2:AttributeValue>
+ </saml2:Attribute>
+ <saml2:Attribute FriendlyName="BPK" Name="urn:oid:1.2.40.0.10.2.1.1.149" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
+ <saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">BF:QVGm48cqcM4UcyhDTNGYmVdrIoY=</saml2:AttributeValue>
+ </saml2:Attribute>
+ <saml2:Attribute FriendlyName="userAuthBlock" Name="urn:eidgvat:attributes.authblock.signed" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
+ <saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">MIIBbjCCARSgAwIBAgIEXh7TNzAKBggqhkjOPQQDAjA/MQswCQYDVQQGEwJBVDENMAsGA1UECgwERUdJWjEOMAwGA1UECwwFalVuaXQxETAPBgNVBAMMCG1ldGFkYXRhMB4XDTIwMDExNTA4NTQxNVoXDTMwMDExNDA4NTQxNVowPzELMAkGA1UEBhMCQVQxDTALBgNVBAoMBEVHSVoxDjAMBgNVBAsMBWpVbml0MREwDwYDVQQDDAhtZXRhZGF0YTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABBdBkaxt31p++aZeP3SmlWITj9SYO4McV2ccXFsH4X4QMHuKAMUvjxPm1kdU01eTOWdiQX0GpDIBspYMZh8ZKcwwCgYIKoZIzj0EAwIDSAAwRQIhAJ3QKlk9cd90s+i8y62fvmGF6LtfNO+JvkWqDUBeQImnAiA2KwFtzO7STAp9MEwQGe0vt0F8mO1ttrLE+rr6YxdwGA==</saml2:AttributeValue>
+ </saml2:Attribute>
+ </saml2:AttributeStatement>
+ </saml2:Assertion>
+</saml2p:Response>
diff --git a/modules/authmodule-eIDAS-v2/src/test/resources/data/Response_with_EID_deprecated_bpk_encoding.xml b/modules/authmodule-eIDAS-v2/src/test/resources/data/Response_with_EID_deprecated_bpk_encoding.xml
new file mode 100644
index 00000000..92ace06c
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/resources/data/Response_with_EID_deprecated_bpk_encoding.xml
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<saml2p:Response xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol" Destination="https://localhost/authhandler/sp/idaustria/post" InResponseTo="_aeebfae3ce681fe3ddcaf213a42f01d3" IssueInstant="2014-03-05T06:39:51.017Z" Version="2.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+ <saml2:Issuer xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity">classpath:/data/idp_metadata_classpath_entity.xml</saml2:Issuer>
+ <saml2p:Status>
+ <saml2p:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success"/>
+ </saml2p:Status>
+ <saml2:Assertion xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" ID="_602c3236bffaf71ac3ac88674e76ff9f" IssueInstant="2014-03-05T06:39:51.017Z" Version="2.0">
+ <saml2:Issuer Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity">https://demo.egiz.gv.at/demoportal_moaid-2.0/pvp/metadata</saml2:Issuer>
+ <saml2:Subject>
+ <saml2:NameID Format="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent" NameQualifier="urn:publicid:gv.at:cdid+BF">QVGm48cqcM4UcyhDTNGYmVdrIoY=</saml2:NameID>
+ <saml2:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
+ <saml2:SubjectConfirmationData InResponseTo="_aeebfae3ce681fe3ddcaf213a42f01d3" NotOnOrAfter="2014-03-05T06:44:51.017Z" Recipient="https://localhost/authhandler/sp/idaustria/post"/>
+ </saml2:SubjectConfirmation>
+ </saml2:Subject>
+ <saml2:Conditions NotBefore="2014-03-05T06:39:51.017Z" NotOnOrAfter="2014-03-05T06:44:51.017Z">
+ <saml2:AudienceRestriction>
+ <saml2:Audience>https://localhost/authhandler/sp/idaustria/metadata</saml2:Audience>
+ </saml2:AudienceRestriction>
+ </saml2:Conditions>
+ <saml2:AuthnStatement AuthnInstant="2014-03-05T06:39:51.017Z" SessionIndex="_c0c683509a8ff6ac372a9cf9c5c5a406">
+ <saml2:AuthnContext>
+ <saml2:AuthnContextClassRef>http://eidas.europa.eu/LoA/high</saml2:AuthnContextClassRef>
+ </saml2:AuthnContext>
+ </saml2:AuthnStatement>
+ <saml2:AttributeStatement>
+ <saml2:Attribute FriendlyName="PRINCIPAL-NAME" Name="urn:oid:1.2.40.0.10.2.1.1.261.20" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
+ <saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">Mustermann</saml2:AttributeValue>
+ </saml2:Attribute>
+ <saml2:Attribute FriendlyName="PVP-VERSION" Name="urn:oid:1.2.40.0.10.2.1.1.261.10" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
+ <saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">2.1</saml2:AttributeValue>
+ </saml2:Attribute>
+ <saml2:Attribute FriendlyName="EID-CITIZEN-QAA-EIDAS-LEVEL" Name="urn:oid:1.2.40.0.10.2.1.1.261.108" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
+ <saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">http://eidas.europa.eu/LoA/low</saml2:AttributeValue>
+ </saml2:Attribute>
+ <saml2:Attribute FriendlyName="EID-ISSUING-NATION" Name="urn:oid:1.2.40.0.10.2.1.1.261.32" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
+ <saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">IT</saml2:AttributeValue>
+ </saml2:Attribute>
+ <saml2:Attribute FriendlyName="GIVEN-NAME" Name="urn:oid:2.5.4.42" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
+ <saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">Max</saml2:AttributeValue>
+ </saml2:Attribute>
+ <saml2:Attribute FriendlyName="BIRTHDATE" Name="urn:oid:1.2.40.0.10.2.1.1.55" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
+ <saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">1940-01-01</saml2:AttributeValue>
+ </saml2:Attribute>
+ <saml2:Attribute FriendlyName="BPK" Name="urn:oid:1.2.40.0.10.2.1.1.149" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
+ <saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">QVGm48cqcM4UcyhDTNGYmVdrIoY=</saml2:AttributeValue>
+ </saml2:Attribute>
+ <saml2:Attribute FriendlyName="userAuthBlock" Name="urn:eidgvat:attributes.authblock.signed" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
+ <saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">MIIBbjCCARSgAwIBAgIEXh7TNzAKBggqhkjOPQQDAjA/MQswCQYDVQQGEwJBVDENMAsGA1UECgwERUdJWjEOMAwGA1UECwwFalVuaXQxETAPBgNVBAMMCG1ldGFkYXRhMB4XDTIwMDExNTA4NTQxNVoXDTMwMDExNDA4NTQxNVowPzELMAkGA1UEBhMCQVQxDTALBgNVBAoMBEVHSVoxDjAMBgNVBAsMBWpVbml0MREwDwYDVQQDDAhtZXRhZGF0YTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABBdBkaxt31p++aZeP3SmlWITj9SYO4McV2ccXFsH4X4QMHuKAMUvjxPm1kdU01eTOWdiQX0GpDIBspYMZh8ZKcwwCgYIKoZIzj0EAwIDSAAwRQIhAJ3QKlk9cd90s+i8y62fvmGF6LtfNO+JvkWqDUBeQImnAiA2KwFtzO7STAp9MEwQGe0vt0F8mO1ttrLE+rr6YxdwGA==</saml2:AttributeValue>
+ </saml2:Attribute>
+ </saml2:AttributeStatement>
+ </saml2:Assertion>
+</saml2p:Response>
diff --git a/modules/authmodule-eIDAS-v2/src/test/resources/data/Response_with_wrong_destination_endpoint.xml b/modules/authmodule-eIDAS-v2/src/test/resources/data/Response_with_wrong_destination_endpoint.xml
new file mode 100644
index 00000000..c21381d9
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/resources/data/Response_with_wrong_destination_endpoint.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<saml2p:Response xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol"
+ Destination="https://localhost/authhandler/idAustriaSp1/post"
+ InResponseTo="_aeebfae3ce681fe3ddcaf213a42f01d3" IssueInstant="2014-03-05T06:39:51.017Z" Version="2.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+ <saml2:Issuer xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity">classpath:/data/idp_metadata_classpath_entity.xml</saml2:Issuer>
+ <saml2p:Status>
+ <saml2p:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success"/>
+ </saml2p:Status>
+ <saml2:Assertion xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" ID="_602c3236bffaf71ac3ac88674e76ff9f" IssueInstant="2014-03-05T06:39:51.017Z" Version="2.0">
+ <saml2:Issuer Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity">https://demo.egiz.gv.at/demoportal_moaid-2.0/pvp/metadata</saml2:Issuer>
+ <saml2:Subject>
+ <saml2:NameID Format="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent" NameQualifier="urn:publicid:gv.at:cdid+BF">QVGm48cqcM4UcyhDTNGYmVdrIoY=</saml2:NameID>
+ <saml2:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
+ <saml2:SubjectConfirmationData InResponseTo="_aeebfae3ce681fe3ddcaf213a42f01d3"
+ NotOnOrAfter="2014-03-05T06:44:51.017Z"
+ Recipient="https://localhost/authhandler/idAustriaSp1/post"/>
+ </saml2:SubjectConfirmation>
+ </saml2:Subject>
+ <saml2:Conditions NotBefore="2014-03-05T06:39:51.017Z" NotOnOrAfter="2014-03-05T06:44:51.017Z">
+ <saml2:AudienceRestriction>
+ <saml2:Audience>https://demo.egiz.gv.at/demoportal_demologin/</saml2:Audience>
+ </saml2:AudienceRestriction>
+ </saml2:Conditions>
+ <saml2:AuthnStatement AuthnInstant="2014-03-05T06:39:51.017Z" SessionIndex="_c0c683509a8ff6ac372a9cf9c5c5a406">
+ <saml2:AuthnContext>
+ <saml2:AuthnContextClassRef>http://www.stork.gov.eu/1.0/citizenQAALevel/4</saml2:AuthnContextClassRef>
+ </saml2:AuthnContext>
+ </saml2:AuthnStatement>
+ <saml2:AttributeStatement>
+ <saml2:Attribute FriendlyName="PVP-VERSION" Name="urn:oid:1.2.40.0.10.2.1.1.261.10" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
+ <saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">2.1</saml2:AttributeValue>
+ </saml2:Attribute>
+ <saml2:Attribute FriendlyName="PRINCIPAL-NAME" Name="urn:oid:1.2.40.0.10.2.1.1.261.20" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
+ <saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">Mustermann</saml2:AttributeValue>
+ </saml2:Attribute>
+ <saml2:Attribute FriendlyName="GIVEN-NAME" Name="urn:oid:2.5.4.42" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
+ <saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">Max</saml2:AttributeValue>
+ </saml2:Attribute>
+ <saml2:Attribute FriendlyName="BIRTHDATE" Name="urn:oid:1.2.40.0.10.2.1.1.55" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
+ <saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">1940-01-01</saml2:AttributeValue>
+ </saml2:Attribute>
+ <saml2:Attribute FriendlyName="BPK" Name="urn:oid:1.2.40.0.10.2.1.1.149" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
+ <saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">BF:QVGm48cqcM4UcyhDTNGYmVdrIoY=</saml2:AttributeValue>
+ </saml2:Attribute>
+ <saml2:Attribute FriendlyName="EID-CITIZEN-QAA-LEVEL" Name="urn:oid:1.2.40.0.10.2.1.1.261.94" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
+ <saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:integer">4</saml2:AttributeValue>
+ </saml2:Attribute>
+ <saml2:Attribute FriendlyName="EID-ISSUING-NATION" Name="urn:oid:1.2.40.0.10.2.1.1.261.32" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
+ <saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">AT</saml2:AttributeValue>
+ </saml2:Attribute>
+ <saml2:Attribute FriendlyName="EID-SECTOR-FOR-IDENTIFIER" Name="urn:oid:1.2.40.0.10.2.1.1.261.34" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
+ <saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">urn:publicid:gv.at:cdid+BF</saml2:AttributeValue>
+ </saml2:Attribute>
+ </saml2:AttributeStatement>
+ </saml2:Assertion>
+</saml2p:Response>
diff --git a/modules/authmodule-eIDAS-v2/src/test/resources/data/Response_without_sig_classpath_entityid.xml b/modules/authmodule-eIDAS-v2/src/test/resources/data/Response_without_sig_classpath_entityid.xml
new file mode 100644
index 00000000..1c3bd357
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/resources/data/Response_without_sig_classpath_entityid.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<saml2p:Response xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol" Destination="https://localhost/authhandler/sp/idaustria/post" InResponseTo="_aeebfae3ce681fe3ddcaf213a42f01d3" IssueInstant="2014-03-05T06:39:51.017Z" Version="2.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+ <saml2:Issuer xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity">classpath:/data/idp_metadata_classpath_entity.xml</saml2:Issuer>
+ <saml2p:Status>
+ <saml2p:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success"/>
+ </saml2p:Status>
+ <saml2:Assertion xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" ID="_602c3236bffaf71ac3ac88674e76ff9f" IssueInstant="2014-03-05T06:39:51.017Z" Version="2.0">
+ <saml2:Issuer Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity">https://demo.egiz.gv.at/demoportal_moaid-2.0/pvp/metadata</saml2:Issuer>
+ <saml2:Subject>
+ <saml2:NameID Format="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent" NameQualifier="urn:publicid:gv.at:cdid+BF">QVGm48cqcM4UcyhDTNGYmVdrIoY=</saml2:NameID>
+ <saml2:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
+ <saml2:SubjectConfirmationData InResponseTo="_aeebfae3ce681fe3ddcaf213a42f01d3" NotOnOrAfter="2014-03-05T06:44:51.017Z" Recipient="https://localhost/authhandler/sp/idaustria/post"/>
+ </saml2:SubjectConfirmation>
+ </saml2:Subject>
+ <saml2:Conditions NotBefore="2014-03-05T06:39:51.017Z" NotOnOrAfter="2014-03-05T06:44:51.017Z">
+ <saml2:AudienceRestriction>
+ <saml2:Audience>https://localhost/authhandler/sp/idaustria/metadata</saml2:Audience>
+ </saml2:AudienceRestriction>
+ </saml2:Conditions>
+ <saml2:AuthnStatement AuthnInstant="2014-03-05T06:39:51.017Z" SessionIndex="_c0c683509a8ff6ac372a9cf9c5c5a406">
+ <saml2:AuthnContext>
+ <saml2:AuthnContextClassRef>http://eidas.europa.eu/LoA/high</saml2:AuthnContextClassRef>
+ </saml2:AuthnContext>
+ </saml2:AuthnStatement>
+ <saml2:AttributeStatement>
+ <saml2:Attribute FriendlyName="PVP-VERSION" Name="urn:oid:1.2.40.0.10.2.1.1.261.10" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
+ <saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">2.1</saml2:AttributeValue>
+ </saml2:Attribute>
+ <saml2:Attribute FriendlyName="PRINCIPAL-NAME" Name="urn:oid:1.2.40.0.10.2.1.1.261.20" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
+ <saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">Mustermann</saml2:AttributeValue>
+ </saml2:Attribute>
+ <saml2:Attribute FriendlyName="GIVEN-NAME" Name="urn:oid:2.5.4.42" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
+ <saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">Max</saml2:AttributeValue>
+ </saml2:Attribute>
+ <saml2:Attribute FriendlyName="BIRTHDATE" Name="urn:oid:1.2.40.0.10.2.1.1.55" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
+ <saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">1940-01-01</saml2:AttributeValue>
+ </saml2:Attribute>
+
+ <saml2:Attribute FriendlyName="EID-CITIZEN-QAA- EIDAS-LEVEL" Name="urn:oid:1.2.40.0.10.2.1.1.261.108" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
+ <saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">http://eidas.europa.eu/LoA/high</saml2:AttributeValue>
+ </saml2:Attribute>
+ <saml2:Attribute FriendlyName="EID-ISSUING-NATION" Name="urn:oid:1.2.40.0.10.2.1.1.261.32" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
+ <saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">IT</saml2:AttributeValue>
+ </saml2:Attribute>
+ <saml2:Attribute FriendlyName="EID-SECTOR-FOR-IDENTIFIER" Name="urn:oid:1.2.40.0.10.2.1.1.261.34" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
+ <saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">urn:publicid:gv.at:cdid+BF</saml2:AttributeValue>
+ </saml2:Attribute>
+ </saml2:AttributeStatement>
+ </saml2:Assertion>
+</saml2p:Response>
diff --git a/modules/authmodule-eIDAS-v2/src/test/resources/data/Response_without_sig_with_error.xml b/modules/authmodule-eIDAS-v2/src/test/resources/data/Response_without_sig_with_error.xml
new file mode 100644
index 00000000..2d7020ac
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/resources/data/Response_without_sig_with_error.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<saml2p:Response xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol" Destination="https://localhost/authhandler/sp/idaustria/post" InResponseTo="_aeebfae3ce681fe3ddcaf213a42f01d3" IssueInstant="2014-03-05T06:39:51.017Z" Version="2.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+ <saml2:Issuer xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity">classpath:/data/idp_metadata_classpath_entity.xml</saml2:Issuer>
+ <saml2p:Status>
+ <saml2p:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Responder">
+ <saml2p:StatusCode Value="9199"/>
+ </saml2p:StatusCode>
+ <saml2p:StatusMessage>Der Anmeldevorgang wurde durch den Benutzer abgebrochen.</saml2p:StatusMessage>
+ </saml2p:Status>
+ <saml2:Assertion xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" ID="_602c3236bffaf71ac3ac88674e76ff9f" IssueInstant="2014-03-05T06:39:51.017Z" Version="2.0">
+ <saml2:Issuer Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity">https://demo.egiz.gv.at/demoportal_moaid-2.0/pvp/metadata</saml2:Issuer>
+ <saml2:Subject>
+ <saml2:NameID Format="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent" NameQualifier="urn:publicid:gv.at:cdid+BF">QVGm48cqcM4UcyhDTNGYmVdrIoY=</saml2:NameID>
+ <saml2:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
+ <saml2:SubjectConfirmationData InResponseTo="_aeebfae3ce681fe3ddcaf213a42f01d3" NotOnOrAfter="2014-03-05T06:44:51.017Z" Recipient="https://localhost/authhandler/sp/idaustria/post"/>
+ </saml2:SubjectConfirmation>
+ </saml2:Subject>
+ <saml2:Conditions NotBefore="2014-03-05T06:39:51.017Z" NotOnOrAfter="2014-03-05T06:44:51.017Z">
+ <saml2:AudienceRestriction>
+ <saml2:Audience>https://localhost/authhandler/sp/idaustria/metadata</saml2:Audience>
+ </saml2:AudienceRestriction>
+ </saml2:Conditions>
+ <saml2:AuthnStatement AuthnInstant="2014-03-05T06:39:51.017Z" SessionIndex="_c0c683509a8ff6ac372a9cf9c5c5a406">
+ <saml2:AuthnContext>
+ <saml2:AuthnContextClassRef>http://eidas.europa.eu/LoA/high</saml2:AuthnContextClassRef>
+ </saml2:AuthnContext>
+ </saml2:AuthnStatement>
+ <saml2:AttributeStatement>
+ <saml2:Attribute FriendlyName="PVP-VERSION" Name="urn:oid:1.2.40.0.10.2.1.1.261.10" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
+ <saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">2.1</saml2:AttributeValue>
+ </saml2:Attribute>
+ <saml2:Attribute FriendlyName="EID-CITIZEN-QAA-EIDAS-LEVEL" Name="urn:oid:1.2.40.0.10.2.1.1.261.108" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
+ <saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">http://eidas.europa.eu/LoA/low</saml2:AttributeValue>
+ </saml2:Attribute>
+ <saml2:Attribute FriendlyName="EID-ISSUING-NATION" Name="urn:oid:1.2.40.0.10.2.1.1.261.32" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
+ <saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">IT</saml2:AttributeValue>
+ </saml2:Attribute>
+ <saml2:Attribute FriendlyName="eidBind" Name="urn:eidgvat:attributes.eidbind" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
+ <saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">aabbccddeeffgghh</saml2:AttributeValue>
+ </saml2:Attribute>
+ <saml2:Attribute FriendlyName="userConsent" Name="urn:eidgvat:attributes.consent.signed" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
+ <saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">MIIBbjCCARSgAwIBAgIEXh7TNzAKBggqhkjOPQQDAjA/MQswCQYDVQQGEwJBVDENMAsGA1UECgwERUdJWjEOMAwGA1UECwwFalVuaXQxETAPBgNVBAMMCG1ldGFkYXRhMB4XDTIwMDExNTA4NTQxNVoXDTMwMDExNDA4NTQxNVowPzELMAkGA1UEBhMCQVQxDTALBgNVBAoMBEVHSVoxDjAMBgNVBAsMBWpVbml0MREwDwYDVQQDDAhtZXRhZGF0YTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABBdBkaxt31p++aZeP3SmlWITj9SYO4McV2ccXFsH4X4QMHuKAMUvjxPm1kdU01eTOWdiQX0GpDIBspYMZh8ZKcwwCgYIKoZIzj0EAwIDSAAwRQIhAJ3QKlk9cd90s+i8y62fvmGF6LtfNO+JvkWqDUBeQImnAiA2KwFtzO7STAp9MEwQGe0vt0F8mO1ttrLE+rr6YxdwGA==</saml2:AttributeValue>
+ </saml2:Attribute>
+ </saml2:AttributeStatement>
+ </saml2:Assertion>
+</saml2p:Response>
diff --git a/modules/authmodule-eIDAS-v2/src/test/resources/data/Response_without_sig_with_error_empty_subcode.xml b/modules/authmodule-eIDAS-v2/src/test/resources/data/Response_without_sig_with_error_empty_subcode.xml
new file mode 100644
index 00000000..36fd9c11
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/resources/data/Response_without_sig_with_error_empty_subcode.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<saml2p:Response xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol" Destination="https://localhost/authhandler/sp/idaustria/post" InResponseTo="_aeebfae3ce681fe3ddcaf213a42f01d3" IssueInstant="2014-03-05T06:39:51.017Z" Version="2.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+ <saml2:Issuer xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity">classpath:/data/idp_metadata_classpath_entity.xml</saml2:Issuer>
+ <saml2p:Status>
+ <saml2p:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Responder">
+ <saml2p:StatusCode Value=""/>
+ </saml2p:StatusCode>
+ <saml2p:StatusMessage>Der Anmeldevorgang wurde durch den Benutzer abgebrochen.</saml2p:StatusMessage>
+ </saml2p:Status>
+ <saml2:Assertion xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" ID="_602c3236bffaf71ac3ac88674e76ff9f" IssueInstant="2014-03-05T06:39:51.017Z" Version="2.0">
+ <saml2:Issuer Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity">https://demo.egiz.gv.at/demoportal_moaid-2.0/pvp/metadata</saml2:Issuer>
+ <saml2:Subject>
+ <saml2:NameID Format="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent" NameQualifier="urn:publicid:gv.at:cdid+BF">QVGm48cqcM4UcyhDTNGYmVdrIoY=</saml2:NameID>
+ <saml2:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
+ <saml2:SubjectConfirmationData InResponseTo="_aeebfae3ce681fe3ddcaf213a42f01d3" NotOnOrAfter="2014-03-05T06:44:51.017Z" Recipient="https://localhost/authhandler/sp/idaustria/post"/>
+ </saml2:SubjectConfirmation>
+ </saml2:Subject>
+ <saml2:Conditions NotBefore="2014-03-05T06:39:51.017Z" NotOnOrAfter="2014-03-05T06:44:51.017Z">
+ <saml2:AudienceRestriction>
+ <saml2:Audience>https://localhost/authhandler/sp/idaustria/metadata</saml2:Audience>
+ </saml2:AudienceRestriction>
+ </saml2:Conditions>
+ <saml2:AuthnStatement AuthnInstant="2014-03-05T06:39:51.017Z" SessionIndex="_c0c683509a8ff6ac372a9cf9c5c5a406">
+ <saml2:AuthnContext>
+ <saml2:AuthnContextClassRef>http://eidas.europa.eu/LoA/high</saml2:AuthnContextClassRef>
+ </saml2:AuthnContext>
+ </saml2:AuthnStatement>
+ <saml2:AttributeStatement>
+ <saml2:Attribute FriendlyName="PVP-VERSION" Name="urn:oid:1.2.40.0.10.2.1.1.261.10" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
+ <saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">2.1</saml2:AttributeValue>
+ </saml2:Attribute>
+ <saml2:Attribute FriendlyName="EID-CITIZEN-QAA-EIDAS-LEVEL" Name="urn:oid:1.2.40.0.10.2.1.1.261.108" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
+ <saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">http://eidas.europa.eu/LoA/low</saml2:AttributeValue>
+ </saml2:Attribute>
+ <saml2:Attribute FriendlyName="EID-ISSUING-NATION" Name="urn:oid:1.2.40.0.10.2.1.1.261.32" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
+ <saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">IT</saml2:AttributeValue>
+ </saml2:Attribute>
+ <saml2:Attribute FriendlyName="eidBind" Name="urn:eidgvat:attributes.eidbind" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
+ <saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">aabbccddeeffgghh</saml2:AttributeValue>
+ </saml2:Attribute>
+ <saml2:Attribute FriendlyName="userConsent" Name="urn:eidgvat:attributes.consent.signed" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
+ <saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">MIIBbjCCARSgAwIBAgIEXh7TNzAKBggqhkjOPQQDAjA/MQswCQYDVQQGEwJBVDENMAsGA1UECgwERUdJWjEOMAwGA1UECwwFalVuaXQxETAPBgNVBAMMCG1ldGFkYXRhMB4XDTIwMDExNTA4NTQxNVoXDTMwMDExNDA4NTQxNVowPzELMAkGA1UEBhMCQVQxDTALBgNVBAoMBEVHSVoxDjAMBgNVBAsMBWpVbml0MREwDwYDVQQDDAhtZXRhZGF0YTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABBdBkaxt31p++aZeP3SmlWITj9SYO4McV2ccXFsH4X4QMHuKAMUvjxPm1kdU01eTOWdiQX0GpDIBspYMZh8ZKcwwCgYIKoZIzj0EAwIDSAAwRQIhAJ3QKlk9cd90s+i8y62fvmGF6LtfNO+JvkWqDUBeQImnAiA2KwFtzO7STAp9MEwQGe0vt0F8mO1ttrLE+rr6YxdwGA==</saml2:AttributeValue>
+ </saml2:Attribute>
+ </saml2:AttributeStatement>
+ </saml2:Assertion>
+</saml2p:Response>
diff --git a/modules/authmodule-eIDAS-v2/src/test/resources/data/Response_without_sig_with_error_userstop.xml b/modules/authmodule-eIDAS-v2/src/test/resources/data/Response_without_sig_with_error_userstop.xml
new file mode 100644
index 00000000..989d3053
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/resources/data/Response_without_sig_with_error_userstop.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<saml2p:Response xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol" Destination="https://localhost/authhandler/sp/idaustria/post" InResponseTo="_aeebfae3ce681fe3ddcaf213a42f01d3" IssueInstant="2014-03-05T06:39:51.017Z" Version="2.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+ <saml2:Issuer xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity">classpath:/data/idp_metadata_classpath_entity.xml</saml2:Issuer>
+ <saml2p:Status>
+ <saml2p:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Responder">
+ <saml2p:StatusCode Value="1005"/>
+ </saml2p:StatusCode>
+ <saml2p:StatusMessage>Der Anmeldevorgang wurde durch den Benutzer abgebrochen.</saml2p:StatusMessage>
+ </saml2p:Status>
+ <saml2:Assertion xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" ID="_602c3236bffaf71ac3ac88674e76ff9f" IssueInstant="2014-03-05T06:39:51.017Z" Version="2.0">
+ <saml2:Issuer Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity">https://demo.egiz.gv.at/demoportal_moaid-2.0/pvp/metadata</saml2:Issuer>
+ <saml2:Subject>
+ <saml2:NameID Format="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent" NameQualifier="urn:publicid:gv.at:cdid+BF">QVGm48cqcM4UcyhDTNGYmVdrIoY=</saml2:NameID>
+ <saml2:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
+ <saml2:SubjectConfirmationData InResponseTo="_aeebfae3ce681fe3ddcaf213a42f01d3" NotOnOrAfter="2014-03-05T06:44:51.017Z" Recipient="https://localhost/authhandler/sp/idaustria/post"/>
+ </saml2:SubjectConfirmation>
+ </saml2:Subject>
+ <saml2:Conditions NotBefore="2014-03-05T06:39:51.017Z" NotOnOrAfter="2014-03-05T06:44:51.017Z">
+ <saml2:AudienceRestriction>
+ <saml2:Audience>https://localhost/authhandler/sp/idaustria/metadata</saml2:Audience>
+ </saml2:AudienceRestriction>
+ </saml2:Conditions>
+ <saml2:AuthnStatement AuthnInstant="2014-03-05T06:39:51.017Z" SessionIndex="_c0c683509a8ff6ac372a9cf9c5c5a406">
+ <saml2:AuthnContext>
+ <saml2:AuthnContextClassRef>http://eidas.europa.eu/LoA/high</saml2:AuthnContextClassRef>
+ </saml2:AuthnContext>
+ </saml2:AuthnStatement>
+ <saml2:AttributeStatement>
+ <saml2:Attribute FriendlyName="PVP-VERSION" Name="urn:oid:1.2.40.0.10.2.1.1.261.10" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
+ <saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">2.1</saml2:AttributeValue>
+ </saml2:Attribute>
+ <saml2:Attribute FriendlyName="EID-CITIZEN-QAA-EIDAS-LEVEL" Name="urn:oid:1.2.40.0.10.2.1.1.261.108" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
+ <saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">http://eidas.europa.eu/LoA/low</saml2:AttributeValue>
+ </saml2:Attribute>
+ <saml2:Attribute FriendlyName="EID-ISSUING-NATION" Name="urn:oid:1.2.40.0.10.2.1.1.261.32" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
+ <saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">IT</saml2:AttributeValue>
+ </saml2:Attribute>
+ <saml2:Attribute FriendlyName="eidBind" Name="urn:eidgvat:attributes.eidbind" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
+ <saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">aabbccddeeffgghh</saml2:AttributeValue>
+ </saml2:Attribute>
+ <saml2:Attribute FriendlyName="userConsent" Name="urn:eidgvat:attributes.consent.signed" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
+ <saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">MIIBbjCCARSgAwIBAgIEXh7TNzAKBggqhkjOPQQDAjA/MQswCQYDVQQGEwJBVDENMAsGA1UECgwERUdJWjEOMAwGA1UECwwFalVuaXQxETAPBgNVBAMMCG1ldGFkYXRhMB4XDTIwMDExNTA4NTQxNVoXDTMwMDExNDA4NTQxNVowPzELMAkGA1UEBhMCQVQxDTALBgNVBAoMBEVHSVoxDjAMBgNVBAsMBWpVbml0MREwDwYDVQQDDAhtZXRhZGF0YTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABBdBkaxt31p++aZeP3SmlWITj9SYO4McV2ccXFsH4X4QMHuKAMUvjxPm1kdU01eTOWdiQX0GpDIBspYMZh8ZKcwwCgYIKoZIzj0EAwIDSAAwRQIhAJ3QKlk9cd90s+i8y62fvmGF6LtfNO+JvkWqDUBeQImnAiA2KwFtzO7STAp9MEwQGe0vt0F8mO1ttrLE+rr6YxdwGA==</saml2:AttributeValue>
+ </saml2:Attribute>
+ </saml2:AttributeStatement>
+ </saml2:Assertion>
+</saml2p:Response>
diff --git a/modules/authmodule-eIDAS-v2/src/test/resources/data/Response_without_sig_with_error_without_subcode.xml b/modules/authmodule-eIDAS-v2/src/test/resources/data/Response_without_sig_with_error_without_subcode.xml
new file mode 100644
index 00000000..c85cb655
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/resources/data/Response_without_sig_with_error_without_subcode.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<saml2p:Response xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol" Destination="https://localhost/authhandler/sp/idaustria/post" InResponseTo="_aeebfae3ce681fe3ddcaf213a42f01d3" IssueInstant="2014-03-05T06:39:51.017Z" Version="2.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+ <saml2:Issuer xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity">classpath:/data/idp_metadata_classpath_entity.xml</saml2:Issuer>
+ <saml2p:Status>
+ <saml2p:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Responder">
+ </saml2p:StatusCode>
+ <saml2p:StatusMessage>Der Anmeldevorgang wurde durch den Benutzer abgebrochen.</saml2p:StatusMessage>
+ </saml2p:Status>
+ <saml2:Assertion xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" ID="_602c3236bffaf71ac3ac88674e76ff9f" IssueInstant="2014-03-05T06:39:51.017Z" Version="2.0">
+ <saml2:Issuer Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity">https://demo.egiz.gv.at/demoportal_moaid-2.0/pvp/metadata</saml2:Issuer>
+ <saml2:Subject>
+ <saml2:NameID Format="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent" NameQualifier="urn:publicid:gv.at:cdid+BF">QVGm48cqcM4UcyhDTNGYmVdrIoY=</saml2:NameID>
+ <saml2:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
+ <saml2:SubjectConfirmationData InResponseTo="_aeebfae3ce681fe3ddcaf213a42f01d3" NotOnOrAfter="2014-03-05T06:44:51.017Z" Recipient="https://localhost/authhandler/sp/idaustria/post"/>
+ </saml2:SubjectConfirmation>
+ </saml2:Subject>
+ <saml2:Conditions NotBefore="2014-03-05T06:39:51.017Z" NotOnOrAfter="2014-03-05T06:44:51.017Z">
+ <saml2:AudienceRestriction>
+ <saml2:Audience>https://localhost/authhandler/sp/idaustria/metadata</saml2:Audience>
+ </saml2:AudienceRestriction>
+ </saml2:Conditions>
+ <saml2:AuthnStatement AuthnInstant="2014-03-05T06:39:51.017Z" SessionIndex="_c0c683509a8ff6ac372a9cf9c5c5a406">
+ <saml2:AuthnContext>
+ <saml2:AuthnContextClassRef>http://eidas.europa.eu/LoA/high</saml2:AuthnContextClassRef>
+ </saml2:AuthnContext>
+ </saml2:AuthnStatement>
+ <saml2:AttributeStatement>
+ <saml2:Attribute FriendlyName="PVP-VERSION" Name="urn:oid:1.2.40.0.10.2.1.1.261.10" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
+ <saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">2.1</saml2:AttributeValue>
+ </saml2:Attribute>
+ <saml2:Attribute FriendlyName="EID-CITIZEN-QAA-EIDAS-LEVEL" Name="urn:oid:1.2.40.0.10.2.1.1.261.108" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
+ <saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">http://eidas.europa.eu/LoA/low</saml2:AttributeValue>
+ </saml2:Attribute>
+ <saml2:Attribute FriendlyName="EID-ISSUING-NATION" Name="urn:oid:1.2.40.0.10.2.1.1.261.32" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
+ <saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">IT</saml2:AttributeValue>
+ </saml2:Attribute>
+ <saml2:Attribute FriendlyName="eidBind" Name="urn:eidgvat:attributes.eidbind" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
+ <saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">aabbccddeeffgghh</saml2:AttributeValue>
+ </saml2:Attribute>
+ <saml2:Attribute FriendlyName="userConsent" Name="urn:eidgvat:attributes.consent.signed" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
+ <saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">MIIBbjCCARSgAwIBAgIEXh7TNzAKBggqhkjOPQQDAjA/MQswCQYDVQQGEwJBVDENMAsGA1UECgwERUdJWjEOMAwGA1UECwwFalVuaXQxETAPBgNVBAMMCG1ldGFkYXRhMB4XDTIwMDExNTA4NTQxNVoXDTMwMDExNDA4NTQxNVowPzELMAkGA1UEBhMCQVQxDTALBgNVBAoMBEVHSVoxDjAMBgNVBAsMBWpVbml0MREwDwYDVQQDDAhtZXRhZGF0YTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABBdBkaxt31p++aZeP3SmlWITj9SYO4McV2ccXFsH4X4QMHuKAMUvjxPm1kdU01eTOWdiQX0GpDIBspYMZh8ZKcwwCgYIKoZIzj0EAwIDSAAwRQIhAJ3QKlk9cd90s+i8y62fvmGF6LtfNO+JvkWqDUBeQImnAiA2KwFtzO7STAp9MEwQGe0vt0F8mO1ttrLE+rr6YxdwGA==</saml2:AttributeValue>
+ </saml2:Attribute>
+ </saml2:AttributeStatement>
+ </saml2:Assertion>
+</saml2p:Response>
diff --git a/modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/1_add_req.json b/modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/1_add_req.json
new file mode 100644
index 00000000..4f823c60
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/1_add_req.json
@@ -0,0 +1,30 @@
+{
+ "begruendung": "Add new person",
+ "personendaten": {
+ "familienname": "CtKKrtUe",
+ "vorname": "dUeYzUFg",
+ "geburtsdatum": {
+ "jahr": 1985,
+ "monat": 5,
+ "tag": 5
+ }
+ },
+ "anschrift": null,
+ "eidas": [
+ {
+ "art": "http://eidas.europa.eu/attributes/naturalperson/PersonIdentifier",
+ "wert": "Y8ADWaeh0h",
+ "staatscode2": "DE"
+ },
+ {
+ "art": "http://eidas.europa.eu/attributes/naturalperson/PlaceOfBirth",
+ "wert": "hrFevCfP",
+ "staatscode2": "DE"
+ },
+ {
+ "art": "http://eidas.europa.eu/attributes/naturalperson/BirthName",
+ "wert": "sNUEAhEr",
+ "staatscode2": "DE"
+ }
+ ]
+}
diff --git a/modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/1_add_resp.json b/modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/1_add_resp.json
new file mode 100644
index 00000000..139483cf
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/1_add_resp.json
@@ -0,0 +1,60 @@
+{
+ "person": {
+ "type": "Person",
+ "eidas": [
+ {
+ "ablaufDatum": "9999-12-31T00:00:00.000+01:00",
+ "art": "http://eidas.europa.eu/attributes/naturalperson/PersonIdentifier",
+ "ausstellDatum": "9999-12-31T00:00:00.000+01:00",
+ "entityId": "1933000000000486",
+ "gueltigAb": "2022-03-03T11:07:28.885+01:00",
+ "staatscode2": "DE",
+ "wert": "Y8ADWaeh0h"
+ },
+ {
+ "ablaufDatum": "9999-12-31T00:00:00.000+01:00",
+ "art": "http://eidas.europa.eu/attributes/naturalperson/PlaceOfBirth",
+ "ausstellDatum": "9999-12-31T00:00:00.000+01:00",
+ "entityId": "1933000000000488",
+ "gueltigAb": "2022-03-03T11:07:28.885+01:00",
+ "staatscode2": "DE",
+ "wert": "hrFevCfP"
+ },
+ {
+ "ablaufDatum": "9999-12-31T00:00:00.000+01:00",
+ "art": "http://eidas.europa.eu/attributes/naturalperson/BirthName",
+ "ausstellDatum": "9999-12-31T00:00:00.000+01:00",
+ "entityId": "1933000000000490",
+ "gueltigAb": "2022-03-03T11:07:28.885+01:00",
+ "staatscode2": "DE",
+ "wert": "sNUEAhEr"
+ }
+ ],
+ "entityId": "1933000000000475",
+ "gueltigAb": "2022-03-03T11:07:28.885+01:00",
+ "letzteOperation": {
+ "begruendung": "Add new person",
+ "durchgefuehrtVon": {
+ "behoerdenkennzeichen": "380630",
+ "benutzer": "eidtapp@bmi.gv.at"
+ },
+ "vorgang": "PersonAnlegen",
+ "zeitpunkt": "2022-03-03T11:07:28.885+01:00"
+ },
+ "personendaten": {
+ "basiszahl": "000482591530",
+ "bpkZp": "+OQnljn0Son1W2rkM73nP/VMsvc=",
+ "entityId": "1933000000000475",
+ "familienname": "CtKKrtUe",
+ "geburtsdatum": {
+ "jahr": 1985,
+ "monat": 5,
+ "tag": 5
+ },
+ "geprueft": false,
+ "gueltigAb": "2022-03-03T11:07:28.885+01:00",
+ "vorname": "dUeYzUFg"
+ },
+ "version": "2022-03-03T11:07:28.885+01:00"
+ }
+}
diff --git a/modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/1_kitt_search_latest_req.json b/modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/1_kitt_search_latest_req.json
new file mode 100644
index 00000000..2538ebac
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/1_kitt_search_latest_req.json
@@ -0,0 +1,19 @@
+{
+ "begruendung": "KITT get-latest-version",
+ "suchoptionen": {
+ "historisch": "AktuellUndHistorisch",
+ "sucheMitNamensteilen": false,
+ "suchwizard": false,
+ "zmr": false
+ },
+ "suchdaten": {
+ "bpkZp": "+OQnljn0Son1W2rkM73nP/VMsvc=",
+ "familienname": "CtKKrtUe",
+ "vorname": "dUeYzUFg",
+ "geburtsdatum": {
+ "jahr": 1985,
+ "monat": 5,
+ "tag": 5
+ }
+ }
+}
diff --git a/modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/1_kitt_search_latest_resp.json b/modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/1_kitt_search_latest_resp.json
new file mode 100644
index 00000000..588153cd
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/1_kitt_search_latest_resp.json
@@ -0,0 +1,62 @@
+{
+ "person": [
+ {
+ "type": "Person",
+ "eidas": [
+ {
+ "ablaufDatum": "9999-12-31T00:00:00.000+01:00",
+ "art": "http://eidas.europa.eu/attributes/naturalperson/PersonIdentifier",
+ "ausstellDatum": "9999-12-31T00:00:00.000+01:00",
+ "entityId": "1933000000000486",
+ "gueltigAb": "2022-03-03T11:07:28.885+01:00",
+ "staatscode2": "DE",
+ "wert": "Y8ADWaeh0h"
+ },
+ {
+ "ablaufDatum": "9999-12-31T00:00:00.000+01:00",
+ "art": "http://eidas.europa.eu/attributes/naturalperson/PlaceOfBirth",
+ "ausstellDatum": "9999-12-31T00:00:00.000+01:00",
+ "entityId": "1933000000000488",
+ "gueltigAb": "2022-03-03T11:07:28.885+01:00",
+ "staatscode2": "DE",
+ "wert": "hrFevCfP"
+ },
+ {
+ "ablaufDatum": "9999-12-31T00:00:00.000+01:00",
+ "art": "http://eidas.europa.eu/attributes/naturalperson/BirthName",
+ "ausstellDatum": "9999-12-31T00:00:00.000+01:00",
+ "entityId": "1933000000000490",
+ "gueltigAb": "2022-03-03T11:07:28.885+01:00",
+ "staatscode2": "DE",
+ "wert": "sNUEAhEr"
+ }
+ ],
+ "entityId": "1933000000000475",
+ "gueltigAb": "2022-03-03T11:07:28.885+01:00",
+ "letzteOperation": {
+ "begruendung": "Add new person",
+ "durchgefuehrtVon": {
+ "behoerdenkennzeichen": "380630",
+ "benutzer": "eidtapp@bmi.gv.at"
+ },
+ "vorgang": "PersonAnlegen",
+ "zeitpunkt": "2022-03-03T11:07:28.885+01:00"
+ },
+ "personendaten": {
+ "basiszahl": "000482591530",
+ "bpkZp": "+OQnljn0Son1W2rkM73nP/VMsvc=",
+ "entityId": "1933000000000475",
+ "familienname": "CtKKrtUe",
+ "geburtsdatum": {
+ "jahr": 1985,
+ "monat": 5,
+ "tag": 5
+ },
+ "geprueft": false,
+ "gueltigAb": "2022-03-03T11:07:28.885+01:00",
+ "vorname": "dUeYzUFg"
+ },
+ "version": "2022-03-03T11:07:28.885+01:00"
+ }
+ ]
+}
diff --git a/modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/1_kitt_update_req.json b/modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/1_kitt_update_req.json
new file mode 100644
index 00000000..194fba1d
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/1_kitt_update_req.json
@@ -0,0 +1,17 @@
+{
+ "begruendung": "KITT update dataset",
+ "aendern": {
+ "personendaten": {
+ "entityId": "1933000000000475",
+ "familienname": "mVzTMpig6r",
+ "vorname": "Jb2vj1Xpql",
+ "geburtsdatum": {
+ "jahr": 1985,
+ "monat": 5,
+ "tag": 5
+ }
+ }
+ },
+ "entityId": "1933000000000475",
+ "version": "2022-03-03T10:07:28.885Z"
+}
diff --git a/modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/1_kitt_update_resp.json b/modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/1_kitt_update_resp.json
new file mode 100644
index 00000000..7fe9210a
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/1_kitt_update_resp.json
@@ -0,0 +1,60 @@
+{
+ "person": {
+ "type": "Person",
+ "eidas": [
+ {
+ "ablaufDatum": "9999-12-31T00:00:00.000+01:00",
+ "art": "http://eidas.europa.eu/attributes/naturalperson/PersonIdentifier",
+ "ausstellDatum": "9999-12-31T00:00:00.000+01:00",
+ "entityId": "1933000000000486",
+ "gueltigAb": "2022-03-03T11:07:28.885+01:00",
+ "staatscode2": "DE",
+ "wert": "Y8ADWaeh0h"
+ },
+ {
+ "ablaufDatum": "9999-12-31T00:00:00.000+01:00",
+ "art": "http://eidas.europa.eu/attributes/naturalperson/PlaceOfBirth",
+ "ausstellDatum": "9999-12-31T00:00:00.000+01:00",
+ "entityId": "1933000000000488",
+ "gueltigAb": "2022-03-03T11:07:28.885+01:00",
+ "staatscode2": "DE",
+ "wert": "hrFevCfP"
+ },
+ {
+ "ablaufDatum": "9999-12-31T00:00:00.000+01:00",
+ "art": "http://eidas.europa.eu/attributes/naturalperson/BirthName",
+ "ausstellDatum": "9999-12-31T00:00:00.000+01:00",
+ "entityId": "1933000000000490",
+ "gueltigAb": "2022-03-03T11:07:28.885+01:00",
+ "staatscode2": "DE",
+ "wert": "sNUEAhEr"
+ }
+ ],
+ "entityId": "1933000000000475",
+ "gueltigAb": "2022-03-03T11:07:29.751+01:00",
+ "letzteOperation": {
+ "begruendung": "KITT update dataset",
+ "durchgefuehrtVon": {
+ "behoerdenkennzeichen": "380630",
+ "benutzer": "eidtapp@bmi.gv.at"
+ },
+ "vorgang": "PersonAendern",
+ "zeitpunkt": "2022-03-03T11:07:29.751+01:00"
+ },
+ "personendaten": {
+ "basiszahl": "000482591530",
+ "bpkZp": "+OQnljn0Son1W2rkM73nP/VMsvc=",
+ "entityId": "1933000000000475",
+ "familienname": "mVzTMpig6r",
+ "geburtsdatum": {
+ "jahr": 1985,
+ "monat": 5,
+ "tag": 5
+ },
+ "geprueft": false,
+ "gueltigAb": "2022-03-03T11:07:29.751+01:00",
+ "vorname": "Jb2vj1Xpql"
+ },
+ "version": "2022-03-03T11:07:29.751+01:00"
+ }
+}
diff --git a/modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/1_search_with_personalId_req.json b/modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/1_search_with_personalId_req.json
new file mode 100644
index 00000000..d7344f08
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/1_search_with_personalId_req.json
@@ -0,0 +1,20 @@
+{
+ "begruendung": "Searching PersonIdentifier",
+ "suchoptionen": {
+ "historisch": "AktuellUndHistorisch",
+ "sucheMitNamensteilen": false,
+ "suchwizard": false,
+ "zmr": false
+ },
+ "suchdaten": {
+ "familienname": null,
+ "vorname": null,
+ "eidas": [
+ {
+ "art": "http://eidas.europa.eu/attributes/naturalperson/PersonIdentifier",
+ "wert": "Y8ADWaeh0h",
+ "staatscode2": "DE"
+ }
+ ]
+ }
+}
diff --git a/modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/1_search_with_personalId_resp.json b/modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/1_search_with_personalId_resp.json
new file mode 100644
index 00000000..588153cd
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/1_search_with_personalId_resp.json
@@ -0,0 +1,62 @@
+{
+ "person": [
+ {
+ "type": "Person",
+ "eidas": [
+ {
+ "ablaufDatum": "9999-12-31T00:00:00.000+01:00",
+ "art": "http://eidas.europa.eu/attributes/naturalperson/PersonIdentifier",
+ "ausstellDatum": "9999-12-31T00:00:00.000+01:00",
+ "entityId": "1933000000000486",
+ "gueltigAb": "2022-03-03T11:07:28.885+01:00",
+ "staatscode2": "DE",
+ "wert": "Y8ADWaeh0h"
+ },
+ {
+ "ablaufDatum": "9999-12-31T00:00:00.000+01:00",
+ "art": "http://eidas.europa.eu/attributes/naturalperson/PlaceOfBirth",
+ "ausstellDatum": "9999-12-31T00:00:00.000+01:00",
+ "entityId": "1933000000000488",
+ "gueltigAb": "2022-03-03T11:07:28.885+01:00",
+ "staatscode2": "DE",
+ "wert": "hrFevCfP"
+ },
+ {
+ "ablaufDatum": "9999-12-31T00:00:00.000+01:00",
+ "art": "http://eidas.europa.eu/attributes/naturalperson/BirthName",
+ "ausstellDatum": "9999-12-31T00:00:00.000+01:00",
+ "entityId": "1933000000000490",
+ "gueltigAb": "2022-03-03T11:07:28.885+01:00",
+ "staatscode2": "DE",
+ "wert": "sNUEAhEr"
+ }
+ ],
+ "entityId": "1933000000000475",
+ "gueltigAb": "2022-03-03T11:07:28.885+01:00",
+ "letzteOperation": {
+ "begruendung": "Add new person",
+ "durchgefuehrtVon": {
+ "behoerdenkennzeichen": "380630",
+ "benutzer": "eidtapp@bmi.gv.at"
+ },
+ "vorgang": "PersonAnlegen",
+ "zeitpunkt": "2022-03-03T11:07:28.885+01:00"
+ },
+ "personendaten": {
+ "basiszahl": "000482591530",
+ "bpkZp": "+OQnljn0Son1W2rkM73nP/VMsvc=",
+ "entityId": "1933000000000475",
+ "familienname": "CtKKrtUe",
+ "geburtsdatum": {
+ "jahr": 1985,
+ "monat": 5,
+ "tag": 5
+ },
+ "geprueft": false,
+ "gueltigAb": "2022-03-03T11:07:28.885+01:00",
+ "vorname": "dUeYzUFg"
+ },
+ "version": "2022-03-03T11:07:28.885+01:00"
+ }
+ ]
+}
diff --git a/modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/2_add_req.json b/modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/2_add_req.json
new file mode 100644
index 00000000..35e52c10
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/2_add_req.json
@@ -0,0 +1,30 @@
+{
+ "begruendung": "Add new person",
+ "personendaten": {
+ "familienname": "mRjMKAQc",
+ "vorname": "vdqZZIaA",
+ "geburtsdatum": {
+ "jahr": 1996,
+ "monat": 1,
+ "tag": 1
+ }
+ },
+ "anschrift": null,
+ "eidas": [
+ {
+ "art": "http://eidas.europa.eu/attributes/naturalperson/PersonIdentifier",
+ "wert": "88hvWzUaIX",
+ "staatscode2": "DE"
+ },
+ {
+ "art": "http://eidas.europa.eu/attributes/naturalperson/PlaceOfBirth",
+ "wert": "VRNCAylF",
+ "staatscode2": "DE"
+ },
+ {
+ "art": "http://eidas.europa.eu/attributes/naturalperson/BirthName",
+ "wert": "miEklFHC",
+ "staatscode2": "DE"
+ }
+ ]
+}
diff --git a/modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/2_add_resp.json b/modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/2_add_resp.json
new file mode 100644
index 00000000..7f85a143
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/2_add_resp.json
@@ -0,0 +1,60 @@
+{
+ "person": {
+ "type": "Person",
+ "eidas": [
+ {
+ "ablaufDatum": "9999-12-31T00:00:00.000+01:00",
+ "art": "http://eidas.europa.eu/attributes/naturalperson/PersonIdentifier",
+ "ausstellDatum": "9999-12-31T00:00:00.000+01:00",
+ "entityId": "1933000000000509",
+ "gueltigAb": "2022-03-03T11:14:59.712+01:00",
+ "staatscode2": "DE",
+ "wert": "88hvWzUaIX"
+ },
+ {
+ "ablaufDatum": "9999-12-31T00:00:00.000+01:00",
+ "art": "http://eidas.europa.eu/attributes/naturalperson/PlaceOfBirth",
+ "ausstellDatum": "9999-12-31T00:00:00.000+01:00",
+ "entityId": "1933000000000511",
+ "gueltigAb": "2022-03-03T11:14:59.712+01:00",
+ "staatscode2": "DE",
+ "wert": "VRNCAylF"
+ },
+ {
+ "ablaufDatum": "9999-12-31T00:00:00.000+01:00",
+ "art": "http://eidas.europa.eu/attributes/naturalperson/BirthName",
+ "ausstellDatum": "9999-12-31T00:00:00.000+01:00",
+ "entityId": "1933000000000513",
+ "gueltigAb": "2022-03-03T11:14:59.712+01:00",
+ "staatscode2": "DE",
+ "wert": "miEklFHC"
+ }
+ ],
+ "entityId": "1933000000000498",
+ "gueltigAb": "2022-03-03T11:14:59.712+01:00",
+ "letzteOperation": {
+ "begruendung": "Add new person",
+ "durchgefuehrtVon": {
+ "behoerdenkennzeichen": "380630",
+ "benutzer": "eidtapp@bmi.gv.at"
+ },
+ "vorgang": "PersonAnlegen",
+ "zeitpunkt": "2022-03-03T11:14:59.712+01:00"
+ },
+ "personendaten": {
+ "basiszahl": "000951265372",
+ "bpkZp": "TBGoMlirU881e2jMGETa9WLx1+A=",
+ "entityId": "1933000000000498",
+ "familienname": "mRjMKAQc",
+ "geburtsdatum": {
+ "jahr": 1996,
+ "monat": 1,
+ "tag": 1
+ },
+ "geprueft": false,
+ "gueltigAb": "2022-03-03T11:14:59.712+01:00",
+ "vorname": "vdqZZIaA"
+ },
+ "version": "2022-03-03T11:14:59.712+01:00"
+ }
+}
diff --git a/modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/2_kitt_search_latest_req.json b/modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/2_kitt_search_latest_req.json
new file mode 100644
index 00000000..d3dd0658
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/2_kitt_search_latest_req.json
@@ -0,0 +1,19 @@
+{
+ "begruendung": "KITT get-latest-version",
+ "suchoptionen": {
+ "historisch": "AktuellUndHistorisch",
+ "sucheMitNamensteilen": false,
+ "suchwizard": false,
+ "zmr": false
+ },
+ "suchdaten": {
+ "bpkZp": "TBGoMlirU881e2jMGETa9WLx1+A=",
+ "familienname": "mRjMKAQc",
+ "vorname": "vdqZZIaA",
+ "geburtsdatum": {
+ "jahr": 1996,
+ "monat": 1,
+ "tag": 1
+ }
+ }
+}
diff --git a/modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/2_kitt_search_latest_resp.json b/modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/2_kitt_search_latest_resp.json
new file mode 100644
index 00000000..24009e64
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/2_kitt_search_latest_resp.json
@@ -0,0 +1,62 @@
+{
+ "person": [
+ {
+ "type": "Person",
+ "eidas": [
+ {
+ "ablaufDatum": "9999-12-31T00:00:00.000+01:00",
+ "art": "http://eidas.europa.eu/attributes/naturalperson/PersonIdentifier",
+ "ausstellDatum": "9999-12-31T00:00:00.000+01:00",
+ "entityId": "1933000000000509",
+ "gueltigAb": "2022-03-03T11:14:59.712+01:00",
+ "staatscode2": "DE",
+ "wert": "88hvWzUaIX"
+ },
+ {
+ "ablaufDatum": "9999-12-31T00:00:00.000+01:00",
+ "art": "http://eidas.europa.eu/attributes/naturalperson/PlaceOfBirth",
+ "ausstellDatum": "9999-12-31T00:00:00.000+01:00",
+ "entityId": "1933000000000511",
+ "gueltigAb": "2022-03-03T11:14:59.712+01:00",
+ "staatscode2": "DE",
+ "wert": "VRNCAylF"
+ },
+ {
+ "ablaufDatum": "9999-12-31T00:00:00.000+01:00",
+ "art": "http://eidas.europa.eu/attributes/naturalperson/BirthName",
+ "ausstellDatum": "9999-12-31T00:00:00.000+01:00",
+ "entityId": "1933000000000513",
+ "gueltigAb": "2022-03-03T11:14:59.712+01:00",
+ "staatscode2": "DE",
+ "wert": "miEklFHC"
+ }
+ ],
+ "entityId": "1933000000000498",
+ "gueltigAb": "2022-03-03T11:14:59.712+01:00",
+ "letzteOperation": {
+ "begruendung": "Add new person",
+ "durchgefuehrtVon": {
+ "behoerdenkennzeichen": "380630",
+ "benutzer": "eidtapp@bmi.gv.at"
+ },
+ "vorgang": "PersonAnlegen",
+ "zeitpunkt": "2022-03-03T11:14:59.712+01:00"
+ },
+ "personendaten": {
+ "basiszahl": "000951265372",
+ "bpkZp": "TBGoMlirU881e2jMGETa9WLx1+A=",
+ "entityId": "1933000000000498",
+ "familienname": "mRjMKAQc",
+ "geburtsdatum": {
+ "jahr": 1996,
+ "monat": 1,
+ "tag": 1
+ },
+ "geprueft": false,
+ "gueltigAb": "2022-03-03T11:14:59.712+01:00",
+ "vorname": "vdqZZIaA"
+ },
+ "version": "2022-03-03T11:14:59.712+01:00"
+ }
+ ]
+}
diff --git a/modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/2_kitt_update_req.json b/modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/2_kitt_update_req.json
new file mode 100644
index 00000000..0e4a9b21
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/2_kitt_update_req.json
@@ -0,0 +1,14 @@
+{
+ "begruendung": "KITT update dataset",
+ "anlegen": {
+ "eidas": [
+ {
+ "art": "http://eidas.europa.eu/attributes/naturalperson/PersonIdentifier",
+ "wert": "nj1m79jm9z",
+ "staatscode2": "DE"
+ }
+ ]
+ },
+ "entityId": "1933000000000498",
+ "version": "2022-03-03T10:14:59.712Z"
+}
diff --git a/modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/2_kitt_update_resp.json b/modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/2_kitt_update_resp.json
new file mode 100644
index 00000000..23dc74f3
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/2_kitt_update_resp.json
@@ -0,0 +1,69 @@
+{
+ "person": {
+ "type": "Person",
+ "eidas": [
+ {
+ "ablaufDatum": "9999-12-31T00:00:00.000+01:00",
+ "art": "http://eidas.europa.eu/attributes/naturalperson/PersonIdentifier",
+ "ausstellDatum": "9999-12-31T00:00:00.000+01:00",
+ "entityId": "1933000000000509",
+ "gueltigAb": "2022-03-03T11:14:59.712+01:00",
+ "staatscode2": "DE",
+ "wert": "88hvWzUaIX"
+ },
+ {
+ "ablaufDatum": "9999-12-31T00:00:00.000+01:00",
+ "art": "http://eidas.europa.eu/attributes/naturalperson/PlaceOfBirth",
+ "ausstellDatum": "9999-12-31T00:00:00.000+01:00",
+ "entityId": "1933000000000511",
+ "gueltigAb": "2022-03-03T11:14:59.712+01:00",
+ "staatscode2": "DE",
+ "wert": "VRNCAylF"
+ },
+ {
+ "ablaufDatum": "9999-12-31T00:00:00.000+01:00",
+ "art": "http://eidas.europa.eu/attributes/naturalperson/BirthName",
+ "ausstellDatum": "9999-12-31T00:00:00.000+01:00",
+ "entityId": "1933000000000513",
+ "gueltigAb": "2022-03-03T11:14:59.712+01:00",
+ "staatscode2": "DE",
+ "wert": "miEklFHC"
+ },
+ {
+ "ablaufDatum": "9999-12-31T00:00:00.000+01:00",
+ "art": "http://eidas.europa.eu/attributes/naturalperson/PersonIdentifier",
+ "ausstellDatum": "9999-12-31T00:00:00.000+01:00",
+ "entityId": "1933100000000607",
+ "gueltigAb": "2022-03-03T11:15:00.762+01:00",
+ "staatscode2": "DE",
+ "wert": "nj1m79jm9z"
+ }
+ ],
+ "entityId": "1933000000000498",
+ "gueltigAb": "2022-03-03T11:15:00.762+01:00",
+ "letzteOperation": {
+ "begruendung": "KITT update dataset",
+ "durchgefuehrtVon": {
+ "behoerdenkennzeichen": "380630",
+ "benutzer": "eidtapp@bmi.gv.at"
+ },
+ "vorgang": "PersonAendern",
+ "zeitpunkt": "2022-03-03T11:15:00.762+01:00"
+ },
+ "personendaten": {
+ "basiszahl": "000951265372",
+ "bpkZp": "TBGoMlirU881e2jMGETa9WLx1+A=",
+ "entityId": "1933000000000498",
+ "familienname": "mRjMKAQc",
+ "geburtsdatum": {
+ "jahr": 1996,
+ "monat": 1,
+ "tag": 1
+ },
+ "geprueft": false,
+ "gueltigAb": "2022-03-03T11:14:59.712+01:00",
+ "vorname": "vdqZZIaA"
+ },
+ "version": "2022-03-03T11:15:00.762+01:00"
+ }
+}
diff --git a/modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/2_search_with_cc_specific_req.json b/modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/2_search_with_cc_specific_req.json
new file mode 100644
index 00000000..d80b0d2e
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/2_search_with_cc_specific_req.json
@@ -0,0 +1,30 @@
+{
+ "begruendung": "Searching DE specific",
+ "suchoptionen": {
+ "historisch": "AktuellUndHistorisch",
+ "sucheMitNamensteilen": false,
+ "suchwizard": false,
+ "zmr": false
+ },
+ "suchdaten": {
+ "familienname": "mRjMKAQc",
+ "vorname": "vdqZZIaA",
+ "geburtsdatum": {
+ "jahr": 1996,
+ "monat": 1,
+ "tag": 1
+ },
+ "eidas": [
+ {
+ "art": "http://eidas.europa.eu/attributes/naturalperson/PlaceOfBirth",
+ "wert": "VRNCAylF",
+ "staatscode2": "DE"
+ },
+ {
+ "art": "http://eidas.europa.eu/attributes/naturalperson/BirthName",
+ "wert": "miEklFHC",
+ "staatscode2": "DE"
+ }
+ ]
+ }
+}
diff --git a/modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/2_search_with_cc_specific_resp.json b/modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/2_search_with_cc_specific_resp.json
new file mode 100644
index 00000000..24009e64
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/2_search_with_cc_specific_resp.json
@@ -0,0 +1,62 @@
+{
+ "person": [
+ {
+ "type": "Person",
+ "eidas": [
+ {
+ "ablaufDatum": "9999-12-31T00:00:00.000+01:00",
+ "art": "http://eidas.europa.eu/attributes/naturalperson/PersonIdentifier",
+ "ausstellDatum": "9999-12-31T00:00:00.000+01:00",
+ "entityId": "1933000000000509",
+ "gueltigAb": "2022-03-03T11:14:59.712+01:00",
+ "staatscode2": "DE",
+ "wert": "88hvWzUaIX"
+ },
+ {
+ "ablaufDatum": "9999-12-31T00:00:00.000+01:00",
+ "art": "http://eidas.europa.eu/attributes/naturalperson/PlaceOfBirth",
+ "ausstellDatum": "9999-12-31T00:00:00.000+01:00",
+ "entityId": "1933000000000511",
+ "gueltigAb": "2022-03-03T11:14:59.712+01:00",
+ "staatscode2": "DE",
+ "wert": "VRNCAylF"
+ },
+ {
+ "ablaufDatum": "9999-12-31T00:00:00.000+01:00",
+ "art": "http://eidas.europa.eu/attributes/naturalperson/BirthName",
+ "ausstellDatum": "9999-12-31T00:00:00.000+01:00",
+ "entityId": "1933000000000513",
+ "gueltigAb": "2022-03-03T11:14:59.712+01:00",
+ "staatscode2": "DE",
+ "wert": "miEklFHC"
+ }
+ ],
+ "entityId": "1933000000000498",
+ "gueltigAb": "2022-03-03T11:14:59.712+01:00",
+ "letzteOperation": {
+ "begruendung": "Add new person",
+ "durchgefuehrtVon": {
+ "behoerdenkennzeichen": "380630",
+ "benutzer": "eidtapp@bmi.gv.at"
+ },
+ "vorgang": "PersonAnlegen",
+ "zeitpunkt": "2022-03-03T11:14:59.712+01:00"
+ },
+ "personendaten": {
+ "basiszahl": "000951265372",
+ "bpkZp": "TBGoMlirU881e2jMGETa9WLx1+A=",
+ "entityId": "1933000000000498",
+ "familienname": "mRjMKAQc",
+ "geburtsdatum": {
+ "jahr": 1996,
+ "monat": 1,
+ "tag": 1
+ },
+ "geprueft": false,
+ "gueltigAb": "2022-03-03T11:14:59.712+01:00",
+ "vorname": "vdqZZIaA"
+ },
+ "version": "2022-03-03T11:14:59.712+01:00"
+ }
+ ]
+}
diff --git a/modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/3_search_with_mds_req.json b/modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/3_search_with_mds_req.json
new file mode 100644
index 00000000..eb382bc0
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/3_search_with_mds_req.json
@@ -0,0 +1,18 @@
+{
+ "begruendung": "Searching with MDS only",
+ "suchoptionen": {
+ "historisch": "AktuellUndHistorisch",
+ "sucheMitNamensteilen": false,
+ "suchwizard": false,
+ "zmr": false
+ },
+ "suchdaten": {
+ "familienname": "DOPISN[0xc3][0x8d]",
+ "vorname": "DANA",
+ "geburtsdatum": {
+ "jahr": 1996,
+ "monat": 1,
+ "tag": 1
+ }
+ }
+}
diff --git a/modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/3_search_with_mds_resp.json b/modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/3_search_with_mds_resp.json
new file mode 100644
index 00000000..87be362d
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/3_search_with_mds_resp.json
@@ -0,0 +1,44 @@
+{
+ "person": [
+ {
+ "type": "Person",
+ "eidas": [
+ {
+ "ablaufDatum": "9999-12-31T00:00:00.000+01:00",
+ "art": "http://eidas.europa.eu/attributes/naturalperson/PersonIdentifier",
+ "ausstellDatum": "9999-12-31T00:00:00.000+01:00",
+ "entityId": "1933000000000058",
+ "gueltigAb": "2022-03-02T16:23:32.743+01:00",
+ "staatscode2": "CZ",
+ "wert": "7cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit"
+ }
+ ],
+ "entityId": "1933000000000047",
+ "gueltigAb": "2022-03-02T16:23:32.743+01:00",
+ "letzteOperation": {
+ "begruendung": "Add new person",
+ "durchgefuehrtVon": {
+ "behoerdenkennzeichen": "380630",
+ "benutzer": "eidtapp@bmi.gv.at"
+ },
+ "vorgang": "PersonAnlegen",
+ "zeitpunkt": "2022-03-02T16:23:32.743+01:00"
+ },
+ "personendaten": {
+ "basiszahl": "000501189333",
+ "bpkZp": "vypyCkyczK7i+cgPWlJasuJphIA=",
+ "entityId": "1933000000000047",
+ "familienname": "DOPISNÍ",
+ "geburtsdatum": {
+ "jahr": 1996,
+ "monat": 1,
+ "tag": 1
+ },
+ "geprueft": false,
+ "gueltigAb": "2022-03-02T16:23:32.743+01:00",
+ "vorname": "DANA"
+ },
+ "version": "2022-03-02T16:23:32.743+01:00"
+ }
+ ]
+}
diff --git a/modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/4_search_with_mds_multi_resp.json b/modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/4_search_with_mds_multi_resp.json
new file mode 100644
index 00000000..87a23647
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/4_search_with_mds_multi_resp.json
@@ -0,0 +1,84 @@
+{
+ "person": [
+ {
+ "type": "Person",
+ "eidas": [
+ {
+ "ablaufDatum": "9999-12-31T00:00:00.000+01:00",
+ "art": "http://eidas.europa.eu/attributes/naturalperson/PersonIdentifier",
+ "ausstellDatum": "9999-12-31T00:00:00.000+01:00",
+ "entityId": "1933000000000653",
+ "gueltigAb": "2022-03-03T11:27:57.651+01:00",
+ "staatscode2": "XZ",
+ "wert": "ybgLmbYGxU"
+ }
+ ],
+ "entityId": "1933000000000642",
+ "gueltigAb": "2022-03-03T11:27:57.651+01:00",
+ "letzteOperation": {
+ "begruendung": "Add new person",
+ "durchgefuehrtVon": {
+ "behoerdenkennzeichen": "380630",
+ "benutzer": "eidtapp@bmi.gv.at"
+ },
+ "vorgang": "PersonAnlegen",
+ "zeitpunkt": "2022-03-03T11:27:57.651+01:00"
+ },
+ "personendaten": {
+ "basiszahl": "000693812023",
+ "bpkZp": "QJ/5YLEbOCfRhG5R0KKHNnmeMYo=",
+ "entityId": "1933000000000642",
+ "familienname": "HjecFKGu",
+ "geburtsdatum": {
+ "jahr": 1996,
+ "monat": 1,
+ "tag": 1
+ },
+ "geprueft": false,
+ "gueltigAb": "2022-03-03T11:27:57.651+01:00",
+ "vorname": "QwnAMXsJ"
+ },
+ "version": "2022-03-03T11:27:57.651+01:00"
+ },
+ {
+ "type": "Person",
+ "eidas": [
+ {
+ "ablaufDatum": "9999-12-31T00:00:00.000+01:00",
+ "art": "http://eidas.europa.eu/attributes/naturalperson/PersonIdentifier",
+ "ausstellDatum": "9999-12-31T00:00:00.000+01:00",
+ "entityId": "1933100000000762",
+ "gueltigAb": "2022-03-03T11:27:57.885+01:00",
+ "staatscode2": "XZ",
+ "wert": "rEhBYWgiSx"
+ }
+ ],
+ "entityId": "1933100000000751",
+ "gueltigAb": "2022-03-03T11:27:57.885+01:00",
+ "letzteOperation": {
+ "begruendung": "Add new person",
+ "durchgefuehrtVon": {
+ "behoerdenkennzeichen": "380630",
+ "benutzer": "eidtapp@bmi.gv.at"
+ },
+ "vorgang": "PersonAnlegen",
+ "zeitpunkt": "2022-03-03T11:27:57.885+01:00"
+ },
+ "personendaten": {
+ "basiszahl": "000803465934",
+ "bpkZp": "ZaJ2Yvx0u/z8VqNyCJ8zKT8XQa0=",
+ "entityId": "1933100000000751",
+ "familienname": "HjecFKGu",
+ "geburtsdatum": {
+ "jahr": 1996,
+ "monat": 1,
+ "tag": 1
+ },
+ "geprueft": false,
+ "gueltigAb": "2022-03-03T11:27:57.885+01:00",
+ "vorname": "QwnAMXsJ"
+ },
+ "version": "2022-03-03T11:27:57.885+01:00"
+ }
+ ]
+}
diff --git a/modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/4_search_with_mds_req.json b/modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/4_search_with_mds_req.json
new file mode 100644
index 00000000..01c3c3f9
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/4_search_with_mds_req.json
@@ -0,0 +1,18 @@
+{
+ "begruendung": "Searching with MDS only",
+ "suchoptionen": {
+ "historisch": "AktuellUndHistorisch",
+ "sucheMitNamensteilen": false,
+ "suchwizard": false,
+ "zmr": false
+ },
+ "suchdaten": {
+ "familienname": "HjecFKGu",
+ "vorname": "QwnAMXsJ",
+ "geburtsdatum": {
+ "jahr": 1996,
+ "monat": 1,
+ "tag": 1
+ }
+ }
+}
diff --git a/modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/ernp_empty_resp.json b/modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/ernp_empty_resp.json
new file mode 100644
index 00000000..0967ef42
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/ernp_empty_resp.json
@@ -0,0 +1 @@
+{}
diff --git a/modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/ernp_handbook_example.json b/modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/ernp_handbook_example.json
new file mode 100644
index 00000000..f4485ff7
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/ernp_handbook_example.json
@@ -0,0 +1,85 @@
+{
+ "person": [
+ {
+ "type": "Person",
+ "anschrift": {
+ "type": "AnschriftInland",
+ "adressstatus": "XXXXXXXXX",
+ "codes": {
+ "gemeindekennziffer": "09988",
+ "strassenkennziffer": "T80001"
+ },
+ "entityId": 33069800000171092,
+ "gemeinde": "Testgemeinde",
+ "gueltigAb": "2011-09-06T11:23:55.306+02:00",
+ "hausnummer": "99",
+ "postleitzahl": "0077",
+ "postort": "Testpostort 77 mit maximalmögl. Längen",
+ "staat": {
+ "isoCode3": "AUT",
+ "name": "Österreich"
+ },
+ "strasse": "Testgasse"
+ },
+ "entityId": 33069800000171080,
+ "gueltigAb": "2011-09-06T11:23:55.306+02:00",
+ "letzteOperation": {
+ "begruendung": "Testperson",
+ "durchgefuehrtVon": {
+ "behoerdenkennzeichen": "346743",
+ "benutzer": "xlechne@bmi.gv.at"
+ },
+ "vorgang": "PERSON_ANLEGEN",
+ "zeitpunkt": "2011-09-06T11:23:55.306+02:00"
+ },
+ "personendaten": {
+ "basiszahl": "000766083209",
+ "bpkZp": "BC1ifQanMKaDQG0yLBPbQ9AHgb4=",
+ "entityId": 33069800000171080,
+ "familienname": "XXXSZR",
+ "geburtsbundesland": "Wien",
+ "geburtsdatum": {
+ "jahr": 1985,
+ "monat": 1,
+ "tag": 1
+ },
+ "geburtsort": "Wien",
+ "geburtsstaat": {
+ "isoCode3": "AUT",
+ "name": "Österreich"
+ },
+ "geprueft": true,
+ "geschlecht": "Männlich",
+ "gueltigAb": "2011-09-06T11:23:55.306+02:00",
+ "vorname": "XXXTest"
+ },
+ "reisedokument": [
+ {
+ "art": "Personalausweis",
+ "ausgestelltVon": {
+ "behoerde": "Wien",
+ "datum": "1985-01-01T00:00:00.000+01:00",
+ "staat": {
+ "isoCode3": "AUT",
+ "name": "Österreich"
+ }
+ },
+ "entityId": 33069800000171090,
+ "gueltigAb": "2011-09-06T11:23:55.306+02:00",
+ "nummer": "123456789"
+ }
+ ],
+ "staatsangehoerigkeit": [
+ {
+ "entityId": 33069800000171084,
+ "gueltigAb": "2011-09-06T11:23:55.306+02:00",
+ "staat": {
+ "isoCode3": "AUT",
+ "name": "Österreich"
+ }
+ }
+ ],
+ "version": "2011-09-06T11:23:55.306+02:00"
+ }
+ ]
+} \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/error_resp.json b/modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/error_resp.json
new file mode 100644
index 00000000..76e3e7ba
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/resources/data/ernp/error_resp.json
@@ -0,0 +1,12 @@
+{
+ "faultDetails": {
+ "fault": [
+ {
+ "key": "suchdaten",
+ "message": "Mindestsuchkriterien sind: Vorname & Familienname & Geburtsdatum (statt Familienname kann auch Name vor Ehe angegeben werden) oder mindestens ein Eidas Attribut (Art & Wert & Staat)"
+ }
+ ],
+ "faultNumber": 100
+ },
+ "message": "Validierungsfehler"
+}
diff --git a/modules/authmodule-eIDAS-v2/src/test/resources/data/idp_metadata_classpath_entity.xml b/modules/authmodule-eIDAS-v2/src/test/resources/data/idp_metadata_classpath_entity.xml
new file mode 100644
index 00000000..080a189f
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/resources/data/idp_metadata_classpath_entity.xml
@@ -0,0 +1,146 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<md:EntityDescriptor
+ xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata"
+ ID="_1a48ec3432f2f3ba6222724a5b06f873"
+ entityID="classpath:/data/idp_metadata_classpath_entity.xml"
+ validUntil="2045-02-06T08:47:26.211Z">
+ <md:IDPSSODescriptor
+ WantAuthnRequestsSigned="true"
+ protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
+ <md:KeyDescriptor use="signing">
+ <ds:KeyInfo
+ xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
+ <ds:X509Data>
+ <ds:X509Certificate>MIIDMzCCAhsCBFtIcPowDQYJKoZIhvcNAQELBQAwXjELMAkGA1UEBhMCQVQxDTALBgNVBAoMBEVH
+ SVoxJDAiBgNVBAsMG2NlbnRyYWwgbmF0aW9uYWwgZUlEQVMgbm9kZTEaMBgGA1UEAwwRQXNzZXJ0
+ aW9uIHNpZ25pbmcwHhcNMTgwNzEzMDkyOTMwWhcNMjEwNDA3MDkyOTMwWjBeMQswCQYDVQQGEwJB
+ VDENMAsGA1UECgwERUdJWjEkMCIGA1UECwwbY2VudHJhbCBuYXRpb25hbCBlSURBUyBub2RlMRow
+ GAYDVQQDDBFBc3NlcnRpb24gc2lnbmluZzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
+ AJ5zDYxMPRcz6AHaev1tS46Tq8sdgbGFM56uxk6c7LmMDC+HTzNX/3Q5S/YwSzgL3ue5TSw1ltOf
+ yMXMZ6D0+buWWcsxGEkQ8M3adKRFdQrEwafzwTA7pguq5WiHOkr4qwR7dLMome9z5cc3LRcwdOPP
+ gq7ahb5jM3hRqc5xkMWIuvql0NFXPzlHrjDLwy5nIWPOhL5abhVt4YsXbpbjXxFSGkDEAZ32K3EU
+ LNBr9FSUmJfbrVX9AU2T+BKIwiqXP8e/3UJHgPHQ0l5ljWp5P6u5+tvM21o8sUM4eArRa8BkdRsP
+ C92GVuASSUz2ZJ3JhAK1cSM8bnvaZVLQtTvPMAcCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAAp7z
+ TubWXW6YMpyLSvWBdZiiQ3X66XpSZLZJDIAkoPzEY0DSBp8I5YASIx4JTR5XJt+6MI9acgNIAYW8
+ DhtRwUMVaRWEtuCrfKhGLWm5KSxnhPcD3lzRZhY4ZcA7dUlirjf6hnqo2TFEmJ9fkM+rxwy1GkDD
+ 7j2YDSOFmSq9/Ud9/IbIfSnRu/lO0dh7iRrmg3y0Y/+plPxYmp4AHqehP11OchTz2FGGHVsSC2Vs
+ IVBQI6ANZYyOlicgfEEFHA06jP9OnA0EwEFr2P+di9caZg8vfibyzxMGeuf6CY0c0eLHokBCn2W8
+ vkzvWiER3pozRvCmXFjCVZfRjUunaJf2ow==
+ </ds:X509Certificate>
+ </ds:X509Data>
+ <ds:X509Data>
+ <ds:X509Certificate>MIIC+DCCAeCgAwIBAgIEXh7TbTANBgkqhkiG9w0BAQsFADA+MQswCQYDVQQGEwJB
+ VDENMAsGA1UECgwERUdJWjEOMAwGA1UECwwFalVuaXQxEDAOBgNVBAMMB3NpZ25p
+ bmcwHhcNMjAwMTE1MDg1NTA5WhcNMjkwMTE0MDg1NTA5WjA+MQswCQYDVQQGEwJB
+ VDENMAsGA1UECgwERUdJWjEOMAwGA1UECwwFalVuaXQxEDAOBgNVBAMMB3NpZ25p
+ bmcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCUSiRjnDvPafZfhJ+L
+ 1wM86FKJX3VIAV/8TD9qJ6HOBkn5WwYfpheyCfRb6XVDyIGpO8qnMWAgC17Ngbmh
+ zj8d8HXNQ2l3uppMv24oUTfXyYhQfZWAghx0sTlRIx/ZmlnduJilx2S53Sa7ruJw
+ lQcBFXj9h9B8dtyegc86Sx6D9BumP1xU7+mEBk8Gv9rR5Khg0Y7qGfZWB0t4aikg
+ aupWveVwiGifOOSfR8czqIg9qUpMYfZiTEBTSRmN6sPiNWhd4J0GyAI9Rn5C9jz/
+ sSlQrxpN+4DXzsqSU5F6gzq3yRux6wyOzDlt2birf21VPQ9HIy4YCjZXwgDWG7AO
+ 821pAgMBAAEwDQYJKoZIhvcNAQELBQADggEBADnwdaxUtQU6SIpYwIb2c0ljTmQi
+ 7ryUcUpNHtK0M0E5Mw5Ex8zwrWbNQZ2sUyc4r07M66iOIqHsYZUQlRYvVKHifDpA
+ r8TCgD7iGGdB3By8Ou0RaNW+03w1fwmi98CufbHCGvpv0o2KxlejoHZminNdQ79i
+ bN+01nhocezJQATEQlnwHLiQSjilXpZeLYDk8HbrcUXNRxezN4ChdH+uU54vf+Ux
+ qcj9QHcmBe1+BM8EXfqS1DbTwZl+NTCnh5OYl8fvIFSOHMBxwFrI4pyY0faxg9Uc
+ rCogn/oQ+mV1gnVUDaDhvvEnVGZQtrlt7heVId2BeNellVgsrcmdW8j4U9U=
+ </ds:X509Certificate>
+ </ds:X509Data>
+ <ds:X509Data>
+ <ds:X509Certificate>MIIBbjCCARSgAwIBAgIEXh7TNzAKBggqhkjOPQQDAjA/MQswCQYDVQQGEwJBVDEN
+ MAsGA1UECgwERUdJWjEOMAwGA1UECwwFalVuaXQxETAPBgNVBAMMCG1ldGFkYXRh
+ MB4XDTIwMDExNTA4NTQxNVoXDTMwMDExNDA4NTQxNVowPzELMAkGA1UEBhMCQVQx
+ DTALBgNVBAoMBEVHSVoxDjAMBgNVBAsMBWpVbml0MREwDwYDVQQDDAhtZXRhZGF0
+ YTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABBdBkaxt31p++aZeP3SmlWITj9SY
+ O4McV2ccXFsH4X4QMHuKAMUvjxPm1kdU01eTOWdiQX0GpDIBspYMZh8ZKcwwCgYI
+ KoZIzj0EAwIDSAAwRQIhAJ3QKlk9cd90s+i8y62fvmGF6LtfNO+JvkWqDUBeQImn
+ AiA2KwFtzO7STAp9MEwQGe0vt0F8mO1ttrLE+rr6YxdwGA==
+ </ds:X509Certificate>
+ </ds:X509Data>
+ </ds:KeyInfo>
+ </md:KeyDescriptor>
+ <md:NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:persistent
+ </md:NameIDFormat>
+ <md:NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:transient
+ </md:NameIDFormat>
+ <md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified
+ </md:NameIDFormat>
+ <md:SingleSignOnService
+ Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"
+ Location="https://vidp.gv.at/ms_connector/pvp/post" />
+ <md:SingleSignOnService
+ Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect"
+ Location="https://vidp.gv.at/ms_connector/pvp/redirect" />
+ <saml2:Attribute
+ xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion"
+ FriendlyName="BPK" Name="urn:oid:1.2.40.0.10.2.1.1.149"
+ NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri" />
+ <saml2:Attribute
+ xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion"
+ FriendlyName="BIRTHDATE" Name="urn:oid:1.2.40.0.10.2.1.1.55"
+ NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri" />
+ <saml2:Attribute
+ xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion"
+ FriendlyName="PRINCIPAL-NAME"
+ Name="urn:oid:1.2.40.0.10.2.1.1.261.20"
+ NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri" />
+ <saml2:Attribute
+ xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion"
+ FriendlyName="EID-CCS-URL" Name="urn:oid:1.2.40.0.10.2.1.1.261.64"
+ NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri" />
+ <saml2:Attribute
+ xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion"
+ FriendlyName="EID-ISSUING-NATION"
+ Name="urn:oid:1.2.40.0.10.2.1.1.261.32"
+ NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri" />
+ <saml2:Attribute
+ xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion"
+ FriendlyName="PVP-VERSION" Name="urn:oid:1.2.40.0.10.2.1.1.261.10"
+ NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri" />
+ <saml2:Attribute
+ xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion"
+ FriendlyName="EID-SOURCE-PIN"
+ Name="urn:oid:1.2.40.0.10.2.1.1.261.36"
+ NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri" />
+ <saml2:Attribute
+ xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion"
+ FriendlyName="GIVEN-NAME" Name="urn:oid:2.5.4.42"
+ NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri" />
+ <saml2:Attribute
+ xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion"
+ FriendlyName="EID-SIGNER-CERTIFICATE"
+ Name="urn:oid:1.2.40.0.10.2.1.1.261.66"
+ NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri" />
+ <saml2:Attribute
+ xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion"
+ FriendlyName="EID-SECTOR-FOR-IDENTIFIER"
+ Name="urn:oid:1.2.40.0.10.2.1.1.261.34"
+ NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri" />
+ <saml2:Attribute
+ xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion"
+ FriendlyName="EID-SOURCE-PIN-TYPE"
+ Name="urn:oid:1.2.40.0.10.2.1.1.261.104"
+ NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri" />
+ <saml2:Attribute
+ xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion"
+ FriendlyName="EID-E-ID-TOKEN"
+ Name="urn:oid:1.2.40.0.10.2.1.1.261.39"
+ NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri" />
+ <saml2:Attribute
+ xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion"
+ FriendlyName="EID-IDENTITY-LINK"
+ Name="urn:oid:1.2.40.0.10.2.1.1.261.38"
+ NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri" />
+ <saml2:Attribute
+ xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion"
+ FriendlyName="EID-CITIZEN-QAA-EIDAS-LEVEL"
+ Name="urn:oid:1.2.40.0.10.2.1.1.261.108"
+ NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri" />
+ <saml2:Attribute
+ xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion"
+ FriendlyName="EID-IDENTITY-STATUS-LEVEL"
+ Name="urn:oid:1.2.40.0.10.2.1.1.261.109"
+ NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri" />
+ </md:IDPSSODescriptor>
+</md:EntityDescriptor>
diff --git a/modules/authmodule-eIDAS-v2/src/test/resources/data/idp_metadata_no_sig.xml b/modules/authmodule-eIDAS-v2/src/test/resources/data/idp_metadata_no_sig.xml
new file mode 100644
index 00000000..bc55fe62
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/resources/data/idp_metadata_no_sig.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata" ID="_1a48ec3432f2f3ba6222724a5b06f873" entityID="https://vidp.gv.at/ms_connector/pvp/metadata" validUntil="2045-02-06T08:47:26.211Z">
+ <md:IDPSSODescriptor WantAuthnRequestsSigned="true" protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
+ <md:KeyDescriptor use="signing">
+ <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
+ <ds:X509Data>
+ <ds:X509Certificate>MIIDMzCCAhsCBFtIcPowDQYJKoZIhvcNAQELBQAwXjELMAkGA1UEBhMCQVQxDTALBgNVBAoMBEVH
+SVoxJDAiBgNVBAsMG2NlbnRyYWwgbmF0aW9uYWwgZUlEQVMgbm9kZTEaMBgGA1UEAwwRQXNzZXJ0
+aW9uIHNpZ25pbmcwHhcNMTgwNzEzMDkyOTMwWhcNMjEwNDA3MDkyOTMwWjBeMQswCQYDVQQGEwJB
+VDENMAsGA1UECgwERUdJWjEkMCIGA1UECwwbY2VudHJhbCBuYXRpb25hbCBlSURBUyBub2RlMRow
+GAYDVQQDDBFBc3NlcnRpb24gc2lnbmluZzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
+AJ5zDYxMPRcz6AHaev1tS46Tq8sdgbGFM56uxk6c7LmMDC+HTzNX/3Q5S/YwSzgL3ue5TSw1ltOf
+yMXMZ6D0+buWWcsxGEkQ8M3adKRFdQrEwafzwTA7pguq5WiHOkr4qwR7dLMome9z5cc3LRcwdOPP
+gq7ahb5jM3hRqc5xkMWIuvql0NFXPzlHrjDLwy5nIWPOhL5abhVt4YsXbpbjXxFSGkDEAZ32K3EU
+LNBr9FSUmJfbrVX9AU2T+BKIwiqXP8e/3UJHgPHQ0l5ljWp5P6u5+tvM21o8sUM4eArRa8BkdRsP
+C92GVuASSUz2ZJ3JhAK1cSM8bnvaZVLQtTvPMAcCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAAp7z
+TubWXW6YMpyLSvWBdZiiQ3X66XpSZLZJDIAkoPzEY0DSBp8I5YASIx4JTR5XJt+6MI9acgNIAYW8
+DhtRwUMVaRWEtuCrfKhGLWm5KSxnhPcD3lzRZhY4ZcA7dUlirjf6hnqo2TFEmJ9fkM+rxwy1GkDD
+7j2YDSOFmSq9/Ud9/IbIfSnRu/lO0dh7iRrmg3y0Y/+plPxYmp4AHqehP11OchTz2FGGHVsSC2Vs
+IVBQI6ANZYyOlicgfEEFHA06jP9OnA0EwEFr2P+di9caZg8vfibyzxMGeuf6CY0c0eLHokBCn2W8
+vkzvWiER3pozRvCmXFjCVZfRjUunaJf2ow==</ds:X509Certificate>
+ </ds:X509Data>
+ </ds:KeyInfo>
+ </md:KeyDescriptor>
+ <md:NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:persistent</md:NameIDFormat>
+ <md:NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:transient</md:NameIDFormat>
+ <md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified</md:NameIDFormat>
+ <md:SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://vidp.gv.at/ms_connector/pvp/post"/>
+ <md:SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://vidp.gv.at/ms_connector/pvp/redirect"/>
+ <saml2:Attribute xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" FriendlyName="BPK" Name="urn:oid:1.2.40.0.10.2.1.1.149" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"/>
+ <saml2:Attribute xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" FriendlyName="BIRTHDATE" Name="urn:oid:1.2.40.0.10.2.1.1.55" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"/>
+ <saml2:Attribute xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" FriendlyName="PRINCIPAL-NAME" Name="urn:oid:1.2.40.0.10.2.1.1.261.20" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"/>
+ <saml2:Attribute xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" FriendlyName="EID-CCS-URL" Name="urn:oid:1.2.40.0.10.2.1.1.261.64" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"/>
+ <saml2:Attribute xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" FriendlyName="EID-ISSUING-NATION" Name="urn:oid:1.2.40.0.10.2.1.1.261.32" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"/>
+ <saml2:Attribute xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" FriendlyName="PVP-VERSION" Name="urn:oid:1.2.40.0.10.2.1.1.261.10" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"/>
+ <saml2:Attribute xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" FriendlyName="EID-SOURCE-PIN" Name="urn:oid:1.2.40.0.10.2.1.1.261.36" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"/>
+ <saml2:Attribute xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" FriendlyName="GIVEN-NAME" Name="urn:oid:2.5.4.42" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"/>
+ <saml2:Attribute xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" FriendlyName="EID-SIGNER-CERTIFICATE" Name="urn:oid:1.2.40.0.10.2.1.1.261.66" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"/>
+ <saml2:Attribute xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" FriendlyName="EID-SECTOR-FOR-IDENTIFIER" Name="urn:oid:1.2.40.0.10.2.1.1.261.34" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"/>
+ <saml2:Attribute xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" FriendlyName="EID-SOURCE-PIN-TYPE" Name="urn:oid:1.2.40.0.10.2.1.1.261.104" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"/>
+ <saml2:Attribute xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" FriendlyName="EID-E-ID-TOKEN" Name="urn:oid:1.2.40.0.10.2.1.1.261.39" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"/>
+ <saml2:Attribute xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" FriendlyName="EID-IDENTITY-LINK" Name="urn:oid:1.2.40.0.10.2.1.1.261.38" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"/>
+ <saml2:Attribute xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" FriendlyName="EID-CITIZEN-QAA-EIDAS-LEVEL" Name="urn:oid:1.2.40.0.10.2.1.1.261.108" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"/>
+ <saml2:Attribute xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" FriendlyName="EID-IDENTITY-STATUS-LEVEL" Name="urn:oid:1.2.40.0.10.2.1.1.261.109" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"/>
+ </md:IDPSSODescriptor>
+</md:EntityDescriptor>
diff --git a/modules/authmodule-eIDAS-v2/src/test/resources/data/idp_metadata_no_sig2.xml b/modules/authmodule-eIDAS-v2/src/test/resources/data/idp_metadata_no_sig2.xml
new file mode 100644
index 00000000..bdc176a0
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/resources/data/idp_metadata_no_sig2.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata" ID="_1a48ec3432f2f3ba6222724a5b06f873" entityID="classpath:/data/idp_metadata_no_sig2.xml" validUntil="2045-02-06T08:47:26.211Z">
+ <md:IDPSSODescriptor WantAuthnRequestsSigned="true" protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
+ <md:KeyDescriptor use="signing">
+ <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
+ <ds:X509Data>
+ <ds:X509Certificate>MIIDMzCCAhsCBFtIcPowDQYJKoZIhvcNAQELBQAwXjELMAkGA1UEBhMCQVQxDTALBgNVBAoMBEVH
+SVoxJDAiBgNVBAsMG2NlbnRyYWwgbmF0aW9uYWwgZUlEQVMgbm9kZTEaMBgGA1UEAwwRQXNzZXJ0
+aW9uIHNpZ25pbmcwHhcNMTgwNzEzMDkyOTMwWhcNMjEwNDA3MDkyOTMwWjBeMQswCQYDVQQGEwJB
+VDENMAsGA1UECgwERUdJWjEkMCIGA1UECwwbY2VudHJhbCBuYXRpb25hbCBlSURBUyBub2RlMRow
+GAYDVQQDDBFBc3NlcnRpb24gc2lnbmluZzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
+AJ5zDYxMPRcz6AHaev1tS46Tq8sdgbGFM56uxk6c7LmMDC+HTzNX/3Q5S/YwSzgL3ue5TSw1ltOf
+yMXMZ6D0+buWWcsxGEkQ8M3adKRFdQrEwafzwTA7pguq5WiHOkr4qwR7dLMome9z5cc3LRcwdOPP
+gq7ahb5jM3hRqc5xkMWIuvql0NFXPzlHrjDLwy5nIWPOhL5abhVt4YsXbpbjXxFSGkDEAZ32K3EU
+LNBr9FSUmJfbrVX9AU2T+BKIwiqXP8e/3UJHgPHQ0l5ljWp5P6u5+tvM21o8sUM4eArRa8BkdRsP
+C92GVuASSUz2ZJ3JhAK1cSM8bnvaZVLQtTvPMAcCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAAp7z
+TubWXW6YMpyLSvWBdZiiQ3X66XpSZLZJDIAkoPzEY0DSBp8I5YASIx4JTR5XJt+6MI9acgNIAYW8
+DhtRwUMVaRWEtuCrfKhGLWm5KSxnhPcD3lzRZhY4ZcA7dUlirjf6hnqo2TFEmJ9fkM+rxwy1GkDD
+7j2YDSOFmSq9/Ud9/IbIfSnRu/lO0dh7iRrmg3y0Y/+plPxYmp4AHqehP11OchTz2FGGHVsSC2Vs
+IVBQI6ANZYyOlicgfEEFHA06jP9OnA0EwEFr2P+di9caZg8vfibyzxMGeuf6CY0c0eLHokBCn2W8
+vkzvWiER3pozRvCmXFjCVZfRjUunaJf2ow==</ds:X509Certificate>
+ </ds:X509Data>
+ </ds:KeyInfo>
+ </md:KeyDescriptor>
+ <md:NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:persistent</md:NameIDFormat>
+ <md:NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:transient</md:NameIDFormat>
+ <md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified</md:NameIDFormat>
+ <md:SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://vidp.gv.at/ms_connector/pvp/post"/>
+ <md:SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://vidp.gv.at/ms_connector/pvp/redirect"/>
+ <saml2:Attribute xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" FriendlyName="BPK" Name="urn:oid:1.2.40.0.10.2.1.1.149" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"/>
+ <saml2:Attribute xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" FriendlyName="BIRTHDATE" Name="urn:oid:1.2.40.0.10.2.1.1.55" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"/>
+ <saml2:Attribute xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" FriendlyName="PRINCIPAL-NAME" Name="urn:oid:1.2.40.0.10.2.1.1.261.20" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"/>
+ <saml2:Attribute xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" FriendlyName="EID-CCS-URL" Name="urn:oid:1.2.40.0.10.2.1.1.261.64" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"/>
+ <saml2:Attribute xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" FriendlyName="EID-ISSUING-NATION" Name="urn:oid:1.2.40.0.10.2.1.1.261.32" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"/>
+ <saml2:Attribute xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" FriendlyName="PVP-VERSION" Name="urn:oid:1.2.40.0.10.2.1.1.261.10" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"/>
+ <saml2:Attribute xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" FriendlyName="EID-SOURCE-PIN" Name="urn:oid:1.2.40.0.10.2.1.1.261.36" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"/>
+ <saml2:Attribute xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" FriendlyName="GIVEN-NAME" Name="urn:oid:2.5.4.42" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"/>
+ <saml2:Attribute xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" FriendlyName="EID-SIGNER-CERTIFICATE" Name="urn:oid:1.2.40.0.10.2.1.1.261.66" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"/>
+ <saml2:Attribute xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" FriendlyName="EID-SECTOR-FOR-IDENTIFIER" Name="urn:oid:1.2.40.0.10.2.1.1.261.34" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"/>
+ <saml2:Attribute xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" FriendlyName="EID-SOURCE-PIN-TYPE" Name="urn:oid:1.2.40.0.10.2.1.1.261.104" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"/>
+ <saml2:Attribute xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" FriendlyName="EID-E-ID-TOKEN" Name="urn:oid:1.2.40.0.10.2.1.1.261.39" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"/>
+ <saml2:Attribute xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" FriendlyName="EID-IDENTITY-LINK" Name="urn:oid:1.2.40.0.10.2.1.1.261.38" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"/>
+ <saml2:Attribute xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" FriendlyName="EID-CITIZEN-QAA-EIDAS-LEVEL" Name="urn:oid:1.2.40.0.10.2.1.1.261.108" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"/>
+ <saml2:Attribute xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" FriendlyName="EID-IDENTITY-STATUS-LEVEL" Name="urn:oid:1.2.40.0.10.2.1.1.261.109" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"/>
+ </md:IDPSSODescriptor>
+</md:EntityDescriptor>
diff --git a/modules/authmodule-eIDAS-v2/src/test/resources/data/idp_metadata_sig_notvalid.xml b/modules/authmodule-eIDAS-v2/src/test/resources/data/idp_metadata_sig_notvalid.xml
new file mode 100644
index 00000000..86665a9c
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/resources/data/idp_metadata_sig_notvalid.xml
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata" ID="_1a48ec3432f2f3ba6222724a5b06f873" entityID="https://localEntity" validUntil="2045-02-06T08:47:26.211Z">
+ <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
+ <ds:SignedInfo>
+ <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
+ <ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>
+ <ds:Reference URI="#_1a48ec3432f2f3ba6222724a5b06f873">
+ <ds:Transforms>
+ <ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
+ <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
+ </ds:Transforms>
+ <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
+ <ds:DigestValue>e6DiHa9scuvxJFBUipZ8PQcD4kAkmSIDZgZV+0/7glg=</ds:DigestValue>
+ </ds:Reference>
+ </ds:SignedInfo>
+ <ds:SignatureValue>Czr2EwhK/0ZUZ5blQpJfNoOFEscLlxlmHPjmOJUIsxlB2pUn+ApULrjVpR1ViUcGZ0PVi2KChSNoSn09YKjtgPFBiSY010VYdaACgqluxUt6AwESObaqcyHVBzMDUr/g6jkRFEJV4vqnZQQDdDfTH4MXNqunORegS1saBHw4nJSOX4YfoVmIuT5uOlRrxvoG7srnGShvF7DmvIHBUBF5Tq9FyeSgwTM8udxl8Yl9FB2pREuR83CcbgjPrYKtzi6TiSfrWkcD0L5BvmMxN/BdaGDAorxYOnk41sWDJjrkY8C2SC1YDy6XT4SM06uFwstUrRn8QPg1hfbLHAyQNoaR8ecgapk5DkxmbATMcGY+SM4yQWkBdYT7GtufNmF8sIVaL6JOOTKAE9qqX/1N6N4zOPmm8rpIqVEQZtQ5usN/ubxbxLxUoTdDeo8RwkktW6zQ3Zv9+Iyf0DASYmK1IxN+fMw/qyeVy9r6o15ITHTqTmT/7BidKZ58m4HxIK52E3DU</ds:SignatureValue>
+ <ds:KeyInfo>
+ <ds:X509Data>
+ <ds:X509Certificate>MIIEFTCCAn0CBFtIcMwwDQYJKoZIhvcNAQELBQAwTzELMAkGA1UEBhMCQVQxDTALBgNVBAoMBEVH
+SVoxMTAvBgNVBAMMKG5hdGlvbmFsIGNlbnRyYWwgZUlEQVMgbm9kZSAtIHRlc3RzeXN0ZW0wHhcN
+MTgwNzEzMDkyODQ0WhcNMjEwNDA3MDkyODQ0WjBPMQswCQYDVQQGEwJBVDENMAsGA1UECgwERUdJ
+WjExMC8GA1UEAwwobmF0aW9uYWwgY2VudHJhbCBlSURBUyBub2RlIC0gdGVzdHN5c3RlbTCCAaIw
+DQYJKoZIhvcNAQEBBQADggGPADCCAYoCggGBALK4bdf5OremKkj0+xCjU0eN7RUd1A2VqoGnvFUs
+t7xjLQ1PspHiDf9Pm2cwOIJabSnuZ01hYAGz9X+lU3Z3fwhVc+tEsuzsaAml/LPw3i3+ppoSTJDM
+iDvhCoUKTzJ8HBQj2gTvXNlqPljyGneuCJ+uBMr7Okq/XjMTJj2xzvutrHS3qIO+/w+OkY967QLV
+RXh0bdFqYqnyAnlYcWJPIwjanOJtE2difPYqers7ZW1F9djP0+IZRoyaook5rpLYvuQTHuvulgIE
+3zGlTuOx3sk8zMyInMndqi75Eh+ROnndSZE7gN3u5CfFpuO5pxFa2jj1h/AnR39Tg8/sU+Se+AwH
+rNvee3IWhxk5LkelYevfeCQos7Dv2ASE9XMCCs7FoE47w8fDalECh09MFKDiotpklbq3OrPg9NQ4
+D//k0GXlW5jYUKP/Wq/+suAI6mfhSnNkjOGMcMlzNTmwxGD/v7Py6OVA+YcJQsqYalLrqbvT2tXV
+mYBVO3oqafg+kfevfwIDAQABMA0GCSqGSIb3DQEBCwUAA4IBgQCioM8k0EEBFtY4QyxOYFufPDLw
+9PNPct01ltnTVjNEEt/L6/8zYlDwrDeULEkJS7mV9zV3657NPQ5IPT/Ib93Uk/RPi0iOA2CGWIMa
+DQIODN3BUYr+zPUqhbKS6OWOhTgV8GiRCUbxrT1uc1AiacP63pga3TJX8k8WFnfW+Dqm2MfWWlxr
+4X2YB9VUW55X5sBNy035jYhEpp8NCK/fTAhoEQNCG+rm3T9qhT6YyOnbW2kXU747+ZwXT2qA5o4y
+a/9+6dDc+LUlHCEm4X7c6bcGvCfNezB4k56FzbAJlOLf2VDGzvEQBf0hsB+kElezm1VBlEkZ4Mjz
+pBpHBMoR21SwTpcvrbR4ig0Bk1eEHNK44sw0F32K5yww3gnJftMIZtPhjhk8UdG2/H6vs9s/to2V
+j4V6wN4o79RTULoQ8RjL6MPWEWzwOvOZXJAo2XJEECvDivSjIJvNC0lfrK3zI3LH3c1JR6q2EfeC
+Z50wTJMFoChSaqunJQXKo81g6wNhP00=</ds:X509Certificate>
+ </ds:X509Data>
+ </ds:KeyInfo>
+ </ds:Signature>
+ <md:IDPSSODescriptor WantAuthnRequestsSigned="true" protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
+ <md:KeyDescriptor use="signing">
+ <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
+ <ds:X509Data>
+ <ds:X509Certificate>MIIDMzCCAhsCBFtIcPowDQYJKoZIhvcNAQELBQAwXjELMAkGA1UEBhMCQVQxDTALBgNVBAoMBEVH
+SVoxJDAiBgNVBAsMG2NlbnRyYWwgbmF0aW9uYWwgZUlEQVMgbm9kZTEaMBgGA1UEAwwRQXNzZXJ0
+aW9uIHNpZ25pbmcwHhcNMTgwNzEzMDkyOTMwWhcNMjEwNDA3MDkyOTMwWjBeMQswCQYDVQQGEwJB
+VDENMAsGA1UECgwERUdJWjEkMCIGA1UECwwbY2VudHJhbCBuYXRpb25hbCBlSURBUyBub2RlMRow
+GAYDVQQDDBFBc3NlcnRpb24gc2lnbmluZzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
+AJ5zDYxMPRcz6AHaev1tS46Tq8sdgbGFM56uxk6c7LmMDC+HTzNX/3Q5S/YwSzgL3ue5TSw1ltOf
+yMXMZ6D0+buWWcsxGEkQ8M3adKRFdQrEwafzwTA7pguq5WiHOkr4qwR7dLMome9z5cc3LRcwdOPP
+gq7ahb5jM3hRqc5xkMWIuvql0NFXPzlHrjDLwy5nIWPOhL5abhVt4YsXbpbjXxFSGkDEAZ32K3EU
+LNBr9FSUmJfbrVX9AU2T+BKIwiqXP8e/3UJHgPHQ0l5ljWp5P6u5+tvM21o8sUM4eArRa8BkdRsP
+C92GVuASSUz2ZJ3JhAK1cSM8bnvaZVLQtTvPMAcCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAAp7z
+TubWXW6YMpyLSvWBdZiiQ3X66XpSZLZJDIAkoPzEY0DSBp8I5YASIx4JTR5XJt+6MI9acgNIAYW8
+DhtRwUMVaRWEtuCrfKhGLWm5KSxnhPcD3lzRZhY4ZcA7dUlirjf6hnqo2TFEmJ9fkM+rxwy1GkDD
+7j2YDSOFmSq9/Ud9/IbIfSnRu/lO0dh7iRrmg3y0Y/+plPxYmp4AHqehP11OchTz2FGGHVsSC2Vs
+IVBQI6ANZYyOlicgfEEFHA06jP9OnA0EwEFr2P+di9caZg8vfibyzxMGeuf6CY0c0eLHokBCn2W8
+vkzvWiER3pozRvCmXFjCVZfRjUunaJf2ow==</ds:X509Certificate>
+ </ds:X509Data>
+ </ds:KeyInfo>
+ </md:KeyDescriptor>
+ <md:NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:persistent</md:NameIDFormat>
+ <md:NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:transient</md:NameIDFormat>
+ <md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified</md:NameIDFormat>
+ <md:SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://vidp.gv.at/ms_connector/pvp/post"/>
+ <md:SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://vidp.gv.at/ms_connector/pvp/redirect"/>
+ <saml2:Attribute xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" FriendlyName="BPK" Name="urn:oid:1.2.40.0.10.2.1.1.149" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"/>
+ <saml2:Attribute xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" FriendlyName="BIRTHDATE" Name="urn:oid:1.2.40.0.10.2.1.1.55" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"/>
+ <saml2:Attribute xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" FriendlyName="PRINCIPAL-NAME" Name="urn:oid:1.2.40.0.10.2.1.1.261.20" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"/>
+ <saml2:Attribute xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" FriendlyName="EID-CCS-URL" Name="urn:oid:1.2.40.0.10.2.1.1.261.64" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"/>
+ <saml2:Attribute xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" FriendlyName="EID-ISSUING-NATION" Name="urn:oid:1.2.40.0.10.2.1.1.261.32" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"/>
+ <saml2:Attribute xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" FriendlyName="PVP-VERSION" Name="urn:oid:1.2.40.0.10.2.1.1.261.10" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"/>
+ <saml2:Attribute xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" FriendlyName="EID-SOURCE-PIN" Name="urn:oid:1.2.40.0.10.2.1.1.261.36" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"/>
+ <saml2:Attribute xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" FriendlyName="GIVEN-NAME" Name="urn:oid:2.5.4.42" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"/>
+ <saml2:Attribute xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" FriendlyName="EID-SIGNER-CERTIFICATE" Name="urn:oid:1.2.40.0.10.2.1.1.261.66" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"/>
+ <saml2:Attribute xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" FriendlyName="EID-SECTOR-FOR-IDENTIFIER" Name="urn:oid:1.2.40.0.10.2.1.1.261.34" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"/>
+ <saml2:Attribute xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" FriendlyName="EID-SOURCE-PIN-TYPE" Name="urn:oid:1.2.40.0.10.2.1.1.261.104" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"/>
+ <saml2:Attribute xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" FriendlyName="EID-E-ID-TOKEN" Name="urn:oid:1.2.40.0.10.2.1.1.261.39" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"/>
+ <saml2:Attribute xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" FriendlyName="EID-IDENTITY-LINK" Name="urn:oid:1.2.40.0.10.2.1.1.261.38" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"/>
+ <saml2:Attribute xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" FriendlyName="EID-CITIZEN-QAA-EIDAS-LEVEL" Name="urn:oid:1.2.40.0.10.2.1.1.261.108" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"/>
+ <saml2:Attribute xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" FriendlyName="EID-IDENTITY-STATUS-LEVEL" Name="urn:oid:1.2.40.0.10.2.1.1.261.109" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"/>
+ </md:IDPSSODescriptor>
+</md:EntityDescriptor>
diff --git a/modules/authmodule-eIDAS-v2/src/test/resources/data/idp_metadata_sig_valid_wrong_alg.xml b/modules/authmodule-eIDAS-v2/src/test/resources/data/idp_metadata_sig_valid_wrong_alg.xml
new file mode 100644
index 00000000..2187aa5f
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/resources/data/idp_metadata_sig_valid_wrong_alg.xml
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?><md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata" ID="_1a48ec3432f2f3ba6222724a5b06f873" entityID="https://vidp.gv.at/ms_connector/pvp/metadata" validUntil="2045-02-06T08:47:26.211Z">
+ <dsig:Signature xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" Id="signature-1-1"><dsig:SignedInfo><dsig:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/><dsig:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/><dsig:Reference Id="reference-1-1" URI=""><dsig:Transforms><dsig:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/><dsig:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/></dsig:Transforms><dsig:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/><dsig:DigestValue>dhkHkgZ1OOHG0nYWiRXrpZhIAx41103CG6DKDbBra8o=</dsig:DigestValue></dsig:Reference></dsig:SignedInfo><dsig:SignatureValue>AkxnEu9g3QgYC0JwuJXMYFrnNn6UMtrbtVn5YzkKBXxyYqZui4pEi/TRSM9r7Gt+
+4UqHrJVkYMbbuoO2kpiDnluPG+vHYzYFvF0agQ+gfGjpVQNRORN0FU7JPX+KPjpr
+sMU8wVZITSPU0GBBccvzrcpq7DQt0VbV5U7/Vq3KM/fop4ytAkUbTltUj/XxvAd1
+XdhB/zyeTTR2dafJ6Z2CKyM7MMmxwXYD1NrPGciPvTJ9ASHAT0lJM1dxrRNbeAja
+KTrNVj78MhSluRm5g7N1pMZzgMSpqN66AUg8pkSTvcRaNImPzYDcMQzHl2Tr362M
+RudjSgaEljK98TbBdgLFTg==</dsig:SignatureValue><dsig:KeyInfo><dsig:X509Data><dsig:X509Certificate>MIIEqzCCBBSgAwIBAgIHANux81oNezANBgkqhkiG9w0BAQUFADBAMSIwIAYDVQQD
+ExlJQUlLIFRlc3QgSW50ZXJtZWRpYXRlIENBMQ0wCwYDVQQKEwRJQUlLMQswCQYD
+VQQGEwJBVDAeFw0xMzA5MjcwNTMzMzdaFw0yMzA5MjcwNTMzMzdaMIHkMQswCQYD
+VQQGEwJBVDENMAsGA1UEBxMER3JhejEmMCQGA1UEChMdR3JheiBVbml2ZXJzaXR5
+IG9mIFRlY2hub2xvZ3kxSDBGBgNVBAsTP0luc3RpdHV0ZSBmb3IgQXBwbGllZCBJ
+bmZvcm1hdGlvbiBQcm9jZXNzaW5nIGFuZCBDb21tdW5pY2F0aW9uczEUMBIGA1UE
+BBMLTU9BLVNTIFRlc3QxGDAWBgNVBCoTD0VHSVogVGVzdHBvcnRhbDEkMCIGA1UE
+AxMbRUdJWiBUZXN0cG9ydGFsIE1PQS1TUyBUZXN0MIIBIjANBgkqhkiG9w0BAQEF
+AAOCAQ8AMIIBCgKCAQEAuDjOyf+mY+oQL2FQzzuaiC8C23vVKbq/n2Zi7BqSibZH
+mtqMJfmj4pT+hWSNHvVvWsaxFcx4KeNqdCMzwnw1r4P3Sf+2o5uFku5KHEMLMokR
+yYQG9VqY/KkB94ye7Pv6zT8gvKqxGFg96UamECep4swPaSZrA8AOER5WAtyGDzKI
+Tz+a5zfFaTXDoba7f98PCWR96yKiFjVOhzp38WVz4VJgz+b8ZSY7Xsv5Kn7DXjOL
+STX4MevFLki3rFPup3+4vGToaMBW3PEj67HXBdqR855Le6+E6rVxORqsXqlVwhsI
+6nuS0CO2LWYmBNR1IB0mXteeYH/HfxvuZc+7yDjdPQIDAQABo4IBhDCCAYAwDgYD
+VR0PAQH/BAQDAgbAMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFEmcH6VY4BG1EAGB
+TLoNR9vH/g6yMFAGA1UdHwRJMEcwRaBDoEGGP2h0dHA6Ly9jYS5pYWlrLnR1Z3Jh
+ei5hdC9jYXBzby9jcmxzL0lBSUtUZXN0X0ludGVybWVkaWF0ZUNBLmNybDCBqgYI
+KwYBBQUHAQEEgZ0wgZowSgYIKwYBBQUHMAGGPmh0dHA6Ly9jYS5pYWlrLnR1Z3Jh
+ei5hdC9jYXBzby9PQ1NQP2NhPUlBSUtUZXN0X0ludGVybWVkaWF0ZUNBMEwGCCsG
+AQUFBzAChkBodHRwOi8vY2EuaWFpay50dWdyYXouYXQvY2Fwc28vY2VydHMvSUFJ
+S1Rlc3RfSW50ZXJtZWRpYXRlQ0EuY2VyMCEGA1UdEQQaMBiBFnRob21hcy5sZW56
+QGVnaXouZ3YuYXQwHwYDVR0jBBgwFoAUaKJeEdreL4BrRES/jfplNoEkp28wDQYJ
+KoZIhvcNAQEFBQADgYEAlFGjUxXLs7SAT8NtXSrv2WrjlklaRnHTFHLQwyVo8JWb
+gvRkHHDUv2o8ofXUY2R2WJ38dxeDoccgbXrJb/Qhi8IY7YhCwv/TuIZDisyAqo8W
+ORKSip/6HWlGCSR/Vgoet1GtCmF0FoUxFUIGSAuQ2yyt4fIzt5GJrU1X5ujjI1w=</dsig:X509Certificate></dsig:X509Data></dsig:KeyInfo></dsig:Signature><md:IDPSSODescriptor WantAuthnRequestsSigned="true" protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
+ <md:KeyDescriptor use="signing">
+ <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
+ <ds:X509Data>
+ <ds:X509Certificate>MIIDMzCCAhsCBFtIcPowDQYJKoZIhvcNAQELBQAwXjELMAkGA1UEBhMCQVQxDTALBgNVBAoMBEVH
+SVoxJDAiBgNVBAsMG2NlbnRyYWwgbmF0aW9uYWwgZUlEQVMgbm9kZTEaMBgGA1UEAwwRQXNzZXJ0
+aW9uIHNpZ25pbmcwHhcNMTgwNzEzMDkyOTMwWhcNMjEwNDA3MDkyOTMwWjBeMQswCQYDVQQGEwJB
+VDENMAsGA1UECgwERUdJWjEkMCIGA1UECwwbY2VudHJhbCBuYXRpb25hbCBlSURBUyBub2RlMRow
+GAYDVQQDDBFBc3NlcnRpb24gc2lnbmluZzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
+AJ5zDYxMPRcz6AHaev1tS46Tq8sdgbGFM56uxk6c7LmMDC+HTzNX/3Q5S/YwSzgL3ue5TSw1ltOf
+yMXMZ6D0+buWWcsxGEkQ8M3adKRFdQrEwafzwTA7pguq5WiHOkr4qwR7dLMome9z5cc3LRcwdOPP
+gq7ahb5jM3hRqc5xkMWIuvql0NFXPzlHrjDLwy5nIWPOhL5abhVt4YsXbpbjXxFSGkDEAZ32K3EU
+LNBr9FSUmJfbrVX9AU2T+BKIwiqXP8e/3UJHgPHQ0l5ljWp5P6u5+tvM21o8sUM4eArRa8BkdRsP
+C92GVuASSUz2ZJ3JhAK1cSM8bnvaZVLQtTvPMAcCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAAp7z
+TubWXW6YMpyLSvWBdZiiQ3X66XpSZLZJDIAkoPzEY0DSBp8I5YASIx4JTR5XJt+6MI9acgNIAYW8
+DhtRwUMVaRWEtuCrfKhGLWm5KSxnhPcD3lzRZhY4ZcA7dUlirjf6hnqo2TFEmJ9fkM+rxwy1GkDD
+7j2YDSOFmSq9/Ud9/IbIfSnRu/lO0dh7iRrmg3y0Y/+plPxYmp4AHqehP11OchTz2FGGHVsSC2Vs
+IVBQI6ANZYyOlicgfEEFHA06jP9OnA0EwEFr2P+di9caZg8vfibyzxMGeuf6CY0c0eLHokBCn2W8
+vkzvWiER3pozRvCmXFjCVZfRjUunaJf2ow==</ds:X509Certificate>
+ </ds:X509Data>
+ </ds:KeyInfo>
+ </md:KeyDescriptor>
+ <md:NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:persistent</md:NameIDFormat>
+ <md:NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:transient</md:NameIDFormat>
+ <md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified</md:NameIDFormat>
+ <md:SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://vidp.gv.at/ms_connector/pvp/post"/>
+ <md:SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://vidp.gv.at/ms_connector/pvp/redirect"/>
+ <saml2:Attribute xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" FriendlyName="BPK" Name="urn:oid:1.2.40.0.10.2.1.1.149" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"/>
+ <saml2:Attribute xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" FriendlyName="BIRTHDATE" Name="urn:oid:1.2.40.0.10.2.1.1.55" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"/>
+ <saml2:Attribute xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" FriendlyName="PRINCIPAL-NAME" Name="urn:oid:1.2.40.0.10.2.1.1.261.20" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"/>
+ <saml2:Attribute xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" FriendlyName="EID-CCS-URL" Name="urn:oid:1.2.40.0.10.2.1.1.261.64" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"/>
+ <saml2:Attribute xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" FriendlyName="EID-ISSUING-NATION" Name="urn:oid:1.2.40.0.10.2.1.1.261.32" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"/>
+ <saml2:Attribute xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" FriendlyName="PVP-VERSION" Name="urn:oid:1.2.40.0.10.2.1.1.261.10" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"/>
+ <saml2:Attribute xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" FriendlyName="EID-SOURCE-PIN" Name="urn:oid:1.2.40.0.10.2.1.1.261.36" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"/>
+ <saml2:Attribute xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" FriendlyName="GIVEN-NAME" Name="urn:oid:2.5.4.42" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"/>
+ <saml2:Attribute xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" FriendlyName="EID-SIGNER-CERTIFICATE" Name="urn:oid:1.2.40.0.10.2.1.1.261.66" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"/>
+ <saml2:Attribute xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" FriendlyName="EID-SECTOR-FOR-IDENTIFIER" Name="urn:oid:1.2.40.0.10.2.1.1.261.34" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"/>
+ <saml2:Attribute xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" FriendlyName="EID-SOURCE-PIN-TYPE" Name="urn:oid:1.2.40.0.10.2.1.1.261.104" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"/>
+ <saml2:Attribute xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" FriendlyName="EID-E-ID-TOKEN" Name="urn:oid:1.2.40.0.10.2.1.1.261.39" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"/>
+ <saml2:Attribute xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" FriendlyName="EID-IDENTITY-LINK" Name="urn:oid:1.2.40.0.10.2.1.1.261.38" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"/>
+ <saml2:Attribute xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" FriendlyName="EID-CITIZEN-QAA-EIDAS-LEVEL" Name="urn:oid:1.2.40.0.10.2.1.1.261.108" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"/>
+ <saml2:Attribute xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" FriendlyName="EID-IDENTITY-STATUS-LEVEL" Name="urn:oid:1.2.40.0.10.2.1.1.261.109" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"/>
+ </md:IDPSSODescriptor>
+</md:EntityDescriptor> \ No newline at end of file
diff --git a/modules/authmodule-eIDAS-v2/src/test/resources/data/pvp_postbinding_template.html b/modules/authmodule-eIDAS-v2/src/test/resources/data/pvp_postbinding_template.html
new file mode 100644
index 00000000..68a797e6
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/resources/data/pvp_postbinding_template.html
@@ -0,0 +1,3 @@
+#if($RelayState)RelayState=${RelayState}#end
+#if($SAMLRequest)SAMLRequest=${SAMLRequest}#end
+#if($SAMLResponse)SAMLResponse=${SAMLResponse}#end
diff --git a/modules/authmodule-eIDAS-v2/src/test/resources/data/sp_metadata_junit.xml b/modules/authmodule-eIDAS-v2/src/test/resources/data/sp_metadata_junit.xml
new file mode 100644
index 00000000..0e25cce4
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/resources/data/sp_metadata_junit.xml
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata" ID="_1a48ec3432f2f3ba6222724a5b06f873" entityID="https://localhost/authhandler/sp/idaustria/metadata" validUntil="2045-02-06T08:47:26.211Z">
+ <md:SPSSODescriptor AuthnRequestsSigned="true" WantAssertionsSigned="false" protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
+ <md:KeyDescriptor use="signing">
+ <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
+ <ds:X509Data>
+ <ds:X509Certificate>MIIC+DCCAeCgAwIBAgIEXh7TbTANBgkqhkiG9w0BAQsFADA+MQswCQYDVQQGEwJBVDENMAsGA1UE
+ CgwERUdJWjEOMAwGA1UECwwFalVuaXQxEDAOBgNVBAMMB3NpZ25pbmcwHhcNMjAwMTE1MDg1NTA5
+ WhcNMjkwMTE0MDg1NTA5WjA+MQswCQYDVQQGEwJBVDENMAsGA1UECgwERUdJWjEOMAwGA1UECwwF
+ alVuaXQxEDAOBgNVBAMMB3NpZ25pbmcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCU
+ SiRjnDvPafZfhJ+L1wM86FKJX3VIAV/8TD9qJ6HOBkn5WwYfpheyCfRb6XVDyIGpO8qnMWAgC17N
+ gbmhzj8d8HXNQ2l3uppMv24oUTfXyYhQfZWAghx0sTlRIx/ZmlnduJilx2S53Sa7ruJwlQcBFXj9
+ h9B8dtyegc86Sx6D9BumP1xU7+mEBk8Gv9rR5Khg0Y7qGfZWB0t4aikgaupWveVwiGifOOSfR8cz
+ qIg9qUpMYfZiTEBTSRmN6sPiNWhd4J0GyAI9Rn5C9jz/sSlQrxpN+4DXzsqSU5F6gzq3yRux6wyO
+ zDlt2birf21VPQ9HIy4YCjZXwgDWG7AO821pAgMBAAEwDQYJKoZIhvcNAQELBQADggEBADnwdaxU
+ tQU6SIpYwIb2c0ljTmQi7ryUcUpNHtK0M0E5Mw5Ex8zwrWbNQZ2sUyc4r07M66iOIqHsYZUQlRYv
+ VKHifDpAr8TCgD7iGGdB3By8Ou0RaNW+03w1fwmi98CufbHCGvpv0o2KxlejoHZminNdQ79ibN+0
+ 1nhocezJQATEQlnwHLiQSjilXpZeLYDk8HbrcUXNRxezN4ChdH+uU54vf+Uxqcj9QHcmBe1+BM8E
+ XfqS1DbTwZl+NTCnh5OYl8fvIFSOHMBxwFrI4pyY0faxg9UcrCogn/oQ+mV1gnVUDaDhvvEnVGZQ
+ trlt7heVId2BeNellVgsrcmdW8j4U9U=</ds:X509Certificate>
+ </ds:X509Data>
+ </ds:KeyInfo>
+ </md:KeyDescriptor>
+ <md:KeyDescriptor use="encryption">
+ <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
+ <ds:X509Data>
+ <ds:X509Certificate>MIIDKzCCAhMCBFrxKO4wDQYJKoZIhvcNAQELBQAwWjELMAkGA1UEBhMCQVQxDTALBgNVBAoMBEVH
+ SVoxGDAWBgNVBAsMD2RlbW8uZWdpei5ndi5hdDEiMCAGA1UEAwwZTU9BLUlEIElEUCAoVGVzdC1W
+ ZXJzaW9uKTAeFw0xODA1MDgwNDM0NTRaFw0yMTAxMzEwNDM0NTRaMFoxCzAJBgNVBAYTAkFUMQ0w
+ CwYDVQQKDARFR0laMRgwFgYDVQQLDA9kZW1vLmVnaXouZ3YuYXQxIjAgBgNVBAMMGU1PQS1JRCBJ
+ RFAgKFRlc3QtVmVyc2lvbikwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCaFnqoaYoq
+ UptenemC6FiVDg5F2hEjpjix8+ow6/6QhUl2cPOS0uwZHaIvwT/RVbJ9CPdil6+11qaCPfZ+FoY+
+ M+ke7TRd2RS1DqFbe1KC0imEnwemyLQrYe5Pm7DNcaY/kHTTq+k0eeGbYH0U/Iopyi0VuN5OWl4F
+ Vg45pf7knhXkaimItdjnCXnKcYM91mmltCf6TDgUrz7US7PmgvinnhfBgdITAT4GRr4ehliT+/jt
+ 1OzHEyWRHanBGIpXNeZNqxgnpnGtaDh4JZuYR8qfH+GRK6dtW2ziej6rGIiUElGVCkXsohgxMNzq
+ nWeD9JT8+yyp1XZlyQf+IxhhESQLAgMBAAEwDQYJKoZIhvcNAQELBQADggEBAIFejAFQepaEl/kC
+ VLvidMR+MXq5LCGHthUiI6eDTQZ+H7lZdHlj547XwEdX15b6Md3h7eSJ4hwlfV4go/0FaoLPzvVq
+ itwtYY5htywB3B6ZV34Eyi6C59Gl34XrV8CWxH4KKwLsVAjAy+/p/Xh0q2pzSBkeOChzBMBkjmyc
+ 2Ue4MEKdL9guzp6+Yc/HL/phHAKYapkVyFwvsdqWOgyRzxAHINko8ExImMMB3xB5a52kfqLcui5O
+ fzEhjwLFJaGBMmFCmFGGOUwtIvl/6ZQ2LLzOE9+giVK9WsIgH11Pu+ejPFAbXf8cf4oWhbAfTkiy
+ 4jpXrp77JXFRSDWddb0yePc=</ds:X509Certificate>
+ </ds:X509Data>
+ </ds:KeyInfo>
+ </md:KeyDescriptor>
+ <md:NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:persistent</md:NameIDFormat>
+ <md:AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://demo.egiz.gv.at/demoportal_moaid-2.0/sp/eidas/post" index="0" isDefault="true"/>
+ <md:AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://demo.egiz.gv.at/demoportal_moaid-2.0/sp/eidas/redirect" index="1"/>
+ <md:AttributeConsumingService index="0" isDefault="true">
+ <md:ServiceName xml:lang="en">Default Service</md:ServiceName>
+ <md:RequestedAttribute FriendlyName="BPK" Name="urn:oid:1.2.40.0.10.2.1.1.149" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri" isRequired="true"/>
+ <md:RequestedAttribute FriendlyName="PRINCIPAL-NAME" Name="urn:oid:1.2.40.0.10.2.1.1.261.20" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri" isRequired="true"/>
+ <md:RequestedAttribute FriendlyName="BIRTHDATE" Name="urn:oid:1.2.40.0.10.2.1.1.55" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri" isRequired="true"/>
+ <md:RequestedAttribute FriendlyName="PVP-VERSION" Name="urn:oid:1.2.40.0.10.2.1.1.261.10" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri" isRequired="true"/>
+ <md:RequestedAttribute FriendlyName="EID-ISSUING-NATION" Name="urn:oid:1.2.40.0.10.2.1.1.261.32" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri" isRequired="true"/>
+ <md:RequestedAttribute FriendlyName="MANDATOR-LEGAL-PERSON-SOURCE-PIN-TYPE" Name="urn:oid:1.2.40.0.10.2.1.1.261.76" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri" isRequired="false"/>
+ <md:RequestedAttribute FriendlyName="MANDATOR-LEGAL-PERSON-FULL-NAME" Name="urn:oid:1.2.40.0.10.2.1.1.261.84" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri" isRequired="false"/>
+ <md:RequestedAttribute FriendlyName="MANDATE-TYPE" Name="urn:oid:1.2.40.0.10.2.1.1.261.68" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri" isRequired="false"/>
+ <md:RequestedAttribute FriendlyName="MANDATOR-LEGAL-PERSON-SOURCE-PIN" Name="urn:oid:1.2.40.0.10.2.1.1.261.100" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri" isRequired="false"/>
+ <md:RequestedAttribute FriendlyName="GIVEN-NAME" Name="urn:oid:2.5.4.42" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri" isRequired="true"/>
+ <md:RequestedAttribute FriendlyName="EID-SECTOR-FOR-IDENTIFIER" Name="urn:oid:1.2.40.0.10.2.1.1.261.34" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri" isRequired="true"/>
+ <md:RequestedAttribute FriendlyName="MANDATE-TYPE-OID" Name="urn:oid:1.2.40.0.10.2.1.1.261.106" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri" isRequired="false"/>
+ <md:RequestedAttribute FriendlyName="EID-IDENTITY-LINK" Name="urn:oid:1.2.40.0.10.2.1.1.261.38" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri" isRequired="false"/>
+ <md:RequestedAttribute FriendlyName="EID-CITIZEN-QAA-EIDAS-LEVEL" Name="urn:oid:1.2.40.0.10.2.1.1.261.108" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri" isRequired="true"/>
+ </md:AttributeConsumingService>
+ </md:SPSSODescriptor>
+</md:EntityDescriptor>
diff --git a/modules/authmodule-eIDAS-v2/src/test/resources/data/zmr/empty_zmr_result.xml b/modules/authmodule-eIDAS-v2/src/test/resources/data/zmr/empty_zmr_result.xml
new file mode 100644
index 00000000..a968fabc
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/resources/data/zmr/empty_zmr_result.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+ <base:Response xmlns="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#" 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>367100000000079</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:40.985</base:GeneriertAm>
+ <base:ServerTransaktionNr>1877300000000139</base:ServerTransaktionNr>
+ </base:ServerInfo>
+ <zmr:PersonSuchenResponse>
+ <zmr:PersonensucheAnfrage>
+ <zmr:PersonensucheInfo>
+ <base:Bezugsfeld>Searching PersonIdentifier</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/>
+ </zmr:PersonensucheAnfrage>
+ <base:Message>
+ <base:Number>5020</base:Number>
+ <base:Text>Person nicht gefunden.</base:Text>
+ </base:Message>
+ <zmr:Personensuchergebnis>
+ <base:GefundeneSaetze>0</base:GefundeneSaetze>
+ <zmr:GefundeneSaetzeERnP>0</zmr:GefundeneSaetzeERnP>
+ <base:SaetzeVon>0</base:SaetzeVon>
+ <base:SaetzeBis>1</base:SaetzeBis>
+ </zmr:Personensuchergebnis>
+ </zmr:PersonSuchenResponse>
+ </base:Response>
diff --git a/modules/authmodule-eIDAS-v2/src/test/resources/data/zmr/no_bpk_zp.xml b/modules/authmodule-eIDAS-v2/src/test/resources/data/zmr/no_bpk_zp.xml
new file mode 100644
index 00000000..8104573e
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/resources/data/zmr/no_bpk_zp.xml
@@ -0,0 +1,290 @@
+<?xml version="1.0" encoding="UTF-8"?>
+ <base:Response xmlns="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#" 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>367100000000079</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:40.985</base:GeneriertAm>
+ <base:ServerTransaktionNr>1877300000000139</base:ServerTransaktionNr>
+ </base:ServerInfo>
+ <zmr:PersonSuchenResponse>
+ <zmr:PersonensucheAnfrage>
+ <zmr:PersonensucheInfo>
+ <base:Bezugsfeld>Searching PersonIdentifier</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/>
+ </zmr:PersonensucheAnfrage>
+ <base:Message>
+ <base:Number>5020</base:Number>
+ <base:Text>Person gefunden.</base:Text>
+ </base:Message>
+ <zmr:Personensuchergebnis>
+ <base:GefundeneSaetze>2</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>2021-11-12T08:24:39.695</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+GH</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:EidasIdentitaet>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>1879000000000001</base:EntityID>
+ <base:LetzteAenderung>2021-11-12T08:24:39.695</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2021-11-12T08:24:39.695</base:Von>
+ <base:BeginnCode>EIDAS_ANLEGEN</base:BeginnCode>
+ <base:BeginnFreitext>KITT for eIDAS Matching</base:BeginnFreitext>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:Behoerdenschluessel>101179</base:Behoerdenschluessel>
+ </base:Organisation>
+ <base:Benutzer>eidtapp@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <zmr:EidasArt>http://eidas.europa.eu/attributes/naturalperson/BirthName</zmr:EidasArt>
+ <zmr:Staatscode2>DE</zmr:Staatscode2>
+ <base:AusstellBehoerde/>
+ <zmr:EidasWert>XXXvon Heuburg</zmr:EidasWert>
+ <base:AusstellDatum>9999-12-31</base:AusstellDatum>
+ <base:AblaufDatum>9999-12-31</base:AblaufDatum>
+ </zmr:EidasIdentitaet>
+ <zmr:EidasIdentitaet>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>1879000000000003</base:EntityID>
+ <base:LetzteAenderung>2021-11-12T08:24:39.695</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2021-11-12T08:24:39.695</base:Von>
+ <base:BeginnCode>EIDAS_ANLEGEN</base:BeginnCode>
+ <base:BeginnFreitext>KITT for eIDAS Matching</base:BeginnFreitext>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:Behoerdenschluessel>101179</base:Behoerdenschluessel>
+ </base:Organisation>
+ <base:Benutzer>eidtapp@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <zmr:EidasArt>http://eidas.europa.eu/attributes/naturalperson/PlaceOfBirth</zmr:EidasArt>
+ <zmr:Staatscode2>DE</zmr:Staatscode2>
+ <base:AusstellBehoerde/>
+ <zmr:EidasWert>Hintergigritzpotschn</zmr:EidasWert>
+ <base:AusstellDatum>9999-12-31</base:AusstellDatum>
+ <base:AblaufDatum>9999-12-31</base:AblaufDatum>
+ </zmr:EidasIdentitaet>
+ <zmr:EidasIdentitaet>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>1879000000000005</base:EntityID>
+ <base:LetzteAenderung>2021-11-12T08:24:39.695</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2021-11-12T08:24:39.695</base:Von>
+ <base:BeginnCode>EIDAS_ANLEGEN</base:BeginnCode>
+ <base:BeginnFreitext>KITT for eIDAS Matching</base:BeginnFreitext>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:Behoerdenschluessel>101179</base:Behoerdenschluessel>
+ </base:Organisation>
+ <base:Benutzer>eidtapp@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <zmr:EidasArt>http://eidas.europa.eu/attributes/naturalperson/PersonIdentifier</zmr:EidasArt>
+ <zmr:Staatscode2>DE</zmr:Staatscode2>
+ <base:AusstellBehoerde/>
+ <zmr:EidasWert>7cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit</zmr:EidasWert>
+ <base:AusstellDatum>9999-12-31</base:AusstellDatum>
+ <base:AblaufDatum>9999-12-31</base:AblaufDatum>
+ </zmr:EidasIdentitaet>
+ <zmr:EidasIdentitaet>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>1879000000000005</base:EntityID>
+ <base:LetzteAenderung>2021-11-12T08:24:39.695</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2021-11-12T08:24:39.695</base:Von>
+ <base:BeginnCode>EIDAS_ANLEGEN</base:BeginnCode>
+ <base:BeginnFreitext>KITT for eIDAS Matching</base:BeginnFreitext>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:Behoerdenschluessel>101179</base:Behoerdenschluessel>
+ </base:Organisation>
+ <base:Benutzer>eidtapp@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <zmr:EidasArt>http://eidas.europa.eu/attributes/naturalperson/PersonIdentifier</zmr:EidasArt>
+ <zmr:Staatscode2>EE</zmr:Staatscode2>
+ <base:AusstellBehoerde/>
+ <zmr:EidasWert>aabbcc_should_not_be_included_for_DE</zmr:EidasWert>
+ <base:AusstellDatum>9999-12-31</base:AusstellDatum>
+ <base:AblaufDatum>9999-12-31</base:AblaufDatum>
+ </zmr:EidasIdentitaet>
+ <zmr:EidasIdentitaet>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>1879000000000005</base:EntityID>
+ <base:LetzteAenderung>2021-11-12T08:24:39.695</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2021-11-12T08:24:39.695</base:Von>
+ <base:BeginnCode>EIDAS_ANLEGEN</base:BeginnCode>
+ <base:BeginnFreitext>KITT for eIDAS Matching</base:BeginnFreitext>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:Behoerdenschluessel>101179</base:Behoerdenschluessel>
+ </base:Organisation>
+ <base:Benutzer>eidtapp@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <zmr:EidasArt>http://eidas.europa.eu/attributes/naturalperson/PersonIdentifier</zmr:EidasArt>
+ <zmr:Staatscode2>DE</zmr:Staatscode2>
+ <base:AusstellBehoerde/>
+ <zmr:EidasWert>7cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit_second_one</zmr:EidasWert>
+ <base:AusstellDatum>9999-12-31</base:AusstellDatum>
+ <base:AblaufDatum>9999-12-31</base:AblaufDatum>
+ </zmr:EidasIdentitaet>
+ </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>
diff --git a/modules/authmodule-eIDAS-v2/src/test/resources/data/zmr/search_with_personalId_only_resp.xml b/modules/authmodule-eIDAS-v2/src/test/resources/data/zmr/search_with_personalId_only_resp.xml
new file mode 100644
index 00000000..3d63472f
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/resources/data/zmr/search_with_personalId_only_resp.xml
@@ -0,0 +1,290 @@
+<?xml version="1.0" encoding="UTF-8"?>
+ <base:Response xmlns="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#" 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>367100000000079</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:40.985</base:GeneriertAm>
+ <base:ServerTransaktionNr>1877300000000139</base:ServerTransaktionNr>
+ </base:ServerInfo>
+ <zmr:PersonSuchenResponse>
+ <zmr:PersonensucheAnfrage>
+ <zmr:PersonensucheInfo>
+ <base:Bezugsfeld>Searching PersonIdentifier</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/>
+ </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>2021-11-12T08:24:39.695</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:EidasIdentitaet>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>1879000000000001</base:EntityID>
+ <base:LetzteAenderung>2021-11-12T08:24:39.695</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2021-11-12T08:24:39.695</base:Von>
+ <base:BeginnCode>EIDAS_ANLEGEN</base:BeginnCode>
+ <base:BeginnFreitext>KITT for eIDAS Matching</base:BeginnFreitext>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:Behoerdenschluessel>101179</base:Behoerdenschluessel>
+ </base:Organisation>
+ <base:Benutzer>eidtapp@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <zmr:EidasArt>http://eidas.europa.eu/attributes/naturalperson/BirthName</zmr:EidasArt>
+ <zmr:Staatscode2>DE</zmr:Staatscode2>
+ <base:AusstellBehoerde/>
+ <zmr:EidasWert>XXXvon Heuburg</zmr:EidasWert>
+ <base:AusstellDatum>9999-12-31</base:AusstellDatum>
+ <base:AblaufDatum>9999-12-31</base:AblaufDatum>
+ </zmr:EidasIdentitaet>
+ <zmr:EidasIdentitaet>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>1879000000000003</base:EntityID>
+ <base:LetzteAenderung>2021-11-12T08:24:39.695</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2021-11-12T08:24:39.695</base:Von>
+ <base:BeginnCode>EIDAS_ANLEGEN</base:BeginnCode>
+ <base:BeginnFreitext>KITT for eIDAS Matching</base:BeginnFreitext>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:Behoerdenschluessel>101179</base:Behoerdenschluessel>
+ </base:Organisation>
+ <base:Benutzer>eidtapp@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <zmr:EidasArt>http://eidas.europa.eu/attributes/naturalperson/PlaceOfBirth</zmr:EidasArt>
+ <zmr:Staatscode2>DE</zmr:Staatscode2>
+ <base:AusstellBehoerde/>
+ <zmr:EidasWert>Hintergigritzpotschn</zmr:EidasWert>
+ <base:AusstellDatum>9999-12-31</base:AusstellDatum>
+ <base:AblaufDatum>9999-12-31</base:AblaufDatum>
+ </zmr:EidasIdentitaet>
+ <zmr:EidasIdentitaet>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>1879000000000005</base:EntityID>
+ <base:LetzteAenderung>2021-11-12T08:24:39.695</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2021-11-12T08:24:39.695</base:Von>
+ <base:BeginnCode>EIDAS_ANLEGEN</base:BeginnCode>
+ <base:BeginnFreitext>KITT for eIDAS Matching</base:BeginnFreitext>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:Behoerdenschluessel>101179</base:Behoerdenschluessel>
+ </base:Organisation>
+ <base:Benutzer>eidtapp@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <zmr:EidasArt>http://eidas.europa.eu/attributes/naturalperson/PersonIdentifier</zmr:EidasArt>
+ <zmr:Staatscode2>DE</zmr:Staatscode2>
+ <base:AusstellBehoerde/>
+ <zmr:EidasWert>7cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit</zmr:EidasWert>
+ <base:AusstellDatum>9999-12-31</base:AusstellDatum>
+ <base:AblaufDatum>9999-12-31</base:AblaufDatum>
+ </zmr:EidasIdentitaet>
+ <zmr:EidasIdentitaet>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>1879000000000005</base:EntityID>
+ <base:LetzteAenderung>2021-11-12T08:24:39.695</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2021-11-12T08:24:39.695</base:Von>
+ <base:BeginnCode>EIDAS_ANLEGEN</base:BeginnCode>
+ <base:BeginnFreitext>KITT for eIDAS Matching</base:BeginnFreitext>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:Behoerdenschluessel>101179</base:Behoerdenschluessel>
+ </base:Organisation>
+ <base:Benutzer>eidtapp@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <zmr:EidasArt>http://eidas.europa.eu/attributes/naturalperson/PersonIdentifier</zmr:EidasArt>
+ <zmr:Staatscode2>EE</zmr:Staatscode2>
+ <base:AusstellBehoerde/>
+ <zmr:EidasWert>aabbcc_should_not_be_included_for_DE</zmr:EidasWert>
+ <base:AusstellDatum>9999-12-31</base:AusstellDatum>
+ <base:AblaufDatum>9999-12-31</base:AblaufDatum>
+ </zmr:EidasIdentitaet>
+ <zmr:EidasIdentitaet>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>1879000000000005</base:EntityID>
+ <base:LetzteAenderung>2021-11-12T08:24:39.695</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2021-11-12T08:24:39.695</base:Von>
+ <base:BeginnCode>EIDAS_ANLEGEN</base:BeginnCode>
+ <base:BeginnFreitext>KITT for eIDAS Matching</base:BeginnFreitext>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:Behoerdenschluessel>101179</base:Behoerdenschluessel>
+ </base:Organisation>
+ <base:Benutzer>eidtapp@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <zmr:EidasArt>http://eidas.europa.eu/attributes/naturalperson/PersonIdentifier</zmr:EidasArt>
+ <zmr:Staatscode2>DE</zmr:Staatscode2>
+ <base:AusstellBehoerde/>
+ <zmr:EidasWert>7cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit_second_one</zmr:EidasWert>
+ <base:AusstellDatum>9999-12-31</base:AusstellDatum>
+ <base:AblaufDatum>9999-12-31</base:AblaufDatum>
+ </zmr:EidasIdentitaet>
+ </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>
diff --git a/modules/authmodule-eIDAS-v2/src/test/resources/data/zmr/search_with_personalId_only_resp_historicIncluded.xml b/modules/authmodule-eIDAS-v2/src/test/resources/data/zmr/search_with_personalId_only_resp_historicIncluded.xml
new file mode 100644
index 00000000..b8a6fcd0
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/resources/data/zmr/search_with_personalId_only_resp_historicIncluded.xml
@@ -0,0 +1,389 @@
+<?xml version="1.0" encoding="UTF-8"?>
+ <base:Response xmlns="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#" 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>367100000000080</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:40.985</base:GeneriertAm>
+ <base:ServerTransaktionNr>1877300000000139</base:ServerTransaktionNr>
+ </base:ServerInfo>
+ <zmr:PersonSuchenResponse>
+ <zmr:PersonensucheAnfrage>
+ <zmr:PersonensucheInfo>
+ <base:Bezugsfeld>Searching PersonIdentifier</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/>
+ </zmr:PersonensucheAnfrage>
+ <base:Message>
+ <base:Number>5020</base:Number>
+ <base:Text>Person gefunden.</base:Text>
+ </base:Message>
+ <zmr:Personensuchergebnis>
+ <base:GefundeneSaetze>2</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>2021-11-12T08:24:39.695</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>9/MtsPZgBHQMBpQOD6aOY2TUqcY=</Value>
+ <Type>urn:publicid:gv.at:cdid+ZP</Type>
+ </Identification>
+ <zmr:PersonenName>
+ <Vorname>XXXŐzgür</Vorname>
+ <Familienname>XXXTüzekçi</Familienname>
+ </zmr:PersonenName>
+ <Familienstand>unbekannt</Familienstand>
+ <Geschlecht>männlich</Geschlecht>
+ <Geburtsdatum>1983-06-04</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:EidasIdentitaet>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>1879000000000001</base:EntityID>
+ <base:LetzteAenderung>2021-11-12T08:24:39.695</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2021-11-12T08:24:39.695</base:Von>
+ <base:BeginnCode>EIDAS_ANLEGEN</base:BeginnCode>
+ <base:BeginnFreitext>KITT for eIDAS Matching</base:BeginnFreitext>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:Behoerdenschluessel>101179</base:Behoerdenschluessel>
+ </base:Organisation>
+ <base:Benutzer>eidtapp@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <zmr:EidasArt>http://eidas.europa.eu/attributes/naturalperson/BirthName</zmr:EidasArt>
+ <zmr:Staatscode2>DE</zmr:Staatscode2>
+ <base:AusstellBehoerde/>
+ <zmr:EidasWert>XXXvon Heuburg</zmr:EidasWert>
+ <base:AusstellDatum>9999-12-31</base:AusstellDatum>
+ <base:AblaufDatum>9999-12-31</base:AblaufDatum>
+ </zmr:EidasIdentitaet>
+ <zmr:EidasIdentitaet>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>1879000000000003</base:EntityID>
+ <base:LetzteAenderung>2021-11-12T08:24:39.695</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2021-11-12T08:24:39.695</base:Von>
+ <base:BeginnCode>EIDAS_ANLEGEN</base:BeginnCode>
+ <base:BeginnFreitext>KITT for eIDAS Matching</base:BeginnFreitext>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:Behoerdenschluessel>101179</base:Behoerdenschluessel>
+ </base:Organisation>
+ <base:Benutzer>eidtapp@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <zmr:EidasArt>http://eidas.europa.eu/attributes/naturalperson/PlaceOfBirth</zmr:EidasArt>
+ <zmr:Staatscode2>DE</zmr:Staatscode2>
+ <base:AusstellBehoerde/>
+ <zmr:EidasWert>Hintergigritzpotschn</zmr:EidasWert>
+ <base:AusstellDatum>9999-12-31</base:AusstellDatum>
+ <base:AblaufDatum>9999-12-31</base:AblaufDatum>
+ </zmr:EidasIdentitaet>
+ <zmr:EidasIdentitaet>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>1879000000000005</base:EntityID>
+ <base:LetzteAenderung>2021-11-12T08:24:39.695</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2021-11-12T08:24:39.695</base:Von>
+ <base:BeginnCode>EIDAS_ANLEGEN</base:BeginnCode>
+ <base:BeginnFreitext>KITT for eIDAS Matching</base:BeginnFreitext>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:Behoerdenschluessel>101179</base:Behoerdenschluessel>
+ </base:Organisation>
+ <base:Benutzer>eidtapp@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <zmr:EidasArt>http://eidas.europa.eu/attributes/naturalperson/PersonIdentifier</zmr:EidasArt>
+ <zmr:Staatscode2>DE</zmr:Staatscode2>
+ <base:AusstellBehoerde/>
+ <zmr:EidasWert>7cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit</zmr:EidasWert>
+ <base:AusstellDatum>9999-12-31</base:AusstellDatum>
+ <base:AblaufDatum>9999-12-31</base:AblaufDatum>
+ </zmr:EidasIdentitaet>
+ <zmr:EidasIdentitaet>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>1879000000000005</base:EntityID>
+ <base:LetzteAenderung>2021-11-12T08:24:39.695</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2021-11-12T08:24:39.695</base:Von>
+ <base:BeginnCode>EIDAS_ANLEGEN</base:BeginnCode>
+ <base:BeginnFreitext>KITT for eIDAS Matching</base:BeginnFreitext>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:Behoerdenschluessel>101179</base:Behoerdenschluessel>
+ </base:Organisation>
+ <base:Benutzer>eidtapp@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <zmr:EidasArt>http://eidas.europa.eu/attributes/naturalperson/PersonIdentifier</zmr:EidasArt>
+ <zmr:Staatscode2>EE</zmr:Staatscode2>
+ <base:AusstellBehoerde/>
+ <zmr:EidasWert>aabbcc_should_not_be_included_for_DE</zmr:EidasWert>
+ <base:AusstellDatum>9999-12-31</base:AusstellDatum>
+ <base:AblaufDatum>9999-12-31</base:AblaufDatum>
+ </zmr:EidasIdentitaet>
+ <zmr:EidasIdentitaet>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>1879000000000005</base:EntityID>
+ <base:LetzteAenderung>2021-11-12T08:24:39.695</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2021-11-12T08:24:39.695</base:Von>
+ <base:BeginnCode>EIDAS_ANLEGEN</base:BeginnCode>
+ <base:BeginnFreitext>KITT for eIDAS Matching</base:BeginnFreitext>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:Behoerdenschluessel>101179</base:Behoerdenschluessel>
+ </base:Organisation>
+ <base:Benutzer>eidtapp@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <zmr:EidasArt>http://eidas.europa.eu/attributes/naturalperson/PersonIdentifier</zmr:EidasArt>
+ <zmr:Staatscode2>DE</zmr:Staatscode2>
+ <base:AusstellBehoerde/>
+ <zmr:EidasWert>7cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit_second_one</zmr:EidasWert>
+ <base:AusstellDatum>9999-12-31</base:AusstellDatum>
+ <base:AblaufDatum>9999-12-31</base:AblaufDatum>
+ </zmr:EidasIdentitaet>
+ </zmr:PersonErgebnis>
+
+<zmr:PersonErgebnis>
+ <base:ErgebnissatzInfo>
+ <base:LetzteAenderung>2021-10-21T13:07:39.000</base:LetzteAenderung>
+ </base:ErgebnissatzInfo>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>44454000000000811</base:EntityID>
+ <base:LetzteAenderung>2020-02-05T13:45:52.563</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2020-02-05T13:45:52.563</base:Von>
+ <base:BeginnCode>SONSTIGES</base:BeginnCode>
+ <base:BeginnText>Sonstiges</base:BeginnText>
+ <base:BeginnFreitext>Testperson</base:BeginnFreitext>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:Behoerdenschluessel>109091</base:Behoerdenschluessel>
+ </base:Organisation>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <base:ZMRZahl>000648035760</base:ZMRZahl>
+ <zmr:NatuerlichePerson>
+ <Identification>
+ <Value>UgeknNsc26lVuB7U/uYGVmWtnnA=</Value>
+ <Type>urn:publicid:gv.at:cdid+ZP</Type>
+ </Identification>
+ <zmr:PersonenName>
+ <Vorname>XXXŐzgür</Vorname>
+ <Familienname>XXXTüzekçi</Familienname>
+ </zmr:PersonenName>
+ <Familienstand>unbekannt</Familienstand>
+ <Geschlecht>weiblich</Geschlecht>
+ <Geburtsdatum>1983-06-04</Geburtsdatum>
+ <Geburtsort>Wien</Geburtsort>
+ <Geburtsbundesland>Wien</Geburtsbundesland>
+ <Geburtsstaat>Österreich</Geburtsstaat>
+ <zmr:Staatsangehoerigkeit>
+ <ISOCode3>TUR</ISOCode3>
+ <StaatsnameDE>Türkei</StaatsnameDE>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>44454000000000841</base:EntityID>
+ <base:LetzteAenderung>2020-02-05T13:45:52.563</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2020-02-05T13:45:52.563</base:Von>
+ <base:BeginnCode>STAATSANGEH_ANLEGEN</base:BeginnCode>
+ <base:BeginnText>Staatsangehörigkeit anlegen</base:BeginnText>
+ <base:BeginnFreitext>Testperson</base:BeginnFreitext>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:Behoerdenschluessel>109091</base:Behoerdenschluessel>
+ </base:Organisation>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ </zmr:Staatsangehoerigkeit>
+ </zmr:NatuerlichePerson>
+ <zmr:Reisedokument>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>44454000000000855</base:EntityID>
+ <base:LetzteAenderung>2020-02-05T13:45:52.563</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2020-02-05T13:45:52.563</base:Von>
+ <base:BeginnCode>REISEDOK_ANLEGEN</base:BeginnCode>
+ <base:BeginnText>Reisedokument anlegen</base:BeginnText>
+ <base:BeginnFreitext>Testperson</base:BeginnFreitext>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:Behoerdenschluessel>109091</base:Behoerdenschluessel>
+ </base:Organisation>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <base:DokumentArt>FREMDEROA</base:DokumentArt>
+ </zmr:Reisedokument>
+ <zmr:EidasIdentitaet>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>1867900000000716</base:EntityID>
+ <base:LetzteAenderung>2021-10-21T13:07:38.065</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2021-10-21T13:07:38.065</base:Von>
+ <base:BeginnCode>EIDAS_ANLEGEN</base:BeginnCode>
+ <base:BeginnFreitext>KITT for eIDAS Matching</base:BeginnFreitext>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:Behoerdenschluessel>101179</base:Behoerdenschluessel>
+ </base:Organisation>
+ <base:Benutzer>eidtapp@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <zmr:EidasArt>http://eidas.europa.eu/attributes/naturalperson/PersonIdentifier</zmr:EidasArt>
+ <zmr:Staatscode2>EE</zmr:Staatscode2>
+ <base:AusstellBehoerde/>
+ <zmr:EidasWert>7cEYSvKZasdfsafsaf4CDVzNT4E7cjkU4Vq_first</zmr:EidasWert>
+ <base:AusstellDatum>9999-12-31</base:AusstellDatum>
+ <base:AblaufDatum>9999-12-31</base:AblaufDatum>
+ </zmr:EidasIdentitaet>
+ </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>
diff --git a/modules/authmodule-eIDAS-v2/src/test/resources/data/zmr/search_with_personalId_only_resp_moreThanOne.xml b/modules/authmodule-eIDAS-v2/src/test/resources/data/zmr/search_with_personalId_only_resp_moreThanOne.xml
new file mode 100644
index 00000000..3259d411
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/resources/data/zmr/search_with_personalId_only_resp_moreThanOne.xml
@@ -0,0 +1,488 @@
+<?xml version="1.0" encoding="UTF-8"?>
+ <base:Response xmlns="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#" 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>367100000000079</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:40.985</base:GeneriertAm>
+ <base:ServerTransaktionNr>1877300000000139</base:ServerTransaktionNr>
+ </base:ServerInfo>
+ <zmr:PersonSuchenResponse>
+ <zmr:PersonensucheAnfrage>
+ <zmr:PersonensucheInfo>
+ <base:Bezugsfeld>Searching PersonIdentifier</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/>
+ </zmr:PersonensucheAnfrage>
+ <base:Message>
+ <base:Number>5020</base:Number>
+ <base:Text>Person gefunden.</base:Text>
+ </base:Message>
+ <zmr:Personensuchergebnis>
+ <base:GefundeneSaetze>2</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>2021-11-12T08:24:39.695</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:EidasIdentitaet>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>1879000000000001</base:EntityID>
+ <base:LetzteAenderung>2021-11-12T08:24:39.695</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2021-11-12T08:24:39.695</base:Von>
+ <base:BeginnCode>EIDAS_ANLEGEN</base:BeginnCode>
+ <base:BeginnFreitext>KITT for eIDAS Matching</base:BeginnFreitext>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:Behoerdenschluessel>101179</base:Behoerdenschluessel>
+ </base:Organisation>
+ <base:Benutzer>eidtapp@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <zmr:EidasArt>http://eidas.europa.eu/attributes/naturalperson/BirthName</zmr:EidasArt>
+ <zmr:Staatscode2>DE</zmr:Staatscode2>
+ <base:AusstellBehoerde/>
+ <zmr:EidasWert>XXXvon Heuburg</zmr:EidasWert>
+ <base:AusstellDatum>9999-12-31</base:AusstellDatum>
+ <base:AblaufDatum>9999-12-31</base:AblaufDatum>
+ </zmr:EidasIdentitaet>
+ <zmr:EidasIdentitaet>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>1879000000000003</base:EntityID>
+ <base:LetzteAenderung>2021-11-12T08:24:39.695</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2021-11-12T08:24:39.695</base:Von>
+ <base:BeginnCode>EIDAS_ANLEGEN</base:BeginnCode>
+ <base:BeginnFreitext>KITT for eIDAS Matching</base:BeginnFreitext>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:Behoerdenschluessel>101179</base:Behoerdenschluessel>
+ </base:Organisation>
+ <base:Benutzer>eidtapp@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <zmr:EidasArt>http://eidas.europa.eu/attributes/naturalperson/PlaceOfBirth</zmr:EidasArt>
+ <zmr:Staatscode2>DE</zmr:Staatscode2>
+ <base:AusstellBehoerde/>
+ <zmr:EidasWert>Hintergigritzpotschn</zmr:EidasWert>
+ <base:AusstellDatum>9999-12-31</base:AusstellDatum>
+ <base:AblaufDatum>9999-12-31</base:AblaufDatum>
+ </zmr:EidasIdentitaet>
+ <zmr:EidasIdentitaet>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>1879000000000005</base:EntityID>
+ <base:LetzteAenderung>2021-11-12T08:24:39.695</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2021-11-12T08:24:39.695</base:Von>
+ <base:BeginnCode>EIDAS_ANLEGEN</base:BeginnCode>
+ <base:BeginnFreitext>KITT for eIDAS Matching</base:BeginnFreitext>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:Behoerdenschluessel>101179</base:Behoerdenschluessel>
+ </base:Organisation>
+ <base:Benutzer>eidtapp@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <zmr:EidasArt>http://eidas.europa.eu/attributes/naturalperson/PersonIdentifier</zmr:EidasArt>
+ <zmr:Staatscode2>DE</zmr:Staatscode2>
+ <base:AusstellBehoerde/>
+ <zmr:EidasWert>7cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit</zmr:EidasWert>
+ <base:AusstellDatum>9999-12-31</base:AusstellDatum>
+ <base:AblaufDatum>9999-12-31</base:AblaufDatum>
+ </zmr:EidasIdentitaet>
+ <zmr:EidasIdentitaet>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>1879000000000005</base:EntityID>
+ <base:LetzteAenderung>2021-11-12T08:24:39.695</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2021-11-12T08:24:39.695</base:Von>
+ <base:BeginnCode>EIDAS_ANLEGEN</base:BeginnCode>
+ <base:BeginnFreitext>KITT for eIDAS Matching</base:BeginnFreitext>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:Behoerdenschluessel>101179</base:Behoerdenschluessel>
+ </base:Organisation>
+ <base:Benutzer>eidtapp@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <zmr:EidasArt>http://eidas.europa.eu/attributes/naturalperson/PersonIdentifier</zmr:EidasArt>
+ <zmr:Staatscode2>EE</zmr:Staatscode2>
+ <base:AusstellBehoerde/>
+ <zmr:EidasWert>aabbcc_should_not_be_included_for_DE</zmr:EidasWert>
+ <base:AusstellDatum>9999-12-31</base:AusstellDatum>
+ <base:AblaufDatum>9999-12-31</base:AblaufDatum>
+ </zmr:EidasIdentitaet>
+ <zmr:EidasIdentitaet>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>1879000000000005</base:EntityID>
+ <base:LetzteAenderung>2021-11-12T08:24:39.695</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2021-11-12T08:24:39.695</base:Von>
+ <base:BeginnCode>EIDAS_ANLEGEN</base:BeginnCode>
+ <base:BeginnFreitext>KITT for eIDAS Matching</base:BeginnFreitext>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:Behoerdenschluessel>101179</base:Behoerdenschluessel>
+ </base:Organisation>
+ <base:Benutzer>eidtapp@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <zmr:EidasArt>http://eidas.europa.eu/attributes/naturalperson/PersonIdentifier</zmr:EidasArt>
+ <zmr:Staatscode2>DE</zmr:Staatscode2>
+ <base:AusstellBehoerde/>
+ <zmr:EidasWert>7cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit_second_one</zmr:EidasWert>
+ <base:AusstellDatum>9999-12-31</base:AusstellDatum>
+ <base:AblaufDatum>9999-12-31</base:AblaufDatum>
+ </zmr:EidasIdentitaet>
+ </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:PersonErgebnisSatz>
+ <zmr:Personendaten>
+ <zmr:PersonErgebnis>
+ <base:ErgebnissatzInfo>
+ <base:LetzteAenderung>2021-10-21T13:07:39.000</base:LetzteAenderung>
+ </base:ErgebnissatzInfo>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>44454000000000811</base:EntityID>
+ <base:LetzteAenderung>2020-02-05T13:45:52.563</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2020-02-05T13:45:52.563</base:Von>
+ <base:BeginnCode>SONSTIGES</base:BeginnCode>
+ <base:BeginnText>Sonstiges</base:BeginnText>
+ <base:BeginnFreitext>Testperson</base:BeginnFreitext>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:Behoerdenschluessel>109091</base:Behoerdenschluessel>
+ </base:Organisation>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <base:ZMRZahl>000648035760</base:ZMRZahl>
+ <zmr:NatuerlichePerson>
+ <Identification>
+ <Value>9/MtsPZgBHQMBpQOD6aOY2TUqcY=</Value>
+ <Type>urn:publicid:gv.at:cdid+ZP</Type>
+ </Identification>
+ <zmr:PersonenName>
+ <Vorname>XXXŐzgür</Vorname>
+ <Familienname>XXXTüzekçi</Familienname>
+ </zmr:PersonenName>
+ <Familienstand>unbekannt</Familienstand>
+ <Geschlecht>weiblich</Geschlecht>
+ <Geburtsdatum>1983-06-04</Geburtsdatum>
+ <Geburtsort>Wien</Geburtsort>
+ <Geburtsbundesland>Wien</Geburtsbundesland>
+ <Geburtsstaat>Österreich</Geburtsstaat>
+ <zmr:Staatsangehoerigkeit>
+ <ISOCode3>TUR</ISOCode3>
+ <StaatsnameDE>Türkei</StaatsnameDE>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>44454000000000841</base:EntityID>
+ <base:LetzteAenderung>2020-02-05T13:45:52.563</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2020-02-05T13:45:52.563</base:Von>
+ <base:BeginnCode>STAATSANGEH_ANLEGEN</base:BeginnCode>
+ <base:BeginnText>Staatsangehörigkeit anlegen</base:BeginnText>
+ <base:BeginnFreitext>Testperson</base:BeginnFreitext>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:Behoerdenschluessel>109091</base:Behoerdenschluessel>
+ </base:Organisation>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ </zmr:Staatsangehoerigkeit>
+ </zmr:NatuerlichePerson>
+ <zmr:Reisedokument>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>44454000000000855</base:EntityID>
+ <base:LetzteAenderung>2020-02-05T13:45:52.563</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2020-02-05T13:45:52.563</base:Von>
+ <base:BeginnCode>REISEDOK_ANLEGEN</base:BeginnCode>
+ <base:BeginnText>Reisedokument anlegen</base:BeginnText>
+ <base:BeginnFreitext>Testperson</base:BeginnFreitext>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:Behoerdenschluessel>109091</base:Behoerdenschluessel>
+ </base:Organisation>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <base:DokumentArt>FREMDEROA</base:DokumentArt>
+ </zmr:Reisedokument>
+ <zmr:EidasIdentitaet>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>1867900000000716</base:EntityID>
+ <base:LetzteAenderung>2021-10-21T13:07:38.065</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2021-10-21T13:07:38.065</base:Von>
+ <base:BeginnCode>EIDAS_ANLEGEN</base:BeginnCode>
+ <base:BeginnFreitext>KITT for eIDAS Matching</base:BeginnFreitext>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:Behoerdenschluessel>101179</base:Behoerdenschluessel>
+ </base:Organisation>
+ <base:Benutzer>eidtapp@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <zmr:EidasArt>http://eidas.europa.eu/attributes/naturalperson/PersonIdentifier</zmr:EidasArt>
+ <zmr:Staatscode2>EE</zmr:Staatscode2>
+ <base:AusstellBehoerde/>
+ <zmr:EidasWert>7cEYSvKZasdfsafsaf4CDVzNT4E7cjkU4Vq_first</zmr:EidasWert>
+ <base:AusstellDatum>9999-12-31</base:AusstellDatum>
+ <base:AblaufDatum>9999-12-31</base:AblaufDatum>
+ </zmr:EidasIdentitaet>
+ <zmr:EidasIdentitaet>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>1868500000000597</base:EntityID>
+ <base:LetzteAenderung>2021-10-21T13:07:39.000</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2021-10-21T13:07:39.000</base:Von>
+ <base:BeginnCode>EIDAS_ANLEGEN</base:BeginnCode>
+ <base:BeginnFreitext>KITT for eIDAS Matching</base:BeginnFreitext>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:Behoerdenschluessel>101179</base:Behoerdenschluessel>
+ </base:Organisation>
+ <base:Benutzer>eidtapp@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <zmr:EidasArt>http://eidas.europa.eu/attributes/naturalperson/PersonIdentifier</zmr:EidasArt>
+ <zmr:Staatscode2>EE</zmr:Staatscode2>
+ <base:AusstellBehoerde/>
+ <zmr:EidasWert>7cEYSvKZasdfsafsaf4CDVzNT4E7cjkU4Vq_second</zmr:EidasWert>
+ <base:AusstellDatum>9999-12-31</base:AusstellDatum>
+ <base:AblaufDatum>9999-12-31</base:AblaufDatum>
+ </zmr:EidasIdentitaet>
+ </zmr:PersonErgebnis>
+ </zmr:Personendaten>
+ <zmr:Meldedaten>
+ <zmr:MeldungErgebnis>
+ <base:ErgebnissatzInfo>
+ <base:LetzteAenderung>2020-02-05T13:45:52.563</base:LetzteAenderung>
+ </base:ErgebnissatzInfo>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>44453900000006913</base:EntityID>
+ <base:LetzteAenderung>2020-02-05T13:45:52.563</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2020-02-05T13:45:52.563</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>
+ <Wohnsitzqualitaet>H</Wohnsitzqualitaet>
+ <Abgabestelle>false</Abgabestelle>
+ <zmr:AdressRegisterEintrag>
+ <Adresscode>T800001</Adresscode>
+ <Subcode>001</Subcode>
+ <Objektnummer>T800001</Objektnummer>
+ </zmr:AdressRegisterEintrag>
+ </zmr:Zustelladresse>
+ </zmr:PostAdresse>
+ <base:Adressstatus>HSX11XWWX</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:45:52.563</base:GemeldetVon>
+ <base:PeriodeCode>WSANM</base:PeriodeCode>
+ <base:PeriodeText>Wohnsitz anmelden</base:PeriodeText>
+ <zmr:Auskunftssperre>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>44453900000006933</base:EntityID>
+ <base:LetzteAenderung>2020-02-05T13:45:52.563</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2020-02-05T13:45:52.563</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:45:52.563</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>
diff --git a/modules/authmodule-eIDAS-v2/src/test/resources/data/zmr/search_with_personalId_only_resp_moreThanOne_2.xml b/modules/authmodule-eIDAS-v2/src/test/resources/data/zmr/search_with_personalId_only_resp_moreThanOne_2.xml
new file mode 100644
index 00000000..ba4ad172
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/resources/data/zmr/search_with_personalId_only_resp_moreThanOne_2.xml
@@ -0,0 +1,465 @@
+<?xml version="1.0" encoding="UTF-8"?>
+ <base:Response xmlns="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" xmlns:base="http://bmi.gv.at/namespace/zmr-su/base/20040201#" 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>367100000000080</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:40.985</base:GeneriertAm>
+ <base:ServerTransaktionNr>1877300000000139</base:ServerTransaktionNr>
+ </base:ServerInfo>
+ <zmr:PersonSuchenResponse>
+ <zmr:PersonensucheAnfrage>
+ <zmr:PersonensucheInfo>
+ <base:Bezugsfeld>Searching PersonIdentifier</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/>
+ </zmr:PersonensucheAnfrage>
+ <base:Message>
+ <base:Number>5020</base:Number>
+ <base:Text>Person gefunden.</base:Text>
+ </base:Message>
+ <zmr:Personensuchergebnis>
+ <base:GefundeneSaetze>2</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>2021-11-12T08:24:39.695</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>9/MtsPZgBHQMBpQOD6aOY2TUqcY=</Value>
+ <Type>urn:publicid:gv.at:cdid+ZP</Type>
+ </Identification>
+ <zmr:PersonenName>
+ <Vorname>XXXŐzgür</Vorname>
+ <Familienname>XXXTüzekçi</Familienname>
+ </zmr:PersonenName>
+ <Familienstand>unbekannt</Familienstand>
+ <Geschlecht>männlich</Geschlecht>
+ <Geburtsdatum>1983-06-04</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:EidasIdentitaet>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>1879000000000001</base:EntityID>
+ <base:LetzteAenderung>2021-11-12T08:24:39.695</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2021-11-12T08:24:39.695</base:Von>
+ <base:BeginnCode>EIDAS_ANLEGEN</base:BeginnCode>
+ <base:BeginnFreitext>KITT for eIDAS Matching</base:BeginnFreitext>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:Behoerdenschluessel>101179</base:Behoerdenschluessel>
+ </base:Organisation>
+ <base:Benutzer>eidtapp@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <zmr:EidasArt>http://eidas.europa.eu/attributes/naturalperson/BirthName</zmr:EidasArt>
+ <zmr:Staatscode2>DE</zmr:Staatscode2>
+ <base:AusstellBehoerde/>
+ <zmr:EidasWert>XXXvon Heuburg</zmr:EidasWert>
+ <base:AusstellDatum>9999-12-31</base:AusstellDatum>
+ <base:AblaufDatum>9999-12-31</base:AblaufDatum>
+ </zmr:EidasIdentitaet>
+ <zmr:EidasIdentitaet>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>1879000000000003</base:EntityID>
+ <base:LetzteAenderung>2021-11-12T08:24:39.695</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2021-11-12T08:24:39.695</base:Von>
+ <base:BeginnCode>EIDAS_ANLEGEN</base:BeginnCode>
+ <base:BeginnFreitext>KITT for eIDAS Matching</base:BeginnFreitext>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:Behoerdenschluessel>101179</base:Behoerdenschluessel>
+ </base:Organisation>
+ <base:Benutzer>eidtapp@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <zmr:EidasArt>http://eidas.europa.eu/attributes/naturalperson/PlaceOfBirth</zmr:EidasArt>
+ <zmr:Staatscode2>DE</zmr:Staatscode2>
+ <base:AusstellBehoerde/>
+ <zmr:EidasWert>Hintergigritzpotschn</zmr:EidasWert>
+ <base:AusstellDatum>9999-12-31</base:AusstellDatum>
+ <base:AblaufDatum>9999-12-31</base:AblaufDatum>
+ </zmr:EidasIdentitaet>
+ <zmr:EidasIdentitaet>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>1879000000000005</base:EntityID>
+ <base:LetzteAenderung>2021-11-12T08:24:39.695</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2021-11-12T08:24:39.695</base:Von>
+ <base:BeginnCode>EIDAS_ANLEGEN</base:BeginnCode>
+ <base:BeginnFreitext>KITT for eIDAS Matching</base:BeginnFreitext>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:Behoerdenschluessel>101179</base:Behoerdenschluessel>
+ </base:Organisation>
+ <base:Benutzer>eidtapp@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <zmr:EidasArt>http://eidas.europa.eu/attributes/naturalperson/PersonIdentifier</zmr:EidasArt>
+ <zmr:Staatscode2>DE</zmr:Staatscode2>
+ <base:AusstellBehoerde/>
+ <zmr:EidasWert>7cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit</zmr:EidasWert>
+ <base:AusstellDatum>9999-12-31</base:AusstellDatum>
+ <base:AblaufDatum>9999-12-31</base:AblaufDatum>
+ </zmr:EidasIdentitaet>
+ <zmr:EidasIdentitaet>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>1879000000000005</base:EntityID>
+ <base:LetzteAenderung>2021-11-12T08:24:39.695</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2021-11-12T08:24:39.695</base:Von>
+ <base:BeginnCode>EIDAS_ANLEGEN</base:BeginnCode>
+ <base:BeginnFreitext>KITT for eIDAS Matching</base:BeginnFreitext>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:Behoerdenschluessel>101179</base:Behoerdenschluessel>
+ </base:Organisation>
+ <base:Benutzer>eidtapp@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <zmr:EidasArt>http://eidas.europa.eu/attributes/naturalperson/PersonIdentifier</zmr:EidasArt>
+ <zmr:Staatscode2>EE</zmr:Staatscode2>
+ <base:AusstellBehoerde/>
+ <zmr:EidasWert>aabbcc_should_not_be_included_for_DE</zmr:EidasWert>
+ <base:AusstellDatum>9999-12-31</base:AusstellDatum>
+ <base:AblaufDatum>9999-12-31</base:AblaufDatum>
+ </zmr:EidasIdentitaet>
+ <zmr:EidasIdentitaet>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>1879000000000005</base:EntityID>
+ <base:LetzteAenderung>2021-11-12T08:24:39.695</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2021-11-12T08:24:39.695</base:Von>
+ <base:BeginnCode>EIDAS_ANLEGEN</base:BeginnCode>
+ <base:BeginnFreitext>KITT for eIDAS Matching</base:BeginnFreitext>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:Behoerdenschluessel>101179</base:Behoerdenschluessel>
+ </base:Organisation>
+ <base:Benutzer>eidtapp@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <zmr:EidasArt>http://eidas.europa.eu/attributes/naturalperson/PersonIdentifier</zmr:EidasArt>
+ <zmr:Staatscode2>DE</zmr:Staatscode2>
+ <base:AusstellBehoerde/>
+ <zmr:EidasWert>7cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit_second_one</zmr:EidasWert>
+ <base:AusstellDatum>9999-12-31</base:AusstellDatum>
+ <base:AblaufDatum>9999-12-31</base:AblaufDatum>
+ </zmr:EidasIdentitaet>
+ </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:PersonErgebnisSatz>
+ <zmr:Personendaten>
+ <zmr:PersonErgebnis>
+ <base:ErgebnissatzInfo>
+ <base:LetzteAenderung>2021-10-21T13:07:39.000</base:LetzteAenderung>
+ </base:ErgebnissatzInfo>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>44454000000000811</base:EntityID>
+ <base:LetzteAenderung>2020-02-05T13:45:52.563</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2020-02-05T13:45:52.563</base:Von>
+ <base:BeginnCode>SONSTIGES</base:BeginnCode>
+ <base:BeginnText>Sonstiges</base:BeginnText>
+ <base:BeginnFreitext>Testperson</base:BeginnFreitext>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:Behoerdenschluessel>109091</base:Behoerdenschluessel>
+ </base:Organisation>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <base:ZMRZahl>000648035760</base:ZMRZahl>
+ <zmr:NatuerlichePerson>
+ <Identification>
+ <Value>UgeknNsc26lVuB7U/uYGVmWtnnA=</Value>
+ <Type>urn:publicid:gv.at:cdid+ZP</Type>
+ </Identification>
+ <zmr:PersonenName>
+ <Vorname>XXXŐzgür</Vorname>
+ <Familienname>XXXTüzekçi</Familienname>
+ </zmr:PersonenName>
+ <Familienstand>unbekannt</Familienstand>
+ <Geschlecht>weiblich</Geschlecht>
+ <Geburtsdatum>1983-06-04</Geburtsdatum>
+ <Geburtsort>Wien</Geburtsort>
+ <Geburtsbundesland>Wien</Geburtsbundesland>
+ <Geburtsstaat>Österreich</Geburtsstaat>
+ <zmr:Staatsangehoerigkeit>
+ <ISOCode3>TUR</ISOCode3>
+ <StaatsnameDE>Türkei</StaatsnameDE>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>44454000000000841</base:EntityID>
+ <base:LetzteAenderung>2020-02-05T13:45:52.563</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2020-02-05T13:45:52.563</base:Von>
+ <base:BeginnCode>STAATSANGEH_ANLEGEN</base:BeginnCode>
+ <base:BeginnText>Staatsangehörigkeit anlegen</base:BeginnText>
+ <base:BeginnFreitext>Testperson</base:BeginnFreitext>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:Behoerdenschluessel>109091</base:Behoerdenschluessel>
+ </base:Organisation>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ </zmr:Staatsangehoerigkeit>
+ </zmr:NatuerlichePerson>
+ <zmr:Reisedokument>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>44454000000000855</base:EntityID>
+ <base:LetzteAenderung>2020-02-05T13:45:52.563</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2020-02-05T13:45:52.563</base:Von>
+ <base:BeginnCode>REISEDOK_ANLEGEN</base:BeginnCode>
+ <base:BeginnText>Reisedokument anlegen</base:BeginnText>
+ <base:BeginnFreitext>Testperson</base:BeginnFreitext>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:Behoerdenschluessel>109091</base:Behoerdenschluessel>
+ </base:Organisation>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <base:DokumentArt>FREMDEROA</base:DokumentArt>
+ </zmr:Reisedokument>
+ <zmr:EidasIdentitaet>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>1867900000000716</base:EntityID>
+ <base:LetzteAenderung>2021-10-21T13:07:38.065</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2021-10-21T13:07:38.065</base:Von>
+ <base:BeginnCode>EIDAS_ANLEGEN</base:BeginnCode>
+ <base:BeginnFreitext>KITT for eIDAS Matching</base:BeginnFreitext>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:Behoerdenschluessel>101179</base:Behoerdenschluessel>
+ </base:Organisation>
+ <base:Benutzer>eidtapp@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <zmr:EidasArt>http://eidas.europa.eu/attributes/naturalperson/PersonIdentifier</zmr:EidasArt>
+ <zmr:Staatscode2>EE</zmr:Staatscode2>
+ <base:AusstellBehoerde/>
+ <zmr:EidasWert>7cEYSvKZasdfsafsaf4CDVzNT4E7cjkU4Vq_first</zmr:EidasWert>
+ <base:AusstellDatum>9999-12-31</base:AusstellDatum>
+ <base:AblaufDatum>9999-12-31</base:AblaufDatum>
+ </zmr:EidasIdentitaet>
+ </zmr:PersonErgebnis>
+ </zmr:Personendaten>
+ <zmr:Meldedaten>
+ <zmr:MeldungErgebnis>
+ <base:ErgebnissatzInfo>
+ <base:LetzteAenderung>2020-02-05T13:45:52.563</base:LetzteAenderung>
+ </base:ErgebnissatzInfo>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>44453900000006913</base:EntityID>
+ <base:LetzteAenderung>2020-02-05T13:45:52.563</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2020-02-05T13:45:52.563</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>
+ <Wohnsitzqualitaet>H</Wohnsitzqualitaet>
+ <Abgabestelle>false</Abgabestelle>
+ <zmr:AdressRegisterEintrag>
+ <Adresscode>T800001</Adresscode>
+ <Subcode>001</Subcode>
+ <Objektnummer>T800001</Objektnummer>
+ </zmr:AdressRegisterEintrag>
+ </zmr:Zustelladresse>
+ </zmr:PostAdresse>
+ <base:Adressstatus>HSX11XWWX</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:45:52.563</base:GemeldetVon>
+ <base:PeriodeCode>WSANM</base:PeriodeCode>
+ <base:PeriodeText>Wohnsitz anmelden</base:PeriodeText>
+ <zmr:Auskunftssperre>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>44453900000006933</base:EntityID>
+ <base:LetzteAenderung>2020-02-05T13:45:52.563</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2020-02-05T13:45:52.563</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:45:52.563</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>
diff --git a/modules/authmodule-eIDAS-v2/src/test/resources/data/zmr/seq_1-2_search_with_mds_resp.xml b/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/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>
diff --git a/modules/authmodule-eIDAS-v2/src/test/resources/data/zmr/seq_1-4_kitt_get_latest_version_resp.xml b/modules/authmodule-eIDAS-v2/src/test/resources/data/zmr/seq_1-4_kitt_get_latest_version_resp.xml
new file mode 100644
index 00000000..a8b708dd
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/resources/data/zmr/seq_1-4_kitt_get_latest_version_resp.xml
@@ -0,0 +1,185 @@
+<?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:39.330</base:GeneriertAm>
+ <base:ServerTransaktionNr>1877300000000133</base:ServerTransaktionNr>
+ </base:ServerInfo>
+ <zmr:PersonSuchenResponse>
+ <zmr:PersonensucheAnfrage>
+ <zmr:PersonensucheInfo>
+ <base:Bezugsfeld>KITT get-latest-version</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>
+ <Identification>
+ <Value>UgeknNsc26lVuB7U/uYGVmWtnnA=</Value>
+ <Type>urn:publicid:gv.at:cdid+ZP</Type>
+ </Identification>
+ <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>
diff --git a/modules/authmodule-eIDAS-v2/src/test/resources/data/zmr/seq_1-6_kitt_update_resp.xml b/modules/authmodule-eIDAS-v2/src/test/resources/data/zmr/seq_1-6_kitt_update_resp.xml
new file mode 100644
index 00000000..0f8e8dad
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/resources/data/zmr/seq_1-6_kitt_update_resp.xml
@@ -0,0 +1,146 @@
+<?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>366200000000082</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:39.695</base:GeneriertAm>
+ <base:ServerTransaktionNr>1877200000000131</base:ServerTransaktionNr>
+ </base:ServerInfo>
+ <zmr:PersonAendernResponse>
+ <base:Message>
+ <base:Number>4</base:Number>
+ <base:Text>Personenänderung erfolgreich durchgeführt.</base:Text>
+ </base:Message>
+ <zmr:PersonErgebnis>
+ <base:ErgebnissatzInfo>
+ <base:LetzteAenderung>2021-11-12T08:24:39.695</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>2021-11-12T08:24:39.695</base:Von>
+ <base:BeginnCode>PERS_AENDERN</base:BeginnCode>
+ <base:BeginnText>Person ändern</base:BeginnText>
+ <base:BeginnFreitext>KITT for eIDAS Matching</base:BeginnFreitext>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:Behoerdenschluessel>109091</base:Behoerdenschluessel>
+ </base:Organisation>
+ <base:Benutzer>melch@bmi.gv.at</base:Benutzer>
+ </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:Benutzer>melch@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ </zmr:Staatsangehoerigkeit>
+ </zmr:NatuerlichePerson>
+ <zmr:EidasIdentitaet>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>1879000000000001</base:EntityID>
+ <base:LetzteAenderung>2021-11-12T08:24:39.695</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2021-11-12T08:24:39.695</base:Von>
+ <base:BeginnCode>EIDAS_ANLEGEN</base:BeginnCode>
+ <base:BeginnFreitext>KITT for eIDAS Matching</base:BeginnFreitext>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:Behoerdenschluessel>101179</base:Behoerdenschluessel>
+ </base:Organisation>
+ <base:Benutzer>eidtapp@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <zmr:EidasArt>http://eidas.europa.eu/attributes/naturalperson/BirthName</zmr:EidasArt>
+ <zmr:Staatscode2>DE</zmr:Staatscode2>
+ <base:AusstellBehoerde/>
+ <zmr:EidasWert>XXXvon Heuburg</zmr:EidasWert>
+ <base:AusstellDatum>9999-12-31</base:AusstellDatum>
+ <base:AblaufDatum>9999-12-31</base:AblaufDatum>
+ </zmr:EidasIdentitaet>
+ <zmr:EidasIdentitaet>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>1879000000000003</base:EntityID>
+ <base:LetzteAenderung>2021-11-12T08:24:39.695</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2021-11-12T08:24:39.695</base:Von>
+ <base:BeginnCode>EIDAS_ANLEGEN</base:BeginnCode>
+ <base:BeginnFreitext>KITT for eIDAS Matching</base:BeginnFreitext>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:Behoerdenschluessel>101179</base:Behoerdenschluessel>
+ </base:Organisation>
+ <base:Benutzer>eidtapp@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <zmr:EidasArt>http://eidas.europa.eu/attributes/naturalperson/PlaceOfBirth</zmr:EidasArt>
+ <zmr:Staatscode2>DE</zmr:Staatscode2>
+ <base:AusstellBehoerde/>
+ <zmr:EidasWert>Hintergigritzpotschn</zmr:EidasWert>
+ <base:AusstellDatum>9999-12-31</base:AusstellDatum>
+ <base:AblaufDatum>9999-12-31</base:AblaufDatum>
+ </zmr:EidasIdentitaet>
+ <zmr:EidasIdentitaet>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>1879000000000005</base:EntityID>
+ <base:LetzteAenderung>2021-11-12T08:24:39.695</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2021-11-12T08:24:39.695</base:Von>
+ <base:BeginnCode>EIDAS_ANLEGEN</base:BeginnCode>
+ <base:BeginnFreitext>KITT for eIDAS Matching</base:BeginnFreitext>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:Behoerdenschluessel>101179</base:Behoerdenschluessel>
+ </base:Organisation>
+ <base:Benutzer>eidtapp@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <zmr:EidasArt>http://eidas.europa.eu/attributes/naturalperson/PersonIdentifier</zmr:EidasArt>
+ <zmr:Staatscode2>DE</zmr:Staatscode2>
+ <base:AusstellBehoerde/>
+ <zmr:EidasWert>7cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit</zmr:EidasWert>
+ <base:AusstellDatum>9999-12-31</base:AusstellDatum>
+ <base:AblaufDatum>9999-12-31</base:AblaufDatum>
+ </zmr:EidasIdentitaet>
+ </zmr:PersonErgebnis>
+ </zmr:PersonAendernResponse>
+ </base:Response>
diff --git a/modules/authmodule-eIDAS-v2/src/test/resources/data/zmr/seq_1-8_search_with_personalId_only_resp.xml b/modules/authmodule-eIDAS-v2/src/test/resources/data/zmr/seq_1-8_search_with_personalId_only_resp.xml
new file mode 100644
index 00000000..f21c3698
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/resources/data/zmr/seq_1-8_search_with_personalId_only_resp.xml
@@ -0,0 +1,336 @@
+<?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>367100000000079</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:40.985</base:GeneriertAm>
+ <base:ServerTransaktionNr>1877300000000139</base:ServerTransaktionNr>
+ </base:ServerInfo>
+ <zmr:PersonSuchenResponse>
+ <zmr:PersonensucheAnfrage>
+ <zmr:PersonensucheInfo>
+ <base:Bezugsfeld>Searching PersonIdentifier</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/>
+ </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>2021-11-12T08:24:39.695</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:EidasIdentitaet>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>1879000000000001</base:EntityID>
+ <base:LetzteAenderung>2021-11-12T08:24:39.695</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2021-11-12T08:24:39.695</base:Von>
+ <base:BeginnCode>EIDAS_ANLEGEN</base:BeginnCode>
+ <base:BeginnFreitext>KITT for eIDAS Matching</base:BeginnFreitext>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:Behoerdenschluessel>101179</base:Behoerdenschluessel>
+ </base:Organisation>
+ <base:Benutzer>eidtapp@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <zmr:EidasArt>http://eidas.europa.eu/attributes/naturalperson/BirthName</zmr:EidasArt>
+ <zmr:Staatscode2>DE</zmr:Staatscode2>
+ <base:AusstellBehoerde/>
+ <zmr:EidasWert>XXXvon Heuburg</zmr:EidasWert>
+ <base:AusstellDatum>9999-12-31</base:AusstellDatum>
+ <base:AblaufDatum>9999-12-31</base:AblaufDatum>
+ </zmr:EidasIdentitaet>
+ <zmr:EidasIdentitaet>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>1879000000000001</base:EntityID>
+ <base:LetzteAenderung>2021-11-12T08:24:39.695</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2021-11-12T08:24:39.695</base:Von>
+ <base:BeginnCode>EIDAS_ANLEGEN</base:BeginnCode>
+ <base:BeginnFreitext>KITT for eIDAS Matching</base:BeginnFreitext>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:Behoerdenschluessel>101179</base:Behoerdenschluessel>
+ </base:Organisation>
+ <base:Benutzer>eidtapp@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <zmr:EidasArt>http://eidas.europa.eu/attributes/naturalperson/BirthName</zmr:EidasArt>
+ <zmr:Staatscode2>ES</zmr:Staatscode2>
+ <base:AusstellBehoerde/>
+ <zmr:EidasWert>XXXvon Heuburg</zmr:EidasWert>
+ <base:AusstellDatum>9999-12-31</base:AusstellDatum>
+ <base:AblaufDatum>9999-12-31</base:AblaufDatum>
+ </zmr:EidasIdentitaet>
+ <zmr:EidasIdentitaet>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>1879000000000003</base:EntityID>
+ <base:LetzteAenderung>2021-11-12T08:24:39.695</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2021-11-12T08:24:39.695</base:Von>
+ <base:BeginnCode>EIDAS_ANLEGEN</base:BeginnCode>
+ <base:BeginnFreitext>KITT for eIDAS Matching</base:BeginnFreitext>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:Behoerdenschluessel>101179</base:Behoerdenschluessel>
+ </base:Organisation>
+ <base:Benutzer>eidtapp@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <zmr:EidasArt>http://eidas.europa.eu/attributes/naturalperson/PlaceOfBirth</zmr:EidasArt>
+ <zmr:Staatscode2>DE</zmr:Staatscode2>
+ <base:AusstellBehoerde/>
+ <zmr:EidasWert>Hintergigritzpotschn</zmr:EidasWert>
+ <base:AusstellDatum>9999-12-31</base:AusstellDatum>
+ <base:AblaufDatum>9999-12-31</base:AblaufDatum>
+ </zmr:EidasIdentitaet>
+ <zmr:EidasIdentitaet>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>1879000000000005</base:EntityID>
+ <base:LetzteAenderung>2021-11-12T08:24:39.695</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2021-11-12T08:24:39.695</base:Von>
+ <base:BeginnCode>EIDAS_ANLEGEN</base:BeginnCode>
+ <base:BeginnFreitext>KITT for eIDAS Matching</base:BeginnFreitext>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:Behoerdenschluessel>101179</base:Behoerdenschluessel>
+ </base:Organisation>
+ <base:Benutzer>eidtapp@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <zmr:EidasArt>http://eidas.europa.eu/attributes/naturalperson/PersonIdentifier</zmr:EidasArt>
+ <zmr:Staatscode2>DE</zmr:Staatscode2>
+ <base:AusstellBehoerde/>
+ <zmr:EidasWert>7cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit</zmr:EidasWert>
+ <base:AusstellDatum>9999-12-31</base:AusstellDatum>
+ <base:AblaufDatum>9999-12-31</base:AblaufDatum>
+ </zmr:EidasIdentitaet>
+ <zmr:EidasIdentitaet>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>1879000000000005</base:EntityID>
+ <base:LetzteAenderung>2021-11-12T08:24:39.695</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2021-11-12T08:24:39.695</base:Von>
+ <base:BeginnCode>EIDAS_ANLEGEN</base:BeginnCode>
+ <base:BeginnFreitext>KITT for eIDAS Matching</base:BeginnFreitext>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:Behoerdenschluessel>101179</base:Behoerdenschluessel>
+ </base:Organisation>
+ <base:Benutzer>eidtapp@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <zmr:EidasArt>http://eidas.europa.eu/attributes/naturalperson/CurrentFamilyName</zmr:EidasArt>
+ <zmr:Staatscode2>DE</zmr:Staatscode2>
+ <base:AusstellBehoerde/>
+ <zmr:EidasWert>XXXvon Brandenburg</zmr:EidasWert>
+ <base:AusstellDatum>9999-12-31</base:AusstellDatum>
+ <base:AblaufDatum>9999-12-31</base:AblaufDatum>
+ </zmr:EidasIdentitaet>
+ <zmr:EidasIdentitaet>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>1879000000000005</base:EntityID>
+ <base:LetzteAenderung>2021-11-12T08:24:39.695</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2021-11-12T08:24:39.695</base:Von>
+ <base:BeginnCode>EIDAS_ANLEGEN</base:BeginnCode>
+ <base:BeginnFreitext>KITT for eIDAS Matching</base:BeginnFreitext>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:Behoerdenschluessel>101179</base:Behoerdenschluessel>
+ </base:Organisation>
+ <base:Benutzer>eidtapp@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <zmr:EidasArt>http://eidas.europa.eu/attributes/naturalperson/CurrentGivenName</zmr:EidasArt>
+ <zmr:Staatscode2>DE</zmr:Staatscode2>
+ <base:AusstellBehoerde/>
+ <zmr:EidasWert>XXXClaus - Maria</zmr:EidasWert>
+ <base:AusstellDatum>9999-12-31</base:AusstellDatum>
+ <base:AblaufDatum>9999-12-31</base:AblaufDatum>
+ </zmr:EidasIdentitaet>
+ <zmr:EidasIdentitaet>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>1879000000000005</base:EntityID>
+ <base:LetzteAenderung>2021-11-12T08:24:39.695</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2021-11-12T08:24:39.695</base:Von>
+ <base:BeginnCode>EIDAS_ANLEGEN</base:BeginnCode>
+ <base:BeginnFreitext>KITT for eIDAS Matching</base:BeginnFreitext>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:Behoerdenschluessel>101179</base:Behoerdenschluessel>
+ </base:Organisation>
+ <base:Benutzer>eidtapp@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <zmr:EidasArt>http://eidas.europa.eu/attributes/naturalperson/DateOfBirth</zmr:EidasArt>
+ <zmr:Staatscode2>DE</zmr:Staatscode2>
+ <base:AusstellBehoerde/>
+ <zmr:EidasWert>1994-12-31</zmr:EidasWert>
+ <base:AusstellDatum>9999-12-31</base:AusstellDatum>
+ <base:AblaufDatum>9999-12-31</base:AblaufDatum>
+ </zmr:EidasIdentitaet>
+ </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>
diff --git a/modules/authmodule-eIDAS-v2/src/test/resources/data/zmr/seq_1-8_search_with_personalId_only_resp_no_additional_attributes.xml b/modules/authmodule-eIDAS-v2/src/test/resources/data/zmr/seq_1-8_search_with_personalId_only_resp_no_additional_attributes.xml
new file mode 100644
index 00000000..6551cdd3
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/resources/data/zmr/seq_1-8_search_with_personalId_only_resp_no_additional_attributes.xml
@@ -0,0 +1,221 @@
+<?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>367100000000079</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:40.985</base:GeneriertAm>
+ <base:ServerTransaktionNr>1877300000000139</base:ServerTransaktionNr>
+ </base:ServerInfo>
+ <zmr:PersonSuchenResponse>
+ <zmr:PersonensucheAnfrage>
+ <zmr:PersonensucheInfo>
+ <base:Bezugsfeld>Searching PersonIdentifier</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/>
+ </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>2021-11-12T08:24:39.695</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:EidasIdentitaet>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>1879000000000001</base:EntityID>
+ <base:LetzteAenderung>2021-11-12T08:24:39.695</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2021-11-12T08:24:39.695</base:Von>
+ <base:BeginnCode>EIDAS_ANLEGEN</base:BeginnCode>
+ <base:BeginnFreitext>KITT for eIDAS Matching</base:BeginnFreitext>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:Behoerdenschluessel>101179</base:Behoerdenschluessel>
+ </base:Organisation>
+ <base:Benutzer>eidtapp@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <zmr:EidasArt>http://eidas.europa.eu/attributes/naturalperson/BirthName</zmr:EidasArt>
+ <zmr:Staatscode2>DE</zmr:Staatscode2>
+ <base:AusstellBehoerde/>
+ <zmr:EidasWert>XXXvon Heuburg</zmr:EidasWert>
+ <base:AusstellDatum>9999-12-31</base:AusstellDatum>
+ <base:AblaufDatum>9999-12-31</base:AblaufDatum>
+ </zmr:EidasIdentitaet>
+ <zmr:EidasIdentitaet>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>1879000000000005</base:EntityID>
+ <base:LetzteAenderung>2021-11-12T08:24:39.695</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2021-11-12T08:24:39.695</base:Von>
+ <base:BeginnCode>EIDAS_ANLEGEN</base:BeginnCode>
+ <base:BeginnFreitext>KITT for eIDAS Matching</base:BeginnFreitext>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:Behoerdenschluessel>101179</base:Behoerdenschluessel>
+ </base:Organisation>
+ <base:Benutzer>eidtapp@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <zmr:EidasArt>http://eidas.europa.eu/attributes/naturalperson/PersonIdentifier</zmr:EidasArt>
+ <zmr:Staatscode2>DE</zmr:Staatscode2>
+ <base:AusstellBehoerde/>
+ <zmr:EidasWert>7cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit</zmr:EidasWert>
+ <base:AusstellDatum>9999-12-31</base:AusstellDatum>
+ <base:AblaufDatum>9999-12-31</base:AblaufDatum>
+ </zmr:EidasIdentitaet>
+ </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>
diff --git a/modules/authmodule-eIDAS-v2/src/test/resources/data/zmr/seq_3-10_kitt_update_resp.xml b/modules/authmodule-eIDAS-v2/src/test/resources/data/zmr/seq_3-10_kitt_update_resp.xml
new file mode 100644
index 00000000..2be8a419
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/resources/data/zmr/seq_3-10_kitt_update_resp.xml
@@ -0,0 +1,123 @@
+<?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>366200000000082</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:39.695</base:GeneriertAm>
+ <base:ServerTransaktionNr>1877200000000131</base:ServerTransaktionNr>
+ </base:ServerInfo>
+ <zmr:PersonAendernResponse>
+ <base:Message>
+ <base:Number>4</base:Number>
+ <base:Text>Personenänderung erfolgreich durchgeführt.</base:Text>
+ </base:Message>
+ <zmr:PersonErgebnis>
+ <base:ErgebnissatzInfo>
+ <base:LetzteAenderung>2021-11-12T08:24:39.695</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>2021-11-12T08:24:39.695</base:Von>
+ <base:BeginnCode>PERS_AENDERN</base:BeginnCode>
+ <base:BeginnText>Person ändern</base:BeginnText>
+ <base:BeginnFreitext>KITT for eIDAS Matching</base:BeginnFreitext>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:Behoerdenschluessel>109091</base:Behoerdenschluessel>
+ </base:Organisation>
+ <base:Benutzer>melch@bmi.gv.at</base:Benutzer>
+ </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:Benutzer>melch@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ </zmr:Staatsangehoerigkeit>
+ </zmr:NatuerlichePerson>
+ <zmr:EidasIdentitaet>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>1879000000000005</base:EntityID>
+ <base:LetzteAenderung>2021-11-12T08:24:39.695</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2021-11-12T08:24:39.695</base:Von>
+ <base:BeginnCode>EIDAS_ANLEGEN</base:BeginnCode>
+ <base:BeginnFreitext>KITT for eIDAS Matching</base:BeginnFreitext>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:Behoerdenschluessel>101179</base:Behoerdenschluessel>
+ </base:Organisation>
+ <base:Benutzer>eidtapp@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <zmr:EidasArt>http://eidas.europa.eu/attributes/naturalperson/PersonIdentifier</zmr:EidasArt>
+ <zmr:Staatscode2>DE</zmr:Staatscode2>
+ <base:AusstellBehoerde/>
+ <zmr:EidasWert>7cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit</zmr:EidasWert>
+ <base:AusstellDatum>9999-12-31</base:AusstellDatum>
+ <base:AblaufDatum>9999-12-31</base:AblaufDatum>
+ </zmr:EidasIdentitaet>
+ <zmr:EidasIdentitaet>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>1879000000000005</base:EntityID>
+ <base:LetzteAenderung>2021-11-12T08:24:39.695</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2021-11-12T08:24:39.695</base:Von>
+ <base:BeginnCode>EIDAS_ANLEGEN</base:BeginnCode>
+ <base:BeginnFreitext>KITT for eIDAS Matching</base:BeginnFreitext>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:Behoerdenschluessel>101179</base:Behoerdenschluessel>
+ </base:Organisation>
+ <base:Benutzer>eidtapp@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <zmr:EidasArt>http://eidas.europa.eu/attributes/naturalperson/PersonIdentifier</zmr:EidasArt>
+ <zmr:Staatscode2>DE</zmr:Staatscode2>
+ <base:AusstellBehoerde/>
+ <zmr:EidasWert>7cEYasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit</zmr:EidasWert>
+ <base:AusstellDatum>9999-12-31</base:AusstellDatum>
+ <base:AblaufDatum>9999-12-31</base:AblaufDatum>
+ </zmr:EidasIdentitaet>
+ </zmr:PersonErgebnis>
+ </zmr:PersonAendernResponse>
+ </base:Response>
diff --git a/modules/authmodule-eIDAS-v2/src/test/resources/data/zmr/seq_3-4_kitt_get_latest_version_resp.xml b/modules/authmodule-eIDAS-v2/src/test/resources/data/zmr/seq_3-4_kitt_get_latest_version_resp.xml
new file mode 100644
index 00000000..01dac890
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/resources/data/zmr/seq_3-4_kitt_get_latest_version_resp.xml
@@ -0,0 +1,208 @@
+<?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:39.330</base:GeneriertAm>
+ <base:ServerTransaktionNr>1877300000000133</base:ServerTransaktionNr>
+ </base:ServerInfo>
+ <zmr:PersonSuchenResponse>
+ <zmr:PersonensucheAnfrage>
+ <zmr:PersonensucheInfo>
+ <base:Bezugsfeld>KITT get-latest-version</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>
+ <Identification>
+ <Value>UgeknNsc26lVuB7U/uYGVmWtnnA=</Value>
+ <Type>urn:publicid:gv.at:cdid+ZP</Type>
+ </Identification>
+ <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>7cEYasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit
+ <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:EidasIdentitaet>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>1879000000000005</base:EntityID>
+ <base:LetzteAenderung>2021-11-12T08:24:39.695</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2021-11-12T08:24:39.695</base:Von>
+ <base:BeginnCode>EIDAS_ANLEGEN</base:BeginnCode>
+ <base:BeginnFreitext>KITT for eIDAS Matching</base:BeginnFreitext>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:Behoerdenschluessel>101179</base:Behoerdenschluessel>
+ </base:Organisation>
+ <base:Benutzer>eidtapp@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <zmr:EidasArt>http://eidas.europa.eu/attributes/naturalperson/PersonIdentifier</zmr:EidasArt>
+ <zmr:Staatscode2>DE</zmr:Staatscode2>
+ <base:AusstellBehoerde/>
+ <zmr:EidasWert>7cEYasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit</zmr:EidasWert>
+ <base:AusstellDatum>9999-12-31</base:AusstellDatum>
+ <base:AblaufDatum>9999-12-31</base:AblaufDatum>
+ </zmr:EidasIdentitaet>
+ </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>
diff --git a/modules/authmodule-eIDAS-v2/src/test/resources/data/zmr/seq_3-6_kitt_update_resp.xml b/modules/authmodule-eIDAS-v2/src/test/resources/data/zmr/seq_3-6_kitt_update_resp.xml
new file mode 100644
index 00000000..2be8a419
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/resources/data/zmr/seq_3-6_kitt_update_resp.xml
@@ -0,0 +1,123 @@
+<?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>366200000000082</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:39.695</base:GeneriertAm>
+ <base:ServerTransaktionNr>1877200000000131</base:ServerTransaktionNr>
+ </base:ServerInfo>
+ <zmr:PersonAendernResponse>
+ <base:Message>
+ <base:Number>4</base:Number>
+ <base:Text>Personenänderung erfolgreich durchgeführt.</base:Text>
+ </base:Message>
+ <zmr:PersonErgebnis>
+ <base:ErgebnissatzInfo>
+ <base:LetzteAenderung>2021-11-12T08:24:39.695</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>2021-11-12T08:24:39.695</base:Von>
+ <base:BeginnCode>PERS_AENDERN</base:BeginnCode>
+ <base:BeginnText>Person ändern</base:BeginnText>
+ <base:BeginnFreitext>KITT for eIDAS Matching</base:BeginnFreitext>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:Behoerdenschluessel>109091</base:Behoerdenschluessel>
+ </base:Organisation>
+ <base:Benutzer>melch@bmi.gv.at</base:Benutzer>
+ </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:Benutzer>melch@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ </zmr:Staatsangehoerigkeit>
+ </zmr:NatuerlichePerson>
+ <zmr:EidasIdentitaet>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>1879000000000005</base:EntityID>
+ <base:LetzteAenderung>2021-11-12T08:24:39.695</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2021-11-12T08:24:39.695</base:Von>
+ <base:BeginnCode>EIDAS_ANLEGEN</base:BeginnCode>
+ <base:BeginnFreitext>KITT for eIDAS Matching</base:BeginnFreitext>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:Behoerdenschluessel>101179</base:Behoerdenschluessel>
+ </base:Organisation>
+ <base:Benutzer>eidtapp@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <zmr:EidasArt>http://eidas.europa.eu/attributes/naturalperson/PersonIdentifier</zmr:EidasArt>
+ <zmr:Staatscode2>DE</zmr:Staatscode2>
+ <base:AusstellBehoerde/>
+ <zmr:EidasWert>7cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit</zmr:EidasWert>
+ <base:AusstellDatum>9999-12-31</base:AusstellDatum>
+ <base:AblaufDatum>9999-12-31</base:AblaufDatum>
+ </zmr:EidasIdentitaet>
+ <zmr:EidasIdentitaet>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>1879000000000005</base:EntityID>
+ <base:LetzteAenderung>2021-11-12T08:24:39.695</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2021-11-12T08:24:39.695</base:Von>
+ <base:BeginnCode>EIDAS_ANLEGEN</base:BeginnCode>
+ <base:BeginnFreitext>KITT for eIDAS Matching</base:BeginnFreitext>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:Behoerdenschluessel>101179</base:Behoerdenschluessel>
+ </base:Organisation>
+ <base:Benutzer>eidtapp@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <zmr:EidasArt>http://eidas.europa.eu/attributes/naturalperson/PersonIdentifier</zmr:EidasArt>
+ <zmr:Staatscode2>DE</zmr:Staatscode2>
+ <base:AusstellBehoerde/>
+ <zmr:EidasWert>7cEYasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit</zmr:EidasWert>
+ <base:AusstellDatum>9999-12-31</base:AusstellDatum>
+ <base:AblaufDatum>9999-12-31</base:AblaufDatum>
+ </zmr:EidasIdentitaet>
+ </zmr:PersonErgebnis>
+ </zmr:PersonAendernResponse>
+ </base:Response>
diff --git a/modules/authmodule-eIDAS-v2/src/test/resources/data/zmr/seq_3-8_kitt_get_latest_version_resp.xml b/modules/authmodule-eIDAS-v2/src/test/resources/data/zmr/seq_3-8_kitt_get_latest_version_resp.xml
new file mode 100644
index 00000000..656164f2
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/resources/data/zmr/seq_3-8_kitt_get_latest_version_resp.xml
@@ -0,0 +1,300 @@
+<?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:39.330</base:GeneriertAm>
+ <base:ServerTransaktionNr>1877300000000133</base:ServerTransaktionNr>
+ </base:ServerInfo>
+ <zmr:PersonSuchenResponse>
+ <zmr:PersonensucheAnfrage>
+ <zmr:PersonensucheInfo>
+ <base:Bezugsfeld>KITT get-latest-version</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>
+ <Identification>
+ <Value>UgeknNsc26lVuB7U/uYGVmWtnnA=</Value>
+ <Type>urn:publicid:gv.at:cdid+ZP</Type>
+ </Identification>
+ <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>7cEYasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit
+ <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:EidasIdentitaet>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>1879000000000005</base:EntityID>
+ <base:LetzteAenderung>2021-11-12T08:24:39.695</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2021-11-12T08:24:39.695</base:Von>
+ <base:BeginnCode>EIDAS_ANLEGEN</base:BeginnCode>
+ <base:BeginnFreitext>KITT for eIDAS Matching</base:BeginnFreitext>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:Behoerdenschluessel>101179</base:Behoerdenschluessel>
+ </base:Organisation>
+ <base:Benutzer>eidtapp@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <zmr:EidasArt>http://eidas.europa.eu/attributes/naturalperson/PersonIdentifier</zmr:EidasArt>
+ <zmr:Staatscode2>DE</zmr:Staatscode2>
+ <base:AusstellBehoerde/>
+ <zmr:EidasWert>7cEYWithDEElementsasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit</zmr:EidasWert>
+ <base:AusstellDatum>9999-12-31</base:AusstellDatum>
+ <base:AblaufDatum>9999-12-31</base:AblaufDatum>
+ </zmr:EidasIdentitaet>
+ <zmr:EidasIdentitaet>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>1879000000000005</base:EntityID>
+ <base:LetzteAenderung>2021-11-12T08:24:39.695</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2021-11-12T08:24:39.695</base:Von>
+ <base:BeginnCode>EIDAS_ANLEGEN</base:BeginnCode>
+ <base:BeginnFreitext>KITT for eIDAS Matching</base:BeginnFreitext>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:Behoerdenschluessel>101179</base:Behoerdenschluessel>
+ </base:Organisation>
+ <base:Benutzer>eidtapp@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <zmr:EidasArt>http://eidas.europa.eu/attributes/naturalperson/PersonIdentifier</zmr:EidasArt>
+ <zmr:Staatscode2>DE</zmr:Staatscode2>
+ <base:AusstellBehoerde/>
+ <zmr:EidasWert>7cEYasdfsafsaf4CDVzNT4E7cjkU4VqForjUnit</zmr:EidasWert>
+ <base:AusstellDatum>9999-12-31</base:AusstellDatum>
+ <base:AblaufDatum>9999-12-31</base:AblaufDatum>
+ </zmr:EidasIdentitaet>
+ <zmr:EidasIdentitaet>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>1879000000000005</base:EntityID>
+ <base:LetzteAenderung>2021-11-12T08:24:39.695</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2021-11-12T08:24:39.695</base:Von>
+ <base:BeginnCode>EIDAS_ANLEGEN</base:BeginnCode>
+ <base:BeginnFreitext>KITT for eIDAS Matching</base:BeginnFreitext>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:Behoerdenschluessel>101179</base:Behoerdenschluessel>
+ </base:Organisation>
+ <base:Benutzer>eidtapp@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <zmr:EidasArt>http://eidas.europa.eu/attributes/naturalperson/CurrentFamilyName</zmr:EidasArt>
+ <zmr:Staatscode2>DE</zmr:Staatscode2>
+ <base:AusstellBehoerde/>
+ <zmr:EidasWert>XXXvon Brandenburg</zmr:EidasWert>
+ <base:AusstellDatum>9999-12-31</base:AusstellDatum>
+ <base:AblaufDatum>9999-12-31</base:AblaufDatum>
+ </zmr:EidasIdentitaet>
+ <zmr:EidasIdentitaet>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>1879000000000005</base:EntityID>
+ <base:LetzteAenderung>2021-11-12T08:24:39.695</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2021-11-12T08:24:39.695</base:Von>
+ <base:BeginnCode>EIDAS_ANLEGEN</base:BeginnCode>
+ <base:BeginnFreitext>KITT for eIDAS Matching</base:BeginnFreitext>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:Behoerdenschluessel>101179</base:Behoerdenschluessel>
+ </base:Organisation>
+ <base:Benutzer>eidtapp@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <zmr:EidasArt>http://eidas.europa.eu/attributes/naturalperson/CurrentGivenName</zmr:EidasArt>
+ <zmr:Staatscode2>DE</zmr:Staatscode2>
+ <base:AusstellBehoerde/>
+ <zmr:EidasWert>XXXClaus - Maria</zmr:EidasWert>
+ <base:AusstellDatum>9999-12-31</base:AusstellDatum>
+ <base:AblaufDatum>9999-12-31</base:AblaufDatum>
+ </zmr:EidasIdentitaet>
+ <zmr:EidasIdentitaet>
+ <base:EntityErgebnisReferenz>
+ <base:Technisch>
+ <base:EntityID>1879000000000005</base:EntityID>
+ <base:LetzteAenderung>2021-11-12T08:24:39.695</base:LetzteAenderung>
+ </base:Technisch>
+ <base:Von>2021-11-12T08:24:39.695</base:Von>
+ <base:BeginnCode>EIDAS_ANLEGEN</base:BeginnCode>
+ <base:BeginnFreitext>KITT for eIDAS Matching</base:BeginnFreitext>
+ <base:DurchgefuehrtVon>
+ <base:Organisation>
+ <base:Behoerdenschluessel>101179</base:Behoerdenschluessel>
+ </base:Organisation>
+ <base:Benutzer>eidtapp@bmi.gv.at</base:Benutzer>
+ </base:DurchgefuehrtVon>
+ </base:EntityErgebnisReferenz>
+ <zmr:EidasArt>http://eidas.europa.eu/attributes/naturalperson/DateOfBirth</zmr:EidasArt>
+ <zmr:Staatscode2>DE</zmr:Staatscode2>
+ <base:AusstellBehoerde/>
+ <zmr:EidasWert>1994-12-31</zmr:EidasWert>
+ <base:AusstellDatum>9999-12-31</base:AusstellDatum>
+ <base:AblaufDatum>9999-12-31</base:AblaufDatum>
+ </zmr:EidasIdentitaet>
+ </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>
diff --git a/modules/authmodule-eIDAS-v2/src/test/resources/keystore/junit_test.jks b/modules/authmodule-eIDAS-v2/src/test/resources/keystore/junit_test.jks
new file mode 100644
index 00000000..ee6254a9
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/resources/keystore/junit_test.jks
Binary files differ
diff --git a/modules/authmodule-eIDAS-v2/src/test/resources/keystore/pvp.p12 b/modules/authmodule-eIDAS-v2/src/test/resources/keystore/pvp.p12
new file mode 100644
index 00000000..183342f7
--- /dev/null
+++ b/modules/authmodule-eIDAS-v2/src/test/resources/keystore/pvp.p12
Binary files differ