[MDSAL-124] Can not define a list as a subordinate element of a choice Created: 17/Dec/15  Updated: 09/Mar/18  Resolved: 09/Mar/16

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

Type: Bug
Reporter: Hou Jin Assignee: Filip Gregor
Resolution: Done Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified
Environment:

Operating System: Windows
Platform: PC


External issue ID: 4798

 Description   

The yang model is like:

choice darknessFactor {

case knessFactorA{
list darknessFactorAList {
key "key-id";
leaf key-id

{ type uint32; config true; description "The key id"; }

}
}
case knessFactorB{
leaf FactorBName

{ type uint32; config true; description "The darkness factor."; }

}
}

When we define a list as a subordinate element of a choice,and register it in datachange service. When we invoke change.getCreatedData() in onDataChanged method it whill throw java.lang.NullPointerException:

Error notifying listener com.zte.ngip.ipsdn.vipran.vr.provider.VrUniBindImp
java.lang.NullPointerException
at org.opendaylight.yangtools.binding.data.codec.impl.ChoiceNodeCodecContext.yangPathArgumentChild(ChoiceNodeCodecContext.java:144)[101:org.opendaylight.yangtools.binding-data-codec:0.7.2.Lithium-SR2]
at org.opendaylight.yangtools.binding.data.codec.impl.BindingCodecContext.getCodecContextNode(BindingCodecContext.java:153)[101:org.opendaylight.yangtools.binding-data-codec:0.7.2.Lithium-SR2]
at org.opendaylight.yangtools.binding.data.codec.impl.BindingNormalizedNodeCodecRegistry.fromNormalizedNode(BindingNormalizedNodeCodecRegistry.java:182)[101:org.opendaylight.yangtools.binding-data-codec:0.7.2.Lithium-SR2]
at org.opendaylight.controller.md.sal.binding.impl.BindingToNormalizedNodeCodec.toBinding(BindingToNormalizedNodeCodec.java:222)[151:org.opendaylight.controller.sal-binding-broker-impl:1.2.2.Lithium-SR2]
at org.opendaylight.controller.md.sal.binding.impl.AbstractForwardedDataBroker.toBinding(AbstractForwardedDataBroker.java:89)[151:org.opendaylight.controller.sal-binding-broker-impl:1.2.2.Lithium-SR2]
at org.opendaylight.controller.md.sal.binding.impl.AbstractForwardedDataBroker$TranslatedDataChangeEvent.getCreatedData(AbstractForwardedDataBroker.java:187)[151:org.opendaylight.controller.sal-binding-broker-impl:1.2.2.Lithium-SR2]
at com.zte.ngip.ipsdn.vipran.collaboration.AbstractDataChangeListener.onDataChanged(AbstractDataChangeListener.java:43)[216:com.zte.ngip.ipsdn.vipran.vr-provider:0.3.0.SNAPSHOT]
at org.opendaylight.controller.md.sal.binding.impl.AbstractForwardedDataBroker$TranslatingDataChangeInvoker.onDataChanged(AbstractForwardedDataBroker.java:143)[151:org.opendaylight.controller.sal-binding-broker-impl:1.2.2.Lithium-SR2]
at org.opendaylight.controller.cluster.datastore.DataChangeListener.dataChanged(DataChangeListener.java:66)[173:org.opendaylight.controller.sal-distributed-datastore:1.2.2.Lithium-SR2]
at org.opendaylight.controller.cluster.datastore.DataChangeListener.handleReceive(DataChangeListener.java:39)[173:org.opendaylight.controller.sal-distributed-datastore:1.2.2.Lithium-SR2]
at org.opendaylight.controller.cluster.common.actor.AbstractUntypedActor.onReceive(AbstractUntypedActor.java:34)[165:org.opendaylight.controller.sal-clustering-commons:1.2.2.Lithium-SR2]

We think in method yangPathArgumentChild of org.opendaylight.yangtools.binding.data.codec.impl.ChoiceNodeCodecContext.java should add
if(arg instanceof NodeIdentifierWithPredicates)

{ cazeProto = byYangCaseChild.get(new NodeIdentifier(arg.getNodeType())); }

 Comments   
Comment by Tony Tkacik [ 09/Mar/16 ]

https://git.opendaylight.org/gerrit/#/c/35970/

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