¿Cómo puedo acceder a las clases cargadas por Java Web Start cuando compilo código dinámicamente?

StackOverflow https://stackoverflow.com/questions/100737

Pregunta

Estoy compilando código dinámicamente en mi aplicación cliente.Cuando inicio la aplicación con Java Web Start obtengo una excepción.La excepción sólo ocurre cuando se ejecuta a través de Java Web Start.

//The exception
evolver.core.model.change.execution.ExecutionException: Compilation failed!

DynamicComparator.java:2: package evolver.core.model.i does not exist
import evolver.core.model.i.IDefaultObject;
                           ^
DynamicComparator.java:9: cannot find symbol
symbol  : class PropertyBag
location: class DynamicComparator
PropertyBag b2 = new PropertyBag(dob2);
                     ^

La bolsa de propiedad anterior debería haber sido proporcionada por JNLPClassLoader, ya que forma parte de uno de los archivos que descargan JWS

El código que causa el problema se ve así.

public static int compile(String javaFileName) {    
    ByteArrayOutputStream os = new ByteArrayOutputStream();
    PrintWriter w = new PrintWriter(os);
    int res = com.sun.tools.javac.Main.compile(new String[]{"-d", "./", javaFileName}, w);
    if (res != 0)
        throw new ExecutionException("Compilation failed!" + "\n\n" + os.toString());
    return res;
}

¡Cualquier ayuda será muy apreciada!

¿Fue útil?

Solución

Tal como está actualmente, tendrás que compilar el código en el servidor.El servidor no debe ofrecer ningún código que pueda permitir ataques entre sitios, así que tenga mucho cuidado.Luego, el cliente puede usar URLClassLoader.newInstance para cargarlo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top