Möchte man mit Java Server Faces dynamisch XML erzeugen, stößt man leider sehr schnell auf die Problematik von HTML Entities in XML Dateien. Auch wenn man in der JSF Datei keine HTML Entities verwendet, so findet man sie in der erzeugten XML Datei. Beispiel: Aus “schön” in der JSF Vorlage wird “schö” in der XML Datei. Sogar ein XML konformes “schün” wird zu “schö” und Firefox meldet XML-Verarbeitungsfehler: Undefinierte Entität.

Hier kommt das Standard-RenderKit in die Quere, welches nun mal auf die Ausgabe von HTML spezialisiert ist. Der Renderer ersetzt also zum Beispiel den Buchstaben ö und die Unicode Entity ü durch ein HTML übliches ö. Das ließe sich eventuell noch durch eine Einbettung in eine CDATA Sektion beheben. Zumindestens bei Facelets tut sich hier aber ein weiteres Problem auf: JSF Tags werden innerhalb der CDATA Sektion nicht mehr ausgewertet.

Die Konsequenz für mich war, die XML Datei (ein RSS Feed) nicht mit JSF sondern mit JSP oder einem Servlet zu erstellen. Die Alternative wäre ein eigenes RenderKit für XML oder gleich für RSS zu schreiben, was mir aber zu aufwendig erschien. Für diejenigen mit Interesse an diesem Ansatz haben, sei der Artikel Creating and Using a Custom Render Kit von Sun empfohlen.

Keine Kommentare möglich.