Angepasste Transformation mit Java Code (Custom Java)

In Editor für grafische Datenzuordnungkönnen Sie die Angepasstes Java™ -Transformation verwenden, um Java-Code in Nachrichtenzuordnungeinzugeben.

Übersicht

Sie können eine Angepasstes Java -Transformation verwenden, um Elemente mit einem einfachen Typ zu verarbeiten, und der Typ stimmt mit einem nativen Java-Typ überein.

Sie können eine Angepasstes Java -Transformation verwenden, um Eingaben und Ausgaben zu verarbeiten, die Arrays oder komplexe Typen sind. Weitere Informationen finden Sie unter Komplexe oder sich wiederholende Elemente in einer Custom Java-Transformation verarbeiten.

Richtlinien für den Entwurf einer Java-Methode zum Umsetzen einfacher Typen

Die Java-Klasse, die Sie für die Zuordnung bereitstellen, muss eine statische Methode haben, die den entsprechenden Typ für den Wert des Ausgabeelements zurückgibt und Parameter des entsprechenden Typs für die verbundenen Eingaben verwendet.

Die folgende Java-Methode kann beispielsweise in einer Angepasstes Java -Transformation verwendet werden, die drei Eingabeelemente des folgenden Typs enthält:xs:string,xs:decimalundxs:boolean, und das Ausgabeelement hat einenxs:decimalTyp:

	public static BigDecimal calSomething(String memType, BigDecimal stdCost, boolean flag) {
		BigDecimal actualCost = stdCost;
		if (flag & memType.startsWith("gold")) {
			BigDecimal discRate = new BigDecimal(0.9);
			actualCost = actualCost.multiply(discRate);
		}			
		return actualCost;
	}

Richtlinien für den Entwurf einer Java-Methode zur Umsetzung komplexer oder sich wiederholender Typen

Sie können eine Angepasstes Java -Transformation verwenden, um Eingaben und Ausgaben zu verarbeiten, die Arrays oder komplexe Typen sind. IBM® Integration BusJava plugin API MbElement Java classübergibt Daten nur in einer angepassten Java-Umsetzung. DieJava DOM APIübergibt Daten in angepassten Java-Umsetzungen und in Bedingungsausdrücken für die Umsetzung.

Sie können die Klasse MbElement in einer Java-Methode verwenden, um einen komplexen Typ, einen Platzhalter 'xsd:any'oder einen Platzhalter xsd:anySimpleTypezu übergeben.

Java-Klasse sichtbar machen

Damit eine Java-Klasse in der Umsetzung sichtbar wird, müssen Sie sicherstellen, dass das Java-Projekt, in dem sich die Klasse befindet, von dem Projekt referenziert wird, das die Zuordnung enthält.
  1. Klicken Sie auf der Seite Anwendungsentwicklung mit der rechten Maustaste auf das Projekt, in dem die Zuordnung definiert ist.
  2. Wählen Sie Managed included projects aus.
  3. Wählen Sie das Java-Projekt aus und klicken Sie anschließend auf OK.
Anmerkung: Wenn das Java-Projekt, das die Java-Klasse enthält, nicht in Eclipseerstellt wird, ist die Java-Klasse an keiner Stelle in der Map sichtbar. Sie müssen alle Java-Fehler beheben, die auf der Registerkarte Probleme angezeigt werden, bevor Sie die Registerkarte Java-Importe auf der Seite Eigenschaften der Zuordnung konfigurieren können.

Java-Methode aufrufen

Sie können nur einen Aufruf einer Java-Methode in einer angepassten Java-Umsetzung konfigurieren. Sie können weitere Operationen (Java-Methode oder XPath-Ausdruck) in den Parametern definieren, die von der Methode benötigt werden.

Sie können die Java-Klasse und eine Java-Methode auf der Registerkarte Allgemein der Seite Eigenschaften der Umsetzung konfigurieren. Die von Ihnen angegebene Methode definiert die Transformationslogik, die von der Angepasstes Java -Transformation angewendet wird.

Anmerkung: Die Java-Klasse, die die Methode enthält, muss in einem Java-Projekt in Ihrem Arbeitsbereich verfügbar sein. Die Java-Klasse muss für das Projekt sichtbar sein, das die Map enthält.

Zeigt die Registerkarte 'Allgemein' der Eigenschaftenseite an.

Wenn Sie auf der Registerkarte Allgemein der Seite Eigenschaften einer Angepasstes Java -Transformation in Ihrer Zuordnung einen Java-Aufruf hinzufügen, wird automatisch ein Import zur Zuordnung hinzugefügt, um auf die paketqualifizierte Java-Klasse zu verweisen, und es wird ein Präfix basierend auf dem Klassennamen hinzugefügt. Alle Öffentliche statische Methoden in dieser Java-Klasse sind dann in der Inhaltshilfe verfügbar, wenn Ausdrücke in anderen Umsetzungen erstellt werden.

Weitere Informationen finden Sie unter Element mithilfe einer Custom Java-Transformation zuordnen.

Definieren, wenn die Transformation zur Laufzeit angewendet wird

Sie können Ergänzung -Verbindungen zwischen Eingabeelementen und der Angepasstes Java -Transformation definieren. Anschließend können Sie jedes Eingabeelement in einem Bedingungsausdruck verwenden, der die Bedingung definiert, unter der die Transformation angewendet wird. Wenn die Bedingung den Wert true ergibt, wird die Transformation angewendet.

Zum Konfigurieren des bedingten Ausdrucks definieren Sie einen XPath-Ausdruck oder einen Java-Ausdruck auf der Registerkarte Bedingung , der auf der Seite Eigenschaften der Transformation verfügbar ist.

Zeigt die Registerkarte 'Bedingung' der Eigenschaftenseite an.

Zum Definieren des Bedingungsausdrucks können Sie einen XPath-Ausdruck oder einen Aufruf einer statischen Methode in einer importierten Java-Klasse definieren. Sie können auch einen komplexen Ausdruck erstellen, der XPath-, Java-und Erweiterungsfunktionen wie iib:getUserDefinedProperty ("Eigenschaftsname")enthält.  

Wenn die Java-Methode keinen Wert bereitstellt, erstellt die Umsetzung standardmäßig ein Element mit einem leeren Wert. Soll kein Element erstellt werden, können Sie auf der Registerkarte Bedingung einen Bedingungsausdruck hinzufügen.

Weitere Informationen finden Sie in Eigenschaften einer Transformation konfigurieren, XPath-Bedingungsausdruck für eine Transformation definierenund Java-Bedingungsausdruck für eine Umsetzung definieren.

Zuordnungen zwischen dem Schematyp, dem Java-Typ und dem IBM Integration Bus -Nachrichtenassemblierungstyp

Die folgende Tabelle zeigt die Zuordnungen zwischen dem Schematyp, dem Java-Typ und dem IBM Integration Bus -Nachrichtenassemblierungstyp:

Tabelle 1. Schematyp, Java-Typ und Elementtyp der Nachrichtenbaumstruktur zuordnen
Schematyp Java-Typ Elementtyp der IBM Integration Bus -Nachrichtenassemblierungsbaumstruktur
xs:anyURI java.lang.String CHARACTER
xs:base64Binary byte[] BLOB
xs:boolean boolean, java.lang.Boolean BOOLEAN
xs:byte byte, java.lang.Byte INTEGER
xs:date javax.xml.datatype.XMLGregorianCalendar DATE
xs:dateTime javax.xml.datatype.XMLGregorianCalendar TIMESTAMP
xs:dayTimeDuration javax.xml.datatype.Duration INTERVAL
xs:decimal java.math.BigDecimal DECIMAL
xs:double double, java.lang.Double FLOAT
xs:duration javax.xml.datatype.Duration INTERVAL
xs:float float, java.lang.Float FLOAT
xs:gDay javax.xml.datatype.XMLGregorianCalendar DATE
xs:gMonth javax.xml.datatype.XMLGregorianCalendar DATE
xs:gMonthDay javax.xml.datatype.XMLGregorianCalendar DATE
xs:gYear javax.xml.datatype.XMLGregorianCalendar DATE
xs:gYearMonth javax.xml.datatype.XMLGregorianCalendar DATE
xs:hexBinary byte[] BLOB
xs:int int, java.lang.Integer INTEGER
xs:integer java.math.BigInteger DECIMAL
xs:long long, java.lang.Long INTEGER
xs:negativeInteger java.math.BigInteger DECIMAL
xs:nonNegativeInteger java.math.BigInteger DECIMAL
xs:nonPositiveInteger java.math.BigInteger DECIMAL
xs:normalizedString java.lang.String CHARACTER
xs:positiveInteger java.math.BigInteger DECIMAL
xs:short short, java.lang.Short INTEGER
xs:string java.lang.String CHARACTER
xs:time javax.xml.datatype.XMLGregorianCalendar Zeit
xs:unsignedByte Short INTEGER
xs:unsignedInt Lang INTEGER
xs:unsignedLong java.math.BigInteger DECIMAL
xs:unsignedShort Int INTEGER
xs:yearMonthDuration javax.xml.datatype.Duration INTERVAL