Ir al contenido

ExecutionUtils

Clase de utilidad para ejecutar scripts BeanShell y comandos del sistema operativo. Todos los métodos son estáticos.

Descripción:

Método Valores devueltos Descripción
runScript(File script) Object[] Ejecuta un script BeanShell desde un fichero y devuelve un array de tres elementos.
  • script: El fichero .bsh a ejecutar.
  • El Object[] devuelto tiene tres elementos:

Ejemplo:

package com.openkm;
import java.io.File;
import com.openkm.util.ExecutionUtils;
public class Test {
public static void main(String[] args) {
try {
File script = new File("/home/openkm/test.bsh");
Object[] result = ExecutionUtils.runScript(script);
System.out.println("Return: " + result[0]);
System.out.println("StdOut: " + result[1]);
System.out.println("StdErr: " + result[2]);
} catch (Exception e) {
e.printStackTrace();
}
}
}

runScript (desde cadena, con token de sistema)

Sección titulada «runScript (desde cadena, con token de sistema)»

Descripción:

Método Valores devueltos Descripción
runScript(String script, String systemToken) Object[] Ejecuta un script BeanShell proporcionado como cadena, con el token de sistema previamente inyectado en el entorno del script como la variable systemToken.
  • script: El código fuente del script BeanShell como cadena.
  • systemToken: El token de administrador, disponible dentro del script como la variable systemToken.
  • El Object[] devuelto tiene tres elementos: [0] valor de retorno, [1] stdout, [2] stderr.

Ejemplo:

package com.openkm;
import com.openkm.module.db.stuff.DbSessionManager;
import com.openkm.util.ExecutionUtils;
public class Test {
public static void main(String[] args) {
try {
String systemToken = DbSessionManager.getInstance().getSystemToken();
String script = "import com.openkm.api.OKMDocument;\n" +
"import com.openkm.util.ContextWrapper;\n" +
"OKMDocument doc = ContextWrapper.getContext().getBean(OKMDocument.class);\n" +
"System.out.println(doc.getProperties(systemToken, \"/okm:root/test.pdf\"));";
Object[] result = ExecutionUtils.runScript(script, systemToken);
System.out.println("StdOut: " + result[1]);
System.out.println("StdErr: " + result[2]);
} catch (Exception e) {
e.printStackTrace();
}
}
}

runScript (desde cadena, con entorno personalizado)

Sección titulada «runScript (desde cadena, con entorno personalizado)»

Descripción:

Método Valores devueltos Descripción
runScript(String script, Map<String, Object> env) Object[] Ejecuta un script BeanShell proporcionado como cadena, precargando el intérprete del script con todas las variables del map env. Esta es la variante más flexible para pasar contexto personalizado a los scripts.
  • script: El código fuente del script BeanShell como cadena.
  • env: Un map de nombres de variable a valores, disponible dentro del ámbito del script.
  • El Object[] devuelto tiene tres elementos: [0] valor de retorno, [1] stdout, [2] stderr.

Ejemplo:

package com.openkm;
import com.openkm.module.db.stuff.DbSessionManager;
import com.openkm.util.ExecutionUtils;
import java.util.HashMap;
import java.util.Map;
public class Test {
public static void main(String[] args) {
try {
Map<String, Object> env = new HashMap<>();
env.put("systemToken", DbSessionManager.getInstance().getSystemToken());
env.put("folderPath", "/okm:root/reports");
String script = "System.out.println(\"Processing folder: \" + folderPath);";
Object[] result = ExecutionUtils.runScript(script, env);
System.out.println("StdOut: " + result[1]);
System.out.println("StdErr: " + result[2]);
} catch (Exception e) {
e.printStackTrace();
}
}
}

Descripción:

Método Valores devueltos Descripción
runCmd(String cmd) CmdExecutionResult Ejecuta una cadena de comando del sistema operativo usando el timeout de ejecución por defecto del sistema. El comando se divide por espacios; los argumentos entre comillas se gestionan correctamente.
  • cmd: La línea de comando a ejecutar. Se admiten argumentos entre comillas que contengan espacios.
  • CmdExecutionResult contiene:

Ejemplo:

package com.openkm;
import com.openkm.bean.CmdExecutionResult;
import com.openkm.util.ExecutionUtils;
public class Test {
public static void main(String[] args) {
try {
CmdExecutionResult result = ExecutionUtils.runCmd("ls -la /home/openkm");
System.out.println("Exit: " + result.getExitValue());
System.out.println("StdOut: " + result.getStdout());
System.out.println("StdErr: " + result.getStderr());
} catch (Exception e) {
e.printStackTrace();
}
}
}

Descripción:

Método Valores devueltos Descripción
runCmd(String cmd, long timeout) CmdExecutionResult Ejecuta una cadena de comando del sistema operativo con un timeout personalizado en milisegundos. Si el proceso no termina dentro del timeout, se mata.
  • cmd: La línea de comando a ejecutar.
  • timeout: Tiempo máximo de ejecución en milisegundos.

Ejemplo:

package com.openkm;
import com.openkm.bean.CmdExecutionResult;
import com.openkm.util.ExecutionUtils;
import java.util.concurrent.TimeUnit;
public class Test {
public static void main(String[] args) {
try {
long timeout = TimeUnit.SECONDS.toMillis(30);
CmdExecutionResult result = ExecutionUtils.runCmd("convert input.pdf output.png", timeout);
if (result.getExitValue() != 0) {
System.err.println("Command failed: " + result.getStderr());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}

Descripción:

Método Valores devueltos Descripción
runCmd(String[] cmd) CmdExecutionResult Ejecuta un comando del sistema operativo proporcionado como un array de cadenas ya dividido, usando el timeout por defecto del sistema. Use esta variante cuando los argumentos ya contengan espacios o caracteres especiales que no deban volver a dividirse.
  • cmd: El comando y sus argumentos como elementos separados del array.

Ejemplo:

package com.openkm;
import com.openkm.bean.CmdExecutionResult;
import com.openkm.util.ExecutionUtils;
public class Test {
public static void main(String[] args) {
try {
String[] cmd = { "cp", "/home/openkm/source.pdf", "/home/openkm/dest dir/copy.pdf" };
CmdExecutionResult result = ExecutionUtils.runCmd(cmd);
System.out.println("Exit: " + result.getExitValue());
} catch (Exception e) {
e.printStackTrace();
}
}
}

Descripción:

Método Valores devueltos Descripción
printErrorInfo(Logger srcLog, CmdExecutionResult er) void Registra el valor de salida, stdout y stderr de un CmdExecutionResult a nivel ERROR usando el logger proporcionado. Útil para diagnosticar ejecuciones de comandos fallidas.

Ejemplo:

package com.openkm;
import com.openkm.bean.CmdExecutionResult;
import com.openkm.util.ExecutionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Test {
private static final Logger log = LoggerFactory.getLogger(Test.class);
public static void main(String[] args) {
try {
CmdExecutionResult result = ExecutionUtils.runCmd("somecommand --arg");
if (result.getExitValue() != 0) {
ExecutionUtils.printErrorInfo(log, result);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}