Hi,
Age Bosma wrote:
> Hi,
>
> I'm trying to convert an EnumMap object property to an implicit list,
> but I can't seem to figure out how to skip the parent node in the
> marshal method of the custom converter.
>
> Example:
>
> public class PIzza {
> @XStreamConverter(ContentConverter.class)
> protected EnumMap<ContentType, URI> content =
> new EnumMap<ContentType, URI>(ContentType.class);
> }
>
> Desired XML:
>
> <pizza>
> <content type="text">content.txt</content>
> <content type="html">content.html</content>
> </pizza>
>
> The key to attribute mapping is the reason I'm creating a custom
> converter.
>
> Current converter:
>
> public class ContentConverter implements Converter {
> @Override
> public void marshal(Object source, HierarchicalStreamWriter writer,
> MarshallingContext context) {
> EnumMap<Email.ContentType, URI> content =
> (EnumMap<Email.ContentType, URI>) source;
>
> for (Entry<Email.ContentType, URI> entry : content.entrySet()) {
> writer.startNode("content");
> writer.addAttribute("type",
> entry.getKey().toString().toLowerCase());
> context.convertAnother(entry.getValue());
> writer.endNode();
> }
> }
> }
>
> Resulting XML:
>
> <pizza>
> <content>
> <content type="text">content.txt</content>
> <content type="html">content.html</content>
> </content>
> <pizza>
>
> How do I prevent the parent "content" node from being created? Marking
> the property as implicit causes the converter to be ignored, closing the
> writer makes no difference and not starting new nodes will make a mess
> of things.
>
> It also makes me wonder how one has to unmarshal an implicit map, as the
> entries won't be contained within a parent node any more.
See, you already hit the point. The "implicit" support is a capability of
the ReflectionConverter to write included collections/maps/arrays as flat
elements. There's no other converter involved for the collection itself. You
will have to write a custom converter for your Pizza type.
- Jörg
---------------------------------------------------------------------
To unsubscribe from this list, please visit:
http://xircles.codehaus.org/manage_email