Show TOC Anfang des Inhaltsbereichs

Komponentendokumentation Java-Mapping Dokument im Navigationsbaum lokalisieren

Einsatzmöglichkeiten

Sie können Mapping-Programme in Java implementieren. 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 Mapping-Definition mit Java.

Einführungshinweise

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.

Beachten Sie außerdem, dass Sie innerhalb eines Java-Mappings weder java.lang.System.exit() noch java.lang.System.setProperties() aufrufen dürfen und dass Sie in den Klassen eines Importierten Archivs keinen Class Loader verwenden dürfen.

Funktionsumfang

Die Laufzeitumgebung für Java-Mappings bietet eine Mapping-API an. Um ein Java-Mapping zu programmieren, müssen Sie eine Java-Klasse definieren, die das Java-Interface com.sap.aii.mapping.api.StreamTransformation implementiert. Dieses Interface hat zwei Methoden:

...

·      public void execute(java.io.InputStream in, java.io.OutputStream out)

Die Integration Engine ruft zur Laufzeit diese Methode auf, um ein Mapping auszuführen. Diese Methode erhält einen Input Stream für das Ausgangsdokument und einen Output Stream für das Zieldokument als Parameter. Diese Streams sind typischerweise XML-Dokumente. Sie können aus dem Input Stream die zu konvertierenden Teilstrukturen einlesen und in den Output Stream das konvertierte Zieldokument ausgeben.

·      public void setParameter(java.util.Map param)

Die Integration Engine übergibt mit dieser Methode Parameter an das Mapping-Programm. Sie wertet diese Parameter zur Laufzeit in der Methode execute() aus. Damit kann der Ablauf des Mapping gesteuert werden.

Das übergegebene Objekt, das das Java-Interface java.util.Map implementiert, enthält sieben Schlüssel/Wert-Paare als Parameter. Diese korrespondieren zu entsprechenden Feldern im Message-Header. Von der Konstante MAPPING_TRACE abgesehen, sind die Wertobjekte vom Typ java.lang.String. Die Schlüsselobjekte sind in der Klasse com.sap.aii.mapping.api.StreamTransformationConstants definiert:.

String-Konstanten der Mapping-Laufzeit

Konstante

Bedeutung

Relevant für PCK

MESSAGE_CLASS

Klassifizierung der Message. Mögliche Werte:

·      ApplicationMessage:
Asynchrone oder synchrone Request-Message

·      ApplicationResponse:
Antwort auf eine Request-Message

·      SystemAck, ApplicationAck, SystemError, ApplicationError:
Acknowledgment-Messages

Ja

VERSION_MAJOR

Version des XI Message-Protokolls. Beispiel: Für das XI 3.0 Message-Protokoll ist VERSION_MAJOR = 3 und VERSION_MINOR = 0.

Nein

Das PCK unterstützt nur das Message-Protokoll XI 3.0.

VERSION_MINOR

 

Nein

PROCESSING_MODE

Der Modus einer Message kann synchron oder asynchron sein. Entsprechend kann diese Konstante den Wert synchronous oder asynchronous haben.

Ja

MESSAGE_ID

Die Message-ID. Sie kann sich während einer Kommunikation ändern:

·      Response-Messages bekommen eine neue Message-ID.

·      Wenn aus einer Message neue hervorgehen (Kopieren der Message bei mehreren Empfängern), bekommen die neuen Messages neue Message-IDs.

Ja

REF_TO_MESSAGE_ID

ID einer referenzierten Message, die semantisch zu dieser Message gehört. Beispielsweise ‚merkt’ sich eine Response-Message über dieses Feld zu welcher Request-Message sie gehört.

Ja

CONVERSATION_ID

Dieses Feld ist nicht obligatorisch in der Message enthalten und erlaubt die Verwendung einer ID zum Zwecke der Gruppierung von zusammengehörenden Messages. Dieses Feld ist nicht dazu gedacht, eine Serialisierung von Messages zu realisieren und hat nichts mit dem Serialisierungskontext (ABAP-, Java-Proxy-Laufzeit) zu tun.

Ja

TIME_SENT

Zeitstempel, der angibt, wann die Message beim Sender abgeschickt wurde. Das Format des Zeitstempels ist:

YYYY-MM-DDTHH:MM:SSZ

Der Buchstabe ‚T’ trennt das Datum von der Zeit, die in der Regel in UTC angegeben ist. Falls es sich um eine lokale Zeit handelt, entfällt das abschließende ‚Z’.

Ja

INTERFACE

Name des Sender-Interfaces. Sie sollten ab SAP XI 3.0 diese Konstante anstelle von der bisherigen Konstante SENDER_NAME verwenden.

Ja

INTERFACE_NAMESPACE

Namensraum des Sender-Interfaces.

Sie sollten ab SAP XI 3.0 diese Konstante anstelle von der bisherigen Konstante SENDER_NAMESPACE verwenden.

Ja

SENDER_PARTY

Kommunikationspartner, der die Message verschickt hat

Ja

Siehe auch:

StrukturlinkKommunikationspartner

SENDER_PARTY_AGENCY

Vergebende Agentur zum Sender der Message

Ja

SENDER_PARTY_SCHEME

Verwendetes Identifikationsschema des Senders

Ja

SENDER_SERVICE

Service auf Senderseite, der die Message verschickt hat. Dabei kann es sich beispielsweise um den Namen eines Business-Systems handeln.

Sie sollten ab SAP XI 3.0 diese Konstante anstelle von der bisherigen Konstante SENDER_SYSTEM verwenden.

Ja

Siehe auch:

StrukturlinkService

RECEIVER_NAME

Name des Empfänger-Interfaces.

Ja

RECEIVER_NAMESPACE

Namensraum des Empfänger-Interfaces.

Ja

RECEIVER_PARTY

Kommunikationspartner, der die Message empfangen soll

Ja

Siehe auch:

StrukturlinkKommunikationspartner

RECEIVER_PARTY_AGENCY

Vergebende Agentur zum Empfänger der Message

Ja

RECEIVER_PARTY_SCHEME

Verwendetes Identifikationsschema des Empfängers

Ja

RECEIVER_SERVICE

Service auf Empfängerseite, der die Message empfangen soll. Dabei kann es sich beispielsweise um den Namen eines Business-Systems handeln.

Sie sollten ab SAP XI 3.0 diese Konstante anstelle von der bisherigen Konstante RECEIVER_SYSTEM verwenden.

Ja

Siehe auch:

StrukturlinkService

MAPPING_TRACE

Gibt ein MappingTrace-Objekt zurück, mit dem Sie Meldungen in das Monitoring schreiben können.

Nein

Einschränkungen

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.

Beispiel

Das folgende Beispiel zeigt das Setzen und Auswerten der beiden Parameter MAPPING_TRACE und RECEIVER_NAME in einem Java-Mapping-Programm:

import java.io.InputStream;
import java.io.OutputStream;
import java.util.Map;
import java.util.HashMap;
import com.sap.aii.mapping.api.
AbstractTrace;
import com.sap.aii.mapping.api.StreamTransformation;
import com.sap.aii.mapping.api.StreamTransformationConstants;

public class JavaMapping implements StreamTransformation {

   private Map           param = null;
   private AbstractTrace  trace = null;

   public void setParameter (Map param) {
      this.param = param;
      if (param == null) {
         this.param = new HashMap();
      }
   }

   public void execute(InputStream in, OutputStream out) {

      try {

         trace = (AbstractTrace)param.get(
                   StreamTransformationConstants.MAPPING_TRACE );
         trace.addInfo(‘...’);

         // ...

         String receiverName = (String)param.get(

                   StreamTransformationConstants.RECEIVER_NAME);

         // ...

      }

   }

}

Siehe auch: Spezieller Zugriff auf Mapping-Laufzeitkonstanten.

 

 

Ende des Inhaltsbereichs