Java Tomcat7中部署的war在Linux上的行为与在Windows上的不同
我甚至不知道该怎么问这个问题,但是: 我有两台服务器,一台是运行Ubuntu13.10的Linux虚拟机,另一台是Windows7。 我在这两个平台上都运行了ApacheTomcat7.0.42。 我在这两个平台上都运行了Java1.8.066。 我以.war文件的形式构建了一个应用程序,并在两个Tomcat中部署了相同的.war。 此war文件读取xml文件,并使用xsl文件对其执行转换。我在两次安装中使用完全相同的文件作为输入—所有文件都放在Tomcat环境中相同的文件夹结构中 问题是:每台机器上生成的转换文件不同。生成的两个版本都是格式良好的,但它们包含不同的内容。没有太大的不同,但是其中一个(在Linux上生成的一个)比Windows有更多的元素 鉴于安装和数据源都是相同的,有人对这种不同行为的来源有什么建议吗 需要注意的是:Windows上运行的.war生成的结果是预期结果 下面是执行转换的方法,并在Windows v中给出不同的结果。Linux(在每个服务器上使用完全相同的文件。)Java Tomcat7中部署的war在Linux上的行为与在Windows上的不同,java,xml,linux,tomcat,tomcat7,Java,Xml,Linux,Tomcat,Tomcat7,我甚至不知道该怎么问这个问题,但是: 我有两台服务器,一台是运行Ubuntu13.10的Linux虚拟机,另一台是Windows7。 我在这两个平台上都运行了ApacheTomcat7.0.42。 我在这两个平台上都运行了Java1.8.066。 我以.war文件的形式构建了一个应用程序,并在两个Tomcat中部署了相同的.war。 此war文件读取xml文件,并使用xsl文件对其执行转换。我在两次安装中使用完全相同的文件作为输入—所有文件都放在Tomcat环境中相同的文件夹结构中 问题是:每台
我相信我能为你指明正确的方向。基本上,它的意思是确保您强制使用相同的编码(在本例中最好使用UTF-8)来标准化输出。Linux和Windows有不同的换行符(\n vs.\r\n),这也会导致结果文件之间的空白差异(这可能会因为错误而中断转换)。请,分享一些生成的额外内容的示例?可能与win和linux上不同的换行符有关?添加了转换方法代码。提示:当问到为什么A和B在应该相同的情况下不同时,你应该发布A和B的示例,至少足以证明差异。添加了上面的转换代码。我显式地将编码设置为UTF-8。由于您提到的原因,两个操作系统之间的新行差异似乎是一个可能的罪魁祸首,但输出编码似乎是被迫使用UTF-8的。
// Performs an XSLT transformation on the source stream using the transform stream and writes the result to
// an output file stream.
//
protected OutputStream performTransform(InputStream source, InputStream transform, OutputStream outputFile) {
// Force the use of Saxon for the transformer
TransformerFactory factory = new net.sf.saxon.TransformerFactoryImpl();
Transformer transformer;
logger.info("Perform Transform: " + source + " using " + transform + " to " + outputFile);
try {
try {
transformer = factory.newTransformer(new StreamSource(transform));
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
try {
transformer.transform(new StreamSource(source), new StreamResult(outputFile));
} catch (TransformerException e) {
logger.error("Transform Exception ", e);
}
} catch (TransformerConfigurationException e) {
logger.error("Transform Configurtion Exception ", e);
}
try {
outputFile.close();
} catch (IOException e) {
logger.error("Exception closing output stream ", e);
}
} catch (Exception e) {
logger.error("Catchall Exception performing transform ", e);
} finally {
try {
outputFile.close();
} catch (IOException e) {
logger.error("Exception closing output stream a second time ", e);
}
}
return outputFile;
}