This is a module for runinng Java from String inside a node server built for another project called kodr
to run tests
npm install
npm test
The java server can run independently
I use Java 1.8
to run the server
Compile using 'ant'
Run server in bin
java -cp .:../lib/servlet-api-2.5.jar:../lib/jetty-all-7.0.2.v20100331.jar RunnerServlet
The default port is 3678
The server will return a statusCode 200 for GET request to '/'
.
The server will return a JSON object {stout:String, sterr:String}
for POST request to '/'
.
The POST body should be {name:[nameOfClass], code:[classContent]} you can also post an optional input parameter for inpout stream and a timeLimit long for setting a timelimit on running the program
example in nodejs, you can build a similar request using postman
var post_data = querystring.stringify({
'name': 'Main',
'code': 'public class Main {public static void main (String [] args) { System.out.println("Hello World");}}',
input:"input stream"
});
// An object of options to indicate where to post to
http.request({
host: '127.0.0.1',
port: 3678,
path: '',
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'Content-Length': post_data.length // don't need to fill this in postman
}
}, function (res) {...});
post_req.write(post_data);
post_req.end();
java dependencies are in the .java-dependency file
This code is designed for UNIX system it may be incompatible with Windows, eg. I use the ':' to speerate classpath
###node wraper The module's index.js file exposes 6 methods
run
test
runClass
stopServer
runServer
recompile
which prgramatically compiles only once per process
see tests for how they work.
###Things left to do
Look into runing the java server as a docker container for security