Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
languagexml
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions name="SORLS" targetNamespace="http://sundhedsdatastyrelsen.dk/SORLookupService/2018/09/06/" 
                  xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
                  xmlns:tns="http://sundhedsdatastyrelsen.dk/SORLookupService/2018/09/06/"
                  xmlns:sorls_2024_11_15="http://sundhedsdatastyrelsen.dk/SORLookupService/2024/11/15/"
                  xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
                  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                  xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
                  xmlns:medcom="http://www.medcom.dk/dgws/2006/04/dgws-1.0.xsd">

    <wsdl:types>

        <!-- Headers -->
        <xsd:schema targetNamespace="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
            <xsd:include schemaLocation="schema/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"/>
        </xsd:schema>
        <xsd:schema targetNamespace="http://www.medcom.dk/dgws/2006/04/dgws-1.0.xsd">
            <xsd:include schemaLocation="schema/2006_01/medcom.xsd"/>
        </xsd:schema>

        <xsd:schema targetNamespace="http://sundhedsdatastyrelsen.dk/SORLookupService/2018/09/06/">
            <xsd:include schemaLocation="schema/2018/09/06/sorls.xsd"/>
        </xsd:schema>

    </wsdl:types>

    <xsd:schema targetNamespace="http://sundhedsdatastyrelsen.dk/SORLookupService/2024/11/15/">
            <xsd:include schemaLocation="schema/2024/11/15/sorEntityProvider.xsd"/>
        </xsd:schema>
    </wsdl:types>

    <!-- Headers -->
    <wsdl:message name="SecurityHeader">
        <wsdl:part name="SecurityHeader" element="wsse:Security"/>
    </wsdl:message>
    <wsdl:message name="MedComHeader">
        <wsdl:part name="MedcomHeader" element="medcom:Header"/>
    </wsdl:message>

    <!-- GetSorEntity Requests/Responses -->
    <wsdl:message name="GetSorEntityRequest_2018_09_06">
        <wsdl:part element="tns:GetSorEntityRequest" name="GetSorEntityRequest"/>
    </wsdl:message>
    <wsdl:message name="GetSorEntityResponse_2018_09_06">
        <wsdl:part element="tns:GetSorEntityResponse" name="GetSorEntityResponse"/>
    </wsdl:message>

    <!-- Search Requests/Responses -->
    <wsdl:message name="SearchRequestGetSorEntityByProviderRequest_20182024_0911_0615">
        <wsdl:part element="tns:SearchRequestsorls_2024_11_15:GetSorEntityByProviderRequest" name="SearchRequestGetSorEntityByProviderRequest"/>
    </wsdl:message>
    <wsdl:message name="SearchResponseGetSorEntityByProviderResponse_20182024_0911_0615">
        <wsdl:part element="tns:SearchResponsesorls_2024_11_15:GetSorEntityByProviderResponse" name="SearchResponseGetSorEntityByProviderResponse"/>
    </wsdl:message>

    <!-- ShakSorMap Requests/Responses -->
    <wsdl:message name="ShakSorMapRequest_2018_09_06">
        <wsdl:part element="tns:ShakSorMapRequest" name="ShakSorMapRequest"/>
    </wsdl:message>
    <wsdl:message name="ShakSorMapResponse_2018_09_06">
        <wsdl:part element="tns:ShakSorMapResponse" name="ShakSorMapResponse"/>
    </wsdl:message>

    <!-- SorShakMap Requests/Responses -->
    <wsdl:message name="SorShakMapRequest_2018_09_06">
        <wsdl:part element="tns:SorShakMapRequest" name="SorShakMapRequest"/>
    </wsdl:message>
    <wsdl:message name="SorShakMapResponse_2018_09_06">
        <wsdl:part element="tns:SorShakMapResponse" name="SorShakMapResponse"/>
    </wsdl:message>

    <!-- Port Types -->
    <wsdl:portType name="SORLookupServicePortType">
        <wsdl:operation name="GetSorEntity_2018_09_06">
            <wsdl:input message="tns:GetSorEntityRequest_2018_09_06" name="GetSorEntityRequest_2018_09_06"/>
            <wsdl:output message="tns:GetSorEntityResponse_2018_09_06" name="GetSorEntityResponse_2018_09_06"/>
        </wsdl:operation>

        <wsdl:operation name="SearchGetSorEntityByProvider_20182024_0911_0615">
            <wsdl:input message="tns:SearchRequestGetSorEntityByProviderRequest_20182024_0911_0615" name="SearchRequestGetSorEntityByProviderRequest_20182024_0911_0615"/>
            <wsdl:output message="tns:SearchResponseGetSorEntityByProviderResponse_20182024_0911_0615" name="SearchResponseGetSorEntityByProviderResponse_20182024_0911_0615"/>
        </wsdl:operation>

        <wsdl:operation name="ShakSorMap_2018_09_06">
            <wsdl:input message="tns:ShakSorMapRequest_2018_09_06" name="ShakSorMapRequest_2018_09_06"/>
            <wsdl:output message="tns:ShakSorMapResponse_2018_09_06" name="ShakSorMapResponse_2018_09_06"/>
        </wsdl:operation>

        <wsdl:operation name="SorShakMap_2018_09_06">
            <wsdl:input message="tns:SorShakMapRequest_2018_09_06" name="SorShakMapRequest_2018_09_06"/>
            <wsdl:output message="tns:SorShakMapResponse_2018_09_06" name="SorShakMapResponse_2018_09_06"/>
        </wsdl:operation>
    </wsdl:portType>

    <!-- Bindings -->
    <wsdl:binding name="SORLookupServiceBinding" type="tns:SORLookupServicePortType">
        <soap:binding transport="http://schemas.xmlsoap.org/soap/http"/>

        <wsdl:operation name="GetSorEntity_2018_09_06">
            <soap:operation soapAction="http://sundhedsdatastyrelsen.dk/SORLookupService/2018/09/06#GetSorEntity" style="document"/>

            <wsdl:input name="GetSorEntityRequest_2018_09_06">
                <soap:header message="tns:SecurityHeader" part="SecurityHeader" use="literal"/>
                <soap:header message="tns:MedComHeader" part="MedcomHeader" use="literal"/>
                <soap:body use="literal"/>
            </wsdl:input>

            <wsdl:output name="GetSorEntityResponse_2018_09_06">
                <soap:body use="literal"/>
            </wsdl:output>
        </wsdl:operation>

        <wsdl:operation name="SearchGetSorEntityByProvider_20182024_0911_0615">
            <soap:operation soapAction="http://sundhedsdatastyrelsen.dk/SORLookupService/20182024/0911/06#Search15#GetSorEntityByProvider" style="document"/>

            <wsdl:input name="SearchRequestGetSorEntityByProviderRequest_20182024_0911_0615">
                <soap:header message="tns:SecurityHeader" part="SecurityHeader" use="literal"/>
                <soap:header message="tns:MedComHeader" part="MedcomHeader" use="literal"/>
                <soap:body use="literal"/>
            </wsdl:input>

            <wsdl:output name="SearchResponseGetSorEntityByProviderResponse_20182024_0911_0615">
                <soap:body use="literal"/>
            </wsdl:output>
        </wsdl:operation>

        <wsdl:operation name="ShakSorMap_2018_09_06">
            <soap:operation soapAction="http://sundhedsdatastyrelsen.dk/SORLookupService/2018/09/06#ShakSorMap" style="document"/>

            <wsdl:input name="ShakSorMapRequest_2018_09_06">
                <soap:header message="tns:SecurityHeader" part="SecurityHeader" use="literal"/>
                <soap:header message="tns:MedComHeader" part="MedcomHeader" use="literal"/>
                <soap:body use="literal"/>
            </wsdl:input>

            <wsdl:output name="ShakSorMapResponse_2018_09_06">
                <soap:body use="literal"/>
            </wsdl:output>
        </wsdl:operation>

        <wsdl:operation name="SorShakMap_2018_09_06">
            <soap:operation soapAction="http://sundhedsdatastyrelsen.dk/SORLookupService/2018/09/06#SorShakMap" style="document"/>

            <wsdl:input name="SorShakMapRequest_2018_09_06">
                <soap:header message="tns:SecurityHeader" part="SecurityHeader" use="literal"/>
                <soap:header message="tns:MedComHeader" part="MedcomHeader" use="literal"/>
                <soap:body use="literal"/>
            </wsdl:input>

            <wsdl:output name="SorShakMapResponse_2018_09_06">
                <soap:body use="literal"/>
            </wsdl:output>
        </wsdl:operation>
    </wsdl:binding>

    <!-- Services -->
    <wsdl:service name="SORLookupServiceService">
        <wsdl:port name="SORLookupServicePort" binding="tns:SORLookupServiceBinding">
            <soap:address location="http://localhost:8080/sor-opslag/SORLookupService" />
        </wsdl:port>
    </wsdl:service>
</wsdl:definitions>


Modus operandi

Applikationen prøver så vidt muligt altid at give et fornuftigt svar. Kun i de tilfælde, hvor at applikationen ikke kan skrive et pænt svar til klienten, vil den give op og bare kaste en exception. Ved et kald til en snitflade der ikke eksisterer, vil den svare med HTTP kode 404.

...

Operationen bliver valgt med HTTP header SOAPAction. Hvis en anden operation end de listede er valgt, vil servicen returnere HTTP kode 405 (Method not allowed).

...

Ved fejlkode -7 er den nødvendige database service nede, og applikationen kan reelt ikke fungere før SDM databasen er oppe. Applikationen er dog i stand til at recover fra databasen når servicen går ned, uden at nogen indgriben er nødvendig. Applikationen kræver dog, at databasen er tilgængelig ved opstart, ellers vil det give en fejl, og applikationen bliver ikke deployeret. Kun en ny deployering kan få servicen op at køre igen.

Ved fejlkode -8 er der tale om fejl under forespørgsel mod SOR databasen enten fordi databasen er nede eller data er ikke tilstede.

Ved fejlkode -9 er der tale om fejl under transformation af XML til objekt, og det tyder på forkert konstrueret SOAP body. Fejlen ligger højest sandsynligt hos klienten, men bør undersøges nærmere.

Ved fejlkode -10, -11, -12 og -13 er fejl hvor at transformation af objekter til XML har fejlet. De bør ikke kunne forekomme.


Ved alle resterende fejl ligger ansvaret udelukkende hos klienten.

Logning

Applikationen bruger tre forskellige logs.

Audit log

Audit logning benytter audit API biblioteket, og skriver til audit.log i logs/ mappen. Følgende oplysninger bliver trukket ud af forespørgelsen og skrevet i audit loggen:

...

Ved forespørgelser til applikationen er der følgende ID'er:

IDOperation
210GetSorEntity
215
220
Search
GetSorEntityByProvider
235ShakSorMap
240SorShakMap


Applikation log

Applikation loggen styres af log4j-sorls.properties, og denne afhænger af hvad der er blevet sat op. Det er muligt slet ikke at få en applikation log på disken, hvis dette ønskes (ikke anbefalet).

...