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.