Guy, I don't have any direct answer for a ready made solution for JSON, but
I thought that you may be interested in knowing that I'm actively working
on something vaguely related, in [1] :

The goal there isn't to serialize to generic format dynamically (like JSON,
for which the NormalizedNode representation seems to be the way go go), but
to be able to create code literals (text) to recreate given DataObject
instances through the respective Builder.

The few problems that had to be solved for that goal include dealing with
Augmentations in a general way; the [2] helper could be handy for anyone
else ever needing anything like this.

[1] https://git.opendaylight.org/gerrit/#/c/44099/

[2]
https://git.opendaylight.org/gerrit/#/c/44099/8/opendaylight/md-sal/sal-binding-broker/src/test/java/org/opendaylight/controller/md/sal/binding/test/xtendbeans/AugmentableExtension.java


Tx,
M.
--
Michael Vorburger <vorbur...@redhat.com> | IRC: vorburger @freenode | ~ =
http://vorburger.ch

On Mon, Aug 29, 2016 at 8:40 PM, Sela, Guy <guy.s...@hpe.com> wrote:

> ?
>
> -----Original Message-----
> From: Sela, Guy
> Sent: Wednesday, August 24, 2016 2:21 PM
> To: 'Muthukumaran K' <muthukumara...@ericsson.com>; 'Robert Varga' <
> n...@hq.sk>; 'controller-dev@lists.opendaylight.org' <
> controller-dev@lists.opendaylight.org>; 'mdsal-...@lists.opendaylight.org'
> <mdsal-...@lists.opendaylight.org>; 'yangtools-...@lists.opendaylight.org'
> <yangtools-...@lists.opendaylight.org>
> Subject: RE: [mdsal-dev] Serialize/Deserialize DTOs to JSON
>
> The only way it is working for me now, is the following (Some of it is
> pseudo-code):
> "
> PRODUCER CODE:
> I have a org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.
> network.topology.rev131021.network.topology.topology.Node in my hands
> (Got it from a DCN).
> This is the code I need to run in order to do what I'm trying:
> TopologyBuilder topologyBuilder = new TopologyBuilder();
> topologyBuilder.setKey(new TopologyKey(new TopologyId(new
> Uri("ovsdb:1")))); topologyBuilder.setNode(Collections.singletonList(
> node));
> NetworkTopologyBuilder ntBuilder = new NetworkTopologyBuilder();
> ntBuilder.setTopology(Collections.singletonList(topologyBuilder.build()));
> InstanceIdentifier path = InstanceIdentifier.create(
> NetworkTopology.class);
> String json = TTPUtils.jsonStringFromDataObject(path, ntBuilder.build(),
> true); Serialize the json...
>
> CONSUMER CODE:
> NormalizedNode normalizedNode = TTPUtils.normalizedNodeFromJsonString(
> jsonInput);
> DataObject obj = BindingNormalizedNodeCodecRegistry. fromNormalizedNode(
> YangInstanceIdentifier.of(BindingReflections.findQName(NetworkTopology.class)),
> normalizedNode); NetworkTopology nt = (NetworkTopology)obj; Node node =
> nt.getTopology().get(0).getNode().get(0);
> return node;
> "
>
> Is this what you guys meant by working with NormalizedNodes or is there a
> better way?
>
>
>
> -----Original Message-----
> From: Sela, Guy
> Sent: Tuesday, August 23, 2016 6:11 PM
> To: 'Muthukumaran K' <muthukumara...@ericsson.com>; Robert Varga <
> n...@hq.sk>; controller-dev@lists.opendaylight.org;
> mdsal-...@lists.opendaylight.org; 'yangtools-...@lists.opendaylight.org' <
> yangtools-...@lists.opendaylight.org>
> Subject: RE: [mdsal-dev] Serialize/Deserialize DTOs to JSON
>
> I am probably missing something, or not explaining myself well.
> I'll give a fresh example.
>
> I am holding a "org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.
> network.topology.rev131021.network.topology.topology.Node" in my hands.
> Node node = new NodeBuilder().setKey(new NodeKey(new
> NodeId("asdsd"))).build();
>
> After converting it to NormalizedNode I get:
> ImmutableMapEntryNode{nodeIdentifier=(urn:TBD:params:xml:ns:yang:network-
> topology?revision=2013-10-21)node[{(urn:TBD:params:xml:ns:
> yang:network-topology?revision=2013-10-21)node-id=asdsd}],
> value=[ImmutableLeafNode{nodeIdentifier=(urn:TBD:
> params:xml:ns:yang:network-topology?revision=2013-10-21)node-id,
> value=asdsd, attributes={}}], attributes={}}
>
> When I try to convert this NormalizedNode to a JsonString using the
> algorithm used in the Test class[1], I get the following exception
> Exception in thread "main" java.lang.IllegalArgumentException: List item
> is not appropriate
>         at com.google.common.base.Preconditions.checkArgument(
> Preconditions.java:122)
>         at org.opendaylight.yangtools.yang.data.impl.codec.
> SchemaTracker.startListItem(SchemaTracker.java:144)
>         at org.opendaylight.yangtools.yang.data.codec.gson.
> JSONNormalizedNodeStreamWriter.startMapEntryNode(
> JSONNormalizedNodeStreamWriter.java:156)
>         at org.opendaylight.yangtools.yang.data.api.schema.stream.
> NormalizedNodeWriter$OrderedNormalizedNodeWriter.writeMapEntryNode(
> NormalizedNodeWriter.java:269)
>         at org.opendaylight.yangtools.yang.data.api.schema.stream.
> NormalizedNodeWriter.wasProcessedAsCompositeNode(
> NormalizedNodeWriter.java:210)
>         at org.opendaylight.yangtools.yang.data.api.schema.stream.
> NormalizedNodeWriter.write(NormalizedNodeWriter.java:102)
>         at org.opendaylight.newfederation.transform.GuyDemoUtils.
> normalizedNodeToJsonStreamTransformation(GuyDemoUtils.java:190)
>         at org.opendaylight.newfederation.tests.
> JsonParsing.main(JsonParsing.java:115)
>
> [1] The algorithm (I'm replacing schemaContext with the correct
> schemaContext):
> private static String normalizedNodeToJsonStreamTransformation(final
> Writer writer,
>             final NormalizedNode<?, ?> inputStructure) throws IOException {
>
>         final NormalizedNodeStreamWriter jsonStream =
> JSONNormalizedNodeStreamWriter.
>                 createExclusiveWriter(JSONCodecFactory.create(schemaContext),
> SchemaPath.ROOT, null,
>                     JsonWriterFactory.createJsonWriter(writer, 2));
>         final NormalizedNodeWriter nodeWriter = NormalizedNodeWriter.
> forStreamWriter(jsonStream);
>         nodeWriter.write(inputStructure);
>
>         nodeWriter.close();
>         return writer.toString();
>     }
>
>
> -----Original Message-----
> From: Muthukumaran K [mailto:muthukumara...@ericsson.com]
> Sent: Tuesday, August 23, 2016 5:51 PM
> To: Sela, Guy <guy.s...@hpe.com>; Robert Varga <n...@hq.sk>;
> controller-dev@lists.opendaylight.org; mdsal-...@lists.opendaylight.org
> Subject: RE: [mdsal-dev] Serialize/Deserialize DTOs to JSON
>
> Since NormalizedNode is a pre-requisite for the deserialization into json,
> this seems to demonstrate how to get an entry from keyed list
> https://github.com/opendaylight/yangtools/blob/
> master/yang/yang-data-codec-gson/src/test/java/org/
> opendaylight/yangtools/yang/data/codec/gson/NormalizedNodeToJsonStreamTest
> .java particularly  'keyedListNodeInContainer()'
>
> -----Original Message-----
> From: controller-dev-boun...@lists.opendaylight.org [mailto:
> controller-dev-boun...@lists.opendaylight.org] On Behalf Of Sela, Guy
> Sent: Tuesday, August 23, 2016 7:52 PM
> To: Robert Varga; controller-dev@lists.opendaylight.org;
> mdsal-...@lists.opendaylight.org
> Subject: Re: [controller-dev] [mdsal-dev] Serialize/Deserialize DTOs to
> JSON
>
> Sorry, I meant to ask about an entry of a list, not a leaf node.
> I mean, let's say I have this yang model:
> "
> container elan-instances {
>         description
>            "elan instances configuration parameters. Elan instances
> support both the VLAN and VNI based elans.";
>
>         list elan-instance {
>             max-elements "unbounded";
>             min-elements "0";
>             key "elan-instance-name";
>             description
>                 "Specifies the name of the elan instance. It is a string
> of 1 to 31
>                  case-sensitive characters.";
>             leaf elan-instance-name {
> ...
> "
> Can I convert a specific elan-instance ? Or do I have to convert something
> bigger?
>
> -----Original Message-----
> From: Sela, Guy
> Sent: Tuesday, August 23, 2016 4:49 PM
> To: 'Robert Varga' <n...@hq.sk>; controller-dev@lists.opendaylight.org;
> mdsal-...@lists.opendaylight.org
> Subject: RE: [mdsal-dev] Serialize/Deserialize DTOs to JSON
>
> From what I'm seeing so far, I can't convert a leaf node into a JSON
> string. The only entities I can convert are container or list.
> Is this correct?
>
> I got this from:
>     private SchemaTracker(final SchemaContext context, final SchemaPath
> path) {
>         SchemaNode current = SchemaUtils.findParentSchemaOnPath(context,
> path);
>         Preconditions.checkArgument(current instanceof
> DataNodeContainer,"Schema path must point to container or list or an rpc
> input/output. Supplied path %s pointed to: %s",path,current);
>         root = (DataNodeContainer) current;
>     }
>
> When trying to create JSONNormalizedNodeStreamWriter
>
> -----Original Message-----
> From: Robert Varga [mailto:n...@hq.sk]
> Sent: Sunday, July 24, 2016 4:52 PM
> To: Sela, Guy <guy.s...@hpe.com>; controller-dev@lists.opendaylight.org;
> mdsal-...@lists.opendaylight.org
> Subject: Re: [mdsal-dev] Serialize/Deserialize DTOs to JSON
>
> On 07/24/2016 01:36 PM, Sela, Guy wrote:
> > Hi,
> >
> > Is there an API that I can call which gets a DataObject as input and
> > returns a JSON representation of it?
>
> Not directly, as DataObject and related generated code is an access
> facade. Primary data representation is NormalizedNode, hence you need to
> transform the DTOs to NormalizedNodes (see mdsal-binding-dom-codec) and
> then use yang-data-codec-gson (or -xml) to get the representation you seek.
>
> I think TTPUtils (in TTP) does exactly that.
>
> Bye,
> Robert
>
> _______________________________________________
> controller-dev mailing list
> controller-dev@lists.opendaylight.org
> https://lists.opendaylight.org/mailman/listinfo/controller-dev
> _______________________________________________
> mdsal-dev mailing list
> mdsal-...@lists.opendaylight.org
> https://lists.opendaylight.org/mailman/listinfo/mdsal-dev
>
_______________________________________________
controller-dev mailing list
controller-dev@lists.opendaylight.org
https://lists.opendaylight.org/mailman/listinfo/controller-dev

Reply via email to