【问题标题】:Receiving java.lang.IncompatibleClassChangeError when Implementing JAX-RS service实现 JAX-RS 服务时收到 java.lang.IncompatibleClassChangeError
【发布时间】:2017-04-26 17:31:58
【问题描述】:

我已经接管了具有以下规范的 Web 应用程序的开发和支持:

  • Java SE 1.6
  • 雄猫 6
  • 球衣 1.7

编辑 我正在使用 eclipse 并使用 eclipse 运行项目。不确定这是否会有所作为。

编辑 道歉。我使用的是球衣 1.17.1 而不是球衣 1.7

此时我没有使用 Maven。我的新服务的 web.xml 条目是

  <servlet>
    <servlet-name>RESTService</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.gy.restservices</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>RESTService</servlet-name>
    <url-pattern>/api/*</url-pattern>
  </servlet-mapping>

应用程序启动得很好,但是当我调用我收到的服务时

org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Allocate exception for servlet RESTService
java.lang.IncompatibleClassChangeError: Implementing class
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at java.security.SecureClassLoader.defineClass(Unknown Source)
    at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2946)
    at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1177)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1665)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1544)
    at com.sun.jersey.api.core.ScanningResourceConfig.init(ScanningResourceConfig.java:79)
    at com.sun.jersey.api.core.PackagesResourceConfig.init(PackagesResourceConfig.java:104)
    at com.sun.jersey.api.core.PackagesResourceConfig.<init>(PackagesResourceConfig.java:78)
    at com.sun.jersey.api.core.PackagesResourceConfig.<init>(PackagesResourceConfig.java:89)
    at com.sun.jersey.spi.container.servlet.WebComponent.createResourceConfig(WebComponent.java:696)
    at com.sun.jersey.spi.container.servlet.WebComponent.createResourceConfig(WebComponent.java:674)
    at com.sun.jersey.spi.container.servlet.WebComponent.init(WebComponent.java:203)
    at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:374)
    at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:557)
    at javax.servlet.GenericServlet.init(GenericServlet.java:270)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1213)
    at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:827)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:129)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:610)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:503)
    at java.lang.Thread.run(Unknown Source)

我不确定是什么导致了这个问题。

我查看了this SO question,但它与部署到谷歌应用引擎有关。

【问题讨论】:

  • 来自its docs:“当某个类定义发生不兼容的类更改时抛出。当前执行方法所依赖的某个类的定义已经更改。”这可能是因为您的应用程序中的类不匹配(通过执行干净的构建来解决),但也可能是由于服务器组件或第三方库不匹配(通过部署兼容的组件组合来解决)。
  • @JohnBollinger 在进行了几次彻底的清理、项目构建等之后,我仍然收到同样的错误。

标签: java tomcat6 jersey-1.0


【解决方案1】:

嗯。这个解决了。我从 jersey-bundle-1.17.1.jar 更改为 jersey-bundle-1.19.1.jar,现在我的 REST 服务正在运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-13
    • 1970-01-01
    • 1970-01-01
    • 2016-11-01
    • 2018-03-04
    • 1970-01-01
    • 2011-10-29
    • 1970-01-01
    相关资源
    最近更新 更多