Uploaded image for project: 'yangtools'
  1. yangtools
  2. YANGTOOLS-1574

NormalizedAnydata - normalizeTo method throwing AnydataNormalizationException

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Unresolved
    • Icon: Medium Medium
    • None
    • None
    • codecs
    • None

      Stack trace - 

      2024-04-25T10:57:54,936 | TRACE | globalWorkerGroup-3-2 | NetconfDeviceCommunicator        | 313 - org.opendaylight.netconf.client-mdsal - 6.0.6 | RemoteDeviceId[name=mw-01, address=/10.0.0.119:830]: Matched request: <rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="m-1">    
         <get-data xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-nmda">        
            <datastore xmlns:x="urn:ietf:params:xml:ns:yang:ietf-datastores">x:operational</datastore>        
            <xpath-filter>/control-construct/equipment[uuid="0a000077-0000-0000-0000-3c4cd0db3b20"]</xpath-filter>    
         </get-data>
      </rpc> 
      to response: <rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="m-1">    
        <data xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-nmda">        
          <control-construct xmlns="urn:onf:yang:core-model-1-4">            
            <equipment>                
              <uuid>0a000077-0000-0000-0000-3c4cd0db3b20</uuid>                
              <contained-holder>                    
                <local-id>268443714</local-id>                    
                <occupying-fru>10000042-0000-0000-0003-3c4cd0db3b20</occupying-fru>                    
                <holder-location>Slot_1-Port_2</holder-location>
              </contained-holder>                
              <contained-holder>
                 <local-id>268443715</local-id>
                 <occupying-fru>10000043-0000-0000-0003-3c4cd0db3b20</occupying-fru>
                 <holder-location>Slot_1-Port_3</holder-location>
              </contained-holder>
              <contained-holder>
                 <local-id>268443719</local-id>
                 <occupying-fru>10000047-0000-0000-0003-3c4cd0db3b20</occupying-fru>
                 <holder-location>Slot_1-Port_7</holder-location>
              </contained-holder>
              <actual-equipment>
                 <location>
                    <equipment-location>EUROPE</equipment-location>
                    <geographical-location>13.366869662518637:52.50132409269941</geographical-location>
                 </location>
                 <structure>
                     <category xmlns:core-model="urn:onf:yang:core-model-1-4">core-model:EQUIPMENT_CATEGORY_STAND_ALONE_UNIT</category>                    </structure>
                 <physical-properties>                        
                    <temperature>57</temperature>                   
                 </physical-properties>
                 <manufactured-thing>
                     <manufacturer-properties>
                       <manufacturer-name>XYZ</manufacturer-name>
                     </manufacturer-properties> 
                     <equipment-type>  
                       <model-identifier>1.3.6.1.4.1.989898989.1.20.2.2.10</model-identifier> 
                       <part-type-identifier>32-0002-0D</part-type-identifier>
                       <type-name>ABC</type-name>
                     </equipment-type>
                     <equipment-instance>
                        <serial-number>123456789</serial-number>
                     </equipment-instance>
                </manufactured-thing>
             </actual-equipment>
             <name>                    
                <value-name>unit-name</value-name>
                <value>85ABCD96</value>                
             </name>
          </equipment>
        </control-construct>
       </data>
      </rpc-reply>
      
      2024-04-25T10:57:54,936 | INFO  | globalWorkerGroup-3-2 | XmlParserStream                  | 367 - org.opendaylight.yangtools.yang-data-codec-xml - 11.0.5 | Root Element in read method - rpc-reply
      2024-04-25T10:57:54,937 | INFO  | globalWorkerGroup-3-2 | XmlParserStream                  | 367 - org.opendaylight.yangtools.yang-data-codec-xml - 11.0.5 | xmlElementName = data, parentSchemaName = output
      2024-04-25T10:57:54,937 | INFO  | globalWorkerGroup-3-2 | XmlParserStream                  | 367 - org.opendaylight.yangtools.yang-data-codec-xml - 11.0.5 | Root Element in read method - rpc-reply
      2024-04-25T10:57:54,939 | INFO  | opendaylight-cluster-data-notification-dispatcher-51 | ABCEquipmentReadDataFromNMDA | 213 - org.onap.ccsdk.features.sdnr.wt.potassium.sr2.sdnr-wt-devicemanager-vendor-ABC-provider - 1.7.0.SNAPSHOT | AnyData = DOMSourceAnydata{source=javax.xml.transform.dom.DOMSource@5c761532}
      2024-04-25T10:57:54,939 | INFO  | opendaylight-cluster-data-notification-dispatcher-51 | XmlParserStream                  | 367 - org.opendaylight.yangtools.yang-data-codec-xml - 11.0.5 | Root Element in read method - data
      2024-04-25T10:57:54,939 | INFO  | opendaylight-cluster-data-notification-dispatcher-51 | XmlParserStream                  | 367 - org.opendaylight.yangtools.yang-data-codec-xml - 11.0.5 | xmlElementName = control-construct, parentSchemaName = control-construct
      2024-04-25T10:57:54,940 | ERROR | opendaylight-cluster-data-notification-dispatcher-51 | ABCDomEquipmentManager       | 213 - org.onap.ccsdk.features.sdnr.wt.potassium.sr2.sdnr-wt-devicemanager-vendor-ABC-provider - 1.7.0.SNAPSHOT | AnydataNormalizationException - failed to retrieve equipment data {}org.opendaylight.yangtools.yang.data.api.schema.AnydataNormalizationException: Failed to normalize anydata	at org.opendaylight.yangtools.yang.data.impl.schema.AbstractNormalizableAnydata.normalizeTo(AbstractNormalizableAnydata.java:36) ~[bundleFile:?]	at org.onap.ccsdk.features.sdnr.wt.devicemanager.onf14.dom.impl.equipment.ABCDomEquipmentManager.readEquipmentInstance(ABCDomEquipmentManager.java:200) ~[?:?]	at org.onap.ccsdk.features.sdnr.wt.devicemanager.onf14.dom.impl.equipment.ABCDomEquipmentManager.setEquipmentData(ABCDomEquipmentManager.java:163) ~[?:?]	at org.onap.ccsdk.features.sdnr.wt.devicemanager.onf14.dom.impl.ABCDomNetworkElement.readEquipmentData(ABCDomNetworkElement.java:154) ~[?:?]	at org.onap.ccsdk.features.sdnr.wt.devicemanager.onf14.dom.impl.ABCDomNetworkElement.initialReadFromNetworkElement(ABCDomNetworkElement.java:88) ~[?:?]	at org.onap.ccsdk.features.sdnr.wt.devicemanager.onf14.dom.impl.ABCDomNetworkElement.register(ABCDomNetworkElement.java:108) ~[?:?]	at org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.DeviceManagerNetconfConnectHandler.handleNeStartup(DeviceManagerNetconfConnectHandler.java:190) ~[?:?]	at org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.DeviceManagerNetconfConnectHandler.onEnterConnected(DeviceManagerNetconfConnectHandler.java:96) ~[?:?]	at org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.impl.NetconfNodeStateServiceImpl.lambda$enterConnectedState$0(NetconfNodeStateServiceImpl.java:442) ~[?:?]	at java.util.concurrent.CopyOnWriteArrayList.forEach(CopyOnWriteArrayList.java:807) ~[?:?]	at org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.impl.NetconfNodeStateServiceImpl.enterConnectedState(NetconfNodeStateServiceImpl.java:440) ~[?:?]	at org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.impl.NetconfNodeStateServiceImpl.handleDataTreeChange(NetconfNodeStateServiceImpl.java:523) ~[?:?]	at org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.impl.NetconfNodeStateServiceImpl.onDataTreeChangedHandler(NetconfNodeStateServiceImpl.java:588) ~[?:?]	at org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.impl.NetconfNodeStateServiceImpl$L1.onDataTreeChanged(NetconfNodeStateServiceImpl.java:610) ~[?:?]	at org.opendaylight.mdsal.binding.dom.adapter.BindingDOMDataTreeChangeListenerAdapter.onDataTreeChanged(BindingDOMDataTreeChangeListenerAdapter.java:44) ~[bundleFile:?]	at org.opendaylight.controller.cluster.datastore.DataTreeChangeListenerActor.dataTreeChanged(DataTreeChangeListenerActor.java:90) ~[bundleFile:?]	at org.opendaylight.controller.cluster.datastore.DataTreeChangeListenerActor.handleReceive(DataTreeChangeListenerActor.java:45) ~[bundleFile:?]	at akka.japi.pf.UnitCaseStatement.apply(CaseStatements.scala:24) [bundleFile:?]	at akka.japi.pf.UnitCaseStatement.apply(CaseStatements.scala:20) [bundleFile:?]	at scala.PartialFunction.applyOrElse(PartialFunction.scala:214) [bundleFile:?]	at scala.PartialFunction.applyOrElse$(PartialFunction.scala:213) [bundleFile:?]	at akka.japi.pf.UnitCaseStatement.applyOrElse(CaseStatements.scala:20) [bundleFile:?]	at scala.PartialFunction$OrElse.applyOrElse(PartialFunction.scala:269) [bundleFile:?]	at scala.PartialFunction$OrElse.applyOrElse(PartialFunction.scala:270) [bundleFile:?]	at akka.actor.Actor.aroundReceive(Actor.scala:537) [bundleFile:?]	at akka.actor.Actor.aroundReceive$(Actor.scala:535) [bundleFile:?]	at akka.actor.AbstractActor.aroundReceive(AbstractActor.scala:220) [bundleFile:?]	at akka.actor.ActorCell.receiveMessage(ActorCell.scala:579) [bundleFile:?]	at akka.actor.ActorCell.invoke(ActorCell.scala:547) [bundleFile:?]	at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:270) [bundleFile:?]	at akka.dispatch.Mailbox.run(Mailbox.scala:231) [bundleFile:?]	at akka.dispatch.Mailbox.exec(Mailbox.scala:243) [bundleFile:?]	at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:373) [?:?]	at java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1182) [?:?]	at java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1655) [?:?]	at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1622) [?:?]	at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:165) [?:?]Caused by: java.io.IOException: Failed to parse payload	at org.opendaylight.yangtools.yang.data.codec.xml.DOMSourceAnydata.writeTo(DOMSourceAnydata.java:62) ~[bundleFile:?]	at org.opendaylight.yangtools.yang.data.impl.schema.AbstractNormalizableAnydata.normalizeTo(AbstractNormalizableAnydata.java:34) ~[bundleFile:?]	... 36 moreCaused by: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[-1,-1]Message: Schema for node with name control-construct and namespace urn:onf:yang:core-model-1-4 does not exist in parent EmptyContainerEffectiveStatement{argument=(urn:onf:yang:core-model-1-4?revision=2019-11-27)control-construct}	at org.opendaylight.yangtools.yang.data.codec.xml.XmlParserStream.read(XmlParserStream.java:583) ~[bundleFile:?]	at org.opendaylight.yangtools.yang.data.codec.xml.XmlParserStream.parse(XmlParserStream.java:326) ~[bundleFile:?]	at org.opendaylight.yangtools.yang.data.codec.xml.DOMSourceAnydata.writeTo(DOMSourceAnydata.java:60) ~[bundleFile:?]	at org.opendaylight.yangtools.yang.data.impl.schema.AbstractNormalizableAnydata.normalizeTo(AbstractNormalizableAnydata.java:34) ~[bundleFile:?]	... 36 more
      

      The above is the NETCONF request and response and the corresponding stack trace when normalizing the Anydata object.

      This happens because the <data xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-nmda"> element is passed as part of the XML data for normalization instead of just the actual data which basically starts after the <data> element.

      Couple of traces have been added in the XmlStreamParser to check what data is being sent to the XML parser and as can be seen from the output, the <data> element is sent as part of the XML which I believe should not be the case. I may be wrong here.

      The piece of code which uses the NormalizedAnyData interfaces is as below - 

       Object anydata = eqptData.getDataRPCRequest("operational",
                      "/control-construct/equipment[uuid=\"" + equipmentUuid + "\"]");
              try {
                  NormalizableAnydata nad = (NormalizableAnydata) anydata;
                  NormalizedAnydata nzad = nad.normalizeTo(DefaultSchemaTreeInference.of(schemaContext,
                          Absolute.of(ABCDevicemanagerQNames.CORE_MODEL_CONTROL_CONSTRUCT_CONTAINER)));            
                  ContainerNode cn = (ContainerNode) nzad.getData();
                  MapNode equipmentMap =
                          (MapNode) cn.childByArg(new NodeIdentifier(ABCDevicemanagerQNames.CORE_MODEL_CC_EQPT));
                  Collection<MapEntryNode> equipmentEntryMap = equipmentMap.body();
                  return equipmentEntryMap;       
              } catch (AnydataNormalizationException e) {
                  log.error("AnydataNormalizationException - failed to retrieve equipment data {}", e);
              } 

      This piece of code was working in earlier versions of ODL (Tested with Sulphur SR1 and it is working fine but not the later versions).

       

       

            highstreetherbert Herbert Eiselt
            pendurty Ravi Pendurty
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated: