AbstractView
次のように、ブラウザにXMLを出力するためにを作成しました。
public abstract class AbstractXmlView extends AbstractView {
public AbstractXmlView() {
setContentType("application/xml");
}
@Override
protected void renderMergedOutputModel(Map<String, Object> model,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
response.setCharacterEncoding("UTF-8");
Document document = new DOMDocument();
document.setXMLEncoding("UTF-8");
buildXmlDocument(model, document, request, response);
response.getOutputStream().print(document.asXML());
}
public abstract void buildXmlDocument(Map<String, Object> model,
Document document, HttpServletRequest request,
HttpServletResponse response) throws Exception;
ご覧のとおり、私のサブクラスは、buildXMLDocument
実際にブラウザーに配信されるXMLドキュメントにデータを入力するためのメソッドを定義するため、単純化された実装を次に示します。
public class GetXmlContacts extends AbstractXmlView {
@Override
public void buildXmlDocument(Map<String, Object> model, Document document,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
Element node = document.addElement("node");
node.setText ("I'm unicode áéíóú");
}
node
要素「I'municodeáéíóú」のテキストとしてのリテラル文字列に注意してください。これをサーバーに要求すると、UTF-8エンコーディング(OK)でHTTP応答を取得します。XML定義ではUTF-8であると示されていますが、ノードのテキストはISO-8859-1としてエンコードされます(これは私の推測ですが、 Firefoxでエンコーディングを変更すると、その文字列は問題ないように見えるためです)。
では、なぜdom4jは、UTF-8である必要があると定義されているのに、リテラル文字列をISOとしてエンコードするのでしょうか。私のコードに何か問題がありますか?ありがとう