2017-01-19 1 views
0

Un service JAX-WS défini à l'aide de @WebService et @WebMethod utilise JAXB pour transformer le code XML en objet Java. Pour la plupart des cas d'utilisation, c'est génial!Est-il possible d'accéder à la requête brute XML dans JAX-WS sans utiliser @WebServiceProvider?

Cependant, j'ai besoin de m'interfacer avec du code hérité écrit en utilisant Axis 1 qui fonctionne exclusivement sur org.w3c.dom.Element objets - en d'autres termes, je devrais juste transformer les paramètres directement en XML dès que je les ai, ce qui semble horriblement inefficace. Par conséquent, je cherchais un moyen de recevoir et de renvoyer du code XML brut à partir d'un service JAX-WS, que ce soit sous la forme d'une chaîne ou en tant qu'objets.

Je suis en mesure d'obtenir la fonctionnalité dont j'ai besoin à l'aide @WebServiceProvider et mettre en œuvre l'interface Provider<Source>, mais cela se sent un peu trop bas niveau pour le genre de chose que je fais - je ne peux pas utiliser @WebMethod à configurer facilement le routage; Au lieu de cela, je dois obtenir le PATH_INFO de WebServiceContext et jouer avec la chaîne pour obtenir les informations dont j'ai besoin. Donc, ma question est, y a-t-il un moyen d'utiliser le XML brut (découper JAXB) dans un service JAX-WS sans tomber au niveau @WebServiceProvider?

Répondre

0

Je viens de tombé sur la réponse par moi-même, si elle est ici pour quelqu'un d'autre qui a cette question:

Comme mentionné dans le documentation, JAXB peut maréchal xsd:anyType en Object. Le type concret de l'objet résultant est apache.xerces.internal.dom.ElementNSImpl, qui est une implémentation de org.w3c.dom.Element - c'est-à-dire exactement ce dont j'ai besoin! Par conséquent la solution à mon problème était simplement d'utiliser Object comme le paramètre et les types de retour dans ma méthode. Pas une solution de sentiment massivement propre, mais cela fonctionne.