Pergunta

Estou dinamicamente compilar o código no meu aplicativo cliente. Quando eu iniciar o aplicativo com o Java Web Start eu recebo uma exceção. A exceção só ocorre quando ele é executado atravé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);
                     ^

O PropertyBag acima deveria ter sido fornecido pelo JNLPClassloader como é parte de um dos arquivos que são baixados por JWS

O código que faz com que os olhares problema como este.

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

Qualquer ajuda será muito apreciada!

Foi útil?

Solução

Na sua redacção actual, você vai ter que compilar o código no servidor. O servidor não deve servir qualquer código que pode permitir ataques de sites cruzados, que deve ter muito cuidado. O cliente pode então usar URLClassLoader.newInstance para carregá-lo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top