Генерация класса JAXB, который реализует интерфейс

В настоящее время я использую JAXB для генерации Java-классов, чтобы разобрать XML. Теперь я хотел бы создать новую схему, очень похожую на первую, и сгенерированные классы реализуют один и тот же интерфейс.

Например, у меня есть два файла схемы, которые определяют XML с похожими тегами:

adult.xsd

<?xml version="1.0" encoding="UTF-8"?>
<xs:element name="Person">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="Name" type="xs:string" />
      <xs:element name="Age" type="xs:integer" />
      <xs:element name="Job" type="xs:string" />
    </xs:sequence>
  </xs:complexType>
</xs:element>

kid.xsd

<?xml version="1.0" encoding="UTF-8"?>
<xs:element name="Person">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="Name" type="xs:string" />
      <xs:element name="Age" type="xs:integer" />
      <xs:element name="School" type="xs:string" />
    </xs:sequence>
  </xs:complexType>
</xs:element>

Используя JAXB и XJC, я хотел бы создать два файла классов:

public class Adult implements Person {
    ...
    public String getName() { ... }
    public int getAge() { ... }
    public String getJob { ... }
}

public class Kid implements Person {
    ...
    public String getName() { ... }
    public int getAge() { ... }
    public String getSchool { ... }
}

где интерфейс Person определяетgetName() а такжеgetAge() методы.

Я посмотрел на некоторые издокументация для отображения интерфейсов, но это, по-видимому, только для ситуации, когда у вас уже есть Java-классы, которые вы хотите отобразить в DOM.

Также я пытался использовать этовнешний плагин но это не похоже на работу. Вот мой файл связывания xjb:

<jxb:bindings version="1.0" 
  xmlns:jxb="http://java.sun.com/xml/ns/jaxb" 
  xmlns:xs="http://www.w3.org/2001/XMLSchema" 
  xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
  xmlns:ext="http://xml.w-wins.com/xjc-plugins/interfaces"
  jxb:extensionBindingPrefixes="xjc">

    <jxb:bindings schemaLocation="xsd/adult.xsd" node="xs:schema/xs:complexType[@name='Person']">
        <ext:interface>mypackage.Hello</ext:interface> 
    </jxb:bindings>

</jxb:bindings>

но это дает следующую ошибку:

$ java -cp "lib/activation.jar;lib/InterfacesXJCPlugin.jar;lib/jaxb1-impl.jar;lib/jaxb-api.jar;lib/jaxb-xjc.jar;lib/jsr173_1.0_api.jar" com.sun.tools.xjc.XJCFacade -p mypackage.myxml -extension -Xinterfaces xsd/adult.xsd -b binding.xjb
parsing a schema...
[ERROR] XPath evaluation of "xs:schema/xs:complexType[@name='Person']" results in empty target node
  line 8 of file:/C:/dev/jaxb/jaxb-ri/binding.xjb

Failed to parse a schema.

Можно ли создать класс с JAXB, который реализует интерфейс?

Update

Я пытался использоватьВставка интерфейса плагин, но по какой-то причине не может заставить его работать. Вот как я называю xjc, но это похоже на то, что jar плагина не берется из classpath:

$ java -cp "lib/xjc-if-ins.jar;lib/jaxb-xjc.jar" com.sun.tools.xjc.XJCFacade -p mypackage -extension -Xifins myschema.xsd -b binding.xjb

Я получаю ошибку:

unrecognized parameter -Xifins

Есть идеи?

Ответы на вопрос(8)

Ваш ответ на вопрос