У меня есть приложение веб-службы JAX-WS, которое развертывается в качестве файла WAR для Tomcat 7. В нем используется последняя версия библиотек Metro, которую я включаю в WAR файл, и она отлично работает.
Я пытаюсь упростить пакет развертывания. Я понимаю, что Sun JDK включает копию Metro (см. этот вопрос и этот), но по какой-то причине, по-видимому, обязательным является замена этой копии метро на один, загруженный с сайта морской рыбы. Я пытаюсь понять, можно ли с ним справиться только с Tomcat и реализацией метро, которая поставляется с JDK, или если нет, почему бы и нет.
Содержимое WAR выглядит следующим образом (файлы классов удалены):
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
содержит, в частности:
<servlet>
<servlet-name>MyService</servlet-name>
<servlet-class>
com.sun.xml.ws.transport.http.servlet.WSServlet
</servlet-class>
</servlet>
Когда я удаляю webservices- * jars - банки Metro - из WAR, веб-служба терпит неудачу с ошибкой "Wrapper не может найти класс сервлета com.sun.xml.ws.transport.http.servlet.WSServlet или класс зависит от". Это не удивительно, потому что я не могу найти этот класс где-нибудь в банках, которые поставляются с Java 7 SE.
Итак, что значит сказать, что Java 7 поставляется с Metro, если вам нужно загрузить еще одну копию Metro, чтобы сделать что-то вроде этой работы? Возможно ли запустить веб-службу JAX-WS в Tomcat, используя только банки, которые поставляются с Java?