Altova MapForce 2024 Enterprise Edition

Importieren benutzerdefinierter Java- und NET-Bibliotheken

Zur Startseite Zurück Nach oben Weiter

In diesem Abschnitt wird erläutert, wie Sie kompilierte Java-Klassendateien sowie .NET DLL-Assembly-Dateien (einschließlich .NET 4.0 Assemblys) in MapForce importieren. Wenn die importierten Bibliotheken Funktionen enthalten, die Basisdatentypen als Parameter verwenden und simpleTypes zurückgeben, so werden solche Funktionen im Fenster Bibliotheken angezeigt und können wie jede andere Funktion in MapForce Mappings verwendet werden. Eine Vorschau der Mapping-Ausgabe der importierten Java- und .NET-Funktionen kann im Ausgabefenster angezeigt werden. Außerdem stehen die Funktionen im generierten Code zur Verfügung. Nähere Informationen zum Import benutzerdefinierter Bibliotheken finden Sie in den Beispielen in den Kapiteln Import einer benutzerdefinierten Java-Klasse und Import einer benutzerdefinierten .NET DLL-Assembly.

 

Achtung:

 

Um benutzerdefinierte Java- oder .NET-Funktionen zu importieren, benötigen Sie kompilierte Java-Klassen (.class) oder .NET.dll-Assembly-Dateien. Der Import von Java .jar-Dateien oder .dll-Dateien, bei denen es sich nicht um eine .NET-Assembly handelt, wird nicht unterstützt.

 

.NET Assembly-Dateien werden unterstützt, wenn als Mapping-Sprache C# eingestellt ist. Die .NET Assemblies können in .NET-Sprachen mit Ausnahme von C# geschrieben sein (z.B. C++.NET oder VB.NET), wenn sie als Parameter und Rückgabetypen nur die Basisdatentypen aus der System Assembly verwenden. Nähere Informationen dazu finden Sie unter Unterstützung von .NET-Funktionen.

 

Wenn Sie benutzerdefinierte NET-Funktionen in der integrierten Ausgabevorschau (im Fenster Ausgabe) verwenden möchten, müssen diese Funktionen für das .NET Framework 4.x oder :NET Standard 2.0 kompiliert werden.

 

Kompilierte Java-Klassendateien (.class-Dateien) werden unterstützt, wenn als Mapping-Sprache Java eingestellt ist. Auf Ihrem Rechner muss Java Runtime Environment 7 oder höher installiert sein. Es werden nur bestimmte Typen und Member unterstützt (siehe Unterstützung von Java-Funktionen).

 

Sie können die Mapping-Sprache nicht auf C++ setzen, wenn im Mapping importierte Java.class- oder .NET DLL-Assemblys verwendet werden.

 

Sie können die Mapping-Sprache nicht auf XSLT setzen, wenn im Mapping importierte Java.class- oder .NET DLL-Assemblys verwendet werden (es müsste eine benutzerdefinierte XSLT-Funktion geschrieben werden, die als Adapter fungiert).

 

Der Import von Funktionen aus nativen C++ DLLs ist eingeschränkt. Es ist dafür eine eigene Methode erforderlich. Nähere Informationen finden Sie unter Manuelles Referenzieren von Java, C# und C++-Bibliotheken.

 

Alle von einem MapForce Mapping aus aufgerufenen Funktionen sollten jedes Mal, wenn die Funktion mit denselben Input-Parametern aufgerufen wird, denselben Wert zurückgeben. Die genaue Reihenfolge und wie oft eine Funktion von MapForce aufgerufen wird, ist nicht definiert.

 

Im Fall von Java müssen die importierten Klassendateien nicht zur CLASSPATH-Variablen hinzugefügt werden, da der Built-In-Ausführungsprozessor und der generierte Java-Code importierte Pakete automatisch zum Classpath bzw. zum ANT des Java-Prozessors hinzufügen. Abhängigkeiten der importierten Klassendateien und Pakete werden jedoch nicht automatisch behandelt. Wenn importierte Java-Klassendateien daher von anderen Klassendateien abhängig sind, stellen Sie sicher, dass auch die übergeordneten Verzeichnisse aller abhängigen Pakete zur CLASSPATH-Umgebungsvariable hinzugefügt werden.

 

Unterstützung von Java-Funktionen

Klassen der obersten Ebene, statische Member-Klassen und nicht statische Member-Klassen werden unterstützt:

 

new <classname>(<arg1>, <arg2>, ...)

<object>.new <member-class>(<arg1>, <arg2>, ...)

 

Member-Funktionen und statische Funktionen werden unterstützt:

 

<function>(<arg1>, <arg2>, ...)

<object>.<method>(<arg1>, ...)

 

Unterstützte Verbindungen zwischen XML-Schema- und Java-Typen:

 

Schema-Typ

Java-Typ

xs:string

String

xs:byte

byte

xs:short

short

xs:int

int

xs:long

long

xs:boolean

boolean

xs:float

float

xs:double

double

xs:decimal

java.math.BigDecimal

xs:integer

java.math.BigInteger

 

Verbindungen können in beide Richtungen hergestellt werden. Andere Java-Typen (einschließlich Array-Typen) werden nicht unterstützt. Methoden, die solche Parameter oder Rückgabewerte verwenden, werden ignoriert. Object-Typen werden durch Aufruf ihres Konstruktors oder als Rückgabewert einer Methode unterstützt. Sie können auf andere Java-Methoden gemappt werden. Eine Bearbeitung des Objekts mit Hilfe von MapForce ist nicht möglich.

 

Unterstützung von .NET-Funktionen

Klassen der obersten Ebene werden unterstützt:

 

new <classname>(<arg1>, <arg2>, ...)

 

Member-Funktionen und statische Funktionen werden unterstützt:

 

<function>(<arg1>, <arg2>, ...)

<object>.<method>(<arg1>, ...)

 

Unterstützte Verbindungen zwischen XML-Schema- und .NET/C#-Typen:

 

Schema-Typ

.NET-Typ

C#-Typ

xs:string

System.String

string

xs:byte

System.SByte

sbyte

xs:short

System.Int16

short

xs:int

System.Int32

int

xs:long

System.Int64

long

xs:unsignedByte

System.Byte

byte

xs:unsignedShort

System.UInt16

ushort

xs:unsignedInt

System.UInt32

uint

xs:unsignedLong

System.UInt64

ulong

xs:boolean

System.Boolean

bool

xs:float

System.Single

float

xs:double

System.Double

double

xs:decimal

System.Decimal

decimal

 

Verbindungen können in beide Richtungen hergestellt werden. Andere .NET/C#-Typen (einschließlich Array-Typen) werden nicht unterstützt. Methoden, die solche Parameter oder Rückgabewerte verwenden, werden ignoriert. Object-Typen werden durch Aufruf ihres Konstruktors oder als Rückgabewert einer Methode unterstützt. Sie können auf andere .NET-Methoden gemappt werden. Eine Bearbeitung des Objekts mit Hilfe von MapForce ist nicht möglich.

 

Probleme und Umgehungslösungen im Zusammenhang mit Datentypen

Wenn eine Funktion in Ihrer benutzerdefinierten Bibliothek Ganzzahltypen erwartet, kann es bei Verbindung von Konstanten vom Typ Zahl mit den Argumenten der Funktion zu einem Fehler wegen einem nicht übereinstimmendem Typ kommen ähnlich dem folgenden: No match for MyCustomClassLibrary, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.MyCustomClassLibrary.Converter.AddValues(MyCustomClassLibrary.Converter, xs:decimal, xs:decimal). Check argument types. Dieses Problem tritt spezifisch bei Konstanten vom Typ Zahl auf. Unten sehen Sie ein Beispielmapping, bei dem dieser Fehler generiert werden könnte. In diesem Mapping sind zwei Konstanten vom Typ Zahl mit den Argumenten der Funktion vom Typ Integer verbunden.

mf_customlib_workaround

Unten sind mögliche Umgehungslösungen beschrieben:

 

1.Ändern Sie den Konstantentyp von Zahl in Alle anderen. Doppelklicken Sie dazu auf die Titelleiste der Konstantenkomponente, um dies zu ändern.

2.Verwenden Sie anstatt einer Konstante eine Quellkomponente (z.B. eine XML-Datei), die Werte des von der Funktion erwarteten Datentyps bereitstellt.

mf_customlib_workaround_03

3.Erstellen Sie in Ihrem externen Code eine Wrapper-Funktion, die einen Dezimalwert akzeptiert und einen Ganzzahlwert zurückgibt. Die Wrapper-Lösung kann als separate Bibliothek importiert werden. Daher müssen sie den Originalquellcode der Zielfunktion nicht ändern, um diese Methode verwenden zu können.

 

© 2017-2023 Altova GmbH