在 glassfish 中加载 restful webapp 时如何解决 IllegalStateException?

How to solve IllegalStateException while loading the restful webapp in glassfish?

我正在尝试使用 this link 创建一个基本的 Hello world 应用程序。

我已经按照要求创建了所有内容,但出现以下错误:

Exception while loading the app : java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: org.apache.catalina.LifecycleException: java.lang.NoSuchMethodError: com.sun.research.ws.wadl.Response.getRepresentationOrFault()Ljava/util/Lis

我的web.xml

<web-app id="WebApp_ID" version="2.4"
         xmlns="http://java.sun.com/xml/ns/j2ee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
        http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    <display-name>Restful Web Application</display-name>

    <servlet>
        <servlet-name>jersey-serlvet</servlet-name>
        <servlet-class>
            com.sun.jersey.spi.container.servlet.ServletContainer
        </servlet-class>
        <init-param>
            <param-name>com.sun.jersey.config.property.packages</param-name>
            <param-value>com</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>jersey-serlvet</servlet-name>
        <url-pattern>/rest/*</url-pattern>
    </servlet-mapping>

</web-app>

java.lang.NoSuchMethodError 只有在 运行 时才会发生错误,如果 class 的定义不兼容改变了。

我可以看到,您已经使用 Jersey 1.8 编译了您的代码并在 Glassfish 4.1.1 上部署了您的 webapp。

并且,根据 oracle official blog 之一,Glassfish 4.1.1Jersey 2.2.

因此,球衣版本不匹配(使用 Jersey 1.8 编译,但 Glassfish 使用 Jersey 2.2)。因此,您在 运行 时收到此异常。

可能的解决方案是更改您的代码以支持 jersey 2.2(当然也替换库)