Please note that the specifications and other information contained herein are not final and are subject to change. The information is being made available to you solely for purpose of evaluation.
The Marshaller class is responsible for governing the process
of serializing Java content trees back into XML data. It provides the basic
marshalling methods:
Assume the following setup code for all following code fragments:
JAXBContext jc = JAXBContext.newInstance( "com.acme.foo" );
Unmarshaller u = jc.createUnmarshaller();
Object element = u.unmarshal( new File( "foo.xml" ) );
Marshaller m = jc.createMarshaller();
Marshalling to a File:
OutputStream os = new FileOutputStream( "nosferatu.xml" );
m.marshal( element, os );
Marshalling to a SAX ContentHandler:
// assume MyContentHandler instanceof ContentHandler
m.marshal( element, new MyContentHandler() );
The first parameter of the overloaded
Marshaller.marshal(java.lang.Object, ...) methods must be a
JAXB element as computed by
JAXBIntrospector.isElement(java.lang.Object);
otherwise, a Marshaller.marshal method must throw a
MarshalException. There exist two mechanisms
to enable marshalling an instance that is not a JAXB element.
One method is to wrap the instance as a value of a JAXBElement,
and pass the wrapper element as the first parameter to
a Marshaller.marshal method. For java to schema binding, it
is also possible to simply annotate the instance's class with
@XmlRootElement.
Encoding
By default, the Marshaller will use UTF-8 encoding when generating XML data
to a java.io.OutputStream, or a java.io.Writer. Use the
setProperty API to change the output
encoding used during these marshal operations. Client applications are
expected to supply a valid character encoding name as defined in the
W3C XML 1.0
Recommendation and supported by your
Java Platform.
Validation and Well-Formedness
Client applications are not required to validate the Java content tree prior
to calling any of the marshal API's. Furthermore, there is no requirement
that the Java content tree be valid with respect to its original schema in
order to marshal it back into XML data. Different JAXB Providers will
support marshalling invalid Java content trees at varying levels, however
all JAXB Providers must be able to marshal a valid content tree back to
XML data. A JAXB Provider must throw a MarshalException when it
is unable to complete the marshal operation due to invalid content. Some
JAXB Providers will fully allow marshalling invalid content, others will fail
on the first validation error.
Even when schema validation is not explictly enabled for the marshal operation,
it is possible that certain types of validation events will be detected
during the operation. Validation events will be reported to the registered
event handler. If the client application has not registered an event handler
prior to invoking one of the marshal API's, then events will be delivered to
a default event handler which will terminate the marshal operation after
encountering the first error or fatal error. Note that for JAXB 2.0 and
later versions, DefaultValidationEventHandler is
no longer used.
Supported Properties
All JAXB Providers are required to support the following set of properties.
Some providers may support additional properties.
jaxb.encoding - value must be a java.lang.String
The output encoding to use when marshalling the XML data. The
Marshaller will use "UTF-8" by default if this property is not
specified.
jaxb.formatted.output - value must be a java.lang.Boolean
This property controls whether or not the Marshaller will format
the resulting XML data with line breaks and indentation. A
true value for this property indicates human readable indented
xml data, while a false value indicates unformatted xml data.
The Marshaller will default to false (unformatted) if this
property is not specified.
jaxb.schemaLocation - value must be a java.lang.String
This property determines whether or not document level events will be
generated by the Marshaller. If the property is not specified, the
default is false. This property has different implications depending
on which marshal api you are using - when this property is set to true:
"The Marshaller provides two styles of callback mechanisms
that allow application specific processing during key points in the
unmarshalling process. In 'class defined' event callbacks, application
specific code placed in JAXB mapped classes is triggered during
marshalling. 'External listeners' allow for centralized processing
of marshal events in one callback method rather than by type event callbacks.
Class defined event callback methods allow any JAXB mapped class to specify
its own specific callback methods by defining methods with the following method signatures:
// Invoked by Marshaller after it has created an instance of this object.
boolean beforeMarshal(Marshaller);
// Invoked by Marshaller after it has marshalled all properties of this object.
void afterMmarshal(Marshaller);
The class defined event callback methods should be used when the callback method requires
access to non-public methods and/or fields of the class.
The external listener callback mechanism enables the registration of a Marshaller.Listener
instance with a setListener(Listener). The external listener receives all callback events,
allowing for more centralized processing than per class defined callback methods.
JAXB_FRAGMENT
The name of the property used to specify whether or not the marshaller
will generate document level events (ie calling startDocument or endDocument).
JAXB_NO_NAMESPACE_SCHEMA_LOCATION
The name of the property used to specify the
xsi:noNamespaceSchemaLocation attribute value to place in the marshalled
XML output.
Get a DOM tree view of the content tree(Optional).
If the returned DOM tree is updated, these changes are also
visible in the content tree.
Use marshal(Object, org.w3c.dom.Node) to force
a deep copy of the content tree to a DOM representation.
Parameters:
contentTree - - JAXB Java representation of XML content
Set the particular property in the underlying implementation of
Marshaller. This method can only be used to set one of
the standard JAXB defined properties above or a provider specific
property. Attempting to set an undefined property will result in
a PropertyException being thrown. See
Supported Properties.
Parameters:
name - the name of the property to be set. This value can either
be specified using one of the constant fields or a user
supplied string.
value - the value of the property to be set
Throws:
PropertyException - when there is an error processing the given
property or value
Get the particular property in the underlying implementation of
Marshaller. This method can only be used to get one of
the standard JAXB defined properties above or a provider specific
property. Attempting to get an undefined property will result in
a PropertyException being thrown. See
Supported Properties.
Parameters:
name - the name of the property to retrieve
Returns:
the value of the requested property
Throws:
PropertyException - when there is an error retrieving the given property or value
property name
Allow an application to register a validation event handler.
The validation event handler will be called by the JAXB Provider if any
validation errors are encountered during calls to any of the marshal
API's. If the client application does not register a validation event
handler before invoking one of the marshal methods, then validation
events will be handled by the default event handler which will terminate
the marshal operation after the first error or fatal error is encountered.
Calling this method with a null parameter will cause the Marshaller
to revert back to the default default event handler.
Parameters:
handler - the validation event handler
Throws:
JAXBException - if an error was encountered while setting the
event handler
<A extends XmlAdapter> void setAdapter(Class<A> type,
A adapter)
Associates a configured instance of XmlAdapter with this marshaller.
Every marshaller internally maintains a
Map<Class,XmlAdapter>,
which it uses for marshalling classes whose fields/methods are annotated
with XmlJavaTypeAdapter.
This method allows applications to use a configured instance of XmlAdapter.
When an instance of an adapter is not given, a marshaller will create
one by invoking its default constructor.
Parameters:
type - The type of the adapter. The specified instance will be used when
XmlJavaTypeAdapter.value()
refers to this type.
adapter - The instance of the adapter to be used. If null, it will un-register
the current adapter set for this type.
Associate a context that enables binary data within an XML document
to be transmitted as XML-binary optimized attachment.
The attachment is referenced from the XML document content model
by content-id URIs(cid) references stored within the xml document.
Throws:
IllegalStateException - if attempt to concurrently call this
method during a marshal operation.
Specify the JAXP 1.3 Schema
object that should be used to validate subsequent marshal operations
against. Passing null into this method will disable validation.
This method allows the caller to validate the marshalled XML as it's marshalled.
Initially this property is set to null.
Parameters:
schema - Schema object to validate marshal operations against or null to disable validation
Throws:
UnsupportedOperationException - could be thrown if this method is
invoked on an Marshaller created from a JAXBContext referencing
JAXB 1.0 mapped classes
Get the JAXP 1.3 Schema object
being used to perform marshal-time validation. If there is no
Schema set on the marshaller, then this method will return null
indicating that marshal-time validation will not be performed.
Returns:
the Schema object being used to perform marshal-time
validation or null if not present.
Throws:
UnsupportedOperationException - could be thrown if this method is
invoked on an Marshaller created from a JAXBContext referencing
JAXB 1.0 mapped classes
There is only one Listener per Marshaller. Setting a Listener replaces the previous set Listener.
One can unregister current Listener by setting listener to null.
Submit a bug or feature For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.