Search code examples
xmljaxbxjc

JAXB - Can XJC compile appinfo into the class structure?


I have a schema which is read by a few different applications for form generation; one of them uses JAXB/XJC to compile its class structure. The schema contains appinfo information for friendly names of fields, eg:

<xs:element name="HomeAddress" type="xs:string">
  <xs:annotation>
    <xs:appinfo>Home address</xs:appinfo>
  </xs:annotation>
</xs:element>

Is there some way to get XJC to compile this information in?


Solution

  • You can use the Annotate plugin to add arbitrary Java annotations into your schema-derived classes. With this plugin you can manage a syntax like:

    <xs:element name="HomeAddress" type="xs:string">
      <xs:annotation>
        <xs:appinfo>
          <ann:annotate xmlns:ann="http://annox.dev.java.net/com.acme.foo">
            <my:Label value="Home address"/>
          </ann:annotate>
        </xs:appinfo>
      </xs:annotation>
    </xs:element>
    

    An you'll get something like:

    @Label("Home address") // FQCN is com.acme.foo.Label
    public String getHomeAddress(...) {}