Java 基本Groovy脚本引擎设置

Java 基本Groovy脚本引擎设置,java,xml,json,groovy,Java,Xml,Json,Groovy,背景(可以跳过): 我最近用Java编写了一个轻量级服务器,它轮询端口上的新连接,然后当客户端连接时,它会给它们自己的线程,直到套接字关闭。现在,连接客户机后,我需要做的是以一种特殊的方式准备XML文件请求;如果客户机请求file1.xml,服务器需要读入file1.xml,将其解析为JSON,然后将JSON对象发送给客户机 具体问题(现在开始阅读): 我需要在Java中将XML文件解析为JSON对象。我被推荐使用GROOVY来完成这项任务。在我的mac和ubuntu分区上安装很容易,但我无法让

背景(可以跳过):

我最近用Java编写了一个轻量级服务器,它轮询端口上的新连接,然后当客户端连接时,它会给它们自己的线程,直到套接字关闭。现在,连接客户机后,我需要做的是以一种特殊的方式准备XML文件请求;如果客户机请求file1.xml,服务器需要读入file1.xml,将其解析为JSON,然后将JSON对象发送给客户机

具体问题(现在开始阅读): 我需要在Java中将XML文件解析为JSON对象。我被推荐使用GROOVY来完成这项任务。在我的mac和ubuntu分区上安装很容易,但我无法让内嵌groovy工作,原因很可能很简单。下面是我现在正在测试的内容(在这一点上,我只是想让嵌入式groovy正常工作):

test.groovy

output = "Hello ${input}!" 
test.java

import groovy.lang.Binding; 
import groovy.util.GroovyScriptEngine; 

String[] roots = new String[] { "/home/nick/Documents" }; 
GroovyScriptEngine gse = new GroovyScriptEngine(roots); 
Binding binding = new Binding(); 
binding.setVariable("input", "world"); 
gse.run("test.groovy", binding); 
System.out.println(binding.getVariable("output")); 
这两个文件都在我的
/home/nick/Documents
文件夹中。当我尝试使用以下工具进行编译时:

javac test.java 
我有6个错误:

test.java:4: class, interface, or enum expected 
String[] roots = new String[] { "/home/nick/Documents" }; 
^ 
test.java:5: class, interface, or enum expected 
GroovyScriptEngine gse = new GroovyScriptEngine(roots); 
^ 
test.java:6: class, interface, or enum expected 
Binding binding = new Binding(); 
^ 
test.java:7: class, interface, or enum expected 
binding.setVariable("input", "world"); 
^ 
test.java:8: class, interface, or enum expected 
gse.run("test.groovy", binding); 
^ 
test.java:9: class, interface, or enum expected 
System.out.println(binding.getVariable("output")); 
^ 
6 errors 
我觉得在编译阶段我做错了什么。如何编译和运行此文件


非常感谢您的帮助

因为
test.java
是一个java类,而不是Groovy脚本,您需要将代码封装在一个类中(重命名为
test.java
,并带有大写字母
T
)。您还需要捕获或抛出几个异常:

import groovy.lang.Binding;
import groovy.util.GroovyScriptEngine;
import groovy.util.ResourceException ;
import groovy.util.ScriptException ;
import java.io.IOException ;

public class Test {
  public static void main( String[] args ) throws IOException, ResourceException, ScriptException {
    String[] roots = new String[] { "." };
    GroovyScriptEngine gse = new GroovyScriptEngine(roots);
    Binding binding = new Binding();
    binding.setVariable("input", "world");
    gse.run("test.groovy", binding);
    System.out.println(binding.getVariable("output"));
  }
}
然后,您需要在类路径上使用groovy编译这个Java类(使用通配符路径需要Java 6,否则您需要填写到
groovy all-*.jar的完整路径):

并使用正确的类路径运行它:

java -cp $GROOVY_HOME/embeddable/*:. Test

由于
test.java
是一个java类,而不是Groovy脚本,因此需要将代码封装在一个类中(重命名为
test.java
,并带有大写字母
T
)。您还需要捕获或抛出几个异常:

import groovy.lang.Binding;
import groovy.util.GroovyScriptEngine;
import groovy.util.ResourceException ;
import groovy.util.ScriptException ;
import java.io.IOException ;

public class Test {
  public static void main( String[] args ) throws IOException, ResourceException, ScriptException {
    String[] roots = new String[] { "." };
    GroovyScriptEngine gse = new GroovyScriptEngine(roots);
    Binding binding = new Binding();
    binding.setVariable("input", "world");
    gse.run("test.groovy", binding);
    System.out.println(binding.getVariable("output"));
  }
}
然后,您需要在类路径上使用groovy编译这个Java类(使用通配符路径需要Java 6,否则您需要填写到
groovy all-*.jar的完整路径):

并使用正确的类路径运行它:

java -cp $GROOVY_HOME/embeddable/*:. Test

那么,ScriptEngine实际上是一个加载了项目的所有脚本依赖项的引擎?那么,ScriptEngine实际上是一个加载了项目的所有脚本依赖项的引擎?