[YANGTOOLS-1087] Enum with underscores in name encoded without underscores Created: 27/Feb/20  Updated: 06/Mar/20  Resolved: 06/Mar/20

Status: Resolved
Project: yangtools
Component/s: None
Affects Version/s: 2.1.8, 3.0.4, 4.0.7
Fix Version/s: None

Type: Bug Priority: Medium
Reporter: Tomas Janciga Assignee: Robert Varga
Resolution: Won't Do Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Attachments: Text File enum-issue-stack-trace.txt    

 Description   

Enum with a name which includes underscore is encoded as XML string without underscores. This issue has been reproduced with a notification containing leafref referencing leaf of enumeration type with an enum name containing underscores.

Stack trace:

 WARN [Thread-1] (XMLStreamWriterUtils.java:92) - Provided node value RXEARLY did not have type BaseEnumerationType{path=AbsoluteSchemaPath{path=[(urn:o-ran:performance-management:1.0?revision=2019-02-04)performance-measurement-objects, (urn:o-ran:performance-management:1.0?revision=2019-02-04)rx-window-measurement-objects, (urn:o-ran:performance-management:1.0?revision=2019-02-04)measurement-object, (urn:o-ran:performance-management:1.0?revision=2019-02-04)enumeration]}, status=CURRENT, values=[EnumPairImpl{name=RX_ON_TIME, value=0}, EnumPairImpl{name=RX_EARLY, value=1}, EnumPairImpl{name=RX_LATE, value=2}, EnumPairImpl{name=RX_CORRUPT, value=3}, EnumPairImpl{name=RX_DUPL, value=4}, EnumPairImpl{name=RX_TOTAL, value=5}]} required by mapping. Using stream instead.
java.lang.ClassCastException: class org.opendaylight.yang.gen.v1.urn.o.ran.performance.management._1._0.rev190204.performance.measurement.objects.RxWindowMeasurementObjects$MeasurementObject cannot be cast to class java.lang.String (org.opendaylight.yang.gen.v1.urn.o.ran.performance.management._1._0.rev190204.performance.measurement.objects.RxWindowMeasurementObjects$MeasurementObject is in unnamed module of loader 'app'; java.lang.String is in module java.base of loader 'bootstrap')
	at org.opendaylight.yangtools.yang.data.impl.codec.EnumStringCodec.serializeImpl(EnumStringCodec.java:25)
	at org.opendaylight.yangtools.concepts.AbstractCodec.serialize(AbstractCodec.java:34)
	at org.opendaylight.yangtools.yang.data.codec.xml.XMLStreamWriterUtils.serialize(XMLStreamWriterUtils.java:90)
	at org.opendaylight.yangtools.yang.data.codec.xml.XMLStreamWriterUtils.encodeValue(XMLStreamWriterUtils.java:78)
	at org.opendaylight.yangtools.yang.data.codec.xml.XMLStreamWriterUtils.encodeValue(XMLStreamWriterUtils.java:57)
	at org.opendaylight.yangtools.yang.data.codec.xml.SchemaAwareXMLStreamNormalizedNodeStreamWriter.encodeValue(SchemaAwareXMLStreamNormalizedNodeStreamWriter.java:53)
	at org.opendaylight.yangtools.yang.data.codec.xml.SchemaAwareXMLStreamNormalizedNodeStreamWriter.encodeValue(SchemaAwareXMLStreamNormalizedNodeStreamWriter.java:38)
	at org.opendaylight.yangtools.yang.data.codec.xml.XMLStreamNormalizedNodeStreamWriter.writeValue(XMLStreamNormalizedNodeStreamWriter.java:132)
	at org.opendaylight.yangtools.yang.data.codec.xml.SchemaAwareXMLStreamNormalizedNodeStreamWriter.scalarValue(SchemaAwareXMLStreamNormalizedNodeStreamWriter.java:159)
	at org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter.wasProcessAsSimpleNode(NormalizedNodeWriter.java:147)
	at org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter.write(NormalizedNodeWriter.java:107)
	at org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter$OrderedNormalizedNodeWriter.writeMapEntryNode(NormalizedNodeWriter.java:277)
	at org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter.wasProcessedAsCompositeNode(NormalizedNodeWriter.java:214)
	at org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter.write(NormalizedNodeWriter.java:103)
	at org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter.writeChildren(NormalizedNodeWriter.java:190)
	at org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter.wasProcessedAsCompositeNode(NormalizedNodeWriter.java:244)
	at org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter.write(NormalizedNodeWriter.java:103)
	at io.lighty.codecs.XmlNodeConverter.serializeRpc(XmlNodeConverter.java:127)
	at io.lighty.netconf.device.requests.notification.NotificationOperation.sendMessage(NotificationOperation.java:79)
	at io.lighty.netconf.device.requests.notification.NotificationPublishServiceImpl.publish(NotificationPublishServiceImpl.java:32)
	at tech.pantheon.oran.ru.simulator.OranNotificationService.run(OranNotificationService.java:81)

The set of used YANG models can be found at:

https://wiki.onap.org/display/DW/O-RAN+Fronthaul+Specification+1.0

Issue can be reproduced with notification: measurement-result-stats, which is defined in model:

https://wiki.onap.org/download/attachments/64007500/o-ran-performance-management@2019-02-04.yang?api=v2



 Comments   
Comment by Robert Varga [ 06/Mar/20 ]

tjanciga please provide the model (or at least a minimal example) and the yangtools version in use.

Comment by Tomas Janciga [ 06/Mar/20 ]

OK, I've updated affected versions and added links to the YANG models used.

Comment by Robert Varga [ 06/Mar/20 ]

So the error is quite obvious:

java.lang.ClassCastException: class org.opendaylight.yang.gen.v1.urn.o.ran.performance.management._1._0.rev190204.performance.measurement.objects.RxWindowMeasurementObjects$MeasurementObject cannot be cast to class java.lang.String 

So what is a Binding class doing in a NormalizedNode value? Check your application logic.

 

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