当使用JAXB将对象编组为xml时,我们正面临一个问题。在我们的代码示例(https://github.com/fbe/JaxbIssueTracker,简单的Maven项目,测试案例证明了什么错误),我们有三种类型:JAXB继承问题 - 命名空间损坏
- 父
- 劫持
- 具体
XSD文件可以在这里找到:github
父类型是抽象的,具体扩展了父类,父类在一个序列中引用被劫持的类型。从这些xsd文件中,JAVA文件由JAXB(xjc)生成,没有任何警告或错误消息。
当编组正在由JAXB生成以下XML的输出一个具体类型:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns3:concreteType xmlns:ns2="http://www.felixbecker.name/parent" xmlns="http://www.felixbecker.name/hijacked" xmlns:ns3="http://www.felixbecker.name/concrete">
<ns2:hijacked>
<value>foobar</value>
</ns2:hijacked>
</ns3:concreteType>
正如可以看到劫持型被误使用ns2的前缀,其是指与母体的名称空间类型 - 但它应该使用引用被劫持的名称空间的默认名称空间。
JAXB无法解组生成的xml,虽然它是通过激活的模式验证自身生成的。
这里怎么回事? xml架构是否被破坏?或者JAXB无法正确处理继承?
从parent.xsd中删除abstract-attribute对面临的问题没有任何影响。
任何帮助,将不胜感激! :-)
用于版本(均断开):
- JAXB从JDK 1.6
- JAXB-RI 2.2.5
问候,
FBE & ollinux