dev@jaxb.java.net

JAXB: Unmarshalling does not always populate certain classes?

From: queuetip <mmercurio88_at_yahoo.com>
Date: Sun, 21 Feb 2010 21:03:05 -0800 (PST)

Hello,

I have a JAXB class generation problem I was hoping to get some help with.
Here's the part of the XML that is the source of my problem...

 
Code:
<xs:complexType name="IDType">
<xs:choice minOccurs="0" maxOccurs="2">
  <xs:element name="DriversLicense" minOccurs="0" maxOccurs="1"
type="an..35" />
    <xs:element name="SSN" minOccurs="0" maxOccurs="1" type="an..35"
/>
    <xs:element name="CompanyID" minOccurs="0" maxOccurs="1"
type="an..35" />
  </xs:choice>
</xs:complexType>
<xs:simpleType name="an..35">
  <xs:restriction base="an">
    <xs:maxLength value="35" />
  </xs:restriction>
</xs:simpleType>
 
<xs:simpleType name="an">
   <xs:restriction base="xs:string">
     <xs:pattern value="[ !-~]*" />
   </xs:restriction>
</xs:simpleType>
 
...now this will generate JAXBElement types due the the "choice" with a
"maxOccurs > 1" . I want to avoid those, so I did that by modifying the code
to use a "Wrapper" element and move the maxOccurs up to a sequence tag as
follows...

 
Code:
<xs:complexType name="IDType">
<xs:sequence maxOccurs="2">
  <xs:element name=Wrapper>
  <xs:complexType>
  <xs:choice>
  <xs:element name="DriversLicense" minOccurs="0" maxOccurs="1"
type="an..35" />
    <xs:element name="SSN" minOccurs="0" maxOccurs="1" type="an..35"
/>
    <xs:element name="CompanyID" minOccurs="0" maxOccurs="1"
type="an..35" />
  </xs:choice>
  </xs:complexType>
  </xs:element>
</xs:sequence>
</xs:complexType>
 
<xs:simpleType name="an..35">
  <xs:restriction base="an">
    <xs:maxLength value="35" />
  </xs:restriction>
</xs:simpleType>
 
<xs:simpleType name="an">
   <xs:restriction base="xs:string">
     <xs:pattern value="[ !-~]*" />
   </xs:restriction>
</xs:simpleType>
 
For class generating, looks like it works great - the JAXB element is
replaced with a list of wrappers as String (i.e. List<IDType.Wrapper<String>
) and compiles fine.

However, when I unmarshall the actual XML data into the generated classes
the data in the wrapper class is not populated - yet JAXB does not throw an
exception.

My question is: Do I need to change the schema a different way to make this
work? Or is there something I can add/change/delete to the generated code or
annotations?

Appreciate any help you can offer!

Thanks.
-- 
View this message in context: http://old.nabble.com/JAXB%3A-Unmarshalling-does-not-always-populate-certain-classes--tp27682912p27682912.html
Sent from the java.net - jaxb dev mailing list archive at Nabble.com.