1 year ago

#65934

test-img

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

Accepted video resources