JaxB fixed value annotation doesn't work

Answered

Hi,

I have XSD schema like this:

<xsd:annotation>
<xsd:appinfo>
<jaxb:globalBindings fixedAttributeAsConstantProperty="true" />
</xsd:appinfo>

...

<xsd:complexType name="something_here">
<xsd:complexContent>
<xsd:restriction base="genericObject">
<xsd:attribute name="type" type="xsd:string" fixed="FixedValue" use="required"/>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>

I use Tools/JAXB/Generate Java Code From Xml Schema Using JAXB

By default this is checked and I leav it this way:

- Make generated files read-only

- Add necessary libraries

- Do not generate header

And when I click Ok it generates classes but...

This fixed value is not fixed. Why?

 

0
2 comments

Hi.

Could you please provide example project to reproduce a problem?

0
Avatar
Permanently deleted user

Hi,

Here is complete schema. I don't get fixed value for object007 (it should be constant "FIXED_VALUE_5" but it is not in class Object007).

Also, not only fixed value are not fixed but I have problem with List.

For example:

    ObjectFactory factory = new ObjectFactory();
    Object007 obj = factory.createObject007();
    obj.setId("id1");
    Medatada006 meta = factory.createMedatada006();
    Attr005 attr = factory.createAttr005();
    attr.setName("aaa");
    attr.setValue("bbb");
    meta.getAttr().add(attr);
    Event012 event = factory.createEvent012();
    event.setObject(obj);
    event.setAny(meta);
    JAXBElement<GenericEvent> genericEvent = factory.createEvent(event);


    JAXBContext jaxbContext  = JAXBContext.newInstance( Event012.class );
    Marshaller jaxbMarshaller   = jaxbContext.createMarshaller();
    StringWriter sw = new StringWriter();
    jaxbMarshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
    jaxbMarshaller.marshal(event, sw);
    System.out.println(sw.toString());

And I get this:

[EL Warning]: 2018-12-14 18:09:40.035--XMLAnyObjectMappingNodeValue: The undefined document root element of a referenced object [XMLDescriptor(test2.model.Medatada006 --> [])] is ignored during marshalling with an any collection|object mapping.

 

<?xml version="1.0" encoding="UTF-8"?><event xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Event012"><object id="id1" xsi:type="object007"/></event>

Because, Medatada006 and Event012 didn't created properly, there is no information that medatada is also element wripping attrributes element.

Also Medatada006 has a list of attributes even if there is ENUMERATION in schema for attribute.

 

 

 

- XML Schema

 


<xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified"
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
jaxb:version="2.0"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<xsd:annotation>
<xsd:appinfo>
<jaxb:globalBindings fixedAttributeAsConstantProperty="true" />
</xsd:appinfo>
</xsd:annotation>
<!-- Generic type Section -->
<xsd:complexType name="genericObject" abstract="true">
<xsd:attribute name="type" type="xsd:string" use="required"/>
<xsd:attribute name="id" type="xsd:string" use="required"/>
</xsd:complexType>

<xsd:complexType name="genericEvent" abstract="true">
<xsd:sequence>
<xsd:element name="object" type="genericObject"/>
<xsd:any minOccurs="0" processContents="lax" namespace="##any"/>
</xsd:sequence>
</xsd:complexType>
<!-- Generic type End -->

<!-- Root element definition -->
<xsd:element name="event" type="genericEvent" />
<!-- Root element end -->

<xsd:complexType name="Event001">
<xsd:complexContent>
<xsd:restriction base="genericEvent">
<xsd:sequence>
<xsd:element name="object" type="object001"/>
</xsd:sequence>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>

<xsd:complexType name="Event002">
<xsd:complexContent>
<xsd:restriction base="genericEvent">
<xsd:sequence>
<xsd:element name="object" type="object001"/>
</xsd:sequence>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>

<xsd:complexType name="object001">
<xsd:complexContent>
<xsd:restriction base="genericObject">
<xsd:attribute name="type" type="xsd:string" fixed="FIXED_VALUE_1" use="required"/>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>

<xsd:complexType name="Event003">
<xsd:complexContent>
<xsd:restriction base="genericEvent">
<xsd:sequence>
<xsd:element name="object" type="object002"/>
<xsd:element name="metadata" minOccurs="0" maxOccurs="1" type="medatada001"/>
</xsd:sequence>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>

<xsd:complexType name="Event004">
<xsd:complexContent>
<xsd:restriction base="genericEvent">
<xsd:sequence>
<xsd:element name="object" type="object002"/>
<xsd:element name="metadata" minOccurs="0" maxOccurs="1" type="medatada001"/>
</xsd:sequence>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>

<xsd:complexType name="Event005">
<xsd:complexContent>
<xsd:restriction base="genericEvent">
<xsd:sequence>
<xsd:element name="object" type="object003"/>
</xsd:sequence>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>

<xsd:complexType name="object003">
<xsd:complexContent>
<xsd:restriction base="genericObject">
<xsd:attribute name="type" type="xsd:string" fixed="FIXED_VALUE_2" use="required"/>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>

<xsd:complexType name="object002">
<xsd:complexContent>
<xsd:restriction base="genericObject">
<xsd:attribute name="type" type="xsd:string" fixed="FIXED_VALUE_3" use="required"/>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>

<xsd:complexType name="medatada001">
<xsd:sequence>
<xsd:element name="attr" type="attr001" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>

<xsd:complexType name="attr001">
<xsd:attribute name="name">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="ENUM"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
<xsd:attribute name="value" type="xsd:string"/>
</xsd:complexType>




<xsd:complexType name="Event007">
<xsd:complexContent>
<xsd:restriction base="genericEvent">
<xsd:sequence>
<xsd:element name="object" type="object005"/>
<xsd:element name="metadata" minOccurs="0" maxOccurs="1" type="medatada002"/>
</xsd:sequence>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>

<xsd:complexType name="Event008">
<xsd:complexContent>
<xsd:restriction base="genericEvent">
<xsd:sequence>
<xsd:element name="object" type="object005"/>
<xsd:element name="metadata" minOccurs="0" maxOccurs="1" type="medatada002"/>
</xsd:sequence>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>

<xsd:complexType name="object005">
<xsd:complexContent>
<xsd:restriction base="genericObject">
<xsd:attribute name="type" type="xsd:string" fixed="FIXED_VALUE_4" use="required"/>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>

<xsd:complexType name="medatada002">
<xsd:sequence>
<xsd:element name="attr" type="attr002" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>

<xsd:complexType name="attr002">
<xsd:attribute name="name">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="ENUM1"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
<xsd:attribute name="value" type="xsd:string"/>
</xsd:complexType>


<xsd:complexType name="Event009">
<xsd:complexContent>
<xsd:restriction base="genericEvent">
<xsd:sequence>
<xsd:element name="object" type="object006"/>
<xsd:element name="metadata" minOccurs="0" maxOccurs="1" type="medatada003"/>
</xsd:sequence>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>

<xsd:complexType name="medatada003">
<xsd:sequence>
<xsd:element name="attr" type="attr003" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>

<xsd:complexType name="attr003">
<xsd:attribute name="name">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="ENUM2"/>
<xsd:enumeration value="ENUM3"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
<xsd:attribute name="value" type="xsd:string"/>
</xsd:complexType>

<xsd:complexType name="Event010">
<xsd:complexContent>
<xsd:restriction base="genericEvent">
<xsd:sequence>
<xsd:element name="object" type="object006"/>
<xsd:element name="metadata" minOccurs="0" maxOccurs="1" type="medatada004"/>
</xsd:sequence>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>

<xsd:complexType name="object006">
<xsd:complexContent>
<xsd:restriction base="genericObject">
<xsd:attribute name="type" type="xsd:string" fixed="StateAidCase" use="required"/>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>

<xsd:complexType name="medatada004">
<xsd:sequence>
<xsd:element name="attr" type="attr004" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>

<xsd:complexType name="attr004">
<xsd:attribute name="name">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="some_value"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
<xsd:attribute name="value" type="xsd:string"/>
</xsd:complexType>

<xsd:complexType name="Event011">
<xsd:complexContent>
<xsd:restriction base="genericEvent">
<xsd:sequence>
<xsd:element name="object" type="object007"/>
<xsd:element name="metadata" minOccurs="0" maxOccurs="1" type="medatada005"/>
</xsd:sequence>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="Event012">
<xsd:complexContent>
<xsd:restriction base="genericEvent">
<xsd:sequence>
<xsd:element name="object" type="object007"/>
<xsd:element name="metadata" minOccurs="0" maxOccurs="1" type="medatada006"/>
</xsd:sequence>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>

<xsd:complexType name="medatada006">
<xsd:sequence>
<xsd:element name="attr" type="attr005" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>

<xsd:complexType name="attr005">
<xsd:attribute name="name">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="some_value1"/>
<xsd:enumeration value="some_value2"/>
<xsd:enumeration value="some_value3"/>
<xsd:enumeration value="some_value4"/>
<xsd:enumeration value="some_value5"/>
<xsd:enumeration value="some_value6"/>
<xsd:enumeration value="some_value7"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
<xsd:attribute name="value" type="xsd:string"/>
</xsd:complexType>

<xsd:complexType name="medatada005">
<xsd:sequence>
<xsd:element name="attr" type="attr006" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>

<xsd:complexType name="attr006">
<xsd:attribute name="name">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="some_value1"/>
<xsd:enumeration value="some_value2"/>
<xsd:enumeration value="some_value3"/>
<xsd:enumeration value="some_value4"/>
<xsd:enumeration value="some_value5"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
<xsd:attribute name="value" type="xsd:string"/>
</xsd:complexType>

<xsd:complexType name="object007">
<xsd:complexContent>
<xsd:restriction base="genericObject">
<xsd:attribute name="type" type="xsd:string" fixed="FIXED_VALUE_5" use="required"/>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>


</xsd:schema>

 

 

0

Please sign in to leave a comment.