Llamar a funciones JavaScript externas desde código Java

Muhammad Muzammil Hussain 12 octubre 2023
Llamar a funciones JavaScript externas desde código Java

Este artículo discutirá la inclusión de una fuente JavaScript en un programa Java y la llamada a una función JavaScript desde un código Java.

Llamar a funciones JavaScript externas desde código Java

Llamar a una fuente de JavaScript en Java es bastante simple. Si desarrollamos una aplicación Java en la que debemos usar JavaScript, crearemos el archivo de script por separado, luego lo incluiremos y lo llamaremos en la fuente de Java para ejecutar la función deseada.

Echemos un vistazo al siguiente escenario como ejemplo.

Primero, necesitamos definir funciones en un archivo JavaScript separado que será llamado en nuestro código Java. Creamos una fuente de JavaScript para realizar tareas aritméticas como sumar dos valores pasados.

Ejemplo:

var myCalculations = new Object();

myCalculations.addition = function(v1, v2) v1 + v2;

En esta fuente de JavaScript, creamos un nuevo objeto, myCalculations. En ese objeto tenemos definida una función de suma que tomará 2 valores como argumento y los sumará.

Necesitamos guardar esta fuente con la extensión .js ya que este será nuestro documento JavaScript. Para cargar ese script y obtener el objeto, necesitaremos usar la función eval() de ScriptEngineManager.

ScriptEngineManager es una biblioteca Java predeterminada que se puede importar a un código Java. Podemos usar una instancia de esa biblioteca para cargar los scripts.

Podemos cargar el archivo JavaScript, como se muestra a continuación:

String javascriptPath = "drive:/folder/fileName.js";
engine.eval("load('" + javascriptPath + "')");
Object myCalculations = engine.get("myCalculations");

Ahora podemos obtener la función deseada por nombre y pasar los parámetros, como se muestra a continuación:

Object addingResult = inv.invokeMethod(myCalculations, "addition", x, y);

Aquí hay un ejemplo de un programa Java completo que usará un archivo JavaScript usando ScriptEngineManager.

import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;

public class Main {
  public static void main(String[] args) throws Exception {
    ScriptEngineManager manager = new ScriptEngineManager();
    ScriptEngine engine = manager.getEngineByName("JavaScript");

    Invocable inv = (Invocable) engine;
    String javascriptPath = "drive:/folder/fileName.js";
    engine.eval("load('" + javascriptPath + "')");
    Object myCalculations = engine.get("myCalculations");

    int x = 10;
    int y = 5;
    Object addingResult = inv.invokeMethod(myCalculations, "addition", x, y);

    System.out.println("Your addition result will be: " + addingResult);
  }
}

Producción :

Your addition result will be: 15

Explicación del código:

  1. En el código Java anterior, primero importamos una biblioteca útil, ScriptEngineManager, para cargar el script.
  2. En la función principal, hemos creado una instancia de ScriptEngineManager y definido el motor de Script con el nombre de JavaScript.
  3. Ahora, hemos declarado una variable de cadena que se asignará con la ruta del archivo JavaScript.
  4. Luego, cargamos esa ruta con el método engine.eval().
  5. Ahora, hemos llamado al objeto myCalculations del archivo JavaScript y lo hemos usado para invocar la función de ese objeto.
  6. Finalmente, pasamos 2 valores de tipo entero en la función y mostramos el resultado en la terminal usando la función predeterminada de Java, System.out.println("cualquier cosa que desee imprimir").