Open jacksitlab opened 3 years ago
With additional import of odl OSGi-Service <reference id="parserFactory" interface="org.opendaylight.yangtools.yang.model.parser.api.YangParserFactory" /> it should be much easier to serialize data like ODL does
<reference id="parserFactory" interface="org.opendaylight.yangtools.yang.model.parser.api.YangParserFactory" />
import com.google.gson.stream.JsonWriter; import org.opendaylight.binding.runtime.spi.BindingRuntimeHelpers; import org.opendaylight.mdsal.binding.dom.codec.impl.BindingCodecContext; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.config.rev201208.Configuration; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.config.rev201208.ConfigurationBuilder; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.config.rev201208.configuration.EntryBuilder; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.config.rev201208.configuration.EntryKey; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.common.Uint8; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter; import org.opendaylight.yangtools.yang.data.codec.gson.JSONCodecFactory; import org.opendaylight.yangtools.yang.data.codec.gson.JSONCodecFactorySupplier; import org.opendaylight.yangtools.yang.data.codec.gson.JSONNormalizedNodeStreamWriter; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.model.api.SchemaPath; import org.opendaylight.yangtools.yang.model.parser.api.YangParser; import org.opendaylight.yangtools.yang.model.parser.api.YangParserException; import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; import org.opendaylight.yangtools.yang.parser.impl.YangParserFactoryImpl; ... private void serialize(Configuration configuration) { final YangParser parser = this.yangParserFactory.createParser(); final EffectiveModelContext schemaContext = parser.buildEffectiveModel(); final NormalizedNode<?, ?> data = BINDING_CONTEXT.toNormalizedNode( InstanceIdentifier.create(Configuration.class), configuration).getValue(); final String json = toJson(data, schemaContext); } private static String toJson(final NormalizedNode<?, ?> node, final EffectiveModelContext schemaContext) { final JSONCodecFactory codecFactory = JSONCodecFactorySupplier.RFC7951.createSimple(schemaContext); try (StringWriter stringWriter = new StringWriter(); JsonWriter jsonWriter = new JsonWriter(stringWriter); NormalizedNodeWriter nodeStreamer = NormalizedNodeWriter.forStreamWriter( JSONNormalizedNodeStreamWriter.createNestedWriter(codecFactory, SchemaPath.ROOT, schemaContext.getQName().getNamespace(), jsonWriter))) { jsonWriter.beginObject(); nodeStreamer.write(node); jsonWriter.endObject(); return stringWriter.toString(); } catch (IOException e) { throw new IllegalStateException("Failed to convert input node to JSON: " + node, e); } }
Task is to replace our internal yangtools independent serializer with this one, to solve not covered bugs in the existing serializer
With additional import of odl OSGi-Service
<reference id="parserFactory" interface="org.opendaylight.yangtools.yang.model.parser.api.YangParserFactory" />
it should be much easier to serialize data like ODL doesTask is to replace our internal yangtools independent serializer with this one, to solve not covered bugs in the existing serializer