【问题标题】:Jersey REST Exception java.lang.ArrayIndexOutOfBoundsException at org.objectweb.asm.ClassReader.readIntJersey REST 异常 java.lang.ArrayIndexOutOfBoundsException 在 org.objectweb.asm.ClassReader.readInt
【发布时间】:2013-11-20 13:08:46
【问题描述】:

我正在使用 Jersey 1.2 来使用 JDK1.5 构建 RESTful 服务

当我测试 REST 服务时,我遇到了以下异常。

java.lang.ArrayIndexOutOfBoundsException: 2884779 在 org.objectweb.asm.ClassReader.readInt(未知来源)在 org.objectweb.asm.ClassReader.accept(未知来源)在 org.objectweb.asm.ClassReader.accept(未知来源)在 com.sun.jersey.spi.scanning.AnnotationScannerListener.onProcess (AnnotationScannerListener.java:130) 在 com.sun.jersey.core.spi.scanning.uri.FileSchemeScanner 1 美元。 f(FileSchemeScanner.java:83) 在 com.sun.jersey.core.util.Closing.f(Closing.java:68)

我创建了一个简单的测试类

@Path("/employee")
public class TestRest {


    @GET
    @Produces( { MediaType.TEXT_HTML })
    public String getClichedMessage() {

        return "Hello Smith";
    }
}

我该如何解决这个问题?

我的 jar 版本

jersey-server-1.2.jar
jersey-core-1.2.jar
grizzly-servlet-webserver-1.9.18-i.jar
asm-3.1.jar
jsr311-api-1.1.jar

【问题讨论】:

  • 为什么选择JDK1.5?那是古老的。
  • @LutzHorn 对于遗留应用程序服务器之一,我们有 JDK1.5,因此选项有限。

标签: java rest jersey jdk1.5


【解决方案1】:

检查您的注释

  @POST
  @Produces(MediaType.TEXT_HTML) also try

也试试

您的类路径中的 asm.jar 版本不正确。确保:

您部署的 lib 文件夹包含与 target/app.war/WEB-INF/lib 相同的 jars

您没有两个版本的 asm.jar

你在 maven 中没有冲突的版本

【讨论】:

  • 你的意思是MediaType.TEXT_HTML,它没有帮助。
  • 去掉花括号
  • 嗯,你验证我是否有冲突的版本让我想到了冲突的 jar,并且有一个 spring mvc jar 导致了这个问题,即使我没有在这个项目中使用 Maven。我删除了所有不需要的和未使用的 jar,重新编译项目并再次测试,它按预期工作。谢谢你的建议。顺便说一句,@POST 与此无关,@GET 是必需的。
【解决方案2】:

我使用的是 apache server 8.5.59 并且遇到了同样的异常。 现在我转移到 apacher 服务器版本 8.5.12。

一切正常。

请查看 jar 详细信息

  • asm-3.1.jar
  • jersey-bundle-1.1.5.1.jar

JDK:祖鲁 8.36.0.2

Eclipse:Oxygen.2 版本 (4.7.2)

【讨论】:

    【解决方案3】:

    就我而言,我有这个代码

    @GET
    @Path("/get_something")
    @Produces(MediaType.APPLICATION_JSON)
    public Message<String> getSomething(@QueryParam("p_item") String p_item,  @QueryParam("p_items") List<String> p_items) throws Exception {
        ...
        p_items.forEach(s -> {
           try {
               // something that throws IOException 
           } catch (IOException e) {
               throw new RuntimeException(e);
           }
        });
        ...
    }
    

    在我将 forEach 更改为常规循环后,它起作用了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-23
      • 1970-01-01
      • 1970-01-01
      • 2015-07-26
      • 1970-01-01
      • 2015-03-12
      • 1970-01-01
      相关资源
      最近更新 更多