首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何修复XmlMapper异常- java.lang.VerifyError: com.fasterxml.jackson?

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

Stack Overflow用户
提问于 2016-11-23 16:21:17
回答 1查看 3.2K关注 0票数 1
代码语言:javascript
复制
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的问题:

代码语言:javascript
复制
 JacksonXmlModule module = new JacksonXmlModule();
 ObjectMapper xmlMapper = new XmlMapper(); //This line

引发以下异常

代码语言:javascript
复制
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)

据我所研究,这与杰克逊1.3中引入的二进制不兼容有关。正如塔图·萨罗兰塔在他的旧博客中所说的那样,可悲的是,它已经不再在线了。

我一直非常重视兼容性,至少对于任何“非beta”版本(1.0和更高版本)都是如此。因此,我们的想法是,任何1.x版本都是简单的即插即用。这确实适用于补丁版本;但事实证明,并不是所有次要版本都是这样工作的。例如,1.2和1.3版本有一些意想不到的不兼容性。 问题是:尽管最常见的二进制兼容性比源代码兼容性更难实现--也就是说,如果破坏源代码兼容性,几乎可以保证破坏二进制兼容性--但严格来说并不是这样。具体来说,很有可能进行某些源代码兼容的更改,但这些更改并不是二进制兼容的。 具体的例子是将不返回任何内容的方法("void“)更改为返回不中断编译的方法。但它实际上破坏了二进制兼容性。啊啊。 这正是我决定让ObjectMapper遵循"fluent“模式,允许对配置方法调用进行链接时所发生的事情。如果不是这个“隐藏的”API改变的话,那就太好了.

不过,我不太清楚该如何纠正这个问题,因为我对android的开发还很陌生。

我已经确保全面使用杰克逊的相同版本,正如您在我的app/build.gradle依赖项列表中所看到的那样,还有什么可能是我遗漏的吗?

代码语言:javascript
复制
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页面,我使用的扩展应该被支持.

XML:支持XML;提供流和数据库实现。类似于JAXB的“代码优先”模式(不支持"XML优先“,但可以使用JAXB) https://github.com/FasterXML/jackson-dataformat-xml

该项目的github页面也报告了这一问题,但没有找到真正的解决办法。-- github.com/FasterXML/jackson-dataformat-xml/issues/116

UPDATE:我对以下依赖项使用了jarjar

代码语言:javascript
复制
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。

错误还在继续-

代码语言:javascript
复制
java.lang.VerifyError: cb/com/fasterxml/jackson/dataformat/xml/XmlFactory
                      at cb.com.fasterxml.jackson.dataformat.xml.XmlMapper.<init>(XmlMapper.java:49)

希望有人能照亮这件事,不知道是什么导致了这一切.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-05 13:47:00

经过用户啊哈的一些研究和提示,我能够进一步确定如何纠正这一问题。我没有时间对它进行测试,因为我最终选择了不同的路径,转而使用了SimpleXML库,这对我需要做的工作非常有用。

当我进行测试时,我将用更多的细节更新这个答案,但是下面是一些尝试和纠正这个问题的方法:

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40769450

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档