On Fri, Jan 18, 2019 at 4:13 PM Sam Hague <[email protected]> wrote:

> Any idea if there is a portable java method that can take json as input
> and output java objects? Or some example code that maybe isn't as generic,
> but with some case-specific coding could do the same?
>
> The use case is for writing unit tests. Every new listener I add tests for
> I always create helper methods to fill out the java objects, write to
> mdsal, do some verifications, write some more and so on. It would be much
> more readable to simply input a json into this new helper method and out
> pop a java object that can be written to mdsal.
>
> I imagine the restconf project has something similar since it parses
> incoming json. Or maybe it is using some libraries to do the same?
>

restconf doesn't use binding classes - it converts json/xml to
NormalizedNode - this is done in
https://github.com/opendaylight/netconf/blob/master/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/rest/impl/JsonNormalizedNodeBodyReader.java
:

    final NormalizedNodeResult resultHolder = new NormalizedNodeResult();
    final NormalizedNodeStreamWriter writer =
ImmutableNormalizedNodeStreamWriter.from(resultHolder);
    ...
    final JsonParserStream jsonParser = JsonParserStream.create(writer,

JSONCodecFactorySupplier.DRAFT_LHOTKA_NETMOD_YANG_JSON_02.getShared(path.getSchemaContext()),
parentSchema);
    final JsonReader reader = new JsonReader(new
InputStreamReader(nonEmptyInputStreamOptional.get(),
StandardCharsets.UTF_8));
    jsonParser.parse(reader);

    NormalizedNode<?, ?> result = resultHolder.getResult();


Then you can convert the NormalizedNode to a binding object
via BindingToNormalizedNodeCodec:

    BindingToNormalizedNodeCodec codec = ...
    DataObject javaObject = codec.fromNormalizedNode(path,
result).getValue();


>
> Thanks, Sam
> _______________________________________________
> Discuss mailing list
> [email protected]
> https://lists.opendaylight.org/mailman/listinfo/discuss
>
_______________________________________________
Discuss mailing list
[email protected]
https://lists.opendaylight.org/mailman/listinfo/discuss

Reply via email to