public class HashMapperStringToComplex extends Object implements IMarshaller, IUnmarshaller, IAliasable
Custom marshaller/unmarshaller for java.util.Map
instances. This handles mapping hash maps with simple keys and complex values
to and from XML. There are a number of limitations, though. First off, the
key objects are marshalled as simple text values, using the
toString() method to convert them to String. When
unmarshalling the keys are always treated as String values. The
corresponding values can be any complex type with a <mapping> defined in
the binding. The name of the top-level element in the XML structure can be
configured in the binding definition, but the rest of the names are
predefined and set in the code (though the namespace configured for the
top-level element will be used with all the names).
The net effect is that the XML structure will always be of the form:
<map-name size="3">
<entry key="38193">
<customer state="WA" zip="98059">
<name first-name="John" last-name="Smith"/>
<street>12345 Happy Lane</street>
<city>Plunk</city>
</customer>
</entry>
<entry key="39122">
<customer state="WA" zip="98094">
<name first-name="Sally" last-name="Port"/>
<street>932 Easy Street</street>
<city>Fort Lewis</city>
</customer>
</entry>
<entry key="83132">
<customer state="WA" zip="98059">
<name first-name="Mary" last-name="Smith"/>
<street>12345 Happy Lane</street>
<city>Plunk</city>
</customer>
</entry>
</map-name>
where "map-name" is the configured top-level element name, the "size" attribute is the number of pairs in the hash map, and the "entry" elements are the actual entries in the hash map.
This is obviously not intended to handle all types of hash maps, but it should be useful as written for many applications and easily customized to handle other requirements.
| Constructor and Description |
|---|
HashMapperStringToComplex()
Default constructor.
|
HashMapperStringToComplex(String uri,
int index,
String name)
Aliased constructor.
|
| Modifier and Type | Method and Description |
|---|---|
protected String |
getEntryElementName()
Method which can be overridden to supply a different name for the element
used to represent each item in the map.
|
protected String |
getKeyAttributeName()
Method which can be overridden to supply a different name for the
attribute defining the key value for each item in the map.
|
protected String |
getSizeAttributeName()
Method which can be overridden to supply a different name for the wrapper
element attribute used to give the number of items present.
|
boolean |
isExtension(String mapname) |
boolean |
isPresent(IUnmarshallingContext ctx) |
void |
marshal(Object obj,
IMarshallingContext ictx) |
Object |
unmarshal(Object obj,
IUnmarshallingContext ictx) |
public HashMapperStringToComplex()
public HashMapperStringToComplex(String uri, int index, String name)
uri - namespace URI for the top-level element (also used for all
other names within the binding)index - namespace index corresponding to the defined URI within the
marshalling context definitionsname - local name for the top-level elementprotected String getSizeAttributeName()
null.protected String getEntryElementName()
protected String getKeyAttributeName()
public boolean isExtension(String mapname)
isExtension in interface IMarshallerpublic void marshal(Object obj, IMarshallingContext ictx) throws JiBXException
marshal in interface IMarshallerJiBXExceptionpublic boolean isPresent(IUnmarshallingContext ctx) throws JiBXException
isPresent in interface IUnmarshallerJiBXExceptionpublic Object unmarshal(Object obj, IUnmarshallingContext ictx) throws JiBXException
unmarshal in interface IUnmarshallerJiBXExceptionCopyright © 2005-2014 jibx.org. All Rights Reserved.