2017-07-25 3 views
-1

ich den folgenden Code verwenden, um einen Mongo Skript in js durch Federdatenwie JS-Datei in Mongo laufen Federn

ScriptOperations scriptOps = mongoOperation.scriptOps(); 

// Execute script directly 
ExecutableMongoScript echoScript = new ExecutableMongoScript("function(x) { return x; }"); 
Object ob=scriptOps.execute(echoScript, "directly execute script"); 
System.out.println(ob); 

// Register script and call it later 
scriptOps.register(new NamedMongoScript("runjs", "D:\\GSTR3\\gstr3b.1.a.js")); 
scriptOps.call("runjs", "execute script via name"); 

Das "echoScript" laufen, aber "runjs" gibt Fehler zu laufen:

Caused by: com.mongodb.CommandFailureException: { "serverUsed" : "/10.144.113.138:27017" , "ok" : 0.0 , "errmsg" : "ReferenceError: runjs is not defined :\[email protected]:1:24\n" , "code" : 139 , "codeName" : "JSInterpreterFailure"} 
at com.mongodb.CommandResult.getException(CommandResult.java:71) 
at com.mongodb.CommandResult.throwOnError(CommandResult.java:110) 
at com.mongodb.DB.eval(DB.java:358) 
at org.springframework.data.mongodb.core.DefaultScriptOperations$2.doInDB(DefaultScriptOperations.java:119) 
at org.springframework.data.mongodb.core.MongoTemplate.execute(MongoTemplate.java:446) 
... 2 more 

Aber wenn ich das Skript normalerweise von node.js laufen lasse, erhalte ich das Ergebnis:

D:\GSTR3>node gstr3b.1.a.js 
{ Gstin: '27AIXPT3280A1Z2', 
    t_ival: 100003.78, 
    t_iamt: 0, 
    t_camt: 173520.1, 
    t_samt: 173527.69999999998, 
    t_itm_count: 33 } 
D:\GSTR3> 

Antwort

0

scriptOps.register nimmt ExecutableMongoScri pt als Argument, Syntax: scriptOps.register (ExecutableMongoScript arg0) und NamedMongoScript nimmt zwei Argumente, Syntax: NamedMongoScript (String-Name, ExecutableMongoScript-Skript), es nimmt nie einen Pfad von JavaScript.

Also, was wir tun können, ist das .js-Skript als Java-Prozessor auszuführen und auf seine Fertigstellung zu warten und die Ausgabe von seinem Eingangsstrom zu erhalten.

try{ 
    String nodejsPath = "D:\\GSTR3\\gstr3b.1.a.js"; 
    String cmd = "node " + nodejsPath; 
    Runtime run = Runtime.getRuntime(); 
    Process pr = run.exec(cmd); 
    pr.waitFor(); 
    } catch (InterruptedException ex) { 
      ex.printStackTrace(); 
    }