Introducción

A veces necesitas proporcionar un pequeño fragmento de código que realice una tarea específica y dar la oportunidad de modificarlo al vuelo o permitir que los usuarios lo personalicen según sus necesidades. En el caso de Java, Groovy es un excelente punto de partida para esto. Como se muestra en el siguiente ejemplo, se crea un pequeño código en Groovy con la posibilidad de insertarlo dentro de un código Java o de llamarlo desde herramientas como JMeter, Jenkins, etc.

NOTA: Añade el framework Groovy al classpath o utilízalo mediante Maven, Gradle o similar al compilar y ejecutar el código Java.

Proceso

  1. Crea, como ejemplo, un pequeño código en Groovy para generar números de DNI españoles aleatorios. Al ser un código tan sencillo, se puede personalizar según tus necesidades incluso después de haber empaquetado la aplicación Java principal:
/**
 * Generador de DNI español al vuelo
 *
 * @param withTimestamp Si es true, usa el timestamp actual para generar el DNI
 * @return DNI español válido en una cadena de texto
 */
def randomDni(boolean withTimestamp = true) {
  def possibleLetters = ["T", "R", "W", "A", "G", "M", "Y", "F", "P", "D", "X", "B", "N", "J", "Z", "S", "Q", "V", "H", "L", "C", "K", "E", "T"]
  Random rand = new Random()
  def dniNumber = Integer.valueOf(new Date().getTime().toString().substring(2, 10))
  if (!withTimestamp) {
    def lowerLimit = 10000000
    def upperLimit = 99999999
    dniNumber = Math.abs(rand.nextInt() % (upperLimit - lowerLimit) + lowerLimit)
  }
  def letterDni = possibleLetters[dniNumber % 23]
  "${dniNumber}${letterDni}".toString()
}

def dni = randomDni(true)
def dni2 = randomDni(false)
assert Objects.nonNull(dni)
assert dni.size() > 0
assert Objects.nonNull(dni2)
assert dni2.size() > 0

return this
  1. Guárdalo como /path/to/random_spanish_id.groovy.
  2. Comprueba su funcionamiento en groovyConsole:

Comprobación de resultados en Groovy Console

  1. Llámalo desde Java utilizando un código similar a este:
import groovy.lang.GroovyShell;
import java.io.File;
import java.util.Objects;

public class Runner {
    public static void main(String[] args) {
        String groovyScriptDir = "/path/to/script/";
        if (Objects.nonNull(System.getProperty("profile.groovy.dir"))) {
           groovyScriptDir = System.getProperty("profile.groovy.dir");
        }
        String value =
           (String)
               (new GroovyShell()
                   .parse(new File(groovyScriptDir + "random_spanish_id.groovy"))
                   .invokeMethod("randomDni", true));  
        System.out.println("Valor: " + value); 
    }
}

NOTA: Utiliza un parámetro del sistema o variable de entorno como profile.groovy.dir (pasado con -Dprofile.groovy.dir=...) para ubicar la carpeta donde se encuentra tu script.