2009-10-20 5 views
1

chose étrange ...JiBXException: liaisons multiples définies pour la classe

J'ai une définition de liaison utilisateur-wrapper.xml:

<binding> 
    <include path="core-wrapper.xml" /> 
    <include path="user-composite-entity.xml" /> 

    <mapping name="users" class="UserWrapper" extends="CoreWrapper"> 
     <structure map-as="CoreWrapper" usage="optional" /> 
     <collection field="users" usage="optional" item-type="UserCompositeEntity"> 

     </collection> 
    </mapping> 
</binding> 

Ensuite, j'ai cette définition de liaison utilisateur-composite entity.xml (inclus dans le fichier supérieur):

<binding> 
    <include path="core-composite-entity.xml" /> 
    <include path="user-entity.xml" /> 

    <mapping name="user" class="UserCompositeEntity" extends="CoreCompositeEntity"> 
     <structure map-as="CoreCompositeEntity" /> 
     <structure field="userEntity" usage="optional" /> 
     <structure field="meta" marshaller="UserMetaHashMapper" unmarshaller="UserMetaHashMapper" usage="optional" />  
    </mapping> 
</binding> 

maintenant, si je l'appelle REST qui utilise la liaison utilisateur wrapper.xml, la cartographie va avec succès à travers. Si je l'appelle REST qui utilise la liaison utilisateur-composite entity.xml je reçois l'erreur suivante:

org.jibx.runtime.JiBXException: Multiple bindings defined for class UserCompositeEntity 

Maintenant, la chose étrange (pour moi). Si je retire de l'utilisateur-wrapper.xml <include path="user-composite-entity.xml" /> va un comme ceci: - appel avec-composite entity.xml utilisateur est un, succès - Conférence téléphonique à l'utilisateur-wrapper.xml je reçois l'erreur:

org.jibx.runtime.JiBXException: No marshaller defined for class UserCompositeEntity 

Répondre

0

Comment ça marche maintenant: Je n'ai pas l'utilisateur wrapper.xml plus et composite utilisateur entity.xml ressemble à ça:

<binding> 
<include path="core-wrapper.xml" /> 
<include path="core-composite-entity.xml" /> 
<include path="user-entity.xml" /> 

<mapping name="users" class="UserWrapper" extends="CoreWrapper"> 
    <structure map-as="CoreWrapper" usage="optional" /> 
    <collection field="users" usage="optional" > 
    </collection> 
</mapping> 

<mapping name="user" class="UserCompositeEntity" extends="CoreCompositeEntity"> 
    <structure map-as="CoreCompositeEntity" /> 
    <structure field="userEntity" usage="optional" /> 
    <structure field="meta" marshaller="UserMetaHashMapper" unmarshaller="UserMetaHashMapper" usage="optional" /> 
</mapping> 
</binding> 

Le problème était, parce que avant en emballage utilisateur .xml inclus user-composite-entity.xml et JiBX l'a compilé à nouveau (pour user-wrapper.xml). C'est pourquoi il y avait plusieurs définitions de liaison ...

0

This email thread semble avoir quelques informations.

+0

Je sais comment utiliser Google;) J'ai découvert que JiBX compile toutes les classes dans chaque liaison, donc si vous avez les mêmes classes dans plusieurs liaisons, JiBX les compile toutes. J'ai juste besoin de tout déplacer de user-wrapper.xml à user-composite-entity.xml et ça marche. – Trick

+1

Peut-être prendre le temps de répondre avec quelques détails et le sélectionner comme une réponse, de sorte qu'il serait référencé sur StackOverflow – elhoim