2010-10-28 55 views
1

我有在架构元素下列属性的模式:JAXB Java 6中没有前缀正确的命名空间前缀编组XML文件

<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:abc="http://abc.example.com" targetNamespace="http://abc.example.com" elementFormDefault="qualified" attributeFormDefault="unqualified"> 

我可以编译它,并得到Java类。使用这些类,我在对象中填充数据并将其编组以获取XML文件。

但是这个编组文件中的XML元素没有前缀“abc”。

我在编组时使用了XMLStreamWriter.setPrefix稍微调整了一下,我可以得到所有元素前缀为“abc”的XML文件。

现在,当我试图来解读同一个XML文件,它抛出错误说:

[org.xml.sax.SAXParseException:前缀“ABC”的元素“ABC:名称”未绑定]

请帮助我如何让JAXB知道abc是正确的前缀。

谢谢 普拉迪普

回答

1

前缀的名字是毫无意义的。它所做的只是在命名空间和属于该命名空间的标签之间建立连接。无论前缀是abc还是namespace01或者没有前缀,因为使用默认命名空间并不重要。据我所知,你不能在JAXB中强制使用前缀或前缀的具体名称。

+1

感谢musiKk,现在我明白了。 但是,如果我们想要使用我们自己定义的前缀,我们可以使用包含NamespacePrefixMapper的JAXB RI以及来自Java 6的JAXB。[在类路径中包含JAXB RI]。 marshaller.setProperty(“com.sun.xml.bind.namespacePrefixMapper”,new NamespaceMapper()); – pradeep 2010-10-30 04:57:00

+1

@pradeep:很好。即使你让自己依赖于一个特定的实现,也很好理解。 – musiKk 2010-11-01 08:35:53

+0

不要完全同意“无意义”的部分。从技术角度来看,这可能是“无意义的”。但是,假定例如 - 以任何方式 - 人类将看到或使用XML,能够以有意义的方式设置命名空间前缀可能很重要。 – mmey 2014-03-23 20:54:28