Просто-xml от нуля до нуля
Я использую фреймворк simple-xml ( http://simple.sourceforge.net/home.php) для сериализации объектов.
Есть ли встроенная функция или опция, чтобы null
будет преобразован в nil="true"
:
XML:
<example xsi:nil="true"/>
с xmlns:xsi="http://www.w3.org/2001/XML-Schema-instance"
Спасибо
1 ответ
Не напрямую, но вы можете добавить это поведение, внедрив Converter
, Это позволяет оба направления, сериализации и десериализации.
Только не забудь AnnotationStrategy
(показано по ссылке выше).
Обновить
@Element(name = "example")
@Convert(ExampleConverter.class)
private String example = "";
// ...
static class ExampleConverter implements Converter<String>
{
// ...
@Override
public void write(OutputNode node, String value) throws Exception
{
if( value == null || value.isEmpty() == true )
{
node.setAttribute("xsi:nil", "true");
}
else
{
node.setAttribute("xsi:nil", value);
}
}
}
Это даст следующий XML, если задано пустое значение:
<SomeClass>
<example xsi:nil="true"/>
</SomeClass>
В противном случае используется фактическое значение.
В качестве примечания к ответу Олло, если вы хотите, чтобы значение было установлено с помощью обычных открытых и закрывающих тегов, вы можете использовать node.setValue в else, как показано ниже:
public class SoapNilConverter implements Converter<String> {
@Override
public String read(InputNode node) throws Exception {
return null;
}
@Override
public void write(OutputNode node, String value) throws Exception {
if (value == null || value.isEmpty()) {
node.setAttribute("xsi:nil", "true");
node.setAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
} else {
node.setValue(value);
}
}
}