Развертывание веб-приложения на Джерси в старом JBoss AS (4.2.2) - невозможно получить доступ к ресурсу - PullRequest
0 голосов
/ 25 апреля 2019

Моя цель - развернуть веб-приложение Jersey (1.9) в ухе JBoss (4.2.2).Эта версия JBoss не имеет встроенной реализации JAX-RS, которая поставляется с RestEasy.

Я не могу получить доступ к конечным точкам со стороны клиента.

В файле JBoss application.xml я добавил следующие строки:

<module>
    <web>
        <web-uri>sharedall-restservices.war</web-uri>
        <context-root>/rest</context-root>
    </web>
</module>

Моя война находитсяв каталоге deploy / ear вместе с другими войнами / банками, которые там находятся.

В web.xml войны у меня есть следующее:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee">

    <display-name>Jersey REST</display-name>
    <servlet>
        <servlet-name>rest-services</servlet-name>
        <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>

        <init-param>
            <param-name>jersey.config.server.provider.packages</param-name>
            <param-value>com.shaylois.rest</param-value>
        </init-param>


        <init-param>
            <param-name>jersey.config.server.provider.scanning.recursive</param-name>
            <param-value>false</param-value>
        </init-param>

        <load-on-startup>1</load-on-startup>

    </servlet>
    <servlet-mapping>
        <servlet-name>rest-services</servlet-name>
        <url-pattern>/services</url-pattern>
    </servlet-mapping>
</web-app>

Веб-приложение взорвано и успешно развернуто, сообщая мне в файле журнала, что ресурс был найден Джерси, а также провайдерами для (де) сериализации.Но оставайтесь со мной ...

Вот краткий фрагмент ресурса:

@Path("/predefinedMessages")
public class PredefinedMessageServiceResource {

    private PredefinedMessageServicePOJO pojo = new PredefinedMessageServicePOJO();

    @GET
    @Produces("application/protobuf")
    public PredefinedMessageProtoCollection getPredefinedMessages() {
        return pojo.getPredefinedMessages();
    }
}

А вот как я пытаюсь получить к нему доступсо стороны клиента:

WebResource webResource = jerseyWebClient.resource("http://localhost:8080/rest/services/predefinedMessages");    

ClientResponse returnedByServer = webResource.accept("application/protobuf").get(ClientResponse.class);

После чего я получаю код ошибки 404. В логах tomcat JBoss я вижу, что была попытка доступа к ресурсу:

127.0.0.1 - GET /rest/services/predefinedMessages HTTP/1.1 404 77

Мне кажется, что мой ресурс расположен по другому URL.Я застрял на этапе выяснения, какой это URL, и где я ошибся при его настройке.

Большое спасибо заранее тем любопытным и полезным людям, которые готовы предложить помощь.

РЕДАКТИРОВАТЬ: Я обнаружил ошибку через несколько секунд после публикации вопроса.Как обычно.:) Строка <url-pattern>/services</url-pattern> в web.xml была изменена на <url-pattern>/services/*</url-pattern>

...