Uso de JAXB con Google Android

Necesito analizar los objetos java que se pasan a través de xml. Quiero utilizar para estos propósitos Marco JAXB, porque he pre-anotado (utilizando JAXB) java-class.

¿Es esto posible en principio?

InputStream input = entity.getContent(); JAXBContext jc = JAXBContext.newInstance(new Class[] {Response.LoginResponse.class}); Unmarshaller un = jc.createUnmarshaller(); LoginResponse response = (LoginResponse)un.unmarshal(input); 

En la línea 4, tengo una advertencia: "no se puede resolver el método estático 282 JAXBContext …" y, a continuación, se bloquea VM

¿Alguna idea sobre cómo resolver este problema?

No estoy solucionando exactamente tu problema, pero JAXB no está incluido en android por defecto y la biblioteca te costará 9 (!) MB de tu apk. Pruebe SimpleXML en su lugar. Tiene habilidades similares y mucho más ligero.

Tuve el mismo problema de querer usar un montón de clases JAXB en el proceso de analizar XML (y, para mí, JSON) las respuestas del servidor web.

Escribí una página wiki para Parsing XML y JSON en Android , que describe una solución para este problema y le guía paso a paso.

Para ser claro – te aconsejo usar JSON en lugar de XML en Android siempre que sea posible. Hay ventajas de rendimiento significativas para JSON .

Para resumir mi solución para el uso de clases JAXB para el análisis JSON y XML:

Terminé despojando todas las anotaciones y las importaciones javax.xml.* De las clases JAXB (algo más fácil que volver a anotar las clases para SimpleXML – además, también puede analizar las respuestas de 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 requeridas en la plataforma y se quejará si intenta incluir clases en el espacio de nombres javax.xml protegido como bibliotecas en su proyecto.

Anulé las anotaciones XML y las importaciones manualmente inicialmente, pero luego terminé automatizando el proceso a través de scripts de hormigas .

Por suerte, puede automatizar el proceso de modificación de la biblioteca XML. Escribí un post detallado sobre la modificación de las bibliotecas XML para Android (que contiene las referencias completas del tutorial) que describe cómo mover las clases relevantes a un nuevo espacio de nombres desprotegido mediante la utilidad Jar Jar Links .

Si quieres usar Jackson en Android, también he creado una versión modificada de los proyectos jackson-dataformat-android , aalto-xml , stax-api y stax2-api para Android que puedes sentirte libre de usar.

Aquí hay una muestra de lo que incluirías en tu 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> 

Consulte esta página para obtener más detalles al utilizar estas bibliotecas.

Puede descargar los archivos JAR de sus respectivos directorios aquí , si desea incluirlos directamente en su proyecto.

También puede consultar la aplicación de código abierto "SIRI REST Client" que utiliza estas bibliotecas para un ejemplo de trabajo.

EDITAR

Si está usando Gradle, su build.gradle serí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' ... } 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.