,在task.call jdk1.7 錯誤()方法,glassfish4,在CompilationTask.call方法通過JavaCompiler類加載器錯誤 - 找不到符號使用glassfish4
>compiler.err.cant.resolve.location.args
>padm.exforms.MemoryFileManager$JavaSourceFromString[mfm:///CM.java]]]
>cannot find symbol
symbol: method getVal(int,int)
location: class padm.exforms.CM]
and etc...
在J2SE客戶端代碼工作正常,在GlassFish中服務器獲取錯誤
示例代碼;
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector();
String className = "CM";
Class<?>_class = getClassFromString(compiler, diagnostics, Arrays.asList("-g:none", "-classpath", System.getProperty("java.class.path")), className, getClassCode(className));
private Class<?> getClassFromString(JavaCompiler compiler, DiagnosticListener<JavaFileObject> listener, List<String> flags, String className, String classCode) {
MemoryFileManager mfm = new MemoryFileManager(compiler.getStandardFileManager(listener, null, null));
JavaFileObject fileObject = MemoryFileManager.makeSource(className, classCode);
CompilationTask task = compiler.getTask(null, mfm, listener, flags, null, Arrays.asList(fileObject));
if (task.call()) { //error in this call
ClassLoader cl = mfm.getClassLoader(StandardLocation.CLASS_OUTPUT);
try {
return cl.loadClass(className);
} catch (ClassNotFoundException e) {
Logger.getLogger(getClass().getName()).log(Level.SEVERE, "err:" + e);
return null;
}
} else
return null;
}
private String getClassCode(String className) {
StringBuilder sb = new StringBuilder();
sb.append("package padm.exforms;"); //also tried without this line
sb.append("import java.math.*; import java.sql.*; public class ");
sb.append(className);
sb.append(" extends ");
sb.append(ConditionManager.class.getCanonicalName());
sb.append("{public ");
sb.append(className);
sb.append("(){}");
}
如何在glassfish4中使用javacompiler? 我也嘗試設置類加載器的委託=假sun-web.xml中,但是EJB豆後不`噸工作
感謝
應該在PATH_TO_JAVA_FILE中設置什麼? java文件是字符串 – nnn
作爲var的名稱建議,您的java文件的路徑。 – unwichtich
我沒有java文件,java源碼在String對象中,從getClassCode()方法返回 – nnn