Dette dokument dækker følgende komponenter på NSP:
Dokumentregistrerings- og oprettelsesservice
Type: Webservice
Filnavn: dros.war
Url: <serverurl>/dros
Servicecheckurl: <serverurl>/drs/status
Versionurl: <serverurl>/dros/health returnerer en json struktur med denne
Grundlæggende konfiguration foregår ved redigering i filen dros.properties, der placeres i følgende WildFly modul:
/pack/wildfly8/modules/sds/dros/configuration/main/
Moduldefinitionen er at finde i sourcekoden til dros under:
/dros-war/etc/modules/sds/dros/configuration/main/module.xml
I filen skal følgende properties være definerede:
Property | Beskrivelse |
dros.url.prefix | URL prefix der indsættes i wsdl'er og bruges af dks-servlet. |
| dros.app.name | Anvendes af dks-servlet |
iti41.service.endpoint | Endpoint på ITI41-backend. |
| iti41.service.security.require.person | Angiver, om der skal anvendes personlige sikkerhedsbillet i.e UserIdCard eller det er nok med SystemIdCard (true/false) Default: false |
| iti42.service.endpoint | Endpoint på ITI42-backend. |
| iti42.service.security.require.person | Angiver, om der skal anvendes personlige sikkerhedsbillet i.e UserIdCard eller det er nok med SystemIdCard (true/false) Default: false |
iti57.service.endpoint | Endpoint på ITI57-backend. |
| iti57.service.security.require.person | Angiver, om der skal anvendes personlige sikkerhedsbillet i.e UserIdCard eller det er nok med SystemIdCard (true/false) Default: false |
| iti61.service.endpoint | Endpoint på ITI61-backend. |
| iti61.service.security.require.person | Angiver, om der skal anvendes personlige sikkerhedsbillet i.e UserIdCard eller det er nok med SystemIdCard (true/false) Default: false |
dros.backend.failure.threshold | Tærskel for, hvor mange gang i træk et kald til en backend må fejle, før denne backend betragtes som 'død' af status-siden. |
| cprexists.validationlevel | Valideringsniveau for CPR validering Eksempel: WARNING, REJECT, OFF |
| cprexists.url | URL for CPR exist service Eksempel: http://test1-cnsp.ekstern-test.nspop.dk:8080/stamdata-cprexists |
| cprexists.maxTotalConnections | Konfiguration af client pool til kald af CPRExists service Default: 200 |
| cprexists.defaultMaxConnectionsPerRoute | Konfiguration af client pool til kald af CPRExists service Default: 20 |
Log4j konfiguration findes i samme wildfly modul som servicekonfigurationen
Se yderligere opsætning i installationsvejledningen.
DROS udstiller en overvågningsside, som findes i listen af komponenter i afsnit 2.
DROS-overvågningssiden returnerer enten:
Det overvåges for hver backend, om kaldene til backenden går galt. Det kan konfigureres, hvor mange kald i træk der må gå galt, før en backend betragtes som 'død'.
200 OK
---------------------------------------
STATUS
ITI41 backend : "0/50 fejl" ITI42 backend : "0/50 fejl" ITI57 backend : "0/50 fejl" ITI61 backend : "0/50 fejl" CprExistsServiceClient : "0/50 fejl"
Det fremgår for hver backend, om kaldene til den går godt eller ej.
203 Non-authoritative Information
---------------------------------------
STATUS
ITI41 backend : "0/50 fejl" ITI42 backend : "0/50 fejl" ITI57 backend : "0/50 fejl" ITI61 backend : "0/50 fejl" CprExistsServiceClient : "55/50 fejl"
Hvis kaldene til cprexists backend ikke kan udføres, så returneres statuskode 203 (indenfor failure threshold, som kan sættes op som en konfigurationsparameter).
500 Internal Server Error
---------------------------------------
STATUS
ITI41 backend : "0/50 fejl" ITI42 backend : "0/50 fejl" ITI57 backend : "55/50 fejl" ITI61 backend : "0/50 fejl" CprExistsServiceClient : "0/50 fejl"
Hvis kaldene til een af ITI backends ikke kan udføres, så returneres statuskode 500 (indenfor failure threshold, som kan sættes op som en konfigurationsparameter).
Hvert servicekald medfører en ny indgang i auditloggen, som er udfyldt som følger:
* Component: DROS/<operation>, hvor <operation> er navnet på den operation der kaldes, f.eks. ProvideAndRegisterDocumentSetB.
* Context: Udfyldes med DocumentId. Hvis requestet indeholder flere dokumenter, oprettes en context for hvert dokument.
For hver context skrives følgende informationer
| Felt | Type | Indhold |
|---|---|---|
| DocumentId | RegularPersonalInformation | DokumentId'et. |
| DocumentType | RegularPersonalInformation | Dokumentets TypeCode |
| CitizenId | RegularPersonalInformation | PatientId, som dokumentet omhandler. |
| FormatCode | RegularPersonalInformation | FormatCode |
| SubmissionSet | RegularPersonalInformation | UniqueId fra SubmissionSet i request. |
| AssociationSourceId | RegularPersonalInformation | SourceId fra association, hvis dokumentet er enten source eller target på association. |
| AssociationTargetId | RegularPersonalInformation | TargetId fra association, hvis dokumentet er enten source eller target på association. |
| AssociationType | RegularPersonalInformation | AssociationType fra association, hvis dokumentet er enten source eller target på association. Den fulde URI logges. |
Nedenfor ses eksempler fra auditloggen ved kald af de forskellige snitflader.
{
"time":"2021-05-03T21:04:01.676Z",
"category":"dk.sds.nsp.audit.log.dros/registerondemanddocumententry",
"audit":{
"timestamp":"2021-05-03T23:03:59.454+02:00",
"components":[
{
"component":"DROS/RegisterOnDemandDocumentEntry",
"contexts":[
{
"context":"urn:uuid:5544575c-8cc6-45de-9db5-3059131670a2",
"information":[
{
"key":"DocumentId",
"type":"RPI",
"value":"7943305690136181220.5733255671233166403.1620075838248"
},
{
"key":"DocumentType",
"type":"RPI",
"value":"39289-4"
},
{
"key":"CitizenId",
"type":"RPI",
"value":"010101010101"
},
{
"key":"FormatCode",
"type":"RPI",
"value":"urn:ad:dk:medcom:appointment"
},
{
"key":"SubmissionSetId",
"type":"RPI",
"value":"4755022980679903663.6588331163711420386.1620075838319"
}
]
}
]
}
]
},
"access":{
"code":200,
"duration":1216,
"httpHeaders":{
"Content-Type":"application/soap+xml; charset=UTF-8"
},
"httpHost":"localhost",
"idCardAttributes":{
"medcom:CareProviderID":"46837428",
"medcom:CareProviderName":"Statens Serum Institut",
"medcom:ITSystemName":"Test",
"sosi:AuthenticationLevel":"3",
"sosi:IDCardID":"m/a4UIUpkKPnk/My7ueRsw==",
"sosi:IDCardType":"system",
"sosi:IDCardVersion":"1.0.1"
},
"method":"POST",
"path":"/dros/iti61",
"query":"",
"port":8060,
"protocol":"http",
"reqSize":14130,
"resSize":460,
"soapHeaders":{
"Issuer":"TEST2-NSP-STS",
"MessageID":"AAABeTQLfBBVLIDLtfEB2VNPU0k=",
"NameID":"SubjectDN={SERIALNUMBER=CVR:46837428-UID:27910135 + CN=Statens Serum Institut - Test VOCES, O=Statens Serum Institut // CVR:46837428, C=DK},IssuerDN={CN=TRUST2408 Systemtest XXII CA, O=TRUST2408, C=DK},CertSerial={1495058165}",
"w3Action":"urn:ihe:iti:2010:RegisterOnDemandDocumentEntry",
"w3MessageID":"urn:uuid:9ebc494f-a276-462a-b6e9-3ee6c69a1bc7",
"w3To":"http://localhost:8060/dros/iti61"
},
"threadId":"default task-1",
"time":"2021-05-03T23:03:59.443+02:00",
"stats":{
"handlerDuration":965,
"RequestContentDuration":70,
"ResponseContentDuration":0,
"SecurityProtocolRequestDuration":587,
"SecurityProtocolResponseDuration":0,
"bufferAllocated":true,
"usedBuffers":2,
"activeBuffersInPool":2,
"idleBuffersInPool":0
}
}
} |
{
"time":"2021-05-03T21:04:04.485Z",
"category":"dk.sds.nsp.audit.log.dros/provideandregisterdocumentsetb",
"audit":{
"timestamp":"2021-05-03T23:04:02.429+02:00",
"components":[
{
"component":"DROS/ProvideAndRegisterDocumentSetB",
"contexts":[
{
"context":"urn:uuid:db9d8684-e06c-4c65-af58-0137e6646733",
"information":[
{
"key":"DocumentId",
"type":"RPI",
"value":"6687982596253355541.8162358355401787246.1620075842168"
},
{
"key":"DocumentType",
"type":"RPI",
"value":"39289-4"
},
{
"key":"CitizenId",
"type":"RPI",
"value":"ABCDE"
},
{
"key":"FormatCode",
"type":"RPI",
"value":"urn:ad:dk:medcom:appointment"
},
{
"key":"SubmissionSetId",
"type":"RPI",
"value":"5335953767189358702.7648709839978447749.1620075842178"
}
]
}
]
}
]
},
"access":{
"code":200,
"duration":1878,
"httpHeaders":{
"Content-Type":"multipart/related; type=\"application/xop+xml\"; boundary=\"uuid:06457de8-0189-4a1e-ba98-66da58d79ce7\"; start=\"<root.message@cxf.apache.org>\"; start-info=\"application/soap+xml\""
},
"httpHost":"localhost",
"idCardAttributes":{
"medcom:CareProviderID":"46837428",
"medcom:CareProviderName":"Statens Serum Institut",
"medcom:ITSystemName":"Test",
"sosi:AuthenticationLevel":"3",
"sosi:IDCardID":"P0OgWK2GAfYY6IhdSoPMRg==",
"sosi:IDCardType":"system",
"sosi:IDCardVersion":"1.0.1"
},
"method":"POST",
"path":"/dros/iti41",
"query":"",
"port":8060,
"protocol":"http",
"reqSize":24833,
"resSize":699,
"soapHeaders":{
"Issuer":"TEST2-NSP-STS",
"MessageID":"AAABeTQLioY3nvNwrBEcjVNPU0k=",
"NameID":"SubjectDN={SERIALNUMBER=CVR:46837428-UID:27910135 + CN=Statens Serum Institut - Test VOCES, O=Statens Serum Institut // CVR:46837428, C=DK},IssuerDN={CN=TRUST2408 Systemtest XXII CA, O=TRUST2408, C=DK},CertSerial={1495058165}",
"w3Action":"urn:ihe:iti:2007:ProvideAndRegisterDocumentSet-b",
"w3MessageID":"urn:uuid:cd7f3bdb-647b-4766-864a-0070a8168e73",
"w3To":"http://localhost:8060/dros/iti41"
},
"threadId":"default task-3",
"time":"2021-05-03T23:04:02.429+02:00",
"stats":{
"handlerDuration":174,
"RequestContentDuration":17,
"ResponseContentDuration":0,
"SecurityProtocolRequestDuration":140,
"SecurityProtocolResponseDuration":0,
"bufferAllocated":false,
"usedBuffers":4,
"activeBuffersInPool":4,
"idleBuffersInPool":3
}
}
} |
{
"time":"2021-05-03T21:04:09.776Z",
"category":"dk.sds.nsp.audit.log.dros/provideandregisterdocumentsetb",
"audit":{
"timestamp":"2021-05-03T23:04:08.786+02:00",
"components":[
{
"component":"DROS/ProvideAndRegisterDocumentSetB",
"contexts":[
{
"context":"urn:uuid:7e8274fc-bee7-46e8-995d-8a1ec518ce62",
"information":[
{
"key":"DocumentId",
"type":"RPI",
"value":"7371703074493874590.8623536501958069031.1620075848759"
},
{
"key":"DocumentType",
"type":"RPI",
"value":"39289-4"
},
{
"key":"CitizenId",
"type":"RPI",
"value":"ABCDE"
},
{
"key":"FormatCode",
"type":"RPI",
"value":"urn:ad:dk:medcom:appointment"
},
{
"key":"SubmissionSetId",
"type":"RPI",
"value":"6073800182764791022.8734924007446367108.1620075848770"
},
{
"key":"AssociationSourceId",
"type":"RPI",
"value":"urn:uuid:7e8274fc-bee7-46e8-995d-8a1ec518ce62"
},
{
"key":"AssociationTargetId",
"type":"RPI",
"value":"urn:uuid:90a33869-727b-4af7-9a6a-ef030107e341"
},
{
"key":"AssociationType",
"type":"RPI",
"value":"urn:ihe:iti:2007:AssociationType:RPLC"
}
]
}
]
}
]
},
"access":{
"code":200,
"duration":912,
"httpHeaders":{
"Content-Type":"multipart/related; type=\"application/xop+xml\"; boundary=\"uuid:5f90d79b-d113-4884-a9ce-1c4434a79f39\"; start=\"<root.message@cxf.apache.org>\"; start-info=\"application/soap+xml\""
},
"httpHost":"localhost",
"idCardAttributes":{
"medcom:CareProviderID":"46837428",
"medcom:CareProviderName":"Statens Serum Institut",
"medcom:ITSystemName":"Test",
"sosi:AuthenticationLevel":"3",
"sosi:IDCardID":"rvUKALhPjCol2nJTJqDt+A==",
"sosi:IDCardType":"system",
"sosi:IDCardVersion":"1.0.1"
},
"method":"POST",
"path":"/dros/iti41",
"query":"",
"port":8060,
"protocol":"http",
"reqSize":25071,
"resSize":699,
"soapHeaders":{
"Issuer":"TEST2-NSP-STS",
"MessageID":"AAABeTQLpEik3TDY2H298VNPU0k=",
"NameID":"SubjectDN={SERIALNUMBER=CVR:46837428-UID:27910135 + CN=Statens Serum Institut - Test VOCES, O=Statens Serum Institut // CVR:46837428, C=DK},IssuerDN={CN=TRUST2408 Systemtest XXII CA, O=TRUST2408, C=DK},CertSerial={1495058165}",
"w3Action":"urn:ihe:iti:2007:ProvideAndRegisterDocumentSet-b",
"w3MessageID":"urn:uuid:f44dfe0a-c002-4a72-8e89-80b3df6b2370",
"w3To":"http://localhost:8060/dros/iti41"
},
"threadId":"default task-8",
"time":"2021-05-03T23:04:08.786+02:00",
"stats":{
"handlerDuration":73,
"RequestContentDuration":6,
"ResponseContentDuration":0,
"SecurityProtocolRequestDuration":51,
"SecurityProtocolResponseDuration":0,
"bufferAllocated":false,
"usedBuffers":4,
"activeBuffersInPool":4,
"idleBuffersInPool":4
}
}
} |
{
"time":"2021-05-03T21:04:07.307Z",
"category":"dk.sds.nsp.audit.log.dros/registerdocumentsetb",
"audit":{
"timestamp":"2021-05-03T23:04:07.03+02:00",
"components":[
{
"component":"DROS/RegisterDocumentSetB",
"contexts":[
{
"context":"urn:uuid:ac0ce91a-320d-4370-839f-25598dd0bfab",
"information":[
{
"key":"DocumentId",
"type":"RPI",
"value":"9139873772290913932.1273906388098236954.1620075847000"
},
{
"key":"DocumentType",
"type":"RPI",
"value":"39289-4"
},
{
"key":"CitizenId",
"type":"RPI",
"value":"010101010101"
},
{
"key":"FormatCode",
"type":"RPI",
"value":"urn:ad:dk:medcom:appointment"
},
{
"key":"SubmissionSetId",
"type":"RPI",
"value":"8587115512321077717.2026797048612801310.1620075847001"
}
]
}
]
}
]
},
"access":{
"code":200,
"duration":250,
"httpHeaders":{
"Content-Type":"application/soap+xml; charset=UTF-8"
},
"httpHost":"localhost",
"method":"POST",
"path":"/dros/iti42noDgws",
"query":"",
"port":8060,
"protocol":"http",
"reqSize":8696,
"resSize":919,
"soapHeaders":{
"w3Action":"urn:ihe:iti:2007:RegisterDocumentSet-b",
"w3MessageID":"urn:uuid:c270fc64-56f2-4b6b-b65b-4caf7623d19a",
"w3To":"http://localhost:8060/dros/iti42noDgws"
},
"threadId":"default task-6",
"time":"2021-05-03T23:04:07.03+02:00",
"stats":{
"handlerDuration":22,
"RequestContentDuration":1,
"ResponseContentDuration":0,
"SecurityProtocolRequestDuration":0,
"SecurityProtocolResponseDuration":0,
"bufferAllocated":false,
"usedBuffers":2,
"activeBuffersInPool":2,
"idleBuffersInPool":6
}
}
} |
{
"time":"2021-05-03T21:54:21.875Z",
"category":"dk.sds.nsp.audit.log.dros/updatedocumentset",
"audit":{
"timestamp":"2021-05-03T23:54:21.673+02:00",
"components":[
{
"component":"DROS/UpdateDocumentSet",
"contexts":[
{
"context":"8bee75d3-9e1e-4646-b440-ffb6e13f8099",
"information":[
{
"key":"AssociationSourceId",
"type":"RPI",
"value":"8bee75d3-9e1e-4646-b440-ffb6e13f8099"
},
{
"key":"AssociationTargetId",
"type":"RPI",
"value":"urn:uuid:bf963b2e-7fd0-4b25-9c1b-b9762af656f7"
},
{
"key":"AssociationType",
"type":"RPI",
"value":"urn:ihe:iti:2010:AssociationType:UpdateAvailabilityStatus"
},
{
"key":"AssociationStatus",
"type":"RPI",
"value":"Deprecated"
}
]
}
]
}
]
},
"access":{
"code":200,
"duration":166,
"httpHeaders":{
"Content-Type":"application/soap+xml; charset=UTF-8"
},
"httpHost":"localhost",
"idCardAttributes":{
"medcom:CareProviderID":"46837428",
"medcom:CareProviderName":"Statens Serum Institut",
"medcom:ITSystemName":"Test",
"sosi:AuthenticationLevel":"3",
"sosi:IDCardID":"sTLZT4F425EnY6GleFiNcA==",
"sosi:IDCardType":"system",
"sosi:IDCardVersion":"1.0.1"
},
"method":"POST",
"path":"/dros/iti57",
"query":"",
"port":8060,
"protocol":"http",
"reqSize":9253,
"resSize":460,
"soapHeaders":{
"Issuer":"TEST2-NSP-STS",
"MessageID":"AAABeTQ5nWIfoju4xRpdM1NPU0k=",
"NameID":"SubjectDN={SERIALNUMBER=CVR:46837428-UID:27910135 + CN=Statens Serum Institut - Test VOCES, O=Statens Serum Institut // CVR:46837428, C=DK},IssuerDN={CN=TRUST2408 Systemtest XXII CA, O=TRUST2408, C=DK},CertSerial={1495058165}",
"w3Action":"urn:ihe:iti:2010:UpdateDocumentSet",
"w3MessageID":"urn:uuid:e81108e0-603e-4662-8320-689c1e64a2f9",
"w3To":"http://localhost:8060/dros/iti57"
},
"threadId":"default task-12",
"time":"2021-05-03T23:54:21.673+02:00",
"stats":{
"handlerDuration":33,
"RequestContentDuration":1,
"ResponseContentDuration":0,
"SecurityProtocolRequestDuration":27,
"SecurityProtocolResponseDuration":0,
"bufferAllocated":false,
"usedBuffers":2,
"activeBuffersInPool":2,
"idleBuffersInPool":6
}
}
} |
Hvis CPR validering kører i WARNING mode, så vil ugyldige (ifølge CPRExits service) CPR numre give anledning til en linje i auditloggen. Logninger af denne type ser således ud:
{
"time":"2021-08-19T08:46:13.461Z",
"category":"dk.sds.nsp.audit.log.dros",
"audit":{
"timestamp":"2021-08-19T10:46:13.081+02:00",
"components":[
{
"component":"DROS",
"contexts":[{
"context":"iti-41",
"information":[{
"key":"dk.nsp.cpr.exists.false",
"type":"SPI","value":"ABCDE"
}]
}]
},
{
"component":"DROS/ProvideAndRegisterDocumentSetB",
"contexts":[{
"context":"urn:uuid:5e2abecf-a1aa-4059-bc67-789492ef5e49",
"information":[{
"key":"DocumentId",
"type":"RPI",
"value":"5776847426915191537.1243631302011472830.1629362773007"
},
{
"key":"DocumentType",
"type":"RPI",
"value":"39289-4"
},
{
"key":"CitizenId",
"type":"RPI",
"value":"ABCDE"
},
{
"key":"FormatCode",
"type":"RPI",
"value":"urn:ad:dk:medcom:appointment"
},
{
"key":"SubmissionSetId",
"type":"RPI",
"value":"6382716294106427493.5756439411433255780.1629362773009"
}]
}]
}
]
},
"access":{
"code":200,
"duration":350,
"httpHeaders":{
"Content-Type":"multipart/related; type=\"application/xop+xml\"; boundary=\"uuid:40d856a8-1a44-4ab2-a26a-947c1c6ec09d\"; start=\"<root.message@cxf.apache.org>\"; start-info=\"application/soap+xml\""
},
"httpHost":"localhost",
"idCardAttributes":{
"medcom:CareProviderID":"46837428",
"medcom:CareProviderName":"Statens Serum Institut",
"medcom:ITSystemName":"Test",
"sosi:AuthenticationLevel":"3",
"sosi:IDCardID":"aXDKFJ7P6UQQDfAsWEen8Q==",
"sosi:IDCardType":"system",
"sosi:IDCardVersion":"1.0.1"
},
"method":"POST",
"path":"/dros/iti41",
"query":"",
"port":8060,
"protocol":"http",
"reqSize":24881,
"resSize":1420,
"soapHeaders":{
"Issuer":"TEST2-NSP-STS",
"MessageID":"AAABe12W3BTo9p7lAx0WMVNPU0k=",
"NameID":"SubjectDN={SERIALNUMBER=CVR:46837428-UID:27910135 + CN=Statens Serum Institut - Test VOCES, O=Statens Serum Institut // CVR:46837428, C=DK},IssuerDN={CN=TRUST2408 Systemtest XXII CA, O=TRUST2408, C=DK},CertSerial={1495058165}",
"w3Action":"urn:ihe:iti:2007:ProvideAndRegisterDocumentSet-b",
"w3MessageID":"urn:uuid:ee979460-f7e5-4432-8604-c345eba582f9",
"w3To":"http://localhost:8060/dros/iti41"
},
"threadId":"default task-18",
"time":"2021-08-19T10:46:13.08+02:00",
"stats":{
"handlerDuration":28,
"RequestContentDuration":2,
"ResponseContentDuration":0,
"SecurityProtocolRequestDuration":22,
"SecurityProtocolResponseDuration":0,
"bufferAllocated":false,
"usedBuffers":4,
"activeBuffersInPool":4,
"idleBuffersInPool":4
}
}
}
|