ExecutionUtils
Clase de utilidad para ejecutar scripts BeanShell y comandos del sistema operativo. Todos los métodos son estáticos.
Métodos
Sección titulada «Métodos»runScript (desde fichero)
Sección titulada «runScript (desde fichero)»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
.bsha 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(); } }}runCmd (cadena, timeout por defecto)
Sección titulada «runCmd (cadena, timeout por defecto)»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.
CmdExecutionResultcontiene:
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(); } }}runCmd (cadena, timeout personalizado)
Sección titulada «runCmd (cadena, timeout personalizado)»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(); } }}runCmd (array de cadenas)
Sección titulada «runCmd (array de cadenas)»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(); } }}printErrorInfo
Sección titulada «printErrorInfo»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(); } }}