2016-05-02 4 views
2

Ich habe einen untergeordneten Prozess in node.js erstellt und gab es eine ausführbare JAR-Datei Speicherort.Verbunden node.js mit Java-Anwendung und wollen in html Ausgabe

var fs = require('fs'); 

var exec = require('child_process').exec; 
var child = exec('java -jar C:/Users/njaiswal/Desktop/Executable/Saxon.jar', 
    function (error, stdout, stderr){ 
    fs.writeFile('output.html', +stdout); 
    if(error !== null){ 
     console.log("Error -> "+error); 
    } 
}); 

module.exports = child; 

Dies ist meine Saxon.java, die ich in JAR-Datei umgewandelt habe. Wie Sie sehen können, nimmt dieses Java-Programm die Stylesheets result1.xml und defaultfrontend.xslt und konvertiert sie in eine HTML-Webseite (output.html).

import java.io.File; 

import javax.xml.transform.Transformer; 
import javax.xml.transform.TransformerFactory; 
import javax.xml.transform.stream.StreamResult; 
import javax.xml.transform.stream.StreamSource; 

public class Saxon { 

    /** 
    * Simple transformation method. 
    * 
    * @param sourcePath 
    *   - Absolute path to source xml file. 
    * @param xsltPath 
    *   - Absolute path to xslt file. 
    * @param resultDir 
    *   - Directory where you want to put resulting files. 
    */ 
    public static void simpleTransform(String sourcePath, String xsltPath, 
     String resultDir) { 
    TransformerFactory tFactory = TransformerFactory.newInstance(); 
    try { 
     Transformer transformer = tFactory 
      .newTransformer(new StreamSource(new File(xsltPath))); 

     transformer.transform(new StreamSource(new File(sourcePath)), 
      new StreamResult(new File(resultDir))); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    } 

    public static void main(String[] args) { 
    // Set saxon as transformer. 
    System.setProperty("javax.xml.transform.TransformerFactory", 
     "net.sf.saxon.TransformerFactoryImpl"); 

    simpleTransform("result1.xml", "defaultfrontend.xslt", "output.html"); 

    } 
} 

Also dieses Programm konvertiert Xml in HTML mit Xslt Stylesheet. Ich möchte meine Ausgabe (in html) in node.js bekommen.

Aber wenn ich versuche, mein Javascript zu laufen, bekomme ich keine Ausgabe. Die Ausgabe sieht wie folgt aus: http://i.stack.imgur.com/S0xg0.png

+0

gibt es einen Fehler? kannst du versuchen stderr zu drucken? –

+0

Es gibt mir keinen Fehler. Wenn ich zu output.html gehe, bekomme ich eine 0 (Null). – Rose

+1

Ein kleiner Kommentar zur Leistung: Die Initialisierung einer Java-VM für eine einzelne Umwandlung ist ein ziemlich hoher Aufwand. Aber es ist nicht nötig, es zu verschlimmern, indem Sie die JAXP-Lade-Methode verwenden, um eine TransformerFactory zu erstellen, wenn Sie bereits wissen, dass Sie Saxon verwenden möchten. Instanziieren Sie Saxon direkt, indem Sie 'TransformerFactory.newInstance()' durch 'new net.sf.saxon.TransformerFactoryImpl()' ersetzen. –

Antwort

1

Diese gearbeitet Ich:

var fs = require('fs'); 
var pathToFile = 'output.html'; 

var exec = require('child_process').exec; 
var child = exec('java -jar Saxon.jar', function (error, stdout, stderr){ 
    fs.writeFile(pathToFile, stdout, function(err) { 
     if(err) console.error(err); 
    }) 
}); 
1

Es sieht aus wie Sie nichts stdout aber zu einem file schreiben Sie. Aber in node nehmen Sie die stdout und schreiben Sie es wieder auf die file.

Wenn Sie Java ausgeben möchten

zu stdout Änderung
transformer.transform(new StreamSource(new File(sourcePath)), 
     new StreamResult(new File(resultDir))); 

TO

transformer.transform(new StreamSource(new File(sourcePath)), 
    new StreamResult(new OutputStreamWriter(System.out, "UTF-8"))); 

source

Dann können Sie stdout lesen von nodejs

+0

Ich habe mein Java-Programm wie angegeben bearbeitet, aber ich bekomme immer noch keine Ausgabe. Meine Ausgabe sieht folgendermaßen aus: http://i.stack.imgur.com/S0xg0.png – Rose

+1

Was passiert, wenn Sie es auf der Befehlszeile ausführen? Siehst du irgendeine Ausgabe? – oak

+1

$ java -jar C: /Users/njaiswal/Desktop/Executable/Saxon.jar – oak