Gabi und Sascha
Tags - Kategorien : Alle | Berlin | Bücher | Java | Linkhalde | Weichware | Verfassung

Im aktuellen Javamagazin ist ein Artikel über die Neuerungen in JAXP 1.3, welches in Java 5.0 integriert ist. Der Artikel kommt zwar etwas spät, aber besser spät als nie. Leider findet sich in dem Artikel ein zumindest nicht ganz korrekte Aussage auf Seite 111:

Ein Manko des JAXP API war bisher, dass es keine Standardisierung zum Laden und Speichern von XML- bzw. DOM-Dokumenten gab. In J2SE 1.4 konnte man die klassischen Datei-Operationen verwenden (BufferedReader, BufferedWriter. Xerces besitzt mehrere Serializer-Klassen (XMLSerializer, XML11Serializer, HTMLSerializer, XHTMLSerializer), die in anderen XML-Parsern nicht zur Verfügung stehen. Bei einem Wechsel des Parsers muss der Java-Code angepasst werden.

Bedenklich an diesem Zitat ist die Tatsache, dass der Autor dabei schlicht ignoriert, dass es im J2SE 1.4 sehr wohl eine standardisierte API für das serialisieren von XML gibt. Dabei können sowohl DOM, SAX als auch beliebige Java Objektgraphen (natürlich mit ein wenig Handarbeit) in XML serialisiert werden. Wie das genau geht erklärt Benoît Marchal beispielsweise in seinem hilfreichen Artikel Tip: Using SAXTransformerFactory.

Ich finde es Schade, dass gerade in einem Fachblatt wie dem Javamagazin soetwas behauptet wird. Zwar ist die Aussage nicht ganz so schlimm, wie der völlig verunglückte Artikel zum Apache Commons Modeler, aber er lässt schon Zweifel an der Qualifikation des Autoren und der Qualitätssicherung zu.

Damit man die Aussagen auch einfach nachvollziehen kann, hier ein kleines Beispiel, welches ein XML Dokument einliesst (liegt als String vor) und in eine temporäre Datei, mittels der Transformer API, schreibt:


    /**
     * Simple example to write DOM to Files and Streams.
     *
     * @author Sascha Kohlmann
     */
    public class Java14XmlSerializerExample {

        private static final String XML = 
            "<test><value>Simple DOM2File test</value><name>I think this works fine."
            + "</name></test>";
    
        public static void main(final String [] args) throws Exception {

            // Vorbereitung für DOM.
            final Reader reader = new StringReader(XML);
            final InputSource source = new InputSource(reader);
            final DocumentBuilderFactory dFactory = 
                DocumentBuilderFactory.newInstance();
            final DocumentBuilder builder = dFactory.newDocumentBuilder();
            final Document doc = builder.parse(source);

            final DOMSource dSource = new DOMSource(doc);
        
            // Ausgabe in temporäre Datei vorbereiten.
            final File tmpFile = File.createTempFile("Java14XmlSerializerExample.", 
                                                     ".xml");
            System.out.println("write to: " + tmpFile.getAbsolutePath());
            final FileWriter fw = new FileWriter(tmpFile);
            final StreamResult sResult = new StreamResult(fw);

            // DOM in XML serialisieren.
            final TransformerFactory tFactory = TransformerFactory.newInstance();
            final Transformer transformer = tFactory.newTransformer();
        
            transformer.transform(dSource, sResult);
        
            System.out.println("written - please verify");
        }
    }

Das ganze sollte natürlich mit Java 1.4 ausprobiert werden.

Die JAXP ist übrigens auch ein heisser Kanditat für Abkürzungen in Abkürzungen:

  • JAXP
  • Java API for XML Parsing
  • Java Application Programming Interface for Extensible Markup Language Processing
Schlappe 80 Zeichen. Nicht schlecht :-)

In den letzten Tagen habe ich mir intensiver die Java API des SonyEricsson S700i angeschaut. Das Handy unterstützt die MDIP 2.0 Schnittstelle. Bei dieser Schnittstelle ist im Grunde gegenüber 1.0 nicht soviel hinzu gekommen. Das Wenige hat es aber in sich. Die Games API ist ziemlich gut geworden. Es ist schon beindruckend, wie man mit so wenig Klassen ein so mächtiges System anbieten kann. Es sind nur ein paar Codezeilen nötig, um ein komplettes Mehrebenen parallax scrolling hin zu bekommen. Die Grafiken werden in ressourcensparenden Frame PNGs abgelegt und durch Angabe von Offsets wird dann daraus das Spielfeld vom System zusammen gebaut. Das erinnert einen an Zeiten der Spieleprogrammierung auf dem C64. Man will sofort wieder anfangen Ballerspiele zu schreiben.

Das, für ein Handy, riesige Display (240x320 pixel, 262K Farben, für Java 65536 benutzbar) lädt dazu gerade ein. Durch die wenigen Tasten, die man im nicht ausgeklappten Zustand verwenden kann, ist es auch gut möglich das Handy quer zu legen. Vor meinem Auge entstand sofort ein Uridium Clone. Leider benötigt man für Actionspiele fast immer beide Hände. Ein Hand zum steuern, eine Hand (oder besser einen Daumen) zum schiessen. Sowas ist bei dem S700i bauartbedingt leider nicht möglich. Der Feuerknopf müsste seperat am oberen Ende sein, ist aber natürlich im Zentrum der 4-Wege Wippe. Aber mit kamen schon zwei Ideen für halbwegs spannende Spiel, die man auch mit einer Hand bedienen kann. Nicht der 10. Pacman Clone und auch nicht die millionste Tetris Variante. Wenn Gabi nichts dagegen hat, werde ich es in den nächsten Wochen mal versuchen umzusetzen. Mehr will ch hier noch nicht verraten. Nur soviel, das Spiel wird vermutlich frei unter der GPL sein.

Mehr S700i