2016-10-15 4 views
1

Так что я создаю небольшой отдых api с java, используя Jersey 2.23.2. Однако я столкнулся с проблемой, я не могу правильно указать сервлет в файле web.xml. Это как мои файлы выглядеть следующим образом:Мигрировали в джерси 2.x, и теперь я получаю исключение контейнера для сервлетов

pom.xml

<dependencies> 
     <dependency> 
      <groupId>org.glassfish.jersey.core</groupId> 
      <artifactId>jersey-client</artifactId> 
      <version>2.23.2</version> 
     </dependency>  
     <dependency> 
      <groupId>org.glassfish.jersey.containers</groupId> 
      <artifactId>jersey-container-servlet-core</artifactId> 
      <version>2.23.2</version> 
      <scope>provided</scope> 
     </dependency> 
    </dependencies> 

web.xml

... 
    <servlet> 
     <servlet-name>WebService</servlet-name> 
     <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> 
     <init-param> 
      <param-name>jersey.config.server.provider.packages</param-name> 
      <param-value>api-mashup-api.API</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>WebService</servlet-name> 
     <url-pattern>/api/*</url-pattern> 
    </servlet-mapping> 

</web-app> 

API.java

package api; 
    @Path("/v1") 
    public class API { 
    private Controller controller; 

    public API(){ 
     controller = new Controller(); 
    } 

    @GET 
    @Produces(MediaType.TEXT_HTML) 
    public String print1() { 
     return "Please specify what resource you need."; 
    } 

    /** 
    * Prints to the screen if we are in /v1/foo 
    * 
    * @return 
    */ 
    @GET 
    @Path("/foobar") 
    @Produces(MediaType.TEXT_HTML) 
    public String print2() { 
     return "Please specify what resource you need."; 
    } 
} 

Моей структуры папок проекта выглядит следующим образом:

api-mashup-api/Java Resources/src/api/API.java 

я использовал Джерси 1.x до и после этого я мигрировал 2.x и теперь я не уверен, что положить в Params сервлета в Интернете. XML. Когда я пытаюсь запустить API.java на моем сервере Tomcat я получаю следующее исключение:

SEVERE: Servlet [WebService] in web application [/api-mashup-api] threw load() exception 
java.lang.ClassNotFoundException: org.glassfish.jersey.servlet.ServletContainer 

я могу достигнуть моего index.html просто отлично, хотя, так что сервер работает, но не API часть. Не уверен, что делать здесь. Очевидно, что что-то не так с частью сервлета.

EDIT-Вещи, которые я попробовал:

  • Добавлена ​​API.java к парам-valye в web.xml

  • Посмотрел на Basic full configuration for Jersey on Tomcat in eclipse и реализовали решение. Теперь при запуске api сервер не будет разбиваться, но я не могу найти какой-либо ресурс, например, с http://localhost:8080/api-mashup-api/v1.

    • Удалена метка области из зависимости контейнера сервлетов.
+0

Вы можете попробовать ИЗА? Кроме того, добавьте случай API.java, это не сработает. – Veeram

+0

Пробовали оба, они дали мне тот же результат. – dikaJoe

+0

К сожалению, я имею в виду добавить класс API.java в сообщение. – Veeram

ответ

0

Я имел и устранили эту ошибку много раз. В основном это проблема зависимости.

Вот шаги, чтобы это исправить:

  1. Убедитесь, что вы используете самую последнюю версию всех пакетов (т.е. 2.23.2 из GlassFish) и серверов, обновление POM соответственно. Это очень важно для вашего случая, так как вы используете новую версию Джерси.

  2. Обновить ваш проект

  3. Используйте меню Maven для очистки и построить

  4. Используйте меню Maven для обновления (это отличается от обновления проекта)

Дон» t пропустите шаги или предположите, что если вы сделали некоторые из них здесь и там в прошлом, это то же самое, что делать их один за другим.

0

Возможно проблема с сервлет контейнер «джерси-контейнер-сервлет-ядро» для сервлета 2.x контейнеров, попробуйте изменить

<dependency> 
      <groupId>org.glassfish.jersey.containers</groupId> 
      <artifactId>jersey-container-servlet</artifactId> 
      <version>2.23.2</version> 
      <scope>provided</scope> 
     </dependency> 
Смежные вопросы