Java-Mapping
Sie können Mapping-Programme in Java implementieren. Die Java-Mapping-API gibt dabei nur einen Rahmen vor, ohne eine bestimmte Art der Implementierung vorauszusetzen. Es steht beispielsweise das Java API for XML Processing (JAXP) zur Verarbeitung von XML-Dokumenten zur Verfügung. Das JAXP unterstützt das Document Object Model (DOM) und das Simple API for XML (SAX). Damit haben Sie hohe Flexibilität zur Programmierung von Mappings mit Java.
Java-Mapping-Programme dürfen nicht zustandsbehaftet sein. Sie dürfen also während eines Java-Mappings zum Beispiel keine Daten in eine Datenbanktabelle schreiben. Der Integration Server kann solche Seiteneffekte nicht mitverfolgen, so dass bei dem Versuch, eine noch nicht vom Empfänger angenommene Message wiederholt zu verschicken, schreibende Datenbankzugriffe bei einem Java-Mapping ungewollt doppelt ausgeführt werden könnten.
Bei der Verwendung von JRE-Klassen in Ihren Java-Mapping-Programmen gelten die gleichen Programmiereinschränkungen wie für Enterprise Java Beans (EJBs). Eine genaue Beschreibung dieser Einschränkungen finden Sie in der jeweils gültigen EJB-Spezifikation. Beachten sie dazu unbedingt die Hinweise im Abschnitt Funktionsumfang unter Laufzeitumgebung (Java-Mappings).
Klassen der Java-Mapping-API (Paket com.sap.aii.mapping.api)
Klasse(n) |
Verwendung |
AbstractTransformation |
Um ein Java-Mapping-Programm zu implementieren, müssen Sie eine Klasse definieren, die diese abstrakte Klasse erweitert und innerhalb Ihrer Klasse eine Methode transform() implementieren. Über die Methode getTrace() der Klasse AbstractTransformation können Sie sich außerdem einen Trace-Objekt vom Typ AbstractTrace zurückgeben lassen (siehe unten). |
AbstractTrace |
Um Informationen aus einem Mapping-Programm in den Laufzeit-Trace schreiben zu können, verwenden Sie ein Objekt vom Typ AbstractTrace (siehe: Das AbstractTrace-Objekt). Die Methode getTrace() der Klasse AbstractTransformation gibt ein solches Objekt zurück. |
TransformationInput |
Parameter der zu implementierenden Methode transform(), um auf die Ausgangs-Message zuzugreifen (über TransformationInput) und um die Ziel-Message zu erzeugen (Ausgabe nach TransformationOutput). Über entsprechende Methoden dieser Klassen greifen Sie auf die verschiedenen Bestandteile der Message zu. Zurückgegeben wird jeweils ein Objekt vom Typ der folgenden Klassen. |
InputPayload |
Objekt zum Lesen (InputPayload) und zum Schreiben der Payload (OutputPayload). Sie greifen auf die Payload über einen Stream zu, so dass der eigentliche Methode des Zugriffs Ihnen überlassen bleibt. |
InputParameters |
Um auf Parameter des Java-Mapping-Programms zuzugreifen, verwenden Sie die Methoden dieser Klassen. Siehe auch: Parametrisierte Mapping-Programme |
InputHeader |
Um auf Header-Felder der Ausgangs-Message lesend zuzugreifen (InputHeader) beziehungsweise den Inhaltstyp der Ziel-Message zu setzen (OutputHeader), arbeiten Sie mit diesen Klassen. |
DynamicConfiguration |
Klassen für den lesenden und schreibenden Zugriff auf adapter-spezifische Message-Attribute (siehe: Java-Mapping von adapterspezifischen Attributen). |
InputAttachments |
Klassen, um im Mapping-Programm auf Attachments der Message zugreifen zu können. InputAttachments erlaubt den Zugriff auf die Attachments, die der Sender an die Ausgangs-Message gehängt hat (beziehungsweise die zur Performance-Optimierung automatisch aus der Payload ausgelagert worden sind (MTOM)). Mit OutputAttachments können Sie die Attachments der Ziel-Message schreiben (es gibt auch eine Methode, um alle Attachments der Ausgangs-Message für die Ziel-Message zu übernehmen). |
Die folgende Grafik gibt einen Überblick über den Zugriff auf die Bestandteile einer Message über die Parameter TransformationInput und TransformationOutput:

Sie müssen die Java-Mapping-API in Ihre Entwicklungsumgebung einbinden (siehe: Laufzeitumgebung (Java-Mappings)). Die Laufzeitumgebung besteht zudem aus weiteren Klassen, die Entwickler je nach Bedarf in ihre Implementierung einbinden können.
Zusätzlich gibt es APIs für folgende Zwecke:
●
Werte-Mappings
Siehe: Werte-Mappings
ausführen
●
Programmierung von Lookups in
Mapping-Programmen
Siehe: Mapping-Programme um
Lookups erweitern
Weitere Informationen zur Java-Mapping-API finden Sie im SAP Developer Network unter der Adresse https://www.sdn.sap.com/irj/sdn/javadocs (SDN-User nötig).

Die bisherige Java-Mapping-API kann weiterhin genutzt werden (siehe: Java-Mapping-API (SAP NetWeaver 2004 und 7.0)).
Bei der Verwendung von statischen Variablen in Java-Mappings sind folgende Punkte zu beachten:
...
● Mappings können parallel ausgeführt werden. Eventuell greifen also mehrere Instanzen eines Mappings zugleich lesend oder schreibend auf ein statisches Feld zu.
● Wenn Mapping-Programme mehrfach ausgeführt werden, kann der Inhalt eines statischen Feldes verloren gehen. Das hat folgende Gründe:
○ Der Inhalt eines statischen Feldes geht verloren, wenn die betroffene Java-Klasse neu geladen wird. Dies ist zum Beispiel nach einem Cache-Refresh der Fall.
○ Besteht die Mapping-Laufzeit aus einem Cluster, so werden die Klassen der Mappings auf jedem Knoten des Clusters separat geladen. Jeder Knoten besitzt seine eigenen statischen Felder.
Statische Felder könnten für Konstanten und als Puffer verwendet werden, unter Beachtung der oben genannten Punkte.