java.lang.VerifyError 在检索关联实体时。 (仅当这是 运行 作为 maven 执行的一部分时才会发生)

java.lang.VerifyError while retrieving associated entities. (Happens only when this is run as part of a maven execution)

我们有这样的代码。

HeaderCDSForPRForGuidedBuying requisitionHeader =  readHeaderInternal(draftUUID);

try {
  requisitionHeaderAddress = requisitionHeader.getGuidedProcmtReqnDelivAddrOrFetch();
} catch (NullPointerException ex) {
  logger.error("Exception occurred: No Address is associated with the requisition header", ex);
}

可以看出,我们首先获取一个实体(header),然后是关联的实体(DeliveryAddress), 虽然这段代码在应用程序或 eclipse 中正常工作,但它在 运行 作为 maven 执行的一部分时中断。我们有 运行 与 Maven 的集成测试,所以它对我们来说失败了。错误是这样的。

java.lang.VerifyError: 堆栈映射与异常处理程序 275 处的映射不匹配 异常详细信息: 地点: com/sap/cloud/sdk/odatav2/connectivity/internal/ODataExceptionInternalResultHandler.createError(Ljava/lang/String;Ljava/lang/Object;I)Lcom/sap/cloud/sdk/odatav2/connectivity/internal/ODataExceptionInternal; @275: 商店 原因: 类型 'org/json/JSONException'(当前帧,堆栈 [0])不可分配给 'java/lang/RuntimeException'(堆栈映射,堆栈 [0]) 当前帧: bci: @42 标志:{} locals: { 'com/sap/cloud/sdk/odatav2/connectivity/internal/ODataExceptionInternalResultHandler', 'java/lang/String', 'java/lang/Object', 整数, 整数, 'com/sap/cloud/sdk/odatav2/connectivity/internal/ODataExceptionInternal', 'java/lang/String', 'org/apache/http/HttpResponse', 'java/lang/String', ' [Lorg/apache/http/Header;' } 堆栈:{'org/json/JSONException'} 堆栈图框架: bci: @275 标志:{} locals: { 'com/sap/cloud/sdk/odatav2/connectivity/internal/ODataExceptionInternalResultHandler', 'java/lang/String', 'java/lang/Object', 整数, 整数, 'com/sap/cloud/sdk/odatav2/connectivity/internal/ODataExceptionInternal', 'java/lang/String', 'org/apache/http/HttpResponse', 'java/lang/String', ' [Lorg/apache/http/Header;' } 堆栈:{ 'java/lang/RuntimeException' }

https://github.com/Wikidata/Wikidata-Toolkit/issues/58 报告了同样的问题。 我相信 link.

中也提到了修复

请修复它,以便我们可以 运行 我们的 Maven 测试没有任何错误。

谢谢, 萨钦

正如 Christoph Schubert 指出的那样,该错误是由依赖关系冲突引起的。引用他的评论:

Both org.json:json and com.vaadin.external.google:android-json provide a org.json.JSONException. The first library has one extending RuntimeException while the latter provides a checked Exception.

我能想到的唯一解决方案是排除依赖关系树中的两个库之一。