2011-10-23 8 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をインスタンス化することによって、同じサーブレット "PageTransformer"からリソースバンドルにアクセスしようとしました。これは、同じクラスからインスタンス化されたトランスフォーマーがResourceBundleインスタンスを取得できない理由として混乱を招いています。 xalan.jarファイルを追加しましたが、同じ結果が得られました。

最後に私はjbossの "-verbose"モードを有効にして、実際の原因を調べることを考えました。これは、サーブレットが呼び出され、Transformerをインスタンス化しているときに、JBOSS_DIR/lib/endorsed/xalan.jarからxalan.jarファイルをロードしていることを示しています。私は最終的にjbossから "xalan.jar"と "serializer.jar"ファイルを削除しなければならず、私のページはうまく機能しました。

この問題は解決しましたが、より良いアプローチは "jboss-classloading.xml"を使用してクラスの読み込み動作をカスタマイズすることです。しかし、適切な構成を得ることができませんでした。

関連する問題