prev | table of contents | next |
marshal
Only a handful of source code lines is required to make a JAXB
Marshaller
object write a document tree as an XML file. First
you obtain a Marshaller
from a JAXBContext
. Then,
you might set a number of properties, such as the one that's used below,
which requests nice formatting of the XML text. Other properties concern
the inclusion of a schema location as an attribute in the top-level
element, or the encoding in the XML prolog. The first argument
must be an object that is either a root element, as defined by your
schema, or a JAXBElement<?>
.
import java.io.*; import javax.xml.bind.* void writeDocument( Object document, String pathname ) throws JAXBException, IOException { Class<T> clazz = document.getValue().getClass(); JAXBContext context = JAXBContext.newInstance( clazz.getPackage().getName() ); Marshaller m = context.createMarshaller(); m.setProperty( Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE ); m.marshal( document, new FileOutputStream( pathname ) ); }
Sometimes marshalling needs to be done not only for one or two
root documents but for objects of many different schema types. You could,
of course, add xsd:element
definitions for all of them to the
top level xsd:schema
element, but this is cumbersome. A generic
solution is presented below. The method wraps an arbitrary element of some
type T
into a JAXBElement<T>
.
<T> JAXBElement<T> wrap( String ns, String tag, T o ){ QName qtag = new QName( ns, tag ); Class<?> clazz = o.getClass(); @SuppressWarnings( "unchecked" ) JAXBElement<T> jbe = new JAXBElement( qtag, clazz, o ); return jbe; }To use it, you must create a context capable of handling all the classes that might crop up as instantiations for
T
.
(Creating a JAXBContext
for several packages or classes
is explained in section The JAXB Context.)
With a Marshaller m
obtained from this context, the
application of wrap
is as simple as this:
SomeType st = ...; JAXBElement<SomeType> jbx = wrap( "http://www.acme.com", "someTag", st ); m.marshal( jbx, System.out );
prev | table of contents | next |