У меня была такая же проблема: я хотел использовать кучу классов JAXB в процессе анализа ответов веб-сервера XML (и, для меня, JSON).
Я написал вики-страницу для Разбор XML и JSON на Android , в котором описывается решение этой проблемы и пошаговые инструкции.
Для ясности - я бы советовал использовать JSON вместо XML на Android всякий раз, когдавозможный.У JSON существенные преимущества в производительности *.
Подводя итог моему решению об использовании классов JAXB для синтаксического анализа JSON и XML:
В итоге я удалил все аннотации и javax.xml.*
импортирует из классов JAXB (немного проще, чем повторное аннотирование классов для SimpleXML - плюс, вы также можете анализировать ответы JSON) для создания настоящих POJO, а затем используйте Jackson с модифицированными версиями библиотек XML, которые Джексонзависит от.
Модификация библиотек XML необходима, потому что Android не включает в платформу обязательные классы XML, и он будет жаловаться , если вы попытаетесь включить классы в защищенное пространство имен javax.xmlкак библиотеки в вашем проекте.
Сначала я удалил аннотации XML и импортировал их вручную, но затем закончил , автоматизируя процесс с помощью скриптов ant .
К счастью, вы можете автоматизироватьпроцесс модификации библиотеки XML.Я написал подробный пост о Модификации библиотек XML для Android (на который ссылается полный учебник), в котором описано, как переместить соответствующие классы в новое незащищенное пространство имен с помощью утилиты Jar Jar Links .
Если вы хотите использовать Jackson на Android, я также создал модифицированную версию проектов jackson-dataformat-android
, aalto-xml
, stax-api
и stax2-api
для Android, которую вы можете свободно использовать.использовать.
Вот пример того, что вы бы включили в pom.xml
, чтобы включить зависимости через Maven:
<dependencies>
<!-- Using Jackson for parsing -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.1.2</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.1.2</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.1.2</version>
</dependency>
<!-- XML parsing -->
<!-- So many problems with XML and Android...
Below XML libraries have been modified using JarJar
and are NOT the same as their J2SE counterparts,
hence the added "-android" to the artifactId
See:
https://github.com/CUTR-at-USF/SiriRestClient/wiki/Modifying-XML-libraries-for-Android
-->
<dependency>
<groupId>edu.usf.cutr.android.xml</groupId>
<artifactId>jackson-dataformat-xml-android</artifactId>
<version>2.1.2</version>
</dependency>
<dependency>
<groupId>edu.usf.cutr.android.xml</groupId>
<artifactId>stax2-api-android</artifactId>
<version>3.1.1</version>
</dependency>
<dependency>
<groupId>edu.usf.cutr.android.xml</groupId>
<artifactId>stax-api-android</artifactId>
<version>1.0-2</version>
</dependency>
<dependency>
<groupId>edu.usf.cutr.android.xml</groupId>
<artifactId>aalto-xml-android</artifactId>
<version>0.9.8</version>
</dependency>
</dependencies>
<repositories>
<!-- CUTR Android XML libraries Releases -->
<repository>
<id>cutr-releases</id>
<url>https://github.com/CUTR-at-USF/cutr-mvn-repo/raw/master/releases</url>
</repository>
</repositories>
См. эту страницу для получения более подробной информации об этих библиотеках..
Вы можете загрузить файлы JAR из соответствующих каталогов здесь , если хотите включить их непосредственно в свой проект.
Вы также можете проверить открытыеsource Приложение «SIRI REST Client» , которое использует эти библиотеки для рабочего примера.
EDIT
Если вы используете Gradle, ваш build.gradle
будет выглядеть так:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.9.+'
}
}
apply plugin: 'android'
repositories {
mavenCentral()
maven {
// CUTR SNAPSHOTs
url "https://github.com/CUTR-at-USF/cutr-mvn-repo/raw/master/snapshots"
}
maven {
// CUTR Releases
url "https://github.com/CUTR-at-USF/cutr-mvn-repo/raw/master/releases"
}
}
android {
compileSdkVersion 19
buildToolsVersion "19.0.1"
...
}
dependencies {
...
// Normal Jackson libraries
compile 'com.fasterxml.jackson.core:jackson-core:2.1.2'
compile 'com.fasterxml.jackson.core:jackson-annotations:2.1.2'
compile 'com.fasterxml.jackson.core:jackson-databind:2.1.2'
// Repackaged XML-specific libraries
compile 'edu.usf.cutr.android.xml:jackson-dataformat-xml-android:2.1.2'
compile 'edu.usf.cutr.android.xml:stax2-api-android:3.1.1'
compile 'edu.usf.cutr.android.xml:stax-api-android:1.0-2'
compile 'edu.usf.cutr.android.xml:aalto-xml-android:0.9.8'
...
}