代码之家  ›  专栏  ›  技术社区  ›  Michael Borgwardt

Glassfish找不到/实例化Jersey WebApplicationProviderImpl

  •  2
  • Michael Borgwardt  · 技术社区  · 14 年前

    我正在尝试使用Glassfish上的Jersey(内置)创建REST服务。我安装了Glassfish Server开源版本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>
    

    然而,当我试图部署战争时,我得到了:

    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)
    

    那我能做什么呢?这看起来像是一个类路径问题,但这都是在玻璃鱼的深处。

    我还尝试将Glassfish中的Jersey组件更新为1.4,如前所述。 here 但是没有变化。

    2 回复  |  直到 14 年前
        1
  •  1
  •   bdoughan    14 年前

    从我的博客中查看以下示例,可能会有所帮助:

    我的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>
    
        2
  •  -1
  •   Michael Borgwardt    14 年前

    我自己找到了问题的原因。显然,如果将JAR文件部署为Web应用程序,即使显式选择类型,Glassfish也会非常困惑。我唯一要做的就是将文件后缀更改为war,它工作正常(一开始有一个不同的错误,但更容易找到解决方案)。