Я решил проблему с помощью небольшого обходного пути.
В частности, XStream печатает самозакрывающиеся теги только для не примитивного объекта; поэтому я заменил все объекты String на общий класс с именем «Element» только с одним атрибутом «value».
public class Element {
private String value;
public Element() {
}
public Element(String value) {
this.value = value;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
Таким образом, нулевые значения Элемента будут напечатаны в XML как самозакрывающиеся теги (как я хочу)
После того, как я написал собственный конвертер, чтобы избежать печати в XML тега для непустых объектов.
public class CustomElementConverter implements Converter
{
public boolean canConvert(Class type)
{
return type.equals(Element.class);
}
public void marshal(Object source, HierarchicalStreamWriter writer, MarshallingContext context) {
String element = ((Element)source).getValue();
if (element != null) {
writer.setValue(element);
}
}
public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) {
return null;
}
}
И это сработало!
Я надеюсь, что это будет полезно для кого-то еще.
Дом