Sorry I haven't caught up with this. Did you make any more progress? --Colin
On Tue, Aug 23, 2016 at 5:54 AM, Sela, Guy <guy.s...@hpe.com> wrote: > +yangtools mailing list > > > > *From:* Sela, Guy > *Sent:* Tuesday, August 23, 2016 12:30 PM > *To:* 'Robert Varga' <n...@hq.sk>; 'mdsal-...@lists.opendaylight.org' < > mdsal-...@lists.opendaylight.org>; 'controller-dev@lists.opendaylight.org' > <controller-dev@lists.opendaylight.org>; 'ttp-...@lists.opendaylight.org' > <ttp-...@lists.opendaylight.org> > *Subject:* RE: First shot at serializing data tree entities using the > Binding Independent level > > > > Regarding my first question for creating the QName in the receiver side, I > found that I can use: > > BindingReflections.findQName(ElanInstances.class). > > So theoretically, if I were to send the Class type along with the Json > string, I can deserialize everything in the receiver side without any > “knowledge”. > > > > *From:* Sela, Guy > *Sent:* Tuesday, August 23, 2016 12:18 PM > *To:* 'Robert Varga' <n...@hq.sk>; mdsal-...@lists.opendaylight.org; > controller-dev@lists.opendaylight.org; 'ttp-...@lists.opendaylight.org' < > ttp-...@lists.opendaylight.org> > *Subject:* First shot at serializing data tree entities using the Binding > Independent level > > > > Hi, > > > > As suggested, I looked at the TTPUtils for an example on how to serialize > and deserialize the DTOs between machines. > > My attempt was to serialize an ElanInstance from the elan.yang model. > > This is the model: > > container elan-instances { > > list elan-instance { > > …. > > > > First of all, serializing the ElanInstance itself resulted in: > > 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.binding.data.codec.impl. > BindingToNormalizedStreamWriter.startMapEntryNode( > BindingToNormalizedStreamWriter.java:175) > > at org.opendaylight.yang.gen.v1. > urn.opendaylight.netvirt.elan.rev150602.elan.instances. > ElanInstance$StreamWriter.serialize(DataObjectSerializerPrototype.java) > > at org.opendaylight.yangtools.binding.data.codec.impl. > BindingNormalizedNodeCodecRegistry$DataObjectSerializerProxy.serialize( > BindingNormalizedNodeCodecRegistry.java:295) > > at org.opendaylight.newfederation.transform.TTPUtils. > jsonStringFromDataObject(TTPUtils.java:146) > > at org.opendaylight.newfederation.tests. > JsonParsing.main(JsonParsing.java:73) > > > > Then, I tried to serialize the ElanInstances container initialized with > the ElanInstance, and it succeeded, but with a lot of verbose code, that I > guess could be reduced somehow. > > This is the code: > > *SERIALIZER CODE:* > > TTPUtils ttp = new TTPUtils(Collections. > singleton(BindingReflections.getModuleInfo(ElanInstances.class))); > > ElanInstance newInstance = new ElanInstanceBuilder(). > setElanInstanceName("GUYELAN") > > .setDescription("ElanDescription").build(); > > ArrayList<ElanInstance> list = new ArrayList<>(); > > list.add(newInstance); > > ElanInstances instances = new ElanInstancesBuilder(). > setElanInstance(list).build(); > > InstanceIdentifier<ElanInstances> id = InstanceIdentifier.create( > ElanInstances.class); > > > > String jsonStringFromDataObject = ttp.jsonStringFromDataObject(id, > instances, true); > > System.out.println(jsonStringFromDataObject); > > *DESERIALIZER CODE:* > > NormalizedNode<?, ?> normalized = ttp. > normalizedNodeFromJsonString(jsonStringFromDataObject); > > DataObject finalDataObject = > *ttp.dataObjectFromNormalizedNode*(*"urn:opendaylight:netvirt:elan", > "2015-06-02",* > > * "elan-instances"*, normalized); > > ElanInstances finalInstances = (ElanInstances) finalDataObject; > > System.out.println("RESULT: " + finalInstances. > getElanInstance().get(0).getElanInstanceName()); > > > > > > I implemented the ttp.dataObjectFromNormalizedNode myself, like this: > > public DataObject dataObjectFromNormalizedNode(String namespace, String > revision, String localName, NormalizedNode<?, ?> nn) { > > QName qname = QName.create(namespace, revision, localName); > > return > codecRegistry.fromNormalizedNode(YangInstanceIdentifier.of(qname), > nn).getValue(); > > } > > > > Now to my questions: > > 1) Is it possible to do what I’m trying to do with less “knowledge” > in the deserializer side? The deserializer had to know that the > NormalizedNode it got was specifically belongs to this model: > *("urn:opendaylight:netvirt:elan", > "2015-06-02", "elan-instances")*, in order to do the deserialization. > > 2) How will this work with augmentations that are declared in > different models? > > 3) Can I use it with a specific ElanInstance? (I got an exception as > I illustrated). > > 4) I have a feeling I am not doing this in the right way, is there > any example of how to implement what I’m trying to do? If not, can someone > help me with a code snippet ? > > > > Thanks, > > Guy Sela > > > > _______________________________________________ > 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