@@ -8,11 +8,13 @@ Der Client verwendet *XTA 2 Version 3.1* mit [XTA-Modul-Webservice-Version](http
...
@@ -8,11 +8,13 @@ Der Client verwendet *XTA 2 Version 3.1* mit [XTA-Modul-Webservice-Version](http
Er wird als Maven-Artefakt `xta-client-lib` bereitgestellt und kann in Java-Anwendungen eingebunden werden.
Er wird als Maven-Artefakt `xta-client-lib` bereitgestellt und kann in Java-Anwendungen eingebunden werden.
## Senden einer Nachricht
## Senden einer Nachricht
Zum Senden einer Nachricht konfiguriert der Nutzer einen neuen XTA-Client.
Zum Senden einer Nachricht konfiguriert die Nutzer*in einen neuen XTA-Client mit einem Client-Zertifikat, welches ihn für das Senden mit einer Autor-Kennung autorisiert.
Beim Aufruf von `sendMessage` wird die Nachricht an den XTA-Server übergeben und der Transport-Report zurückgegeben.
```mermaid
```mermaid
%% Versand einer Nachricht
%% Senden einer Nachricht
sequenceDiagram
sequenceDiagram
participant A as Nutzer
participant A as Nutzer*in
participant B as XTA-Client
participant B as XTA-Client
participant C as XTA-Server
participant C as XTA-Server
Note left of A: (1) XTA-Client erzeugen
Note left of A: (1) XTA-Client erzeugen
...
@@ -27,7 +29,7 @@ Zum Senden einer Nachricht konfiguriert der Nutzer einen neuen XTA-Client.
...
@@ -27,7 +29,7 @@ Zum Senden einer Nachricht konfiguriert der Nutzer einen neuen XTA-Client.
deactivate C
deactivate C
B->>C: lookupService
B->>C: lookupService
activate C
activate C
C-->>B:
C-->>B:
deactivate C
deactivate C
B->>C: createMessageID
B->>C: createMessageID
activate C
activate C
...
@@ -35,18 +37,19 @@ Zum Senden einer Nachricht konfiguriert der Nutzer einen neuen XTA-Client.
...
@@ -35,18 +37,19 @@ Zum Senden einer Nachricht konfiguriert der Nutzer einen neuen XTA-Client.
deactivate C
deactivate C
B->>C: sendMessage
B->>C: sendMessage
activate C
activate C
C-->>B:
deactivate C
deactivate C
B->>C: getTransportReport
B->>C: getTransportReport
activate C
activate C
C-->>B:
C-->>B:
deactivate C
deactivate C
Note left of A: (4) Nachrichtenstatus prüfen
B-->>A:
B-->>A:
deactivate B
deactivate B
deactivate A
deactivate A
Note left of A: (4) Nachrichtenstatus prüfen
```
```
<small>* XTA-Server wird auch oft als Nachrichtenbroker oder Nachrichtenvermittler bezeichnet.</small>
<small>*Der XTA-Server wird oft als Nachrichtenbroker oder Nachrichtenvermittler bezeichnet.</small>
**Beispielcode:**
**Beispielcode:**
...
@@ -54,70 +57,109 @@ Zum Senden einer Nachricht konfiguriert der Nutzer einen neuen XTA-Client.
...
@@ -54,70 +57,109 @@ Zum Senden einer Nachricht konfiguriert der Nutzer einen neuen XTA-Client.
Zum Empfangen von Nachrichten konfiguriert der Nutzer einen neuen XTA-Client mit allen seinen Leser-Kennungen.
Zum Empfangen von Nachrichten konfiguriert die Nutzer*in einen neuen XTA-Client mit den gewünschten Leser-Kennungen. Zudem konfiguriert er das Client-Zertifikat, welches ihn zum Lesen mit den Leser-Kennungen autorisiert.
Beim Aufruf von `fetchMessages` werden alle Nachrichten für die Leser-Kennungen abgeholt und verarbeitet.
Die Nachrichten-Verarbeitung erfolgt durch die übergebene `processMessage`-Funktion.
```mermaid
```mermaid
%% Abfrage einer Nachricht
%% Empfangen von Nachrichten
sequenceDiagram
sequenceDiagram
participant A as Nutzer
participant A as Nutzer*in
participant D as Verarbeiter
participant B as XTA-Client
participant B as XTA-Client
participant C as XTA-Server
participant C as XTA-Server
Note left of A: (1) XTA-Client erzeugen
Note left of A: (1) XTA-Client erzeugen
Note left of A: (2) Nachrichten abholen
Note left of A: (2) Nachrichten abholen
A->>B: fetchMessages
A->>B: fetchMessages
activate A
activate A
activate B
activate B
B->>C: getStatusList
loop Für jede Leser-Kennung
activate C
B->>C: checkAccountActive
C-->>B:
activate C
deactivate C
C-->>B:
B->>C: getTransportReport
deactivate C
activate C
B->>C: getStatusList
C-->>B:
activate C
deactivate C
C-->>B:
B->>A:
deactivate C
deactivate B
loop Für jede ungelesene Nachricht
Note left of B: (4) Nachricht abholen
B->>C: getMessage
A->>B: getMessage
activate C
activate B
Note left of B: Nachricht abholen
B->>C: getMessage
C-->>B:
activate C
deactivate C
C-->>B:
B->>A: processMessage
deactivate C
deactivate B
B->>C: getTransportReport
Note left of A: (3) Nachricht verarbeiten
activate C
A-->>B:
C-->>B:
activate B
deactivate C
B->>C: close
B->>A:
activate C
deactivate B
Note left of B: Nachricht schließen
Note left of D: ...Nachricht verarbeiten...
C-->>B:
Note left of B: (5) Nachricht schließen
deactivate C
A->>B: close
B->>C: getTransportReport
activate B
activate C
B->>C: close
C-->>B:
activate C
deactivate C
C-->>B:
B->>A:
deactivate C
end
B->>A:
end
deactivate B
deactivate B
deactivate A
deactivate A
Note left of A: (4) Nachrichtenstatus prüfen
```
```
<small>* Sollte `processMessage` bei der Verarbeitung eine *RuntimeException* werfen, wird `Nachrichten schließen` übersprungen.</small>