| prev | table of contents | next |
Usually hidden in the middle of the list of the classes derived from the types
defined in an XML schema there will be one class called
ObjectFactory. It's convenient to use the methods of this
class because they provide an easy way of creating elements that have to
be represented by a JAXBElement<?> object. Given that the
top-level element of a document is represented as a
JAXBElement<RulebaseType> with the tag "rulebase", one such
doument object can be created by code as shown below.
ObjectFactory objFact = new ObjectFactory(); RulebaseType rulebase = objFact.createRulebaseType(); JAXBElement<RulebaseType> doc = objFact.createRulebase( rulebase );A simple element that does not require a
JAXBElement<?> wrapper
is created by a straightforward method call.
ModuleType module = objFact.createModuleType();
A JAXBElement<?> is also required for element sequences
containing elements of the same type but with differing tags. Here is a
schema snippet:
<xsd:complexType name="FooBarListType">
<xsd:sequence>
<xsd:choice minOccurs="0" maxOccurs="unbounded">
<xsd:element name="foo" type="FooBarType"/>
<xsd:element name="bar" type="FooBarType"/>
</xsd:choice>
</xsd:sequence>
</xsd:complexType>
The ObjectFactory would now contain several methods for creating
a FooBarListType and its offsprings. A possible sequence of calls
is shown in the Java code below.
FooBarListType fblElem = objFact.createFooBarListType(); List<JAXBElement<FooBarType>> fbList = fblElem.getFooOrBar(); // create a "foo" element FooBarType foo = objFact.createFooBarType(); // ...(add attributes and components to foo) // Create the element <foo>...</foo> JAXBElement<FooBarType> fooElem = objFact.createFooBarTypeFoo( foo ); // Add it to its parent's list. fbList.add( fooElem ); // create a "bar" element FooBarType bar = objFact.createFooBarType(); // ...(add attributes and components to bar) // Create the element <bar>...</bar> JAXBElement<FooBarType> barElem = objFact.createFooBarTypeBar( bar ); // Add it to its parent's list. fbList.add( barElem );You may avoid these complications by subtyping
FooBarType
into identical types FooType and BarType.
| prev | table of contents | next |