diff options
Diffstat (limited to 'modules/authmodule-eIDAS-v2/src')
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ÄÖÜäöüß^°!"§$&/(){}\[\]=?\\´`*+~#',;.:\-_@ ]*"/>
+ </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&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&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 Binary files differnew file mode 100644 index 00000000..ee6254a9 --- /dev/null +++ b/modules/authmodule-eIDAS-v2/src/test/resources/config/keys/junit_test.jks 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 Binary files differnew file mode 100644 index 00000000..fcc6400c --- /dev/null +++ b/modules/authmodule-eIDAS-v2/src/test/resources/config/keys/teststore.jks 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 Binary files differnew file mode 100644 index 00000000..ee6254a9 --- /dev/null +++ b/modules/authmodule-eIDAS-v2/src/test/resources/keystore/junit_test.jks diff --git a/modules/authmodule-eIDAS-v2/src/test/resources/keystore/pvp.p12 b/modules/authmodule-eIDAS-v2/src/test/resources/keystore/pvp.p12 Binary files differnew file mode 100644 index 00000000..183342f7 --- /dev/null +++ b/modules/authmodule-eIDAS-v2/src/test/resources/keystore/pvp.p12 |