Я разрабатываю проект, используя 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
устарело.