Thursday, 15 April 2010

java - glassfish4, javacompiler classloader error on CompilationTask.call method - cannot find symbol -



java - glassfish4, javacompiler classloader error on CompilationTask.call method - cannot find symbol -

using glassfish4, jdk1.7 errors in task.call() method,

>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] , etc...

in j2se client code works ok, in glassfish server errors

example code;

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 phone call classloader cl = mfm.getclassloader(standardlocation.class_output); seek { homecoming cl.loadclass(classname); } grab (classnotfoundexception e) { logger.getlogger(getclass().getname()).log(level.severe, "err:" + e); homecoming null; } } else homecoming null; } private string getclasscode(string classname) { stringbuilder sb = new stringbuilder(); sb.append("package padm.exforms;"); //also tried without 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("(){}"); }

how utilize javacompiler in glassfish4 ? tried set class-loader delegate=false in sun-web.xml, after ejb beans don`t work

thanks

you can seek following:

create new arraylist:

list<javafileobject> classes = new arraylist<javafileobject>();

add fileobject:

classes.add(new simplejavafileobject(new uri(path_to_java_file),javafileobject.kind.source));

pass arraylist gettask() method:

compilationtask task = compiler.gettask(null, mfm, listener, flags, null, classes);

another way:

standardjavafilemanager filemanager = compiler.getstandardfilemanager(null, null, null); iterable<? extends javafileobject> classes = filemanager.getjavafileobjectsfromfiles(arrays.aslist(new file(path_to_java_file))); compilationtask task = compiler.gettask(null, mfm, listener, flags, null, classes);

java classloader glassfish-4 java-compiler-api

No comments:

Post a Comment