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