Ошибка WSServlet ClassNotFoundException на Tomcat 7.0.11 с использованием Metro 2.1 - PullRequest
7 голосов
/ 18 мая 2011

Я пытаюсь создать простой веб-сервис, используя 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 при просмотре службы?

1 Ответ

2 голосов
/ 20 мая 2011

С Tomcat 6 я установил shared .loader в catalina.properties и добавил webservices-api.jar в <catalina-home>\endorsed

Это работает как чудо.

Для целей разработки и тестирования вы можете просто поместить webservices-extra.jar, webservices-extra-api.jar, webservices-rt.jar, webservices-tools.jar в <catalina-home>/lib вместо использованиядиректива shared.loader.Я считаю, что это также более совместимо с Eclipse.

Я опробую Tomcat 7, чтобы выяснить, не отличается ли он каким-либо образом.

* Обновление: Тот же трюк работает для Tomcat 7.0.14

* Обновление 2: извините, я его не увидел сразу, но только что заметил, что в вашем web.xml указан <servlet-class> неверный.Это должно быть com.sun.xml.ws.transport.http.servlet.WSServlet

...