1

I use XStream to map Entities to xml String

@XStreamAlias("user")
public class User {
    private String name;
    private Integer age;
    private String address;
    private String gender;

    ...getter()/setter()...
}

The util method I use:

public static String getXmlFromEntity(Object obj, Class rootClazz, String rootAlias){
        XStream magicApi = new XStream(new XppDriver(new NoNameCoder()));
        magicApi.registerConverter(new MapEntryConverter());
        magicApi.alias(rootAlias, rootClazz);
        magicApi.autodetectAnnotations(Boolean.TRUE);
        String xml = magicApi.toXML(obj);
        return xml;
    }

And the converter

public static class MapEntryConverter implements Converter {

        public boolean canConvert(Class clazz) {
            return AbstractMap.class.isAssignableFrom(clazz);
        }

        public void marshal(Object value, HierarchicalStreamWriter writer, MarshallingContext context) {

            AbstractMap map = (AbstractMap) value;
            for (Object obj : map.entrySet()) {
                Map.Entry entry = (Map.Entry) obj;
                writer.startNode(entry.getKey().toString());
                Object val = entry.getValue();
                if ( null != val ) {
                    writer.setValue(val.toString());
                }else {
                    writer.setValue("bbb");
                }
                writer.endNode();
            }

        }

        public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) {

            Map<String, String> map = new HashMap<String, String>();

            while(reader.hasMoreChildren()) {
                reader.moveDown();

                String key = reader.getNodeName(); // nodeName aka element's name
                String value = reader.getValue();
                map.put(key, value);

                reader.moveUp();
            }

            return map;
        }

    }

I want to get a result that for example if the gender is not set, that Tag should also be included as a empty tag instead of omitting it in the result xml string:

<user>
  <name>Tom</name>
  <address>228 Park Ave S. New York, NY 10003</address>
</user>

I want the result to be:

<user>
  <name>Tom</name>
  <address>228 Park Ave S. New York, NY 10003</address>
  <gender></gender>
  <age></age>
</user>

How could I do that?

armnotstrong
  • 8,605
  • 16
  • 65
  • 130
  • Might be a duplicate, does this work for you? http://stackoverflow.com/questions/13066360/xstream-serialize-null-values – HulkSmash Oct 20 '15 at 04:12

0 Answers0