已将 node.js 连接到 Java 应用程序并希望在 html 中获得输出

Connected node.js with Java application and want to get output in html

我在 node.js 中创建了一个子进程并给了它一个可执行的 jar 文件位置。

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;

这是我的 Saxon.java,我已将其转换为 jar 文件。如您所见,此 java 程序采用 result1.xml 文件和 defaultfrontend.xslt 样式表并将其转换为 html 网页 (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");

  }
}

因此该程序使用 xslt 样式表将 xml 转换为 html。我想在 node.js 中得到我的输出(在 html 中)。

但是当我尝试 运行 我的 java 脚本时,我没有得到任何输出。输出如下所示: http://i.stack.imgur.com/S0xg0.png

看起来您没有向 stdout 写入任何内容,而是向 file 写入任何内容。但是在 node 中,您将 stdout 再次写入 file

如果你想java输出到stdout改变

 transformer.transform(new StreamSource(new File(sourcePath)),
      new StreamResult(new File(resultDir)));

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

source

然后您将能够从 nodejs

读取标准输出

这对我有用:

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);
    })
});