Problem dem "Transformer"

  • 0 Antworten
  • Letztes Antwortdatum
Max1809

Max1809

Fortgeschrittenes Mitglied
6
Hallo miteinander,

ich habe ein merkwürdiges Problem.

In meiner App arbeite ich mit XML Dateien. In einer bestimmten Situation setze ich ein Flag in eine XML Datei.

Das geht auch grundsätzlich ganz gut. Nur wenn diese bestimmte XML Datei ein Leerzeichen im Namen hat, funktioniert folgender Codeteil nicht mehr:

Code:
Transformer transformer = TransformerFactory.newInstance()
                    .newTransformer();
            transformer.setOutputProperty(OutputKeys.INDENT, "yes");

            StreamResult result = new StreamResult(xmlNachricht);
            DOMSource source = new DOMSource(doc);
            transformer.transform(source, result);
Im "transformer.transform()" stürzt er immer ab.

Immer die "FileNotFound"-Exception. Kann aber nicht sein - die Datei ist 100% da.

Hier ein Auszug aus der Exception:
javax.xml.transform.TransformerException: java.io.FileNotFoundException: /data/data/standard.meineapp/meineapp/unterverzeichnis%test/nachrichten(.xml)/Das%ist%eine%Testnachricht.xml: open failed: ENOENT (No such file or directory)
Wie gesagt, wenn die XML Datei keine Leerzeichen enthält, funktioniert es.

Kann mir jemand da helfen? :)

EDIT: Bitte Threadtitel auf "mit dem 'Transformer'" ändern. Ein Wort in voller Panik vergessen. :(

Der ursprüngliche Beitrag von 19:40 Uhr wurde um 19:56 Uhr ergänzt:

GELÖST

Falls noch jemand solche Probleme hat.

Dazu gibt es bereits einen Bug Report: https://bugs.eclipse.org/bugs/show_bug.cgi?id=194359

Die Lösung ist letztendlich, nicht direkt die "StreamResult" Klasse zu verwenden, sondern zunächst die "FileOutputStream".

Dazu meine Lösung:

Code:
    Transformer transformer = TransformerFactory.newInstance()
                    .newTransformer();
            transformer.setOutputProperty(OutputKeys.INDENT, "yes");

            // StreamResult result = new StreamResult(xmlNachricht);

            FileOutputStream fos = new FileOutputStream(xmlNachricht);
            Result fileResult = new StreamResult(fos);

            DOMSource source = new DOMSource(doc);
            // transformer.transform(source, result);
            transformer.transform(source, fileResult);
 
Zurück
Oben Unten