XStream : node with attributes and text node?

13,771

Solution 1

write a convertor, it should be something similar to the code snippet

class FieldDtoConvertor implements Converter {
    @SuppressWarnings("unchecked")
    public boolean canConvert(final Class clazz) {
        return clazz.equals(FieldDto.class);
    }

    public void marshal(final Object value,
            final HierarchicalStreamWriter writer,
            final MarshallingContext context) {
        final FieldDto fieldDto = (FieldDto) value;
        writer.addAttribute(fieldDto.getAttributeName(), fieldDto.getAttributeValue());     
    }
}

And while using XStream,register the convertor

final XStream stream = new XStream(new DomDriver());
stream.registerConverter(new FieldDtoConvertor());

Solution 2

you can use a predefined Converter.

@XStreamAlias("node")
@XStreamConverter(value=ToAttributedValueConverter.class, strings={"text"})
class Node {
  private String att;
  private String text;
}   

XStream Annotations Tutorial also says that for att attribute:

Note, that no XStreamAsAttribute annotations were necessary. The converter assumes it implicitly.

Share:
13,771
subb
Author by

subb

Updated on June 27, 2022

Comments

  • subb
    subb almost 2 years

    I would like to serialize an object to an XML of this form with XStream.

    <node att="value">text</node>
    

    The value of the node (text) is a field on the serialized object, as well as the att attribute. Is this possible without writing a converter for this object?

    Thanks!