Glassfish не может найти / создать экземпляр Jersey WebApplicationProviderImpl - PullRequest
2 голосов
/ 20 ноября 2010

Я пытаюсь создать REST-сервисы, используя Jersey (встроенный) на Glassfish. Я установил GlassFish Server Open Source Edition 3.0.1 (сборка 22). Это мой web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
    <servlet>
        <servlet-name>javax.ws.rs.core.Application</servlet-name>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>javax.ws.rs.core.Application</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
</web-app>

Однако, когда я пытаюсь развернуть WAR, я получаю это:

java.lang.IllegalStateException: WEB9031: WebappClassLoader unable to load resource [com.sun.jersey.server.impl.container.WebApplicationProviderImpl], because it has not yet been started, or was already stopped
    at org.glassfish.web.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1367)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:247)
    at com.sun.jersey.core.reflection.ReflectionHelper.classForNameWithException(ReflectionHelper.java:236)
    at com.sun.jersey.spi.service.ServiceFinder$LazyObjectIterator.hasNext(ServiceFinder.java:851)

Так что я могу сделать? Это похоже на проблему с classpath, но все это глубоко внутри стеклянной рыбы.

Я также попытался обновить компонент Jersey в Glassfish до версии 1.4, как описано здесь , но без изменений.

Ответы [ 2 ]

1 голос
/ 22 ноября 2010

Посмотрите следующий пример из моего блога, это может помочь:

Мой web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    <servlet>
        <servlet-name>Jersey Web Application</servlet-name>
        <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer
        </servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Jersey Web Application</servlet-name>
        <url-pattern>/rest/*</url-pattern>
    </servlet-mapping>
    <persistence-context-ref>
        <persistence-context-ref-name>persistence/em</persistence-context-ref-name>
        <persistence-unit-name>CustomerService</persistence-unit-name>
    </persistence-context-ref>
</web-app>
0 голосов
/ 23 ноября 2010

Я сам нашел причину проблемы. Очевидно, Glassfish сильно запутается, если вы развернете файл JAR как веб-приложение, даже если вы явно выберете тип. Единственное, что мне нужно было сделать, это изменить суффикс файла на WAR, и это сработало (сначала была другая ошибка, но для которой было гораздо проще найти решение).

...