Просто-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);
    }
}

}

Другие вопросы по тегам