Ejemplo en Java
Este ejemplo muestra cómo ejecutar un archivo de ejecución de MapForce (.mfx) desde código Java. En Windows, los archivos de ejemplo están en: C:\Program Files\Altova\MapForceServer2025\etc\Examples.
•TokenizeString.mfx: un archivo de ejecución de MapForce Server que ejecuta el programa Java.
•AltovaTools.xml: un archivo XML que proporciona datos de entrada al programa de la asignación.
En las plataformas Linux y Mac no hay ningún ejemplo ya instalado, pero puede preparar un archivo .mfx ejecutable como el de este ejemplo siguiendo estos pasos:
1.Abra un archivo de diseño de asignación (.mfd) con MapForce en Windows.
2.En el menú Archivo, seleccione Configurar asignación y desmarque la casilla Convertir las rutas de acceso en absolutas en el código generado si estaba marcada.
3.En cada componente de la asignación abra el cuadro de diálogo "Propiedades" (haga doble clic en la barra de título del componente, por ejemplo) y cambie todas las rutas de los archivos de absolutas a relativas. Marque también la casilla Guardar todas las rutas de acceso de archivos como relativas al archivo MFD. Si le resulta más cómodo, puede copiar todos los archivos y esquemas de entrada en la misma carpeta en la que se encuentra la asignación para poder hacer referencia a ellos usando solamente su nombre. Consulte la documentación de MapForce para más información sobre las rutas relativas y absolutas en el diseño de asignaciones.
4.En el menú Archivo, seleccione Compilar en archivo de ejecución de MapForce Server para generar el archivo .mfx que después ejecutará con MapForce Server, como se muestra en el extracto de código de más abajo.
Requisitos
Antes de ejecutar el código siguiente, asegúrese de que cumple estos requisitos:
•MapForce Server está instalado y posee una licencia
•Java CLASSPATH incluye una referencia a la biblioteca MapForceServer.jar (para ver un ejemplo consulte Interfaz Java).
Si está usando un archivo .mfx personalizado como el de más arriba, puede que deba cumplir también otros requisitos en función de los datos que procese la asignación. Para más información consulte Preparar asignaciones para ejecución en servidor.
En Windows, el proyecto Java de ejemplo está en el directorio "Archivos de programa", que necesita derechos de administrador, por lo que deberá ejecutar su entorno de desarrollo Java (por ejemplo, Eclipse) como administrador o copiar el ejemplo a una carpeta distinta para la que no necesite esos derechos. |
Ejecutar la asignación en Java
El extracto de código siguiente primero crea un objeto de MapForce Server. A continuación define el directorio de trabajo en el que la aplicación debe buscar los archivos de entrada de la asignación y donde también se generan los archivos de salida de la asignación. Como hemos mencionado anteriormente, el archivo de asignación de ejemplo lee datos desde un archivo XML de origen, por lo que debe asegurarse de el directorio de trabajo contiene tanto el archivo XML como el esquema.
El método setServerPath indica la ruta de acceso al ejecutable de MapForce Server. Por ejemplo, en Ubuntu, este sería /opt/Altova/MapForceServer2025/bin/mapforceserver. Puede omitir setServerPath si no ha movido MapForceServer.jar de su ubicación predeterminada.
Por último, el método run ejecuta una asignación (archivo .mfx) compilado con MapForce (en este ejemplo, TokenizeString.mfx). Si se ejecuta correctamente, el programa siguiente genera un archivo CSV y un archovo XML en el directorio de trabajo. Si la ejecución falla, el programa intenta imprimir el último mensaje de ejecución generado por 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 SimpleTotal.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()); } }
}
|