2015-03-19 17 views
0

我的html中有標記機制,它在呈現html時觸發我的項目中的java類。目的是對作爲參數提供的xml進行轉換,並將轉換後的結果插入到html中。XML Transformer在本地工作時奇怪地將xml轉換爲服務器上的空字符串

<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」

日誌片段: 本地和服務器具有相同的日誌結果對於以下行: logger.debug(「doTag()xmlContent:」+ xmlContent);

logger.debug(「doTag()xsltContent:」+ xsltContent);

只有不同的日誌是以下的結果;在本地打印新的xml,但爲unix打印一個空字符串。

logger.debug(「生成的HTML文件是:」+ writer.toString());

+0

另外一件可能不同的事情是Java版本和它的供應商。你在linux機器上使用Oracle Java還是OpenJDK? – 2015-03-19 13:12:55

+0

謝爾蓋,我根據你想要的細節編輯了這個問題。日Thnx。 – shamaleyte 2015-03-19 13:26:43

+0

你還可以添加日誌片段嗎? – 2015-03-19 13:32:05

回答

0

好吧,他們都讓我想起了可能影響轉型的事情。 由於轉換基於xslt能夠進行必要的檢查並找出結果的原因,任何可能影響轉換的事情都可能會導致意外的結果,就像在我的方案中那樣。

在我的本地和服務器上都是一樣的,但服務器上的xslt以某種方式以不同的方式獲取某些參數並在xml中查找這些參數。這是變換沒有拋出任何異常但返回空字符串的主要原因。
簡而言之,xslt文件中的以下行沒有問題,因爲參數pCitizenID在xml中有匹配。
本地和遠程服務器的參數之間的不幸的區別是一封信。 2015-33456AB1-2214(本地),2015-334564B1-2214(服務器)

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

那麼簡單,它是所有關於變革的方式不能正常工作。但是非常感謝提示&的評論,這可以解釋爲什麼兩個平臺之間可能會出現一些差異的原因。希望沒有人會遭受同樣的錯誤,但如果這樣做,這樣的討論可以幫助他們。