[YANGTOOLS-1201] Unable to use prefix in augmention when argument inside submodule Created: 10/Dec/20  Updated: 10/Dec/20  Resolved: 10/Dec/20

Status: Resolved
Project: yangtools
Component/s: parser
Affects Version/s: 4.0.14, 5.0.7, 6.0.1
Fix Version/s: 7.0.0, 5.0.8, 6.0.2, 4.0.15

Type: Bug Priority: Medium
Reporter: Martin Balaz Assignee: Robert Varga
Resolution: Done Votes: 0
Labels: pt
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified


 Description   

Problem with using prefix inside a  when argument. This happens only inside a submodule trying to augment nodes from module to which it belongs.

Example [1]:

submodule ietf-snmp-community { 
  belongs-to ietf-snmp { 
    prefix snmp; 
  }
 ...
  augment /snmp:snmp/snmp:target { 
    when "snmp:v1 or snmp:v2c";
    ...
  }
}

Error message:

Caused by: org.opendaylight.yangtools.yang.parser.spi.source.SourceException: Argument "snmp:v1 or snmp:v2c" is not valid XPath string [at experimental/ietf-extracted-YANG-modules/ietf-snmp-community@2014-05-06.yang:192:4]
...
Caused by: javax.xml.xpath.XPathExpressionException: java.lang.IllegalArgumentException: Prefix snmp is not bound

[1]https://github.com/YangModels/yang/blob/ac6e52f0574d8db59d3ca61f52b339f4a49ea09b/experimental/ietf-extracted-YANG-modules/ietf-snmp-community%402014-05-06.yang#L192



 Comments   
Comment by Martin Balaz [ 10/Dec/20 ]
17:57:53.135 [main] ERROR org.opendaylight.yangtools.yang.validator.Main - Failed to create SchemaContext.17:57:53.135 [main] ERROR org.opendaylight.yangtools.yang.validator.Main - Failed to create SchemaContext.org.opendaylight.yangtools.yang.model.parser.api.YangParserException: Failed to assemble sources at org.opendaylight.yangtools.yang.parser.impl.YangParserImpl.decodeReactorException(YangParserImpl.java:110) at org.opendaylight.yangtools.yang.parser.impl.YangParserImpl.buildEffectiveModel(YangParserImpl.java:104) at org.opendaylight.yangtools.yang.validator.SystemTestUtils.parseYangSources(SystemTestUtils.java:106) at org.opendaylight.yangtools.yang.validator.SystemTestUtils.parseYangSources(SystemTestUtils.java:87) at org.opendaylight.yangtools.yang.validator.Main.runSystemTest(Main.java:177) at org.opendaylight.yangtools.yang.validator.Main.main(Main.java:136)Caused by: org.opendaylight.yangtools.yang.parser.spi.meta.SomeModifiersUnresolvedException: Some of FULL_DECLARATION modifiers for statements were not resolved. at org.opendaylight.yangtools.yang.parser.stmt.reactor.BuildGlobalContext.propagateException(BuildGlobalContext.java:259) at org.opendaylight.yangtools.yang.parser.stmt.reactor.BuildGlobalContext.loadPhaseStatementsFor(BuildGlobalContext.java:325) at org.opendaylight.yangtools.yang.parser.stmt.reactor.BuildGlobalContext.loadPhaseStatements(BuildGlobalContext.java:315) at org.opendaylight.yangtools.yang.parser.stmt.reactor.BuildGlobalContext.executePhases(BuildGlobalContext.java:221) at org.opendaylight.yangtools.yang.parser.stmt.reactor.BuildGlobalContext.buildEffective(BuildGlobalContext.java:233) at org.opendaylight.yangtools.yang.parser.stmt.reactor.CrossSourceStatementReactor$BuildAction.buildEffective(CrossSourceStatementReactor.java:232) at org.opendaylight.yangtools.yang.parser.impl.YangParserImpl.buildEffectiveModel(YangParserImpl.java:102) ... 4 common frames omittedCaused by: org.opendaylight.yangtools.yang.parser.spi.source.SourceException: Argument "snmp:v1 or snmp:v2c" is not valid XPath string [at experimental/ietf-extracted-YANG-modules/ietf-snmp-community@2014-05-06.yang:192:4] at org.opendaylight.yangtools.yang.parser.rfc7950.stmt.XPathSupport.parseXPath(XPathSupport.java:42) at org.opendaylight.yangtools.yang.parser.rfc7950.stmt.when.WhenStatementSupport.parseArgumentValue(WhenStatementSupport.java:46) at org.opendaylight.yangtools.yang.parser.rfc7950.stmt.when.WhenStatementSupport.parseArgumentValue(WhenStatementSupport.java:25) at org.opendaylight.yangtools.yang.parser.stmt.reactor.StatementDefinitionContext.parseArgumentValue(StatementDefinitionContext.java:47) at org.opendaylight.yangtools.yang.parser.stmt.reactor.SubstatementContext.<init>(SubstatementContext.java:37) at org.opendaylight.yangtools.yang.parser.stmt.reactor.AbstractResumedStatement.createSubstatement(AbstractResumedStatement.java:149) at org.opendaylight.yangtools.yang.parser.stmt.reactor.SourceSpecificContext.createDeclaredChild(SourceSpecificContext.java:142) at org.opendaylight.yangtools.yang.parser.stmt.reactor.StatementContextWriter.startStatement(StatementContextWriter.java:70) at org.opendaylight.yangtools.yang.parser.rfc7950.repo.StatementContextVisitor.processNewStatement(StatementContextVisitor.java:110) at org.opendaylight.yangtools.yang.parser.rfc7950.repo.StatementContextVisitor.processStatement(StatementContextVisitor.java:96) at org.opendaylight.yangtools.yang.parser.rfc7950.repo.StatementContextVisitor.doProcessStatement(StatementContextVisitor.java:119) at org.opendaylight.yangtools.yang.parser.rfc7950.repo.StatementContextVisitor.processNewStatement(StatementContextVisitor.java:111) at org.opendaylight.yangtools.yang.parser.rfc7950.repo.StatementContextVisitor.processStatement(StatementContextVisitor.java:96) at org.opendaylight.yangtools.yang.parser.rfc7950.repo.StatementContextVisitor.doProcessStatement(StatementContextVisitor.java:119) at org.opendaylight.yangtools.yang.parser.rfc7950.repo.StatementContextVisitor.processNewStatement(StatementContextVisitor.java:111) at org.opendaylight.yangtools.yang.parser.rfc7950.repo.StatementContextVisitor.processStatement(StatementContextVisitor.java:96) at org.opendaylight.yangtools.yang.parser.rfc7950.repo.StatementContextVisitor.visit(StatementContextVisitor.java:46) at org.opendaylight.yangtools.yang.parser.rfc7950.repo.YangStatementStreamSource.writeFull(YangStatementStreamSource.java:126) at org.opendaylight.yangtools.yang.parser.stmt.reactor.SourceSpecificContext.loadStatements(SourceSpecificContext.java:369) at org.opendaylight.yangtools.yang.parser.stmt.reactor.BuildGlobalContext.loadPhaseStatementsFor(BuildGlobalContext.java:323) ... 9 common frames omittedCaused by: javax.xml.xpath.XPathExpressionException: java.lang.IllegalArgumentException: Prefix snmp is not bound at org.opendaylight.yangtools.yang.xpath.impl.AntlrXPathParser.parseExpr(AntlrXPathParser.java:277) at org.opendaylight.yangtools.yang.xpath.impl.AntlrXPathParser$Qualified.parseExpression(AntlrXPathParser.java:151) at org.opendaylight.yangtools.yang.parser.rfc7950.stmt.XPathSupport.parseXPath(XPathSupport.java:40) ... 28 common frames omittedCaused by: java.lang.IllegalArgumentException: Prefix snmp is not bound at com.google.common.base.Preconditions.checkArgument(Preconditions.java:217) at org.opendaylight.yangtools.yang.common.YangNamespaceContext.createQName(YangNamespaceContext.java:63) at org.opendaylight.yangtools.yang.xpath.impl.AntlrXPathParser$Qualified.createQName(AntlrXPathParser.java:158) at org.opendaylight.yangtools.yang.xpath.impl.AntlrXPathParser$Qualified.createStep(AntlrXPathParser.java:164) at org.opendaylight.yangtools.yang.xpath.impl.AntlrXPathParser$Qualified.createStep(AntlrXPathParser.java:141) at org.opendaylight.yangtools.yang.xpath.impl.AntlrXPathParser.createStep(AntlrXPathParser.java:248) at org.opendaylight.yangtools.yang.xpath.impl.AntlrXPathParser.parseStep(AntlrXPathParser.java:620) at org.opendaylight.yangtools.yang.xpath.impl.AntlrXPathParser.parseLocationPathSteps(AntlrXPathParser.java:456) at org.opendaylight.yangtools.yang.xpath.impl.AntlrXPathParser.parseLocationPath(AntlrXPathParser.java:375) at org.opendaylight.yangtools.yang.xpath.impl.AntlrXPathParser.parsePathExpr(AntlrXPathParser.java:409) at org.opendaylight.yangtools.yang.xpath.impl.AntlrXPathParser.parseUnion(AntlrXPathParser.java:503) at org.opendaylight.yangtools.yang.xpath.impl.AntlrXPathParser.parseUnary(AntlrXPathParser.java:491) at org.opendaylight.yangtools.yang.xpath.impl.AntlrXPathParser.parseMultiplicative(AntlrXPathParser.java:391) at org.opendaylight.yangtools.yang.xpath.impl.AntlrXPathParser.parseAdditive(AntlrXPathParser.java:306) at org.opendaylight.yangtools.yang.xpath.impl.AntlrXPathParser.parseRelational(AntlrXPathParser.java:449) at org.opendaylight.yangtools.yang.xpath.impl.AntlrXPathParser.parseEquality(AntlrXPathParser.java:324) at org.opendaylight.yangtools.yang.xpath.impl.AntlrXPathParser.parseAnd(AntlrXPathParser.java:313) at org.opendaylight.yangtools.yang.xpath.impl.AntlrXPathParser.parseExpr(AntlrXPathParser.java:299) at org.opendaylight.yangtools.yang.xpath.impl.AntlrXPathParser.parseExpr(AntlrXPathParser.java:275)
Comment by Robert Varga [ 10/Dec/20 ]

It seems StmtNamespaceContext is doing the wrong thing for 'belongs-to' prefixes. As per https://tools.ietf.org/html/rfc7950#section-7.2.2 the belongs-to prefix should be picked up as referencing the namespace, but it seems that does not really work.

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