2008-09-19 7 views
1

클라이언트 응용 프로그램에서 코드를 동적으로 컴파일하고 있습니다. Java Web Start로 응용 프로그램을 시작하면 예외가 발생합니다. 이 예외는 Java Web Start를 통해 실행될 때만 발생합니다.코드를 동적으로 컴파일 할 때 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); 
        ^

위의 PropertyBag은은이 JWS

문제는 다음과 같습니다 일으키는 코드에 의해 다운로드되는 파일 중 하나의 일부입니다 으로 JNLPClassLoader를에 의해 제공되어 있어야합니다.

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

도움이 될 것입니다!

답변

1

현재 서버에서 코드를 컴파일해야합니다. 서버는 교차 사이트 공격을 허용 할 수있는 코드를 제공해서는 안되므로 매우 조심해야합니다. 클라이언트는 URLClassLoader.newInstance를 사용하여로드 할 수 있습니다.