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
_______________________________________________
controller-dev mailing list
controller-dev@lists.opendaylight.org
https://lists.opendaylight.org/mailman/listinfo/controller-dev

Reply via email to