Tuve el mismo problema de querer utilizar un grupo de clases JAXB en el proceso de analizar las respuestas del servidor web XML (y, para mí, JSON).
Escribí una página wiki para Parsing XML and JSON on Android, que describe una solución para este problema y lo guía paso a paso.
Para ser claros, aconsejaría utilizar JSON en lugar de XML en Android siempre que sea posible. Hay significant performance advantages for JSON.
Para resumir mi solución para el uso de clases JAXB tanto para JSON y análisis XML:
terminé separando todas las anotaciones y javax.xml.*
importaciones de las clases JAXB (un poco más fácil que las clases de re-de anotación para SimpleXML - plus, también puede analizar respuestas JSON) para crear POJOs verdaderos, y luego usar Jackson con versiones modificadas de las bibliotecas XML de las que depende Jackson.
La modificación de las bibliotecas XML es necesaria porque Android no incluye las clases XML necesarias en la plataforma, y será complain si intenta incluir clases en el espacio de nombres javax.xml protegido como bibliotecas en su proyecto.
Quité las anotaciones XML e importé manualmente al principio, pero luego terminé en automating the process via ant scripts.
Afortunadamente, puede automatizar el proceso de modificación de la biblioteca XML. Escribí una publicación detallada en Modifying XML libraries for Android (que contiene todas las referencias del tutorial) que describe cómo mover las clases relevantes a un nuevo espacio de nombres sin protección usando el Jar Jar Links utility.
Si desea utilizar Jackson en Android, también hemos creado una versión modificada de los jackson-dataformat-android
, aalto-xml
, stax-api
y stax2-api
proyectos para Android que se puede sentir libre de utilizar.
He aquí una muestra de lo que cabría incluir en su pom.xml
para incluir las dependencias a través de 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>
Ver this page para más detalles usando estas bibliotecas.
Puede descargar los archivos JAR de sus respectivos directorios here, si desea incluirlos directamente en su proyecto.
También puede consultar el código abierto "SIRI REST Client" app que utiliza estas bibliotecas para un ejemplo de trabajo.
EDITAR
Si está utilizando Gradle, su build.gradle
se vería así:
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'
...
}
he vuelto a empaquetar JAXB. Ver [este blog] (http://www.docx4java.org/blog/2012/05/jaxb-can-be-made-to-run-on-android/) para más detalles. – JasonPlutext