| 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 |