2009-12-02 3 views
1

Dans un service Web jax-ws, je ne peux pas accéder directement à l'objet JaxbContext. JaxbContext utilise la classe ObjectFactory. J'ai essayé de l'étendre (comme dans Jaxb Adding Behaviors). Je mets le code généré dans ObjectFactoryBase, puis ajoutéproblème sous-classe ObjectFactory dans le service Web jax-ws

public class ObjectFactory extends ObjectFactoryBase {//.. overriden methods} 

Cependant IllegalAnnotationsException est venu quand la publication à weblogic, parce qu'il ne peut pas trouver un certain @XmlElementDecl présent dans ObjectFactoryBase. Lorsque je déplace la méthode avec ce @XmlElementDecl à ObjectFactory cela fonctionne.

Pas de chance d'ajouter @XmlSeeAlso({ ObjectFactoryBase.class }) non plus.

Modifier: J'ai maintenant découvert que l'ObjectFactory généré est même pas utilisé par le service Web jaxws. Donc, le message d'erreur ci-dessus ne sont plus aussi pertinents. Une idée de pourquoi elle est générée mais pas utilisée?

Des idées?

Répondre

4

JAXB ObjectFactories sont d'étranges bêtes. Votre question a plusieurs facettes, donc je vais simplement répondre à une liste de puce:

  • JAXB1 fondé sur ObjectFactory pour créer des instances des classes liées, mais avec tout ce jaxb2 est un POJO, et la ObjectFactory devient la plupart du temps inutile. Il est toujours généré par XJC, en partie pour des raisons de rétrocompatibilité.
  • Les annotations sur une ObjectFactory sont complexes et non évidentes, mais comme c'est une classe générée, cela n'a généralement pas d'importance, et la plupart des gens ne le regardent pas de toute façon.
  • ObjectFactory est toujours utile à l'occasion car il fournit des méthodes d'usine pour les classes liées nécessitant un wrapper JAXBElement, et il est beaucoup plus facile d'utiliser les méthodes d'usine fournies que de le faire manuellement.
  • Le service Web JAXWS peut choisir de ne pas utiliser ObjectFactory, car cela n'est pas strictement nécessaire. Cependant, le JAXBContext peut toujours le charger et l'analyser, selon la manière dont le contexte a été initialisé.
  • Je n'ai jamais essayé de créer moi-même une ObjectFactory; Si le modèle a été généré par XJC, ObjectFactory généré est généralement suffisant, et si vous avez un modèle JAXB écrit à la main, ObjectFactory est généralement complètement inutile.
+0

Bonne réponse, merci. Au fait, avez-vous regardé la nouvelle annotation (?) @UsesJAXBContext avec jaxws @WebService? Il semble prometteur en ce qu'il donne un contrôle total, probablement aussi sur ObjectFactory. – Gerard

+0

Je ne comprends pas ce que vous essayez de faire ici car j'apprends encore 'jax-ws', je suis juste confus où est la classe' ObjectFactory'?! Quel pot le contient? Je vous remercie. –

Questions connexes