java - cglib 在 Intuit 合作伙伴平台 Java SDK 中生成查询期间导致 java.lang.VerifyError

标签 java google-app-engine intuit-partner-platform quickbooks-online cglib

我不知道是什么导致了这个错误。

我正在使用 Intuit 的 Java v3 SDK for QuickBooks Online (QBO),并且我正在尝试运行对 TimeActivity 对象的查询。为此,我必须生成一个查询实体。

我的代码在这一行失败了:

TimeActivity queryTimeActivity = GenerateQuery.createQueryEntity(TimeActivity.class);

堆栈跟踪从该行开始,如下所示:

java.lang.VerifyError: class net.sf.cglib.core.DebuggingClassWriter overrides final method visit.(IILjava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)V
    at com.google.appengine.runtime.Request.process-4da1515b5814ac28(Request.java)
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:795)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
    at sun.reflect.GeneratedMethodAccessor5.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:360)
    at net.sf.cglib.core.AbstractClassGenerator.<init>(AbstractClassGenerator.java:38)
    at net.sf.cglib.core.KeyFactory$Generator.<init>(KeyFactory.java:127)
    at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:112)
    at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:108)
    at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:104)
    at net.sf.cglib.proxy.Enhancer.<clinit>(Enhancer.java:69)
    at com.intuit.ipp.query.GenerateQuery.createQueryEntity(GenerateQuery.java:56)

我应该提一下,此代码位于 Google App Engine 应用程序中。我对这个错误做了一些谷歌搜索,发现很多人建议从构建路径中删除库“cglib”和“asm”。我找不到“cglib”,但我尝试删除“asm-4.0.jar”,但当我尝试删除时,Google App Engine 提示道。更具体地说,应用程序已部署,但当我删除 asm.jar 时,相关行从未运行。

有人有什么想法吗?我无法让我的代码超出上述行。

最佳答案

请注意,在调用 cglib 的 <clinit> 的静态初始化器 ( Enhancer ) 期间抛出异常。类(class)。 Cglib 在内部使用 ASM,您的类路径中的 cglib 和 ASM 版本似乎不匹配。

根据错误,我认为 Intuit 使用的是依赖于 ASM 3.1 的 cglib 2.2。在 this version , ClassWriter没有将其方法声明为 final .这在 ASM 4 中发生了变化这样就无法加载 cglib,因为它现在覆盖了这些 final方法。

你可以做的是

  1. 从类路径中删除 ASM 4 但添加 ASM 3。请参阅 POM 了解 cglib 2.2.2 需要 ASM 3.1.1 的事实。 .
  2. 将 cglib 3.1 显式添加到与 ASM 4 一起使用的类路径中。但这可能会破坏使用 cglib 的应用程序。

通常,使用 ASM 的库应该将后者打包在不同的包下以避免 zhis 问题,如 ASM 的 FAQ 中所述. Intuit 的作者似乎错过了这一点。

最后,请注意它提到了 here GAE 仅部分支持 cglib 2.2。

关于java - cglib 在 Intuit 合作伙伴平台 Java SDK 中生成查询期间导致 java.lang.VerifyError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21059019/

相关文章:

java - Grails Spock - 从服务抛出异常 UndeclaredThrowableException

google-app-engine - 更新后谷歌云端点回调

quickbooks - 在哪里可以找到 QuickBooks 在线应用程序的 RealM ID

java - 访问二维数组中的对象中的方法时出现 NullPointerException

java - 在 Java 中使用统一成本搜索的图形浏览

python - 检查 App Engine 数据存储区中是否存在记录

c# - 从 C# 在 Quickbooks Online 中创建客户

java - DataService 类的 findAll 方法仅返回 100 个实体

java - 添加通配符时,方法不适用于参数

python - 在gae ndb中,是否有类似于关系数据库中的级联删除的功能?