2012-05-05 2 views
9

J'utilise des liaisons JAXB pour dématérialiser directement les objets de ma couche de domaine, qui sont des sous-classes des types de services Web générés. C'est une bonne solution car je peux remplacer les méthodes et fournir une logique personnalisée en écriture, etc. Cependant, le compilateur XJC insiste pour mettre les annotations @XmlSeeAlso ({MySubclass.class}) sur toutes les classes générées, ce qui les amène à être étroitement couplé à mes objets de domaine. Ceci est évidemment indésirable et provoque toutes sortes de problèmes de référence entre mes projets que je n'aborderai pas ici.JAXB @XmlSeeAussi, provoquant un couplage étroit avec les objets de domaine

Est-il possible de générer des classes qui n'ont pas l'annotation @XmlSeeAlso? Le travail actuel d'unmarshaling à la sous-classe semble se produire dans la classe ObjectFactory. Est-il possible d'omettre la liaison jaxb et de substituer une ObjectFactory personnalisée pour chaque application? Cela me permettrait d'avoir des types de services web autogénérés dans un util partagé alors que chaque projet web pourrait se démarquer de différentes sous-classes de ces types.

<jaxb:bindings node="//xs:complexType[@name='AutogeneratedWebserviceType']"> 
    <jaxb:class implClass="my.project.CustomSubclass" /> 
</jaxb:bindings> 

Cette liaison va créer une méthode dans la ObjectFactory qui semble faire le travail de unmarshaling à ma sous-classe:

public AutogeneratedWebserviceType createAutogeneratedWebserviceType() { 
    return new CustomSubclass(); 
} 

Je veux que ce comportement sans l'annotation @XmlSeeAlso en fournissant un client ObjectFactory , si possible.

Répondre

2

Avez-vous essayé d'exécuter XJC avec l'argument -target 2.0? Je crois que cela va désactiver la génération de l'annotation @XmlSeeAlso.

+0

pour quelque chose d'utilisation fourmi comme ceci:

+0

Merci beaucoup, "-target 2.0" résolu mon problème. J'utilise Webservices dans un environnement OSGi et ce stupide runtime-annotation XmlSeeAussi causé un accolement serré à d'autres modules qui était complètement inutile – lostiniceland

Questions connexes