Comment puis-je accéder aux classes chargées par Java Web Start lors de la compilation dynamique de code?

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

Question

Je compile le code de manière dynamique dans mon application cliente. Lorsque je lance l'application avec Java Web Start, je reçois une exception. L’exception ne se produit que lorsqu’elle est exécutée via 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);
                     ^

Le PropertyBag ci-dessus aurait dû être fourni par JNLPClassloader en tant que il fait partie d'un des fichiers téléchargés par JWS

Le code à l'origine du problème ressemble à ceci.

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;
}

Toute aide sera très appréciée!

Était-ce utile?

La solution

Dans l'état actuel des choses, vous devrez compiler le code sur le serveur. Le serveur ne doit pas servir de code pouvant permettre des attaques entre sites. Soyez donc très prudent. Le client peut ensuite utiliser URLClassLoader.newInstance pour le charger.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top