diff --git a/README.md b/README.md index 54406c840b3725ff14f8349a80ba94e34ebd3eb3..72b950985b76b704510d4cb7705fbfaa22a614a9 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ Er wird als Maven-Artefakt `xta-client-lib` bereitgestellt und kann in Java-Anwe ## Senden einer Nachricht 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. +Mit einem Aufruf von `sendMessage` wird eine Nachricht an den XTA-Server übergeben und der Transport-Report zurückgegeben. ```mermaid %% Senden einer Nachricht sequenceDiagram @@ -75,7 +75,7 @@ var message = XtaMessage.builder() .messageTypePayloadSchema("urn:xoev-de:xdomea:schema:2.4.0") .authorIdentifier(XtaIdentifier.builder() .category("Generischer Antragsdienst") - .value("gad:010103000000") + .value("gad:010200100000") .build()) .readerIdentifier(XtaIdentifier.builder() .category("Generischer Antragsempfänger") @@ -91,6 +91,36 @@ var transportReport = client.sendMessage(message); assert transportReport.status() == XtaMessageStatus.OPEN; ``` +Da eine Xdomea-Nachricht die Leser- und Autor-Kennungen bereits enthält, ist es möglich aus der Xdomea-ZIP-Datei die Metadaten der XTA-Nachricht abzuleiten: + +```java +// ... +// (2) Nachricht erzeugen +// ... +var message = XdomeaXtaMessageCreator.createInstance().createMessage(xdomeaXtaFile); +// (3) Nachricht senden +var transportReport = client.sendMessage(message); +// ... +``` + +Hierbei wird die Xta-Autor-Kennung aus dem *Xdomea-Absender-Kennung/Behoerdenschluessel* gelesen und die Xta-Leser-Kennung aus dem *Xdomea-Empfaenger-Kennung/Behoerdenschluessel*. + +### Validierung der Xdomea-ZIP-Datei +Wenn eine `XtaMessage` für eine Xdomea-ZIP-Datei mit `XdomeaXtaMessageCreator::createMessage` erstellt wird, wird zudem geprüft, ob die Nachricht die ["Transportfestlegungen Generischer Antragsdienst"](Transportfestlegungen%20Generischer%20Antragsdienst.pdf) einhält. + +Für eine erfolgreiche Validierung muss eine Xdomea-ZIP-Datei muss folgende Bedingungen erfüllen: +- Der ZIP-Dateiname ist `<ProzessID>_<Nachrichtentyp>.zip` (z.B. `00000000-0000-0000-0000-_Geschaeftsgang.Geschaeftsgang.0201.zip`) + - Die ProzessID in der Xdomea-Nachricht entspricht der ProzessID im Dateinamen +- Die Xdomea-Nachricht `<ProzessID>_<Nachrichtentyp>.xml` in der ZIP-Datei ist schema-konform. +- Der Xdomea-Nachrichten-Typ ist zulässig: + - `Geschaeftsgang.Geschaeftsgang.0201` mit Xdomea 2.4.0 + - `Abgabe.Abgabe.0401` mit Xdomea 3.0.0 + - `Abgabe.ImportBestaetigen.0402` mit Xdomea 3.0.0 +- Alle Dateien, die die Xdomea-Nachricht referenziert, sind in der ZIP-Datei enthalten. +- Eine Absender-Kennung ist vorhanden mit dem Präfix `gad` +- Eine Empfänger-Kennung ist vorhanden mit dem Präfix `gae` + +<small>Hinweis: Die Xdomea-Nachricht sollte mit UTF-8 kodiert sein.</small> ## Empfangen von Nachrichten 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. diff --git a/Transportfestlegungen Generischer Antragsdienst.pdf b/Transportfestlegungen Generischer Antragsdienst.pdf new file mode 100755 index 0000000000000000000000000000000000000000..3d0d632d76ab26beb10d662b86bec919a53d9603 Binary files /dev/null and b/Transportfestlegungen Generischer Antragsdienst.pdf differ diff --git a/src/main/java/de/ozgcloud/xta/client/XtaClient.java b/src/main/java/de/ozgcloud/xta/client/XtaClient.java index 38a4161c1ae6bcc23441110495031267f0e9acc5..88f247e18027c0112507f0186abc38d628c98df7 100644 --- a/src/main/java/de/ozgcloud/xta/client/XtaClient.java +++ b/src/main/java/de/ozgcloud/xta/client/XtaClient.java @@ -13,9 +13,9 @@ import jakarta.validation.constraints.NotNull; import de.ozgcloud.xta.client.config.XtaClientConfig; import de.ozgcloud.xta.client.core.XtaClientService; import de.ozgcloud.xta.client.core.XtaExceptionHandler; -import de.ozgcloud.xta.client.exception.XtaClientRuntimeException; import de.ozgcloud.xta.client.exception.XtaClientException; import de.ozgcloud.xta.client.exception.XtaClientInitializationException; +import de.ozgcloud.xta.client.exception.XtaClientRuntimeException; import de.ozgcloud.xta.client.model.XtaIdentifier; import de.ozgcloud.xta.client.model.XtaMessage; import de.ozgcloud.xta.client.model.XtaMessageMetaData; @@ -200,13 +200,14 @@ public class XtaClient { * reader. If both checks pass, sends the message to the reader. Finally, returns the transport report for the sent message. * </p> * <p> - * <b>Note:</b> message size and id are set by the server, and thus may initially be null. This applies to the message metadata as well as - * to the message and attachment files. + * <b>Note:</b> message size and id are set by the server, and thus may initially be null. This also applies to the size of message and attachment + * files. * </p> * - * @param messageWithoutMessageId The message to send without id and size. - * @return The transport report for the sent message. As long as the reader did not read the message the status is {@link XtaMessageStatus#OPEN}. - * Moreover, the report contains the message metadata, including id and size values set by the server. + * @param messageWithoutMessageId The XTA message to send without id and size. + * @return The transport report for the sent message. As long as no critical error occurred, indicated by status {@link XtaMessageStatus#RED RED}, + * the message the status is {@link XtaMessageStatus#OPEN OPEN}, until the reader closes the message. Moreover, the report contains the message + * metadata, including id and size values set by the server. * @throws XtaClientException If a check fails or a technical problem occurs while sending the message. */ public XtaTransportReport sendMessage(@NotNull @Valid XtaMessage messageWithoutMessageId) throws XtaClientException {