Exemple Java
L'exemple suivant illustre comment exécuter un fichier d'exécution de mappage (.mfx) depuis le code Java. Sur Windows, tous les exemples de fichiers sont disponibles sous le chemin suivant : C:\Program Files\Altova\MapForceServer2025\etc\Examples. Ils fonctionnent comme suit :
•TokenizeString.mfx - un fichier d’exécution de MapForce Server qui sera exécuté par le programme Java.
•AltovaTools.xml - un fichier XML qui fournit des données d’entrée au programme de mappage.
Sur les plateformes Linux et Mac, aucun exemple n'est préinstallé ; néanmoins, vous pouvez préparer un fichier .mfx exécutable comme celui exécuté dans cet exemple comme suit :
1.Ouvrir le fichier de design de mappage désiré (.mfd) avec MapForce sur Windows.
2.Dans le menu Fichier, sélectionner Paramètres de mappage, et décocher la case Rendre les chemins absolus dans le code généré en cas de sélection.
3.Pour chaque composant de mappage, ouvrir le dialogue Propriétés (en double-cliquant la barre de titre du composant, par exemple), et modifier tous les chemins de fichier d'absolus en relatifs. Ensuite, cocher la case Enregistrer tous les chemins de fichier relatifs au fichier MFD. Pour un plus grand confort, vous pouvez copier tous les fichiers d'entrée et les schémas dans le même dossier que le mappage lui-même, et les référencer uniquement par le nom de fichier. Se référer à la documentation MapForce pour plus d'informations concernant la gestion avec des chemins relatifs et absolus tout en concevant des mappages
4.Dans le menu Fichier, Choisir sur Compiler vers un fichier d’exécution (.mfx) de MapForce Server. Cela génère le fichier .mfx que vous allez exécuter par la suite avec MapForce Server, comme indiqué dans l'extrait de code suivant.
Prérequis
Avant de tester ce code ci-dessous, assurez-vous que les exigences suivantes sont correctes :
•MapForce Server est installé et mis sous licence
•Le Java CLASSPATH comprend une référence à la bibliothèque MapForceServer.jar (pour un exemple,voir À propos de l'interface Java.
Si vous utilisez un fichier .mfx personnalisé comme indiqué ci-dessus, il peut y avoir d'autres exigences préalables, selon le type de données traitées par le mappage. Pour plus d'informations, voir Préparer les mappages pour l'exécution de serveur.
Sur Windows, le projet d'exemple Java se trouve dans le répertoire "Program Files", qui nécessite des droits administratifs. Vous devrez soit exécuter votre environnement de développement Java (par exemple, Eclipse) en tant qu'administrateur, ou copier l'exemple dans un dossier différent où vous ne nécessiterez pas de droits d'administrateur. |
Exécuter le programme Java
L'extrait de code ci-dessous crée tout d'abord un objet MapForce Server. Ensuite, il définit le répertoire de travail dans lequel l'application devra chercher des fichiers qui agissent en tant qu'entrée dans le mappage, et dans lequel il doit générer les fichiers de sortie de mappage. Comme mentionné ci-dessus, le fichier de mappage d'exemple lit des données provenant d'un fichier XML de source, veuillez donc vous assurer que le fichier XML et son schéma existent dans le répertoire de travail.
La méthode setServerPath spécifie le chemin de l'exécutable MapForce Server. Par exemple, sur Ubuntu, ceci serait /opt/Altova/MapForceServer2025/bin/mapforceserver. Vous pouvez omettre le setServerPath si vous n'avez pas déplacé le MapForceServer.jar depuis son emplacement par défaut.
Enfin, la méthode run exécute un mappage (fichier .mfx) qui a été compilé avec MapForce (dans cet exemple, TokenizeString.mfx). En cas de succès, le programme ci-dessous génère un fichier CSV et XML dans le répertoire de travail, de même qu’un texte de sortie sur la ligne de commande. En cas d'erreur, le programme tente d'imprimer le dernier message d'exécution généré par MapForce Server.
import com.altova.mapforceserver.MapForceServer;
public class Program {
public static void main(String[] args) { MapForceServer objMFS; try { // set up the server objMFS = new MapForceServer();
// The default location of the server is the directory that the java native library is in. // With the following line you could select a different server binary. // objMFS.setServerPath(strServerPath);
// The sample data is located in the parent folder of the Java sample code objMFS.setWorkingDirectory("..");
System.out.println("Running " + objMFS.getProductNameAndVersion());
//Set global resource file and configuration, if your mapping uses global resources //objMFS.setOption( "globalresourcefile", "GlobalResources.xml" ); // "gr" can be used as short name for "globalresourcefile" //objMFS.setOption( "globalresourceconfig", "Default" ); // "gc" can be used as short name for "globalresourceconfig"
// ----------------------------------------------------------------------------------- // An example with input and output paths stored inside the MFX file System.out.println("\nExecuting TokenizeString.mfx..."); if (objMFS.run("TokenizeString.mfx")) System.out.println("Success: " + objMFS.getLastExecutionMessage()); else System.out.println("Unsuccessful: " + objMFS.getLastExecutionMessage());
// ---------------------------------------------------------------------------------- // An example creating a simple output so that we can retrieve the result explicitly System.out.println("\nExecuting TokenizeString.mfx..."); if (objMFS.run("SimpleTotal.mfx")) System.out.println("Mapping result is: " + objMFS.getOutputParameter("total")); else { // execution failed (e.g. somebody deleted file ipo.xml) System.out.println(objMFS.getLastExecutionMessage()); } // ---------------------------------------------------------------------------------- // An example with parameterized input // the default of 'lower = 5' gets changed to the value '10' // mfx reads file Temperatures.xml and writes its output to Temperatures_out.xml. System.out.println("\nExecuting ClassifyTemperatures.mfx with parameter 'lower' set to '10' ..."); objMFS.addParameter("lower", "10"); if (objMFS.run("ClassifyTemperatures.mfx")) System.out.println("File Temperatures_out.xml has been written successfully."); else { // execution failed. maybe no write permissions in working directory? Run this program as administrator. System.out.println(objMFS.getLastExecutionMessage()); }
// You can stop the server explicitly by invoking the 'stop' method if you don't want to let the garbage collector decide. objMFS.stop(); } catch (Exception e) { System.out.println("ERROR: " + e.getMessage()); } }
}
|