como forçar classes compiladas de esquema para estender classe específica fora do esquema

Precisa de ajuda com a seguinte situação: Os usuários podem gerar suas próprias estruturas de dados que são armazenadas como fontes XSD prontas para JAXB, como abaixo:

<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:element name="Group" type="Group"/>
  <xs:element name="Parameter" type="Parameter"/>

  <xs:complexType name="Group">
    <xs:sequence>
      <xs:element name="caption" type="xs:string" minOccurs="0"/>
      <xs:element name="parameters" type="Parameter" nillable="true" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Parameter">
    <xs:sequence>
      <xs:element name="key" type="xs:string" minOccurs="0"/>
      <xs:element name="group" type="Group" minOccurs="0"/>
      <xs:element name="value" type="xs:string" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>
</xs:schema>

Depois que o esquema novo ou modificado é exibido, ele é automaticamente analisado pelo compilador Schema, gerando fontes java, compiladas e empacotadas nos jars do usuário:

  SchemaCompiler sc = XJC.createSchemaCompiler();
  // Input source for schema
  InputSource is = new InputSource(new StringInputStream(objectPackage.getObjectSchema()));
  // Parse
  sc.parseSchema(is);
  S2JJAXBModel model = sc.bind();
  // Generate source
  JCodeModel jCodeModel = model.generateCode(null, null);
  jCodeModel.build(packageSourceDirectory);
  // Compile and package 
  // ......

E tudo estava bem até que se decidisse que todas as classes geradas pelo usuário deveriam estender uma classe conhecida específica, digamosUserRootObject:

package user.abc;
public class Group extends com.mycompany.xml.UserRootObject {
  //
}

e

package user.abc;
public class Parameter extends com.mycompany.xml.UserRootObject {
  //
}

Tudo está em andamento, não posso forçar os usuários a modificar seus arquivos de esquema, mas posso transformá-los antes da geração do código. Parece que tenho duas opções para introduzir issoUserRootObject: de alguma forma viaJCodeModel ou, de alguma forma, transformar arquivos de esquema antes de criar fontes Java.

questionAnswers(4)

yourAnswerToTheQuestion