JAXB: аннотация пространства имен не наследуется во время демаршаллинга - регрессия в JDK 1.8_102?

Я столкнулся с ситуацией, когда JAXB отказывается демаршировать элемент XML, если в соответствующем поле Java нет аннотации пространства имен. Такое поведение только началось в JDK 1.8.0_111 (или, возможно, в 102). Более ранние версии JDK 1.8 работают.

Прецедент:

Класс Java (сокращенный):

package my.package;
@XmlRootElement(name = "MyElement", namespace="myns")
public class MyElement {
    @XmlElement(name = "subEl")
    private String subEl;
}

XML:

<MyElement xmlns="myns">
    <subEl>text1</subEl>
</MyElement>

package-info.java:

@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);

С JDK 1.8.0_101 (и ранее) это печатает:

Результат разбора: MyElement [subEl = subEl]

С JDK 1.8.0_111 я получаю:

Результат разбора: MyElement [subEl = null]

Поэтому JDK 1.8.0_111 отказывается демонтировать элемент «MyElement».

Если я укажу пространство имен в поле аннотации:

    @XmlElement(name = "subEl", namespace="myns")
    private String subEl;

он работает как положено во всех версиях JDK.

Что здесь происходит?

Насколько я понимаю, настройкаelementFormDefault = XmlNsForm.QUALIFIED должно заставить все поля класса MyElement "наследовать" пространство имен класса.Javadocs для@XmlElement сказать:

Если значение равно «## default», то пространство имен определяется следующим образом:

Если вмещающий пакет имеет аннотацию XmlSchema, а его elementFormDefault имеет значение QUALIFIED, то пространство имен вмещающего класса. В противном случае '' (который создает неквалифицированный элемент в пространстве имен по умолчанию.

По умолчанию: "## default"

Так почему же JDK 1.8.0_111 не демаршал элемент?

Примечание: отчет об ошибке JAXB# 1087 - Немаршаллинг обернутых элементов с elementForName = квалифицированным сбоем (ранее вJAXB-1087 - немаршалинг обернутых элементов с elementForName = квалифицированные ошибки), кажется, сообщает ту же проблему - пока нет ответа.

Ответы на вопрос(1)

Ваш ответ на вопрос