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. Как заявил Тату Салоранта в своем старом блоге, которого, к сожалению, больше нет в сети.
Я всегда высоко ценил совместимость, по крайней мере, для любого «не бета-тестирования» (1.0 и выше). В результате идея заключалась в том, что любой выпуск 1.x будет простым plug-and-play по сравнению с предыдущим. Это работает для выпусков исправлений; но оказывается, что не все минорные релизы работали таким образом. Например, версии 1.2 и 1.3 имеют неожиданные несовместимости.
Проблема в следующем: хотя чаще всего бинарная совместимость является более сложной задачей, чем совместимость исходного кода, то есть, если вы нарушаете совместимость исходного кода, вы почти гарантированно нарушаете бинарную совместимость, это не совсем так. В частности, вполне возможно внести определенные изменения, совместимые с исходным кодом, но НЕ совместимые с двоичными файлами.
Конкретным случаем является изменение метода, который ничего не возвращает ("недействительный метод"), на метод, который что-то возвращает, не нарушает компиляцию. Но на самом деле это нарушает двоичную совместимость. ФУ.
И это именно то, что произошло, когда я решил, что было бы неплохо заставить ObjectMapper следовать «плавному» шаблону, чтобы обеспечить цепочку вызовов методов конфигурации. Это было бы неплохо, если бы не это "скрытое" изменение API...
Не совсем уверен, как это исправить, поскольку я новичок в разработке Android.
Я уже убедился, что использую одну и ту же версию Джексона по всем направлениям, как вы можете видеть в моем списке зависимостей от 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, расширение, которое я использую, должно поддерживаться...
XML: поддерживает XML; обеспечивает реализацию как потоковой передачи, так и привязки данных. Аналогично режиму JAXB "сначала код" (нет поддержки "сначала схема XML", но можно использовать bean-компоненты JAXB)
Об этой проблеме также сообщалось на странице проекта на 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')
Также обновлены все зависимости до последней версии, а также мои appcompat
и support
API.
Ошибка продолжается -
java.lang.VerifyError: cb/com/fasterxml/jackson/dataformat/xml/XmlFactory
at cb.com.fasterxml.jackson.dataformat.xml.XmlMapper.<init>(XmlMapper.java:49)
Надеюсь, кто-то может пролить свет на это, не уверен, что вызывает это...
gradle dependencies
. Затем Gradle отобразит фактическое дерево зависимостей, которое он использовал для компиляции и упаковки вашего приложения. Сгенерированное дерево зависимостей может отличаться от объявленных вами зависимостей, например. из-за транзитивных зависимостей. Также: Почему вы используете jarjar? - person aha   schedule 30.11.2016jarjar
; просто пробовал все... Не имело значения. Я закончил тем, что пошел с альтернативной библиотекой. Я попробую то, что вы рекомендовали на моей другой ветке. - person Dayan   schedule 30.11.2016jackson-xml
--simple-xml
был моим следующим выбором и отлично работает. - person Dayan   schedule 01.12.2016