Opendaylight сериализует проблему нулевых значений - PullRequest
0 голосов
/ 12 июня 2019

Я разрабатываю проект, используя Opendaylight (oxygen-sr4). Я определил объекты Ян. .yang файл как: grouping person{ leaf enName{ type string; } leaf zhName{ type string; } }

Когда я передаю объект person во внешний интерфейс, я обнаружил, что поле пропускает проблему, если значение поля равно нулю. Мне нужно: {"person":{"enName":"allen","zhName":null}}, но я получил: {"person":{"enName":"allen"}})

Я отладил проект. Я обнаружил, что проблема заключается в сериализации объекта персонажа (Ян 100 * автоматически генерируется), DataNodeContainerSerializerSource в модуле mdsal-binding-dom-codec
сгенерировал анонимный метод сериализации и добавил проверку null следующим образом:

java.lang.String getZhName = ((java.lang.String) _input.getZhName());
if (getZhName != null) {
    _stream.leafNode("zhName",getZhName);
} 

org.opendaylight.mdsal.binding.dom.codec.gen.impl.DataNodeContainerSerializerSource сгенерированный анонимный метод сериализации:

private void emitChild(final StringBuilder sb, final String getterName, final Type childType,
            final DataSchemaNode schemaChild) {
        sb.append(statement(assign(childType, getterName, cast(childType, invoke(INPUT, getterName)))));

        sb.append("if (").append(getterName).append(" != null) {\n");
        emitChildInner(sb, getterName, childType, schemaChild);
        sb.append("}\n");
    }

Есть ли способ передать поле нулевого значения? Изменяя конфигурацию файла .yang? Или путем создания настраиваемого класса, который расширяет DataNodeContainerSerializerSource?

Кстати, я обнаружил, что DataNodeContainerSerializerSource устарело.

...