连接node.js与Java应用程序,并希望得到输出在HTML中

我在node.js中创build了一个subprocess,并为其提供了一个可执行的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; 

这是我把它转换成jar文件的Saxon.java。 正如你所看到的,这个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中)。

但是,当我尝试运行我的JavaScript,我没有得到任何输出。 输出如下所示: 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"))); 

资源

然后你将能够从nodejs读取stdout

这对我工作:

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