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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Code : Sélectionner tout - Visualiser dans une fenêtre à part
@version $Revision: 1.5.2.4
Ma classe générée contient
Code : Sélectionner tout - Visualiser dans une fenêtre à part
@version $Revision: 1.1
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:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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,