[NETCONF-1215] Mandatory attributes in RPC input are not honoured Created: 27/Mar/17 Updated: 03/Jan/24 |
|
| Status: | Confirmed |
| Project: | netconf |
| Component/s: | restconf-nb |
| Affects Version/s: | None |
| Fix Version/s: | 7.0.0 |
| Type: | Bug | Priority: | Highest |
| Reporter: | Vikram Darsi | Assignee: | Unassigned |
| Resolution: | Unresolved | Votes: | 0 |
| Labels: | pick-next, pt | ||
| Remaining Estimate: | Not Specified | ||
| Time Spent: | Not Specified | ||
| Original Estimate: | Not Specified | ||
| Environment: |
Operating System: All |
||
| Attachments: |
|
||||||||
| Issue Links: |
|
||||||||
| External issue ID: | 8088 | ||||||||
| Description |
|
We are using ODL Boron. Mandatory attributes inside RPC input are not honoured , therefore RPC’s can be invoked without passing mandatory attributes.
rpc say-hello {
input {
leaf name {
type string;
mandatory true;
}
}
}
Whereas with RESTCONF url’s the mandatory attributes validation is happening RESTCONF ERROR:
Caused by: java.lang.IllegalArgumentException: Node (urn:opendaylight:params:xml:ns:yang:normalizednodedemo?revision=2015-01-05)emp-list[
{(urn:opendaylight:params:xml:ns:yang:normalizednodedemo?revision=2015-01-05)name=vikram}
] is missing mandatory descendant /(urn:opendaylight:params:xml:ns:yang:normalizednodedemo?revision=2015-01-05)age
at com.google.common.base.Preconditions.checkArgument(Preconditions.java:145)[58:com.google.guava:18.0.0]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.MandatoryLeafEnforcer$Strict.enforceOnTreeNode(MandatoryLeafEnforcer.java:60)[74:org.opendaylight.yangtools.yang-data-impl:1.0.0.Boron]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.MandatoryLeafEnforcer$Strict.enforceOnTreeNode(MandatoryLeafEnforcer.java:53)[74:org.opendaylight.yangtools.yang-data-impl:1.0.0.Boron]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.ListEntryModificationStrategy.applyWrite(ListEntryModificationStrategy.java:41)[74:org.opendaylight.yangtools.yang-data-impl:1.0.0.Boron]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.SchemaAwareApplyOperation.apply(SchemaAwareApplyOperation.java:216)[74:org.opendaylight.yangtools.yang-data-impl:1.0.0.Boron]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.mutateChildren(AbstractNodeContainerModificationStrategy.java:139)[74:org.opendaylight.yangtools.yang-data-impl:1.0.0.Boron]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.applyTouch(AbstractNodeContainerModificationStrategy.java:252)[74:org.opendaylight.yangtools.yang-data-impl:1.0.0.Boron]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.applyMerge(AbstractNodeContainerModificationStrategy.java:170)[74:org.opendaylight.yangtools.yang-data-impl:1.0.0.Boron]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.SchemaAwareApplyOperation.apply(SchemaAwareApplyOperation.java:207)[74:org.opendaylight.yangtools.yang-data-impl:1.0.0.Boron]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.MinMaxElementsValidation.checkMinMaxElements(MinMaxElementsValidation.java:76)[74:org.opendaylight.yangtools.yang-data-impl:1.0.0.Boron]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.MinMaxElementsValidation.checkMergeApplicable(MinMaxElementsValidation.java:114)[74:org.opendaylight.yangtools.yang-data-impl:1.0.0.Boron]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.SchemaAwareApplyOperation.checkApplicable(SchemaAwareApplyOperation.java:131)[74:org.opendaylight.yangtools.yang-data-impl:1.0.0.Boron]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.checkChildPreconditions(AbstractNodeContainerModificationStrategy.java:305)[74:org.opendaylight.yangtools.yang-data-impl:1.0.0.Boron]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.checkMergeApplicable(AbstractNodeContainerModificationStrategy.java:313)[74:org.opendaylight.yangtools.yang-data-impl:1.0.0.Boron]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.SchemaAwareApplyOperation.checkApplicable(SchemaAwareApplyOperation.java:131)[74:org.opendaylight.yangtools.yang-data-impl:1.0.0.Boron]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.StructuralContainerModificationStrategy.checkApplicable(StructuralContainerModificationStrategy.java:99)[74:org.opendaylight.yangtools.yang-data-impl:1.0.0.Boron]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.checkChildPreconditions(AbstractNodeContainerModificationStrategy.java:305)[74:org.opendaylight.yangtools.yang-data-impl:1.0.0.Boron]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.checkTouchApplicable(AbstractNodeContainerModificationStrategy.java:288)[74:org.opendaylight.yangtools.yang-data-impl:1.0.0.Boron]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.SchemaAwareApplyOperation.checkApplicable(SchemaAwareApplyOperation.java:125)[74:org.opendaylight.yangtools.yang-data-impl:1.0.0.Boron]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.RootModificationApplyOperation.checkApplicable(RootModificationApplyOperation.java:72)[74:org.opendaylight.yangtools.yang-data-impl:1.0.0.Boron]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractDataTreeTip.validate(AbstractDataTreeTip.java:37)[74:org.opendaylight.yangtools.yang-data-impl:1.0.0.Boron]
RPC ERROR: |
| Comments |
| Comment by Igor Foltin [ 28/Mar/17 ] |
|
Hi Vikram, well, looking at the stack trace, mandatory node validation in yangtools part works the way it should. The mandatory node "age" is not present in the "emp-list" list entry and that is the reason why the exception is thrown. |
| Comment by Vikram Darsi [ 28/Mar/17 ] |
|
Hi Igor Foltin Yes, with RESTCONF the mandatory attributes presence is validated. Bug descriptions says, the same validation is not performed while invoking RPC's (when its input does not have mandatory attributes) |
| Comment by Igor Foltin [ 28/Mar/17 ] |
|
Could you please provide the exact steps you took to reproduce this behaviour? Thanks |
| Comment by Vikram Darsi [ 28/Mar/17 ] |
|
Please find the steps followed: 1. Created sample project using the below command mvn archetype:generate -DarchetypeGroupId=org.opendaylight.controller -DarchetypeArtifactId=opendaylight-startup-archetype -DarchetypeRepository=http://nexus.opendaylight.org/content/repositories/opendaylight.release/ -DarchetypeCatalog=http://nexus.opendaylight.org/content/repositories/opendaylight.release/archetype-catalog.xml -DarchetypeVersion=1.2.0-Boron 2. api/src/main/yang/normalizednodedemo.yang module normalizednodedemo { revision "2015-01-05" { description "Initial revision of normalizednodedemo model"; } rpc say-hello { } 3. impl/src/main/resources/impl-blueprint.xml <?xml version="1.0" encoding="UTF-8"?> This program and the accompanying materials are made available under the <reference id="dataBroker" <bean id="provider" <bean id="rpcDemo" <odl:rpc-implementation ref="rpcDemo" /> 4. impl/src/main/java package com.adva.ensemble.controller.impl; import java.util.concurrent.Future; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.normalizednodedemo.rev150105.NormalizednodedemoService; public class NNRpcDemo implements NormalizednodedemoService{ @Override } 5. mvn clean install -Pq 6. karaf/target/assembly> bin/karaf debug 7. Launch APIDocs page: http://localhost:8181/apidoc/explorer/index.html Invoke RPC : http://localhost:8181/restconf/operations/normalizednodedemo:say-hello JSON : { } RESPONSE : 200 NOTE: Mandatory attributes are not passed in the input. Thanks |
| Comment by Vikram Darsi [ 28/Mar/17 ] |
|
screenshot is attached which shows RPC invocation success when mandatory attributes are not passed |
| Comment by Vikram Darsi [ 28/Mar/17 ] |
|
Attachment RPCInvocation.png has been added with description: RPCInvocation Image that is showing success when mandatory attrs are not passed |
| Comment by Robert Varga [ 01/Jan/19 ] |
|
We will need to extract MandatoryLeafEnforcer – and probably some other portions of org.opendaylight.yangtools.yang.data.impl.schema.tree into yang-data-util where it would be usable by codecs. |