2015-11-08 2 views
0

В настоящее время я изучаю свободный порт 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 недопонимание, или это поведение неправильно?

ответ

0

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

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

+0

Это имеет смысл - поэтому можем ли мы поэтому считать документацию Oracle (я установил ссылку выше) неверной? –

+0

Я бы сказал, что документация неверна. Это меня не удивляет, потому что спецификация StAX, как известно, имеет очень низкое качество. –

Смежные вопросы