Another common use case is where you
have an object that doesn't have
@XmlRootElement on it. JAXB allows you
to marshal it like this:

marshaller.marshal( new JAXBElement(
new
QName("","rootTag"),Point.class,new
Point(...)));

This puts the element as the
root element, followed by the contents
of the object, then . You
can actually use it with a class that
has @XmlRootElement, and that simply
renames the root element name.

At the first glance the second
Point.class parameter may look
redundant, but it's actually necessary
to determine if the marshaller will
produce (infamous) @xsi:type. In this
example, both the class and the
instance are Point, so you won't see
@xsi:type. But if they are different,
you'll see it.

This can be also used to marshal a
simple object, like String or an
integer.

marshaller.marshal( new JAXBElement(
new
QName("","rootTag"),String.class,"foo
bar"));

But unfortunately it cannot be used to
marshal objects like List or Map, as
they aren't handled as the first-class
citizen in the JAXB world.