El usuario compilador ingresó un script maravilloso en tiempo de ejecución
Tenga un escenario como el siguiente donde necesito validar el script maravilloso para la corrección.
class CostCalculator{
String name
String groovyScript
static constraints = {
groovyScript:static validateScript = {String script ,def obj->
boolean status = true
try {
def shell = new GroovyShell()
def data = shell.parse(script)
data.run()
}catch (Throwable e){
e.printStackTrace()
status = false
}
if(!status){
return "domain.script.compilation.errors"
}else{
return true
}
}
}
}
El problema en el código anterior es que ejecuta el código y, si hay alguna excepción, lo lanza en tiempo de ejecución.
Hay pocas cosas a considerar:
el código maravilloso debe compilarse en lugar de ejecutarse (ya que el código puede contener actualizaciones de nivel db) y generar una excepción.el código maravilloso debería compilarse estáticamente, es decir, por ejemplo, si falta alguna propiedad en el script, entonces debe ser notificado.a continuación podría ser script de ejemplo:
void addCost(int x, int y,String itemName){
double cost = x*y + originalCost
Item item = SoldItem.findByItemName(itemName)
item.price += cost
}