XMLStreamWriter отсутствуют исключения?

В настоящее время я пытаюсь записать свободный порт XMLStreamWriter в другую среду и пытаюсь разобраться в его логике пространства имен. Документация Oracle для этого класса, по-видимому, указывает, что при отключенном восстановлении пространства имен попытка записи элемента / атрибута с использованием URI пространства имен, уже связанного с каким-либо префиксом, с использованием другого префикса, должна вызвать исключение XMLStreamException. Но я не вижу такого поведения. Со следующим кодом:

public void run() throws Exception {
    String BOB = "http://www.bob.com/"
    XMLOutputFactory fac = XMLOutputFactory.newInstance();
    fac.setProperty("javax.xml.stream.isRepairingNamespaces", false); // default
    XMLStreamWriter writer = fac.createXMLStreamWriter(new FileWriter("tst.xml"));

    writer.writeStartElement("bob", "root", BOB);
    writer.setPrefix("bob", BOB);
    writer.writeNamespace("bob", BOB);
    writer.writeAttribute("notbob", BOB, "attr", "value"); // Should fail?
    writer.writeStartElement("notbob", "firstinner", BOB); // Should fail?
    writer.writeEndElement();
    writer.writeEndElement();
    writer.writeEndDocument();

    writer.flush();
    writer.close();
}

Я ожидаю, что обе линии, используя "notbob" префикс для того же URI пространства имен, уже связанного с "bob" бросать исключения. Вместо этого код завершается нормально, и tst.xml содержит

<bob:root xmlns:bob="http://www.bob.com" notbob:attr="value">
    <notbob:firstinner></notbob:firstinner>
</bob:root>

Я неправильно понимаю, или это неправильное поведение?

1 ответ

Решение

попытка записи элемента / атрибута с использованием URI пространства имен, уже связанного с каким-либо префиксом, с использованием другого префикса, должна вызвать исключение XMLStreamException.

XML позволяет связывать несколько разных префиксов с одним и тем же URI пространства имен. Поэтому бросали XMLStreamException в такой ситуации будет нарушать спецификацию XML.

Другие вопросы по тегам