Fehlerbehandlung in XSLT
In umfangreichen XSLT-Programmen ist es sinnvoll, Meldungen im Fehlerfall auszugeben. Dafür gibt es das XSLT-Kommando <xsl:message>. Beispielsweise könnte im Quelldokument ein Wert enthalten sein, der vom Mapping-Programm nicht erwartet wird. In diesem Fall können Sie eine Meldung ausgeben und falls nötig die Verarbeitung des Mappings abbrechen.

Alternativ können Sie auch eine Java-Methode aus Ihrem XSLT-Programm aufrufen, die über das MappingTrace-Objekt Informationen in den Trace schreibt. Ein Beispiel gibt es im Abschnitt XSLT Mapping mit Java-Erweiterung.
Das MappingTrace-Objekt wird im PCK nicht unterstützt.
Meldungen, die über das XSLT-Kommando <xsl:message>
oder das MappingTrace-Objekt ausgegeben werden, sind im Trace des technischen
Monitors sichtbar (siehe auch:
Monitoring von
XML-Messages).
Das XLST-Kommando <xsl:message> hat die folgende Syntax:
<xsl:message terminate=“[yes|no]“>
<!-- Auszugebende Nachricht -->
</xsl:message>
Das Attribut Terminate bestimmt, ob die Verarbeitung des XSLT-Programms abgebrochen werden soll (terminate=“yes“) oder nicht (terminate=“no“). In beiden Fällen finden Sie die Nachricht im Trace wieder, den Sie sich im Monitoring zu einer Message anschauen können. (Voraussetzung dafür ist allerdings, dass der Trace für die Integration Engine aktiviert wurde.)
Der folgende Beispiel XSLT-Programmabschnitt ist ein Auszug aus einem Mapping-Programm mit dem Namen Person2Passenger.xsl. Die XSLT-Kommandos in diesem Abschnitt werten den aktuellen Wert eines Tags aus dem Quelldokument aus und bilden dabei die Werte folgendermaßen ab:
Quelldokument |
Zieldokument |
0 |
Mr. |
1 |
Mrs. |
(andere) |
Mr. or Mrs. |
Der letzte Fall ist eine Ausnahme für nicht interpretierbare Werte. Um dieses Ausnahme im Trace festzuhalten wird eine Nachricht über <xsl:message> ausgegeben:
<xsl:choose>
<xsl:when
test="test()=0">Mr.</xsl:when>
<xsl:when test="test()=1">Mrs.</xsl:when>
<xsl:otherwise> Mr. or Mrs.
<xsl:message terminate="no">
Gender has neither value 0 nor 1!
"Mr. or Mrs." was chosen for title.
</xsl:message>
</xsl:otherwise>
</xsl:choose>
Da das Zielfeld noch sinnvoll gefüllt werden kann, wird die Verarbeitung nicht abgebochen (terminate=“no“).
Im technischen Monitor, sieht der Abschnitt im Trace für den dritten Fall folgendermaßen aus:
<CALL kind="ENTER" func="CL_XMS_PLSRV_MAPPING~ENTER_PLSRV" />
<trc1>XSLT transformation: xslt/wsxx/Person2Passenger completed. Gender has neither value 0 nor 1! "Mr. or Mrs." was chosen for title.</trc1>
<CALL kind="EXIT" func="CL_XMS_PLSRV_MAPPING~ENTER_PLSRV" />