2011-10-23 73 views
0

我寫了使用XSLT生成HTML響應的示例程序。檢查下面的文件。 welcome.xslMissingResourceException - Java 5,JBoss 5.0,XSLT

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:java="http://xml.apache.org/xalan/java" version="1.0"> 
<xsl:output method="html" indent="yes" /> 
<xsl:variable name="myResource" select="java:java.util.ResourceBundle.getBundle('com.carbonrider.web.xslt.AppResources')" /> 
<xsl:template match="/"> 
<html> 
<body> 
<xsl:apply-templates /> 
</body> 
</html> 
</xsl:template> 
<xsl:template match="first"> 
<h2> 
<xsl:value-of select="java:getString($myResource,'hi')" /> 
</h2> 
</xsl:template> 
</xsl:stylesheet> 

PageTransformer.java

package curiousmind.web.xslt; 
import java.io.BufferedInputStream; 
import java.io.ByteArrayInputStream; 
import java.io.IOException; 

import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 
import javax.xml.transform.Result; 
import javax.xml.transform.Transformer; 
import javax.xml.transform.TransformerFactory; 
import javax.xml.transform.dom.DOMSource; 
import javax.xml.transform.stream.StreamSource; 
import org.w3c.dom.Document; 

public class PageTransformer extends HttpServlet { 
private static final long serialVersionUID = 1L; 
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
TransformerFactory transFactory = TransformerFactory.newInstance(); 
try { 
DOMSource domSource = createDOMSource(); 
Transformer transformer = transFactory.newTransformer(new StreamSource(this.getClass().getResourceAsStream("welcome.xsl"))); 
Result result = new javax.xml.transform.stream.StreamResult(response.getWriter()); 
transformer.transform(domSource, result); 
} catch (Exception e) { 
throw new ServletException(e); 
} 
} 
private DOMSource createDOMSource() throws Exception { 
String xmlString = "<?xml version=\"1.0\" ?>\n<first><second>Hello World</second></first>"; 
byte[] buf = xmlString.getBytes("UTF-8"); 
BufferedInputStream is = new BufferedInputStream(new ByteArrayInputStream(buf)); 
DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance(); 
DocumentBuilder domBuilder = domFactory.newDocumentBuilder(); 
Document dom = domBuilder.parse(is); 
DOMSource domSource = new DOMSource(dom); 
is.close(); 
return domSource; 
} 
} 

當我上面的代碼運行,我獲得以下控制檯

ERROR [STDERR] SystemId Unknown; Line #7; Column #95; java.util.MissingResourceException: Can't find bundle for base name curiousmind.web.xslt.AppResources, locale en_US 

以下錯誤消息的屬性文件裏面保存curiousmind.web.xslt

AppResources.properties

hi=Hello World 

誰能告訴我可能是什麼問題呢?

回答

0

我試圖通過實例化java.util.ResourceBundle從相同的servlet「PageTransformer」訪問資源包,它工作。這導致更多的混淆,爲什麼變壓器從同一個類實例化不能獲得ResourceBundle實例。 我添加了xalan.jar文件,但它給出了相同的結果。

最後,我想爲jboss啓用「-verbose」模式,以找出可能的原因。這讓我想到,當servlet被調用並且正在實例化Transformer時,它正從JBOSS_DIR/lib/endorsed/xalan.jar加載xalan.jar文件。我不得不從jboss中刪除「xalan.jar」和「serializer.jar」文件,我的頁面運行良好。

雖然解決了這個問題,但我認爲更好的方法是使用「jboss-classloading.xml」來定製類加載行爲。但無法獲得適當的配置。