2012-03-25 2 views
1

J'essaie de comprendre IO en utilisant StaX, mais je continue à obtenir des erreurs "malformées" et "EAT prématurée" du lecteur. C'est un code de lecture créé en utilisant StaX, comme dans l'exemple suivant.Java, StaX code simple, mais obtenir une erreur d'analyse, fin prématurée du fichier

J'ai réduit mon code à la configuration la plus simple, et j'obtiens toujours une erreur. D'où vient-il?

SSCCE (devrait lancer erreur)

package XMLTest; 

import java.io.FileInputStream; 
import java.io.FileOutputStream; 

import javax.xml.stream.XMLEventFactory; 
import javax.xml.stream.XMLEventReader; 
import javax.xml.stream.XMLEventWriter; 
import javax.xml.stream.XMLInputFactory; 
import javax.xml.stream.XMLOutputFactory; 

public class SaveLoadTest { 
    /** 
    * @param args 
    */ 
    public static void main(String[] args) throws Exception { 
     final String FILE = "test.xml"; 

     //////////// WRITE 
     final XMLOutputFactory OFACT = XMLOutputFactory.newInstance(); 
     final XMLEventFactory EFACT = XMLEventFactory.newInstance(); 
     final XMLEventWriter WRITER = OFACT.createXMLEventWriter(new FileOutputStream(FILE)); 

     WRITER.add(EFACT.createStartDocument()); 
     WRITER.add(EFACT.createComment("As basic as it gets.")); 
     WRITER.add(EFACT.createEndDocument()); 
     WRITER.close(); 

     //////////// READ 
     final XMLInputFactory IFACT = XMLInputFactory.newInstance(); 
     final XMLEventReader READER = IFACT.createXMLEventReader(new FileInputStream(FILE)); 

     while (READER.hasNext()) { 
      READER.nextEvent(); 
     } 
    } 
} 

Et l'erreur:

Exception in thread "main" javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,49] 
Message: Premature end of file. 
    at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.next(XMLStreamReaderImpl.java:594) 
    at com.sun.xml.internal.stream.XMLEventReaderImpl.nextEvent(XMLEventReaderImpl.java:85) 
    at XMLTest.SaveLoadTest.main(SaveLoadTest.java:34) 

J'ai eu un coup d'oeil à plusieurs autres SO questions (ou semblent thisthis le plus pertinent), mais je J'ai du mal à les relier à cette situation ...

EDIT

En outre, j'ai essayé cette lecture et écriture dans des opérations séparées, et la même chose se produit.

MODIFIER LE DEUXIÈME

fichier de sortie XML, comme l'a demandé.

<?xml version="1.0"?><!--As basic as it gets.--> 
+0

Veuillez également poster votre XML d'entrée. –

+0

Aucune entrée XML, elle est faite à la volée - je veux juste créer un en-tête, créer un commentaire, fermer le document, puis le lire plus tard. – Ben

+0

C'est celui que je veux dire. test.xml devrait être disponible dans votre système de fichiers. –

Répondre

4

Il s'attend à ce que le fichier XML ait un élément racine.

Si votre code de sortie est modifié pour créer un élément cela fonctionne:

WRITER.add(EFACT.createStartDocument()); 
    WRITER.add(EFACT.createStartElement("", "", "element")); 
    WRITER.add(EFACT.createEndElement("", "", "element")); 
    WRITER.add(EFACT.createEndDocument()); 

sorties dans le fichier

<?xml version="1.0" encoding="UTF-8"?><element></element> 

Et puis lit le premier événement sans erreur.

+0

Ahh, c'est le cas. Merci! J'ai un mauvais pressentiment à ce sujet, il y a encore plus de maux de tête à venir. :) – Ben

+1

Mise à jour de maux de tête: aucun! Compris tout le reste assez rapidement après ce petit hoquet. Meilleurs voeux aux futurs StaXers. – Ben

Questions connexes