Джерси 2.0 - Исключение Glassfish 4 Cast

Я пытаюсь развернуть простое приложение, которое отображает состояние спокойной службы, используя трикотаж и стеклянную рыбу 4. Я получаю следующее исключение:

org.glassfish.jersey.internal.ServiceConfigurationError: 
org.glassfish.jersey.internal.spi.AutoDiscoverable: The class 
org.glassfish.jersey.server.internal.monitoring.MonitoringAutodiscoverable implementing 
provider interface org.glassfish.jersey.internal.spi.AutoDiscoverable could not be 
instantiated: Cannot cast 
org.glassfish.jersey.server.internal.monitoring.MonitoringAutodiscoverable to 
org.glassfish.jersey.internal.spi.AutoDiscoverable

Мой web.xml выглядит так

<web-app>
<servlet>
  <servlet-name>Servlet</servlet-name>
  <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
</servlet>

<servlet-mapping>
  <servlet-name>Servlet</servlet-name>
  <url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>

Мой сервис выглядит так:

@Path(MyServices.SERVICE_URL)
public class MyServices
{
   @GET
   @Produces("text/html")
   public String getStatus()
   {
      return "My service is running.";
   }
}

Кто-нибудь знает, что я делаю неправильно здесь?

Изменить Я добавил этот класс в свой военный проект:

@ApplicationPath("/*")
public class MyApplication extends ResourceConfig
{
   public MyApplication()
   {
      packages("com.java.services");
   }
}

и я все еще получаю то же исключение:

javax.servlet.ServletException: Servlet.init() for servlet com.java.services.MyApplication threw exception

person user2287966    schedule 04.03.2014    source источник


Ответы (1)


GlassFish 4.0 — это контейнер Servlet 3.x, поэтому вам необходимо изменить модель развертывания

<!-- Servlet declaration can be omitted in which case
     it would be automatically added by Jersey -->
<servlet>
    <servlet-name>javax.ws.rs.core.Application</servlet-name>
</servlet>

<servlet-mapping>
    <servlet-name>javax.ws.rs.core.Application</servlet-name>
    <url-pattern>/resources/*</url-pattern>
</servlet-mapping>

Но даже этот параметр web.xml больше не нужен, просто реализуйте Application подкласс с аннотацией @ApplicationPath и все будет работать как положено

@ApplicationPath("resources")
public class MyApplication extends ResourceConfig {
    public MyApplication() {
        packages("org.foo.rest;org.bar.rest");
    }
}

Результат

Результат

person Anthony Accioly    schedule 05.03.2014
comment
Антон, смотри мой комментарий выше. Я все еще получаю то же исключение. Я пробовал с web.xml, без web.xml, с web.xml и MyApplication и т. д. - person user2287966; 06.03.2014
comment
Я заметил, что использую майку 2.6, и по какой-то причине у меня возникают проблемы. Я удалил эту банку из пути к классам и использовал ту, которая включена в стеклянную рыбу, и все заработало, как и ожидалось. Спасибо за вашу помощь. - person user2287966; 11.03.2014
comment
Я рад быть полезным. GlassFish 4 зависит от Jersey 2.0, но если вам действительно нужны более новые версии, есть сценарии для обновления GlassFish 4.0.1. См. blog.dejavu.sk/2014/ 21 января/обновление-Джерси-2-в-стеклянной рыбе-4 - person Anthony Accioly; 11.03.2014