2013-06-12 3 views
1

J'ai plusieurs fichiers que j'ai créés en utilisant l'outil CodeGen fourni par JibX. Ces classes ont toutes le même nom racine et donc les classes générées ont toutes le même nom.Modification du nom des classes générées par JibX CodeGen

J'ai d'abord résolu ce problème en plaçant toutes ces classes générées dans leur propre package pour résoudre les collisions de noms. J'ai ensuite rencontré le problème de devoir déclarer le nom complet du paquet, ce qui est assez long, chaque fois que je voulais déclarer ou caster un nouvel objet.

Mon idée originale de gérer ceci était de créer une sous-classe vide avec un nom distinct qui étendait la classe auto-générée originale. Tels que

public class AutoGen 
{ 
    //This class generated by CodeGen binds as expected 
    //No problems marshalling or unmarshalling documents 
} 


public class UniqueName extends com.CompanyName.ProductName.SDK.Events.HeartBeatEvent.AutoGen 
{ 
    //This class is empty 
} 

Le problème que je suis en cours d'exécution en est maintenant que JiBX ne sera pas marshall ou des chaînes ou des fichiers unmarshall à cette sous-classe en raison de l'absence d'une liaison. Après avoir lu à nouveau la documentation de CodeGen, je n'arrive pas à trouver une commande qui me permettra de déclarer le nom de la classe générée. Est-il possible de faire en sorte que les classes générées par CodeGen aient des noms uniques déclarés par l'utilisateur? Si non, y at-il un moyen de faire de JibX marshall et unmarshall la sous-classe correctement? Chacune de ces solutions fonctionnera.

Il est également important que je mentionne que je ne peut pas modifier les fichiers xsd à partir de laquelle le code est généré.

Répondre

0

Une option que vous avez est de rendre les classes générées uniques, placez-les dans la structure de package que vous souhaitez puis allez modifier les liaisons.

Puisque vous ne pouvez pas changer le XSD et je suppose que vous ne voulez pas écrire les classes correspondantes manuellement, cette option peut être la meilleure pour vous.

Pour répondre directement à votre question, je ne connais aucun moyen de spécifier le nom des classes générées. Au lieu de cela, vous devez nommer vous-même les classes, puis modifier la configuration de liaison afin qu'elle corresponde aux nouveaux noms et à la structure du package.

0

Jetez un oeil à l'extension de nom convertisseur JiBX documenté sur cette page:

http://jibx.sourceforge.net/fromschema/codegen-extends.html

Si vous ne pouvez pas utiliser les options disponibles dans l'implémentation par défaut, vous pouvez écrire votre propre convertisseur de nom.

Vous devrez probablement écrire un convertisseur personnalisé. Cela devrait être assez simple.

Vous trouverez le code source JiBX ici:

https://github.com/jibx/core

Bonne chance!

Don Corley
Contributeur à JiBX

Questions connexes