Я пытаюсь создать простой веб-сервис, используя Tomcat 7.0.11 в Windows Server 2008 R2, используя Metro 2.1. Я пришел из C # / WCF, пытаясь лучше понять совместимость веб-сервисов. Я на самом деле следую примеру из книги Мартина Калина «Запуск и запуск веб-сервисов Java». У меня есть следующее:
CATALINA_HOME=c:\tomcat-7.0.11
в файле catalina.properties, который у меня есть:
server.loader=c:/metro-2.1/bin/*.jar
(заметьте, я тоже пытался добавить этот путь в common.loader).
Я скопировал следующие файлы jar METRO в CALALINA_HOME \ lib:
WebServices-api.jar,
WebServices-extra.jar,
WebServices-экстра-api.jar,
WebServices-rt.jar,
WebServices-tools.jar
и CALALINA_HOME \ одобрил:
WebServices-api.jar
(обратите внимание, я изначально пытался использовать файл ant metro-on-tomcat.xml, но он не обновлялся для tomcat 7. *)
Я также скопировал webservices-api.jar в JAVA_HOME \ jre \ lib \ endorsed
Я тоже пытался поместить другие банки METRO в вышеуказанные места, но безрезультатно.
Теперь Tomcat запускается нормально и инициализирует METRO, вот соответствующий раздел из файла журнала catalina:
ИНФОРМАЦИЯ: Развертывание веб-приложения
СПРАВОЧНИК КОРЕНЬ 18-Мая-2011 08:00:55
com.sun.xml.ws.transport.http.servlet.WSServletContextListener
INFO: WSSERVLET12:
Инициализация прослушивателя контекста JAX-WS
18 мая 2011 г. 08:01:07
com.sun.xml.ws.server.MonitorBase
createRoot INFO: Метро мониторинг
rootname успешно установлено в:
com.sun.metro: р = /, тип = WSEndpoint, имя = -TempConvertImplService-TempConvertImplPort
18 мая 2011 г. 08:01:08
com.sun.xml.ws.transport.http.servlet.WSServletDelegate
ИНФОРМАЦИЯ: WSSERVLET14: JAX-WS
инициализация сервлета
Итак, вы можете подумать, что Tomcat загрузил все классы METRO. Из того, что я собрал, WSServlet является частью JAX-WS 2.1, который поставляется как часть METRO, поэтому он должен был быть загружен. Но когда я на самом деле пытаюсь перейти на WSDL своего сервиса, я получаю в журнале локального хоста следующее:
SEVERE: выделить исключение для сервлета
TempConvertWS
java.lang.ClassNotFoundException:
com.sun.xml.ws.transport.http.WSServlet
в
org.apache.catalina.loader.WebappClassLoader.loadClass (WebappClassLoader.java:1676)
в
org.apache.catalina.loader.WebappClassLoader.loadClass (WebappClassLoader.java:1521)
в
org.apache.catalina.core.DefaultInstanceManager.loadClass (DefaultInstanceManager.java:415) ....
(остаток от стека)
мой sun-jaxws.xml выглядит так:
<endpoints xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime" version="2.0">
<endpoint
name="TempConvertWS"
implementation="TimeServer.TempConvertImpl"
url-pattern="/tc"
/>
</endpoints>
и соответствующий раздел из моего файла web.xml:
<listener>
<listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class>
</listener>
<servlet>
<servlet-name>TempConvertWS</servlet-name>
<servlet-class>com.sun.xml.ws.transport.http.WSServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>TempConvertWS</servlet-name>
<url-pattern>/tc</url-pattern>
</servlet-mapping>
Может ли кто-нибудь из этого понять, почему Tomcat не может найти / загрузить класс WSServlet при просмотре службы?