已将 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);
})
});
我在 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);
})
});