¿Cómo puedo acceder a las clases cargadas por Java Web Start cuando compilo código dinámicamente?
-
01-07-2019 - |
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!
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