Джерси 2.19 — JBoss EAP 6.2 — JBWEB000260: для сервлета не указан класс сервлета

Я пытаюсь развернуть простой сервис отдыха в JBoss EAP 6.2 с Джерси 2.19.

Подкласс класса приложения:

package com.jersey.mywebapp;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
import java.util.HashSet;
import java.util.Set;

@ApplicationPath("resources")
public class MyApp extends Application {
    public Set<Class<?>> getClasses() {
        Set<Class<?>> s = new HashSet<Class<?>>();
        s.add(MyResource.class);
        return s;
    }
}

Класс реализации РС:

package com.jersey.mywebapp;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@Path("myresource")
public class MyResource {
    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String getIt() {
        return "Got it!";
    }
}

Мой дескриптор развертывания:

..
    <servlet>
        <display-name>My JAX-RS Servlet</display-name>
        <servlet-name>com.jersey.mywebapp.MyApp</servlet-name>
        <init-param>
            <param-name>javax.ws.rs.Application</param-name>
            <param-value>com.jersey.mywebapp.MyApp</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>com.jersey.mywebapp.MyApp</servlet-name>
        <url-pattern>/resources/*</url-pattern>
    </servlet-mapping>
...

Получение следующей ошибки при доступе к ресурсу (localhost:8080/{context}/resources/myresource)

21:51:29,437 INFO  [org.apache.catalina.core.ContainerBase.[jboss.web]. [default-host].[/rpa]] (http-/127.0.0.1:8080-1) JBWEB000264: Marking servlet  com.jersey.mywebapp.MyApp as unavailable
21:51:29,446 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/rpa].[com.jersey.mywebapp.MyApp]] (http-/127.0.0.1:8080-1) JBWEB000235:    Allocate exception for servlet com.
jersey.mywebapp.MyApp: javax.servlet.ServletException: JBWEB000260: No servlet class has been specified for servlet com.jersey.mywebapp.MyApp
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1147) [jbossweb-7.2.2.Final-redhat-1.jar:7.2.2.Final-redhat-1]
    at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:950) [jbossweb-7.2.2.Final-redhat-1.jar:7.2.2.Final-redhat-1]
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:151) [jbossweb-7.2.2.Final-redhat-1.jar:7.2.2.Final-redhat-1]
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:149) [jbossweb-7.2.2.Final-redhat-1.jar:7.2.2.Final-redhat-1]
    at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:169) [jboss-as-web-7.3.0.Final-redhat-14.jar:7.3.0.Final-redhat-14]
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:145) [jbossweb-7.2.2.Final-redhat-1.jar:7.2.2.Final-redhat-1]
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:97) [jbossweb-7.2.2.Final-redhat-1.jar:7.2.2.Final-redhat-1]
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:102) [jbossweb-7.2.2.Final-redhat-1.jar:7.2.2.Final-redhat-1]
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:336) [jbossweb-7.2.2.Final-redhat-1.jar:7.2.2.Final-redhat-1]
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856) [jbossweb-7.2.2.Final-redhat-1.jar:7.2.2.Final-redhat-1]
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:653) [jbossweb-7.2.2.Final-redhat-1.jar:7.2.2.Final-redhat-1]
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:920) [jbossweb-7.2.2.Final-redhat-1.jar:7.2.2.Final-redhat-1]
    at java.lang.Thread.run(Thread.java:780) [vm.jar:1.7.0]

Насколько я понимаю, JBoss EAP 6.2 поддерживает Servlet 3.0, и согласно документации Джерси (Глава 4. Развертывание приложений и среды выполнения) допустимо опустить класс сервлета в соответствии с механизмом подключаемости сервлета.

Посоветуйте, как решить эту проблему?

Примечание. Чтобы избежать/подавить RESTEasy при сканировании ресурсов JAX RS, я закомментировал подсистему xmlns="urn:jboss:domain:jaxrs:1.0" из standalone.xml.


person opuser1    schedule 14.08.2015    source источник


Ответы (1)


Если вам действительно не нужно использовать Джерси вместо предоставленной реализации JAX-RS, вы можете попробовать следующее: - восстановить конфигурацию подсистемы для RESTEasy - удалить объявления сервлета web.xml и сопоставления сервлетов в вашем приложении.

Поскольку вы предоставили подкласс javax.ws.rs.core.Application с аннотацией @ApplicationPath, нет необходимости в конфигурации web.xml (согласно спецификации JAX-RS 1.1, как я полагаю, вы упомянули выше).

ХТН

person Xavier Coulon    schedule 14.08.2015
comment
Спасибо, что вернулись к этому .. Я хотел бы использовать трикотаж, поскольку я переношу приложение в трикотаже (оно использует некоторые нестандартные специфические функции трикотажа) на JBoss EAP 6.2. Также я попробовал ваше предложение удалить сопоставление сервлетов и классов сервлетов из web.xml, но это не сработало. Atlast настроил сервлет-класс с ‹servlet-class›org.glassfish.jersey.servlet.ServletContainer‹/servlet-class› и заставил его работать. - person opuser1; 18.08.2015