xjc generates no JAXBElement for nillable element with required attribute · Issue #858 · javaee/jaxb-v2 (original) (raw)

This repository was archived by the owner on Feb 5, 2019. It is now read-only.

This repository was archived by the owner on Feb 5, 2019. It is now read-only.

@glassfishrobot

Description

@glassfishrobot

Taken from CXF bug:
https://issues.apache.org/jira/browse/CXF-3732

Please consider the following schema:

<?xml version="1.0" encoding="UTF-8" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.example.org" targetNamespace="http://www.example.org" elementFormDefault="qualified">
  <xsd:element name="root">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="eal" nillable="true">
          <xsd:complexType>
            <xsd:simpleContent>
              <xsd:extension base="xsd:string">
<xsd:attribute name="att" type="xsd:string" use="required"/>
              </xsd:extension>
            </xsd:simpleContent>
          </xsd:complexType>
        </xsd:element>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>

Running this through xjc generates a member eal of type Root.Eal in Root, not of type JAXBElement<Root.Eal>.
This makes it impossible to unmarshal a document like

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<root xmlns="http://www.example.org" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <eal att="j" xsi:nil="true"/>
</root>

and obtain the value for attribute att in eal, since eal is null. The above XML document cannot be represented in the classes generated by xjc.