JAX-WS mise en Œuvre inclus avec Java?
J'ai un JAX-WS application de service web qui se déploie sous forme d'un fichier WAR pour Tomcat 7. Il utilise une version récente de la station de Métro bibliothèques, que j'inclus à l'intérieur de la GUERRE de fichier, et il fonctionne très bien.
J'essaie de simplifier le package de déploiement. Je comprends que le Sun JDK comprend une copie de Métro (voir cette question et cette une par exemple), mais pour une raison quelconque, il est apparemment obligatoire de remplacer cette copie de métro avec un téléchargés à partir de la glassfish site. J'essaie de comprendre si il est possible de s'en sortir avec juste Tomcat et le métro de mise en œuvre qui est livré avec le JDK, ou si non, pourquoi pas.
La GUERRE contenus sont comme suit (les fichiers de classe supprimée):
META-INF/MANIFEST.MF
WEB-INF/classes/
WEB-INF/classes/com/[et cetera]
WEB-INF/ibm-web-ext.xml
WEB-INF/lib/
WEB-INF/lib/stax-api.jar
WEB-INF/lib/webservices-api.jar
WEB-INF/lib/webservices-extra-api.jar
WEB-INF/lib/webservices-extra.jar
WEB-INF/lib/webservices-rt.jar
WEB-INF/lib/webservices-tools.jar
WEB-INF/sun-jaxws.xml
WEB-INF/web.xml
wsdl/
wsdl/MyService.wsdl
web.xml
contient, dans la partie:
<servlet>
<servlet-name>MyService</servlet-name>
<servlet-class>
com.sun.xml.ws.transport.http.servlet.WSServlet
</servlet-class>
</servlet>
Quand j'enlève le webservices-* pots--le Métro pots-de la GUERRE, le service web échoue avec l'erreur " de l'emballage ne peut pas trouver la classe de servlet com.soleil.xml.ws.de transport.http.servlet.WSServlet ou une classe, il dépend". Ce n'est pas étonnant parce que je ne trouve pas que la classe n'importe où dans le les pots qui viennent avec Java 7 SE.
Alors, que faut-il dire que Java 7 est livré avec le Métro, si vous devez télécharger une nouvelle copie de Metro pour faire quelque chose comme ce travail? Est-il possible d'exécuter un JAX-WS web de service au sein de Tomcat en utilisant juste les pots qui viennent avec Java?
OriginalL'auteur Kenster | 2013-04-03
Vous devez vous connecter pour publier un commentaire.
Livré JAX-WS manque d'intégration avec des conteneurs de servlet, comme il est destiné à être utilisé seulement à offrir JAX-WS services à l'intérieur autonome des applications Java (WTF!?!?!?).
Bien sûr, on pourrait penser à la mise en œuvre d'une servlet qui n'est que de l'intégration, de sorte que vous n'aurait pas à joindre une copie de Métro dans votre GUERRE. Mais il est plus facile d'inclure un externe "plein" de la copie, il gonfle la GUERRE, mais il ne devrait pas avoir de grandes performances. En outre, de cette façon, vous pouvez contrôler la version que vous utilisez, éviter d'être coincé avec la version qui a été inclus dans votre environnement JRE.
De toute façon, le Soleil habituellement changé de noms de paquets dans les bibliothèques intégrées, afin de ne pas entrer en collision avec l'extérieur, Donc, si le servlet existe (il n'a pas), il serait probablement appelé:
com.sun.xml. interne. ws.de transport.http.servlet.WSServlet
C'est très ennuyeux car ils ont aussi changé la configuration des propriétés de la même manière (par exemple: dépassement de délai lié), donc si vous utilisez le logiciel d'JAX-WS, vous devez utiliser
com.sun.xml. interne.... style propriétés de configuration,
mais si vous utilisez certaines externe JAX-WS, vous devez utiliser
com.sun.xml.... style propriétés de configuration.
Merci Soleil!!!
OriginalL'auteur
Ce n'est pas tout à fait correct. JDK6+ comprend JAX-WS RI (l'implémentation de référence), et le Métro est un sur-ensemble. En d'autres termes, Métro = JAX-WS RI + WSIT.
C'est une excellente question. Réponse est non, parce que
WSServlet
classe étendHttpServlet
, etWSServletContextListener
implémenteServletContextAttributeListener
etServletContextListener
interfaces. Ces interfaces et les classes sont tous partie de Java EE, pas de Java SE - n'est donc pas inclus dans le JDK/JRE. Sun/Oracle a décidé de ne pas mélanger Java SE et Java EE, et c'est compréhensible, même si cela signifie que ces classes ont été effectivement prises de JAX-WS RI version qui est fourni avec le JDK/JRE. Par conséquent, vous devez installer JAX-WS dépendances afin d'utiliser JAX-WS-services Web sur Tomcat, parce que Tomcat ne vient pas avec elle (d'un autre côté, si vous choisissez de Glassfish par exemple, vous trouverez Metro complète de la distribution groupée avec elle et vous n'avez pas à installer quoi que ce soit de plus). Sinon, vous êtes coincé avec Point de terminaison#publier mécanisme.Voir aussi:
OriginalL'auteur
Son une vieille question, mais si quelqu'un est toujours à la recherche de réponses. Il n'est pas nécessaire d'inclure le jaxws pot de JDK 1.7 (je suis en utilisant précisément 1.7.0_45). Utilisé cette http://www.mkyong.com/webservices/jax-ws/deploy-jax-ws-web-services-on-tomcat/ lien de construire un échantillon webservice et ont sauté l'étape 5 et il fonctionne. Je suis ciblage version de Tomcat 7.0.47, l'ensemble du projet est de construire avec Maven avec portée par défaut pour jaxws-rt pots (c'est à dire de la compilation).
OriginalL'auteur