2011-10-23 2 views
0

J'ai écrit un exemple de programme qui utilise XSLT pour générer une réponse HTML. Vérifiez les fichiers ci-dessous. 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; 
} 
} 

Quand je lance le code ci-dessus, je reçois le message suivant d'erreur dans la console

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 

Voici le fichier de propriétés conservés à l'intérieur curiousmind.web.xslt

AppResources.properties

hi=Hello World 

Quelqu'un peut-il s'il vous plaît me dire ce qui pourrait être le problème?

Répondre

0

J'ai essayé d'accéder à l'ensemble de ressources à partir de la même servlet "PageTransformer" en instanciant java.util.ResourceBundle et cela a fonctionné. Cela conduit à plus de confusion, car le transformateur instancié de la même classe n'est pas capable d'obtenir l'instance ResourceBundle. J'ai ajouté le fichier xalan.jar, mais il a donné le même résultat.

Enfin, j'ai pensé à activer le mode «-verbose» pour jboss, pour savoir, ce qui pourrait être la cause réelle. Cela m'a donné l'indication que, lorsque le servlet est invoqué et instancie Transformer, il charge le fichier xalan.jar à partir de JBOSS_DIR/lib/endorsed/xalan.jar. J'ai finalement dû supprimer le fichier "xalan.jar" et "serializer.jar" de jboss et ma page a bien fonctionné.

Bien que ce problème résolu, je pense que la meilleure approche serait d'utiliser "jboss-classloading.xml" pour personnaliser le comportement de la classe. Mais n'a pas pu obtenir la configuration appropriée pour cela.