Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

*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
languagexml
themeMidnight
titlepom.xml
collapsetrue
    <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
languagejava
themeMidnight
titleCorrected Code
linenumberstrue
collapsetrue
        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();