1 year ago
#65934
Siarhei Vouchak
YANG to Java for subsequent XML serialization/deserialization?
So I have YANG model files. I want to generate corresponding Java classes and be able to convert them to XML. For now, I try the following approach:
YANG -> Relax NG -> XSD -> Java with JAXB Annotations
YANG -> Relax NG can be performed by pyang tool
Relax NG -> XSD can be performed by trang tool
XSD -> Java with JAXB Annotations can be performed by xjc tool
Unfortunately, the result doesn't look good, probably resulting XSD lacks some schema information, or maybe my usage of tools is wrong in some way.
For example: YANG:
grouping active-link-state {
leaf remote-assigned-name {
type rb-tg-types:node-assigned-name;
}
leaf actual-remote-sector-index {
type rb-tg-types:radio-sector-index;
}
leaf actual-local-sector-index {
type rb-tg-types:radio-sector-index;
}
leaf remote-mac-addr {
type yang:mac-address;
}
leaf local-role {
type link-role;
}
leaf link-uptime {
type uint64;
units "seconds";
}
uses active-link-health-state;
}
XSD:
<xs:element name="active">
<xs:complexType>
<xs:sequence>
<xs:element ref="remote-assigned-name"/>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="actual-remote-sector-index"/>
<xs:element ref="actual-local-sector-index"/>
<xs:element ref="remote-mac-addr"/>
<xs:element ref="local-role"/>
<xs:element ref="link-uptime"/>
<xs:group ref="radio-bridge-tg-radio-common___active-link-health-state"/>
</xs:choice>
</xs:sequence>
</xs:complexType>
</xs:element>
Java with JAXB
protected String remoteAssignedName;
@XmlElementRefs({
@XmlElementRef(name = "actual-remote-sector-index", type = JAXBElement.class, required = false),
@XmlElementRef(name = "actual-local-sector-index", type = JAXBElement.class, required = false),
@XmlElementRef(name = "remote-mac-addr", type = JAXBElement.class, required = false),
@XmlElementRef(name = "local-role", type = JAXBElement.class, required = false),
@XmlElementRef(name = "link-uptime", type = JAXBElement.class, required = false),
@XmlElementRef(name = "rssi", type = JAXBElement.class, required = false),
@XmlElementRef(name = "snr", type = JAXBElement.class, required = false),
@XmlElementRef(name = "mcs-rx", type = JAXBElement.class, required = false),
@XmlElementRef(name = "mcs-tx", type = JAXBElement.class, required = false),
@XmlElementRef(name = "tx-per", type = JAXBElement.class, required = false),
@XmlElementRef(name = "rx-per", type = JAXBElement.class, required = false),
@XmlElementRef(name = "tx-power-index", type = JAXBElement.class, required = false),
@XmlElementRef(name = "speed-rx", type = JAXBElement.class, required = false),
@XmlElementRef(name = "speed-tx", type = JAXBElement.class, required = false),
@XmlElementRef(name = "tx-beam", type = JAXBElement.class, required = false),
@XmlElementRef(name = "rx-beam", type = JAXBElement.class, required = false),
@XmlElementRef(name = "counters", type = JAXBElement.class, required = false)
})
protected List<JAXBElement<?>> actualRemoteSectorIndexOrActualLocalSectorIndexOrRemoteMacAddr;
As you can see there's only one property generated from a bunch of leafs which is not correct
Anyway, is this the only way to achieve such conversion? Any other tools/methods which exist but I'm not aware of?
Thank you
java
xml
jaxb
relaxng
yang
0 Answers
Your Answer