packagetest.jsr223;importjava.io.*;importjava.util.*;importjavax.script.*;publicclassjsr223 {privateScriptEngine engine;staticprivateMapscriptMap=null;staticprivatevoidcreateMaps() {if(scriptMap==null) {
scriptMap=newHashMap();
ScriptEngineManager manager=newScriptEngineManager();
Listlist=manager.getEngineFactories();for(ScriptEngineFactory scriptEngineFactory : list) {
scriptMap.put(scriptEngineFactory.getEngineName(),
scriptEngineFactory);
scriptMap.put(scriptEngineFactory.getLanguageName(),
scriptEngineFactory);
ListmimeList=scriptEngineFactory.getMimeTypes();for(String string2 : mimeList) {
scriptMap.put(string2, scriptEngineFactory);
}
}
}
}staticpublicScriptEngine initEngineByScript(Scanner reader) {
createMaps();
ScriptEngine engine=null;
String firstLine=reader.nextLine();if(firstLine!=null) {
Setkeys=scriptMap.keySet();for(String string : keys) {if(firstLine.indexOf(string)!=-1) {
engine=scriptMap.get(string).getScriptEngine();break;
}
}
}returnengine;
}staticpublicScriptEngine initEngineByFileName(String scriptFileName) {
ScriptEngine engine=null;intindex=scriptFileName.lastIndexOf('.');if(index!=-1) {
String ext=scriptFileName.substring(index+1, scriptFileName
.length());
ScriptEngineManager manager=newScriptEngineManager();
engine=manager.getEngineByExtension(ext);
}returnengine;
}staticpublicScriptEngine initEngine(String scriptFileName) {
ScriptEngine engine=null;
Scanner scanner=null;try{
scanner=newScanner(newInputStreamReader(newFileInputStream(
scriptFileName)));
engine=initEngineByScript(scanner);if(engine==null)
engine=initEngineByFileName(scriptFileName);
}catch(FileNotFoundException e) {
e.printStackTrace();
}finally{if(scanner!=null)
scanner.close();
}returnengine;
}privatevoidinit(String scriptFileName) {
engine=initEngine(scriptFileName);
Reader reader=null;try{
reader=newInputStreamReader(newFileInputStream(scriptFileName));
engine.eval(reader);
}catch(FileNotFoundException e) {
System.err.printf("Script file %s can't find!\n", scriptFileName);
e.printStackTrace();
System.exit(-1);
}catch(ScriptException e) {
System.err.printf("Run script file %s error!\n", scriptFileName);
e.printStackTrace();
}finally{if(reader!=null)try{
reader.close();
}catch(IOException e) {
e.printStackTrace();
}
}
}publicjsr223(File scriptFile) {
String name=scriptFile.getName();
init(name);
}publicjsr223(String scriptFileName) {
init(scriptFileName);
}staticpublicvoidShowAllAvilableScript() {
ScriptEngineManager manager=newScriptEngineManager();
Listlist=manager.getEngineFactories();for(ScriptEngineFactory scriptEngineFactory : list) {
System.out.printf("EngineName:%s LanguageName:%s Extensions:%s Mime:%s\n",
scriptEngineFactory.getEngineName(), scriptEngineFactory
.getLanguageName(), scriptEngineFactory
.getExtensions(), scriptEngineFactory
.getMimeTypes());
}
}publicvoidcallStart()throwsScriptException, NoSuchMethodException {
Invocable invocableEngine=(Invocable) engine;
invocableEngine.invokeFunction("Start","hello world 世界你好\n");
}publicvoidcallStop()throwsScriptException, NoSuchMethodException {
Invocable invocableEngine=(Invocable) engine;
invocableEngine.invokeFunction("Stop","GoodBye 再见\n");
}/***@paramargs
*@throwsScriptException
*@throwsNoSuchMethodException*/publicstaticvoidmain(String[] args)throwsScriptException,
NoSuchMethodException {//TODO Auto-generated method stub//ShowAllAvilableScript();String scriptFileName="E:\\workspace\\JSR223\\src\\test\\jsr223\\test.py";
jsr223 jsr=newjsr223(scriptFileName);
jsr.callStart();
jsr.callStop();
}
}