Samstag, 31. Juli 2010

Ant Filter-Copy-Task und Zeichenkodierung

Ein Eintrag aus der Rubrik "kleiner Fehler, große Wirkung": Resource-Properties-Dateien wurden für eine Web-Anwendung mit einem Ant-Skript aus den Projektordnern in die passenden Ordner der Web-Applikation umkopiert. Bei manchen Properties-Dateien wurden die darin enthaltenen Umlaute im Browser manchmal (je nach Applikations-Server und je nach Rechner, auf dem die Web-Anwendung gebaut wurde) falsch dargestellt.

Ursache des Problems war ein copy-Task, der die Datei nicht 1:1 umkopiert, sondern mit einem filterset bestimmte Token ersetzt hat. Je nach Systemeinstellung kamen dann in der Web-Anwendung Umlaute (bzw. allgemein Sonderzeichen) an, die im Browser korrekt angezeigt werden konnten – oder eben nicht.

Die Lösung des Problems ist, bei Filter-Copy-Tasks die Kodierung explizit anzugeben, damit nicht die System-Default-Kodierung verwendet wird (die Doku erwähnt dies am Ende des Dokuments). Bei Properties-Dateien ist ISO-Latin-1 (ISO-8859-1) meist eine erste, gute Wahl (sofern die gesamte Web-Anwendung nicht auf UTF ausgelegt ist):
<copy
todir="${webapp}/WEB-INF/classes"
file="${src}/MyResources.properties"
encoding="ISO-8859-1"
overwrite="true">

<filterset>
<filter token="COMPILETIME" value="${DSTAMP}-${TSTAMP}"/>
</filterset>

</copy>
Entstanden ist der Bug wohl durch Copy&Paste, wobei aus einem fileset – ohne Filterung und damit ohne die Notwendigkeit, eine Zeichenkodierung anzugeben – ein filterset wurde.

Mittwoch, 14. Juli 2010

Scala 2.8 und Lift 2.0

Knapp ein dreiviertel Jahr nach der letzten offiziellen Version 2.7.7 ist es heute endlich soweit: Scala 2.8 wurde veröffentlicht! Neben zahlreichen Bugfixes gibt es viele Neuerungen:
  • leichtgewichtigere, performantere Aktoren
  • Unterstützung für Continuations
  • verbesserte XML-Bibliothek
  • Überarbeitete Kollektions-Bibliothek und Array-Implementation
  • Benannte und Default-Argumente
  • Package-Objekte
  • bessere Unterstützung für (verschachtelte) Java-Annotationen
  • deutlich verbesserte Scala-Interpreter-Shell (REPL), u.a. mit Tab-Eingabevervollständigung
  • u.a.
Die Werkzeuge Sbaz und Scaladoc liegen in Version 2 vor, der Decompiler Scalap wurde an aktuelle Sprachkonstrukte angepasst. Die Scala IDE für Eclipse wurde intensiv überarbeitet, wodurch sie nun u.a. besser in die Java-Werkzeuge von Eclipse eingebunden ist.


Bereits vor zwei Wochen wurde das Scala-Web-Framework Lift 2.0 veröffentlicht. Neben der bisher schon sehr guten Ajax- und Comet-Unterstützung gibt es u.a. folgende Neuerungen:

Zum Schluss ein bisschen Werbung in eigener Sache: Wer mehr über Scala erfahren möchte, darf gerne an meinem nächsten Scala-Workshop teilnehmen, der Ende November in Köln stattfindet!

One more thing...