...
- https://docs.opendaylight.org/en/latest/developer-guide/yang-tools.html*
- https://git.opendaylight.org/gerrit/admin/repos/yangtools
- https://gerrit.onap.org/r/admin/repos/ccsdk/sli/plugins
*Although this documentation link is to the latest ODL doc revision, it is very outdated and the code examples need significant updates, see findings in Mini-PoC below
Overview
The Yang parser used in ONAP (CCSDK / SDNC) was developed (and still is) a OpenDayLight Library.
...
To help this evaluation I will create a small sample project with the goal to pare a yang file using the ODL Yang Tools. I will report my finds findings here
Maven dependency
The documentation mentioned above lists many modules but the code examples do not clarify which exactly are need needed to parse a Yang file in java code.
- To be able to use yangtools teh project needs to use the mdsal 'binding-parent' pom
- The module yang-parser-impl contains all code required to parse yang files
- SLF4J has been added as the implementation requires a logger enabled
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
<parent>
<groupId>org.opendaylight.mdsal</groupId>
<artifactId>binding-parent</artifactId>
<version>3.0.8</version>
<relativePath/>
</parent>
:
<dependencies>
<dependency>
<groupId>org.opendaylight.yangtools</groupId>
<artifactId>yang-parser-impl</artifactId>
<version>5.0.3</version>
</dependency>
<!-- SLF4J API -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
<!-- LOG4J -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</dependency>
</dependencies> |
Code Updates
The sample code provided in the documentation is faulty (using == for assigning?!) and is using some long deprecated and even removed classes and methods.
Code Block | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
YangTextSchemaSource source = YangTextSchemaSource.forFile(new File("C:\\tmp\\yang\\CM-NOTIFY-API.yang"));
StatementStreamSource yangModuleSource = YangStatementStreamSource.create(source);
CrossSourceStatementReactor.BuildAction reactor = defaultReactor().newBuild();
reactor.addSource(yangModuleSource);
SchemaContext schemaContext = reactor.buildEffective();
Set<Module> modules = schemaContext.getModules();
Set<DataSchemaNode> dataSchemaNodes = schemaContext.getDataDefinitions(); |