[YANGTOOLS-246] NPE in yangtools when parsing yang file Created: 03/Aug/14  Updated: 10/Apr/22  Resolved: 18/Mar/15

Status: Resolved
Project: yangtools
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Improvement
Reporter: Ed Warnicke Assignee: Unassigned
Resolution: Cannot Reproduce Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified
Environment:

Operating System: Mac OS
Platform: PC


Attachments: File opendaylight-match-types.yang     Zip Archive test_and_gen.zip    

 Description   

Here is the exeception:

[ERROR] yang-to-sources: Unable to parse yang files from /Users/hagbard/try/controller/opendaylight/md-sal/model/model-flow-base/src/main/yang
java.lang.NullPointerException
at org.opendaylight.yangtools.yang.parser.builder.impl.CopyUtils.getdata(CopyUtils.java:478)
at org.opendaylight.yangtools.yang.parser.builder.impl.CopyUtils.copy(CopyUtils.java:332)
at org.opendaylight.yangtools.yang.parser.builder.impl.CopyUtils.copy(CopyUtils.java:345)
at org.opendaylight.yangtools.yang.parser.builder.impl.CopyUtils.copy(CopyUtils.java:212)
at org.opendaylight.yangtools.yang.parser.builder.impl.CopyUtils.copy(CopyUtils.java:51)
at org.opendaylight.yangtools.yang.parser.builder.impl.GroupingBuilderImpl.instantiateChildNodes(GroupingBuilderImpl.java:71)
at org.opendaylight.yangtools.yang.parser.impl.YangParserImpl.resolveUses(YangParserImpl.java:1116)
at org.opendaylight.yangtools.yang.parser.impl.YangParserImpl.resolveUsesForGroupings(YangParserImpl.java:1076)
at org.opendaylight.yangtools.yang.parser.impl.YangParserImpl.build(YangParserImpl.java:667)
at org.opendaylight.yangtools.yang.parser.impl.YangParserImpl.parseYangModelSources(YangParserImpl.java:359)
at org.opendaylight.yangtools.yang.parser.impl.YangParserImpl.parseYangModelsFromStreamsMapped(YangParserImpl.java:313)
at org.opendaylight.yangtools.yang2sources.plugin.YangToSourcesProcessor.processYang(YangToSourcesProcessor.java:151)
at org.opendaylight.yangtools.yang2sources.plugin.YangToSourcesProcessor.execute(YangToSourcesProcessor.java:82)
at org.opendaylight.yangtools.yang2sources.plugin.YangToSourcesMojo.execute(YangToSourcesMojo.java:122)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156)
at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537)
at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:141)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409)
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352)



 Comments   
Comment by Ed Warnicke [ 03/Aug/14 ]

Attachment opendaylight-match-types.yang has been added with description: Yang file that produced the exception

Comment by Ed Warnicke [ 03/Aug/14 ]

Looking through the tests I'm going to go out on a limb and say this is because of the fact the union contains an identityref (I don't see tests for that).

Comment by Ed Warnicke [ 03/Aug/14 ]

Fix for NPEs is here https://git.opendaylight.org/gerrit/9630

But we still are not generating Union Types correctly for the examples:

identity vlan-id-special-types

{ description "Base type for indicating special vlans like ANY or NONE"; }

identity vlan-id-none

{ description "No vlan header present"; base vlan-id-special-types; }

identity vlan-id-any

{ description "Vlan header present with any vlan-id"; base vlan-id-special-types; }

grouping vlan-id-attributes {
leaf vlan-id-present

{ type boolean; }

leaf vlan-id {
type union {
type identityref

{ base vlan-id-special-types; }

type l2t:vlan-id;
}
}
}

The resulting class has a constructor for
org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanId

but not

org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.VlanIdSpecialTypes

There is a similar problem with (from controller/opendaylight/md-sal/model/model-flow-base/src/main/yang/opendaylight-port-types.yang):

leaf port-number {
type union

{ type uint32; type string; }

}

The generated PortNumber has a generator for Long, but not String.

Comment by Ladislav Borak [ 04/Aug/14 ]

Attachment test_and_gen.zip has been added with description: Test and generated files

Comment by Ladislav Borak [ 04/Aug/14 ]

I tested generation classes from yang files included as attachment and all constructors were generated correctly.

I used for generation your patch https://git.opendaylight.org/gerrit/9630.

Generated at Wed Feb 07 20:52:41 UTC 2024 using Jira 8.20.10#820010-sha1:ace47f9899e9ee25d7157d59aa17ab06aee30d3d.