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
.