Java, простой код StaX, но получаю ошибку разбора, преждевременный конец файла - PullRequest
1 голос
/ 25 марта 2012

Я пытаюсь выяснить IO, используя StaX, но я продолжаю получать сообщения о «неправильных» и «преждевременных EOF» от читателя. Это чтение кода, созданного с использованием StaX, как в следующем примере.

Я свел свой код к простейшей конфигурации и все еще получаю ошибку. Откуда это?

SSCCE (должно выдать ошибку)

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();
        }
    }
}

И ошибка:

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)

Я смотрел на несколько других вопросов SO ( это или это кажется наиболее актуальным), но у меня возникли проблемы, связывая их с этой ситуацией ...

EDIT

Кроме того, я пробовал это чтение и запись в отдельных операциях, и происходит то же самое.

РЕДАКТИРОВАТЬ ВТОРОЕ

Выходной файл XML, согласно запросу.

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

1 Ответ

4 голосов
/ 25 марта 2012

Ожидается, что файл XML будет иметь корневой элемент.

Если ваш выходной код изменяется для создания элемента, он работает:

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

Выводится в файл

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

А затем читает первое событие без ошибок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...