2010-07-23 3 views
3

Dans l'un de mes projets, j'utilise JAXB2 marshaller, avec un service Web de premier contrat, je génère les objets à partir d'un schéma XML.JAXB Mappage Java et XSD

Tout fonctionne très bien. Mais, j'ai un problème de "code utilisabilité". Laisse moi te donner un exemple.

Schéma:

<xs:complexType name="personContractAlertListType"> 
    <xs:sequence> 
     <xs:element ref="PersonContractAlert" minOccurs="0" maxOccurs="unbounded"/> 
    </xs:sequence> 
</xs:complexType> 


<xs:element name="PersonContractAlertsResponse"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:element ref="PersonContractAlertList"/> 
     </xs:sequence> 
    </xs:complexType> 
</xs:element> 

Ainsi, afin d'accéder à la liste des PersonContractAlerts Je dois appeler:

PersonContractAlertsResponse.getPersonContractAlertListType().getPersonContractAlert() 

Ce qui est un peu longue.

Ma question est: Comment puis-je me débarrasser de la getPersonContractAlertListType() et aller directement à: PersonContractAlertsResponse.getPersonContractAlert()

Parce que cet élément d'emballage est vraiment seulement pour XSD, je ne ai pas besoin dans mon objet Java.

En d'autres termes ont:

<Element1> 
<Wrapper> 
<Element2/> 
</Wrapper> 
</Element1> 

Et je veux en Java pour la carte à: Element1.getElement2()

Peut-être en utilisant des adaptateurs JAXB. Et rappelez-vous que je ne veux pas toucher les objets générés. Cela doit être fait soit dans les paramètres de marshaller (adaptar, intercepteur, etc) ou dans le XSD (peut-être il y a quelques paramètres à manipuler).

Merci beaucoup!

MISE À JOUR:

J'ai trouvé un tutoriel sur certaines opérations de liaison:

https://jaxb.dev.java.net/guide/Using_different_datatypes.html

Je recherche essayer d'utiliser les liaisons JAXB.

+0

Ce lien est maintenant https://jaxb.java.net/guide/Using_different_datatypes.html –

Répondre

0

Pour obtenir le modèle objet souhaité, vous pouvez utiliser l'extension de mappage XPath dans EclipseLink JAXB (MOXy).

+0

Mais la question était de savoir si je peux le faire sans changer la classe générée. –

+0

Pour aller entre le XML et l'objet que vous voulez, vous aurez besoin d'un XmlAdapter et d'une personnalisation pour l'utiliser. Changer votre modèle peut être plus propre. –

-1

Je ne suis pas sûr de votre situation particulière, mais en général, en tapant un 30 caractères supplémentaires est probablement pas un assez grand coût pour justifier même la recherche d'une solution à cela. D'autant qu'Eclipse va auto-compléter cet appel de méthode.

+0

Vous avez manqué le point de la question –

Questions connexes