В настоящее время я изучаю свободный порт XMLStreamWriter в другую среду и пытаюсь получить представление о его логике пространства имен. Oracle's documentation для этого класса, похоже, указывает, что при отключении пространства имен попытка записи элемента/атрибута с использованием URI пространства имен, уже связанного с некоторым префиксом, с использованием различных префиксов должна приводить к исключению XMLStreamException. Но я не вижу такого поведения. С помощью следующего кода:Исключение XMLStreamWriter?
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>
Am I недопонимание, или это поведение неправильно?
Это имеет смысл - поэтому можем ли мы поэтому считать документацию Oracle (я установил ссылку выше) неверной? –
Я бы сказал, что документация неверна. Это меня не удивляет, потому что спецификация StAX, как известно, имеет очень низкое качество. –