2015-11-08 73 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> 

我误解,或者是这种行为不正确的?

回答

0

尝试使用已绑定到某个前缀的名称空间URI(使用不同的前缀)编写元素/属性应该会导致XMLStreamException。

XML允许将多个不同的前缀绑定到相同的名称空间URI。因此在这种情况下抛出XMLStreamException将违反XML规范。

+0

这很有道理 - 所以我们可以考虑Oracle的文档(我修正了上面的链接)是不正确的? –

+0

我会说文档不正确。这并不令我感到意外,因为StAX规格已知质量很差。 –

相关问题