Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Tomcat7中部署的war在Linux上的行为与在Windows上的不同_Java_Xml_Linux_Tomcat_Tomcat7 - Fatal编程技术网

Java Tomcat7中部署的war在Linux上的行为与在Windows上的不同

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环境中相同的文件夹结构中 问题是:每台

我甚至不知道该怎么问这个问题,但是: 我有两台服务器,一台是运行Ubuntu13.10的Linux虚拟机,另一台是Windows7。 我在这两个平台上都运行了ApacheTomcat7.0.42。 我在这两个平台上都运行了Java1.8.066。 我以.war文件的形式构建了一个应用程序,并在两个Tomcat中部署了相同的.war。 此war文件读取xml文件,并使用xsl文件对其执行转换。我在两次安装中使用完全相同的文件作为输入—所有文件都放在Tomcat环境中相同的文件夹结构中

问题是:每台机器上生成的转换文件不同。生成的两个版本都是格式良好的,但它们包含不同的内容。没有太大的不同,但是其中一个(在Linux上生成的一个)比Windows有更多的元素

鉴于安装和数据源都是相同的,有人对这种不同行为的来源有什么建议吗

需要注意的是:Windows上运行的.war生成的结果是预期结果

下面是执行转换的方法,并在Windows v中给出不同的结果。Linux(在每个服务器上使用完全相同的文件。)


我相信我能为你指明正确的方向。基本上,它的意思是确保您强制使用相同的编码(在本例中最好使用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;
}