Java JAXB:在JDK1.8_102中解组-回归期间未继承命名空间注释?

Java JAXB:在JDK1.8_102中解组-回归期间未继承命名空间注释?,java,xml,jaxb,xml-namespaces,unmarshalling,Java,Xml,Jaxb,Xml Namespaces,Unmarshalling,我遇到了这样一种情况,JAXB拒绝对XML元素进行解组,除非相应的Java字段具有名称空间注释。这种行为只在JDK1.8.0_111(或者可能在102)中开始。JDK1.8的早期版本可以工作 测试用例: Java类(缩写): XML: 解组代码: JAXBContext jc = JAXBContext.newInstance(MyElement.class); Unmarshaller unmarshaller = jc.createUnmarshaller(); My

我遇到了这样一种情况,JAXB拒绝对XML元素进行解组,除非相应的Java字段具有名称空间注释。这种行为只在JDK1.8.0_111(或者可能在102)中开始。JDK1.8的早期版本可以工作

测试用例:

Java类(缩写):

XML:

解组代码:

    JAXBContext jc = JAXBContext.newInstance(MyElement.class);
    Unmarshaller unmarshaller = jc.createUnmarshaller();
    MyElement myel = (MyElement) unmarshaller.unmarshal(xmlStream);
    System.out.println("Parse result: "+ myel);
在JDK 1.8.0_101(及更早版本)中,这将打印:

分析结果:MyElement[subEl=subEl]

使用JDK 1.8.0_111,我可以得到:

分析结果:MyElement[subEl=null]

因此JDK1.8.0_111拒绝解包元素“MyElement”

如果在字段批注上指定名称空间:

    @XmlElement(name = "subEl", namespace="myns")
    private String subEl;
它在所有JDK版本中都能正常工作


这是怎么回事

据我所知,设置
elementFormDefault=XmlNsForm.QUALIFIED
应该会导致MyElement类的所有字段“继承”该类的命名空间。他们说:

如果值为“##default”,则名称空间被确定为 如下:

如果封装包具有XmlSchema注释,则 elementFormDefault是限定的,则包含 班级。否则“”(在默认值中生成非限定元素 命名空间

默认值:“默认值”

那么为什么JDK 1.8.0_111没有解组元素?


注意:JAXB错误报告(以前的at)似乎报告了相同的问题-到目前为止没有响应。

我认为这是相关的错误-

从中我可以说JAXB确实有一个补丁。
因此,这种奇怪的行为最终以空值结束,这是一个错误的JAXB映射,而不是Java中的回归。

这个JDK错误看起来相关(虽然不一样):。类似的问题-很好的发现。但是,该错误被关闭为“不是问题”。因此没有修复。我认为您应该修复您的JAXB映射。
@XmlSchema(elementFormDefault = XmlNsForm.QUALIFIED)
package my.package;
    JAXBContext jc = JAXBContext.newInstance(MyElement.class);
    Unmarshaller unmarshaller = jc.createUnmarshaller();
    MyElement myel = (MyElement) unmarshaller.unmarshal(xmlStream);
    System.out.println("Parse result: "+ myel);
    @XmlElement(name = "subEl", namespace="myns")
    private String subEl;