# jsr223



## nameac (12. Nov 2007)

abend,

Wenn ich über folgenden code versuche eine ein php File zu öffnen kommt immer eine java.lang.NullPointerException;

```
ScriptEngineManager m = new ScriptEngineManager(); 
ScriptEngine engine = m.getEngineByName("php");
engine.eval(new FileReader("file.php"));
```

oder kann man eine PHP Engine nur auf einem Tomcat Server ausfüren?


----------



## tuxedo (13. Nov 2007)

IN welcher der 3 Zeilen wir denn die Exception geworden? Stacktrace?

Gibts noch mehr Fehler außer die NPE?


----------



## Murray (13. Nov 2007)

Ich tippe mal auf die letzte Zeile - ScriptEngineManager#getEngineByName liefrt dann null, wenn zum übergebenen Namen keine registrierte Engine-Factory gefunden wurde.

Mach mal

```
ScriptEngineManager m = new ScriptEngineManager(); 
List<ScriptEngineFactory> lst =  m.getEngineFactories();
for ( ScriptEngineFactory sef: lst) System.out.println( sef.getEngineName() + " (" + sef.getNames() + ")");
```
Damit solltest du sehen, welche Engines in deiner Umgebung verfügbar sind.


----------



## nameac (13. Nov 2007)

Ich habe gestern die groovy-engine.jar installiert, für php habe ich keine engine gefunden, jetzt sieht es wie folgt aus;


```
ScriptEngineManager manager = new ScriptEngineManager();
		//ScriptEngine engine = manager.getEngineByName("groovy");
		//System.out.println(engine.eval("(1..10).sum()"));
		List<ScriptEngineFactory> lst =  manager.getEngineFactories(); 
		for ( ScriptEngineFactory sef: lst) System.out.println( sef.getEngineName() + " (" + sef.getNames() + ")");
```

outout: Mozilla Rhino ([js, rhino, JavaScript, javascript, ECMAScript, ecmascript])
groovy ([groovy])

aber wenn ich versuche groovy zu laden:

```
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("groovy");
```
kommt folgender Stacktrace;

Exception in thread "main" java.lang.NoClassDefFoundError: org/codehaus/groovy/syntax/SyntaxException
	at com.sun.script.groovy.GroovyScriptEngineFactory.getScriptEngine(GroovyScriptEngineFactory.java:90)
	at javax.script.ScriptEngineManager.getEngineByName(Unknown Source)
	at Main.main(Main.java:13)


----------



## Murray (13. Nov 2007)

Sieht so aus, als würde die Groovy-Engine Groovy slebst nicht mitbringen - dann musst du wohl auch noch groovy.jar in den Classpath aufnehmen.


----------



## nameac (13. Nov 2007)

ich habe groovy-1.0.jar unter eclipse zum build path hinzu gefügt.jetzt kommt folgender fehler:

```
Exception in thread "main" java.lang.NoClassDefFoundError: org/objectweb/asm/Opcodes
	at java.lang.ClassLoader.defineClass1(Native Method)
	at java.lang.ClassLoader.defineClass(Unknown Source)
	at java.security.SecureClassLoader.defineClass(Unknown Source)
	at java.net.URLClassLoader.defineClass(Unknown Source)
	at java.net.URLClassLoader.access$000(Unknown Source)
	at java.net.URLClassLoader$1.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at java.lang.ClassLoader.loadClassInternal(Unknown Source)
	at groovy.lang.GroovyClassLoader.createCompilationUnit(GroovyClassLoader.java:421)
	at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:294)
	at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:275)
	at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:270)
	at com.sun.script.groovy.GroovyScriptEngine.getScriptClass(GroovyScriptEngine.java:259)
	at com.sun.script.groovy.GroovyScriptEngine.eval(GroovyScriptEngine.java:81)
	at javax.script.AbstractScriptEngine.eval(Unknown Source)
	at Main.main(Main.java:14)
```

eine umgebungsvariable zu grovvy ist auch vorhanden und die jars habe ich da auch eingetragen wobei ich nicht weiß ob das mit classpath gemeint war.


----------



## Murray (13. Nov 2007)

nameac hat gesagt.:
			
		

> eine umgebungsvariable zu grovvy ist auch vorhanden und die jars habe ich da auch eingetragen wobei ich nicht weiß ob das mit classpath gemeint war.


Nein, das war nicht gemeint. Wenn du aber in Eclipse arbeitest, dann ist das mit dem Build-Path schon in Ordnung; eclipse setzt den Classpath dann entsprechend. Jetzt fehlen dir offenbar aber noch andere Klassen.


----------



## Murray (13. Nov 2007)

Konkret fehlt (mindestens) asm-2.2.jar (ist in der Groovy-Distrubution dabei).


----------



## nameac (13. Nov 2007)

Wie bekomme ich diese Klassen? ich habe mal im Groovy Verzeichnis gesucht da stehen genau die namen bloß mit .html aber .java Dateien kann ich nicht finden auch im Java Verzeichnis nicht.

aber wenn ich GroovyClassLoader l=new GroovyClassLoader(); schreibe schlägt er mir folgenden Import vor:

import groovy.lang.GroovyClassLoader;

so als wenn er die Klasse kennen würde. Wie bekommt man das denn zum laufen?


----------



## Murray (13. Nov 2007)

Wenn du Groovy 1.0 installiert hast, müsste im Groovy-Verzeichnis ein Unterverzeichnis lib stehen. Darin befinden sich Jar-Files (also Archivdateien mit den übersetzten Klassen). Wenn du die in Eclipse zum Build-Path hinzufügst, "kennt" Eclipse die darin enthaltenen Klassen.
Wenn du die Groovy-Kassen als Soucen haben willst (braucht man normalerweise nicht), dann musst du sie dir zusätzlich bei codehaus.org herunterladen.


----------



## nameac (13. Nov 2007)

jo danke das het mir weiter geholfen danach fehlte nur noch die antlr.jar


----------

