如何修复XmlMapper异常 - java.lang.VerifyError:com.fasterxml.jackson?

时间:2016-11-23 16:21:17

标签: android jackson fasterxml jackson-dataformat-xml xmlmapper

Android Studio 2.2.2
Compile SDK Android 7.1.1
Build Tools: 25.0.0
Gradle version: 2.14.1
Min SDK: 19
Target SDK: 25

我在尝试执行此操作时遇到jackson-dataformat-xml-2.8.5.jar的问题:

 JacksonXmlModule module = new JacksonXmlModule();
 ObjectMapper xmlMapper = new XmlMapper(); //This line

抛出以下异常

E/AndroidRuntime: FATAL EXCEPTION: Thread-418
              Process: cb.myAppName, PID: 29744
              java.lang.VerifyError: com/fasterxml/jackson/dataformat/xml/XmlFactory
                  at com.fasterxml.jackson.dataformat.xml.XmlMapper.<init>(XmlMapper.java:49)
                  at cb.myAppName.Core.GenerateReturnXMLFile(Core.java:863)
                  at cb.myAppName.RouteScreenActivity$4.run(RouteScreenActivity.java:305)
                  at java.lang.Thread.run(Thread.java:841)

根据我的研究,它与Jackson 1.3中引入的二进制不兼容性有关。正如Tatu Saloranta在他的旧博客中所说的那样遗憾地不再在线。

  

我一直非常重视兼容性,至少对于任何&#34;非   的β&#34;发布(1.0及以上)。结果,这个想法一直都是   1.x版本将比以前版本简单即插即用。这适用于补丁版本;但事实证明并非所有的小版本   这样做了。例如,版本1.2和1.3有一些   意外的不兼容性。

     

问题是这样的:虽然最常见的二进制兼容性是一个   比源兼容性更难的目标 - 也就是说,如果你破坏了源代码   兼容性,几乎可以保证打破二进制兼容性    - 严格来说并非如此。具体来说,很有可能进行某些源兼容的更改,但这些更改不是二进制的   兼容。

     

具体情况是更改返回的方法   没有(&#34; void方法&#34;)进入返回某些东西的方法   打破编译。但它确实打破了二进制兼容性。   UGH。

     

这正是当我决定它会很好的时候发生的事情   使ObjectMapper遵循&#34;流利&#34;模式,允许链接   配置方法调用。如果不是这样的话,那就太好了   &#34;隐藏&#34; API更改......

不太确定如何纠正这个问题,因为我对Android开发很新。

我已经确保全面使用相同版本的Jackson,正如您在我app/build.gradle的依赖列表中看到的那样,还有其他我可能会遗漏的东西吗?

dependencies {
    compile fileTree(include: ['*.jar'], exclude: ['com.symbol.emdk.jar'], dir: 'libs')
    compile files('../libs/json-20151123.jar')
    provided files('../libs/com.symbol.emdk.jar')
    compile files('../libs/slf4j-api-1.7.6.jar')
    compile files('../libs/logback-android-1.1.1-4.jar')
    compile files('../libs/sun.misc.BASE64Decoder.jar')
    compile files('../libs/ZSDK_ANDROID_API.jar')
    compile 'com.android.support:appcompat-v7:22.2.1'
    compile 'com.android.support:support-v7:22.2.0'
    compile 'com.google.code.ksoap2-android:ksoap2-android:3.6.0'
    compile 'com.google.code.gson:gson:2.4'
    compile 'org.apache.directory.studio:org.apache.commons.io:2.4'
    compile 'org.joda:joda-money:0.11'
    compile 'org.apache.directory.studio:org.apache.commons.lang:2.6'
    compile 'com.google.android.gms:play-services-appindexing:9.8.0'
    compile 'org.greenrobot:eventbus:3.0.0'
    compile 'com.fasterxml.jackson.core:jackson-core:2.8.5'
    compile 'com.fasterxml.jackson.core:jackson-databind:2.8.5'
    compile 'com.fasterxml.jackson.datatype:jackson-datatype-joda:2.8.5'
    compile 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.8.5'
    compile 'com.github.gcacace:signature-pad:1.2.0'
}

根据官方FasterXML Jackson github page,我应该支持使用的扩展程序......

  

XML:支持XML;提供流式传输和数据绑定   实现。类似于JAXB&#39; &#34;代码优先&#34;模式(不支持   &#34; XML Schema first&#34;,但可以使用JAXB bean)

     

https://github.com/FasterXML/jackson-dataformat-xml

此问题也在该项目的github页面上报告,但未找到真正的解决方案。 - github.com/FasterXML/jackson-dataformat-xml/issues/116

更新:我在以下依赖项上使用了jarjar

compile files('../libs/cb-joda-time-2.9.6.jar')
compile files('../libs/cb-joda-money-0.12.jar')
compile files('../libs/cb-jackson-dataformat-xml-2.8.5.jar')
compile files('../libs/cb-jackson-datatype-joda-2.8.5.jar')
compile files('../libs/cb-java-json-0.13.0.jar')
compile files('../libs/cb-json-20160212.jar')

还将每个依赖项升级到最新版本以及appcompatsupport api。

错误仍在继续 -

java.lang.VerifyError: cb/com/fasterxml/jackson/dataformat/xml/XmlFactory
                      at cb.com.fasterxml.jackson.dataformat.xml.XmlMapper.<init>(XmlMapper.java:49)

希望有人可以对此有所启发,不确定是什么导致了这一点...

1 个答案:

答案 0 :(得分:0)

经过用户aha的一些研究和提示后,我能够进一步确定如何纠正此问题。我没有时间对它进行测试,因为我最终采用了不同的路线并使用SimpleXML库而不是我需要做的事情。

当我开始测试时,我会更详细地更新这个答案,但是这里有一些方法可以尝试并纠正这个问题:

  • 包含Stax作为依赖项:github.com/FasterXML/jackson-dataformat-xml#android-quirks
  • 执行gradle dependencies。然后,Gradle将显示它用于编译和打包应用程序的实际依赖关系树。生成的依赖关系树可能与您声明的依赖关系不同,例如,因为传递依赖。 - 谢谢aha

这是github上的原始问题:github.com/FasterXML/jackson-dataformat-xml/issues/116