0

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

Siarhei Vouchak
  • 125
  • 1
  • 10
  • "_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._" - Why don't you include stack trace, error messages, or something else more descriptive of the problem you are encountering? We can't help you if we don't know the problem we are trying to solve. – hfontanez Jan 18 '22 at 15:53
  • Maybe provide a sample YANG model files. – hfontanez Jan 18 '22 at 15:54
  • @hfontanez I've added some code samples to illustrate my problems – Siarhei Vouchak Jan 18 '22 at 16:37

0 Answers0