XStream : node with attributes and text node?
Question
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!
Solution
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());
OTHER TIPS
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.
This is much easier in JAXB
@XmlRootElement
public class Node {
@XmlAttribute
String att;
@XmlValue
String value;
}
Just another way of doing it:
@XStreamAlias("My")
private static class My {
private String field;
}
XStream xStream = new XStream();
xStream.autodetectAnnotations(true);
xStream.useAttributeFor(My.class, "field");
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow