prev | table of contents | next |
XmlSchemaType
The annotation XmlSchemaType
defines a mapping
between an arbitrary Java type and a simple schema built-in
type. Most of the time the default mapping is satisfactory,
but every now and then an alternative may be more convenient.
Let's assume that the processing of chunks of text requires
their extension, either after unmarshalling or before the
emitting marshalling. For this, a StringBuffer
is better than String
, which is the default
mapping for xs:string
. Below are the essential
Java classes, one defining TextType
as a
container for a string, and the type adapter class for the
simple conversion between String
and
StringBuffer
. Notice that the latter class
is specified in a separate annotation, i.e.,
XmlJavaTypeAdapter
.
public class TextType { @XmlElement @XmlSchemaType(name="string") @XmlJavaTypeAdapter( String2StrBuf.class ) public StringBuffer strbuf; } public class String2StrBuf extends XmlAdapter<String,StringBuffer> { @Override public String marshal( StringBuffer strbuf ){ return strbuf.toString(); } @Override public StringBuffer unmarshal( String string ){ return new StringBuffer( string ); } }Within the Java code that unmarshals or marshals an instance document,
TextType
elements are now
StringBuffers
, e.g.:
TextType text = new TextType(); text.strbuf = new StringBuffer( "This is the house" ); // ... text.strbuf.append( " that Jack built." );
Such a type mapping can be defined either for an individual element
or for all occurrences within a package. If you need multiple
mappings at package level, you'll have to bundle the
XmlSchemaType
annotations in an XmlSchemaTypes
(note the plural) annotation, and the XmlJavaTypeAdapter
annotiations are packed into a single XmlJavaTypeAdapters
annotation.
prev | table of contents | next |