Bonjour,
Je cherche à comprendre ce qui peut influer sur la méthode de génération des classes avec XJC.
Le contexte est le suivant:
J'ai récupéré un projet JAVA qui contient un fichier build.xml qui contient une target pour générer des classes JAVA.
1 2 3
| <xjc package="${generated.classes.package}" binding="${data.dir}/bindings.xjb" target="${src.dir}" extension="true">
<schema dir="${data.dir}" includes="myschema.xsd"/>
</xjc> |
J'utilise les jars JAXB (Specification Version: 1.0; Reference Implementation (RI) Version: 1.0.4) suivants inclus dans l'installation de JWSDP 1.5:
- <JWSDP>/jaxb/lib/jaxb-api.jar
- <JWSDP>/jaxb/lib/jaxb-impl.jar
- <JWSDP>/jaxb/lib/jaxb-libs.jar
- <JWSDP>/jaxb/lib/jaxb-xjc.jar
- <JWSDP>/jwsdp-shared/lib/namespace.jar
- <JWSDP>/jwsdp-shared/lib/jax-qname.jar
- <JWSDP>/jwsdp-shared/lib/relaxngDatatype.jar
Mon problème est que les classes que je génère avec cette tâche Ant ne sont pas totalement identiques à celles qui avaient été déjà auparavant.
Ci-dessous des exemples:
Exemple pour la classe DefaultJAXBContextImpl:
La classe générée auparavant contenait
@version $Revision: 1.5.2.4
Ma classe générée contient Ci-dessous des exemples de différences pour une autre classe CardImpl (avec Card définie dans le schema XSD):
1. Pour la méthode createRawValidator:
1 2 3 4 5 6
| public com.sun.msv.verifier.DocumentDeclaration createRawValidator() {
if (schemaFragment == null) {
schemaFragment = com.sun.xml.bind.validator.SchemaDeserializer.deserialize(( <String>));
}
return new com.sun.msv.verifier.regexp.REDocumentDeclaration(schemaFragment);
} |
La fin de la chaine <string> est différente dans les deux classes.
2. Pour la méthode enterElement:
1 2 3 4 5 6 7 8
| public void enterElement(java.lang.String ___uri, java.lang.String ___local, java.lang.String ___qname, org.xml.sax.Attributes __atts)
throws org.xml.sax.SAXException
{
int attIdx;
outer:
while (true) {
switch (state) {
case 3 :<body> // case 15: <body> dans l'autre version de la classe |
On voit que l'ordre des switch cases n'est pas le meme entre les 2 versions d'une meme classe.
J'ai le meme problème pour les méthodes handleText(final java.lang.String value),
leaveElement(java.lang.String ___uri, java.lang.String ___local, java.lang.String ___qname)
3. J'ai aussi des méthodes de type eatTextXX(final java.lang.String value) où XX est un nombre (ex: eatText4).
Le contenu de la méthode eatText4 dans un version se retrouve dans eatText2.
Pouvez-vous donc m'indiquer ce qui influe sur la méthode de génération des classes (en particulier sur l'ordre des switch)?
Sauriez-vous comment je pourrais faire pour que je puisse générer mes classes de la même manière que celles déjà générées auparavant?
Merci,
Partager