有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java XML Transformer在本地工作时,会在服务器上将XML奇怪地转换为空字符串

我的html中有标记机制,在呈现html时会触发项目中的java类。其目的是对标记中作为参数提供的xml进行转换,并将转换后的结果插入html

<br>Test customTag<br>
<@myWebsite.customTag xmlPath="C:/paths/personalInfo.xml" xsltPath="C:/paths/template.xslt"/>

在customTag类中,我使用“javax.xml.transform.Transformer”通过XSLT字符串转换“xml”字符串。为此,我有以下几句话:

//Reading the files in the paths given in the url, and converting them into String.
String xmlContent = convertToString(xmlPath); 
String xsltContent = convertToString(xsltPath); 

考虑到它们的值如following example所示; 我有下面的代码来进行转换

StringReader readerXML = new StringReader(xmlContent);
StringReader readerXSLT = new StringReader(xsltContent);

TransformerFactory factory = TransformerFactory.newInstance();
StreamSource xslStream = new StreamSource(readerXSLT);
Transformer transformer = null;

StringWriter writer = new StringWriter();
StreamSource in = new StreamSource(readerXML);
StreamResult out = new StreamResult(writer);

transformer.transform(in, out);
logger.debug("The generated HTML file is:" + writer.toString());

问题是,它在我的本地应用服务器(Windows)中工作,打印出预期的内容。然而,当我将其部署到Linux服务器时,转换只是空的。我所知道的两台服务器之间的唯一区别是,我的本地服务器是Windows,远程服务器是Unix

Linux服务器日志中也没有例外。一切似乎都像在当地一样正常。不过这很烦人

你知道为什么“javax.xml.transform.Transformer”在这个场景中不能完成它的工作吗

编辑:Java供应商很常见:IBM的Java库

本地: java版本“J9VM-R26_Java626_SR8”

Unix服务器 java版本“J9VM-R26_Java626_SR1”

日志片段: Local和Server对以下行具有相同的日志结果: 记录器。调试(“doTag()xmlContent:+xmlContent”)

记录器。调试(“doTag()xsltContent:+xsltContent”)

只有不同的log是以下结果;在本地打印新的xml,但在unix中为空字符串

记录器。调试(“生成的HTML文件是:“+writer.toString())


共 (1) 个答案

  1. # 1 楼答案

    所有这些都让我想到了可能影响转变的事情。 因为转换是基于xslt的,xslt能够进行必要的检查并得出结果,所以任何可能影响转换的事情都可能会导致意外的结果,就像我的场景中一样

    在我的本地和服务器中,一切都是一样的,但服务器上的xslt以不同的方式获取一些参数,并在xml中查找这些参数。这就是转换没有抛出任何异常但返回空字符串的主要原因
    简单地说,xslt文件中的下一行没有问题,因为参数pCitizenID在xml中有匹配项
    不幸的是,本地服务器和远程服务器中的参数之间的差异是一个字母。2015-33456AB1-2214(本地),2015-334564B1-2214(服务器)

     <xsl:for-each select="//sg[page[@pID=$pCitizenID]]/page">
    

    简单地说,这一切都是关于转型无法正常运转的方式。但是非常感谢你的建议;可以解释两个平台之间可能出现某些差异的原因的评论。希望没有人会犯同样的错误,但如果有,这样的讨论可能会帮助他们