Я пытаюсь создать простой веб-сервис с помощью Tomcat 7.0.11 на Windows Server 2008 R2 с использованием Metro 2.1. Я исхожу из опыта работы с C # / WCF, пытаясь лучше понять совместимость веб-сервисов. На самом деле я следую примеру из книги Мартина Калина «Java Web Services Up and Running». У меня есть следующее:
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, m исходит из опыта работы с C # / WCF, пытаясь лучше понять совместимость веб-сервисов. На самом деле я следую примеру из книги Мартина Калина «Java Web Services Up and Running». У меня есть следующее:
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, m исходит из опыта работы с C # / WCF, пытаясь лучше понять совместимость веб-сервисов. На самом деле я следую примеру из книги Мартина Калина «Java Web Services Up and Running». У меня есть следующее:
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-extra-api.jar, webservices-rt.jar, webservices-tools.jar
и CALALINA_HOME \ endorsed:
webservices-api.jar
(обратите внимание, я изначально пытался использовать ant-файл metro-on-tomcat.xml, но, похоже, у него нет был обновлен для tomcat 7. *)
Я также скопировал webservices-api.jar в JAVA_HOME \ jre \ lib \ endorsed
Я попытался разместить и другие банки METRO в указанных выше местах, но не help.
Теперь Tomcat запускается нормально и инициализирует METRO. Вот соответствующий раздел из файла журнала catalina:
ИНФОРМАЦИЯ: Развертывание веб-приложения каталог ROOT 18-Май-2011 08:00:55 com.sun.xml.ws.transport.http.servlet.WSServletContextListener contextInitialized ИНФОРМАЦИЯ: WSSERVLET12: Инициализация прослушивателя контекста JAX-WS 18-мая-2011 08:01:07 com.sun.xml.ws.server.MonitorBase createRoot INFO: мониторинг метро rootname успешно настроен на: com.sun.metro: pp = /, type = WSEndpoint, name = -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 моей службы, я получаю следующее в журнале localhost:
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 при просмотре службы?