2011-12-20 6 views
6

Mi código es:Conseguir NullPointException con Jersey RESTO cliente en Android

Client client = Client.create(); 
    WebResource web_resource = client.resource("http://www.myhostname.com/"); 
    // String string = web_resource.path("foo").accept("text/xml").get(String.class); 
    // Log.d(getClass().getCanonicalName(), "jax-rs client string = " + string); 
    Num num = web_resource.path("foo").accept(MediaType.TEXT_XML_TYPE).get(Num.class); 

La última línea hace que el problema, y ​​me da un problema similar si reemplazo con el 2 comentó líneas con la diferencia de que llegue la excepción en una línea diferente de MediaType.java.

E/AndroidRuntime( 840): Caused by: java.lang.NullPointerException 
E/AndroidRuntime( 840): at javax.ws.rs.core.MediaType.toString(MediaType.java:265) 
E/AndroidRuntime( 840): at com.sun.jersey.api.client.ClientRequest.getHeaderValue(ClientRequest.java:232) 
E/AndroidRuntime( 840): at com.sun.jersey.client.urlconnection.URLConnectionClientHandler.writeOutBoundHeaders(URLConnectionClientHandler.java:276) 
E/AndroidRuntime( 840): at com.sun.jersey.client.urlconnection.URLConnectionClientHandler._invoke(URLConnectionClientHandler.java:197) 
E/AndroidRuntime( 840): at com.sun.jersey.client.urlconnection.URLConnectionClientHandler.handle(URLConnectionClientHandler.java:147) 
E/AndroidRuntime( 840): ... 17 more 

Jersey-client.jar y Jersey-core.jar se han añadido al paquete en el nivel superior y se han añadido a las bibliotecas en la ruta de compilación.

AndroidManifest.xml contiene:

<uses-permission android:name="android.permission.INTERNET" /> 
+0

sigue buscando respuesta. – necromancer

+0

me gustaría ver el código modificado, ¿alguna actualización? –

+0

@Sponge, lo siento, estoy en una pista diferente y pasarán semanas antes de que haga algo relacionado con Android. No usé control de código y el código está en varios directorios separados. Puedo hacerlo si me lo recuerda dentro de una semana, pero mientras tanto, considere: (1) el cargador de clases android no puede leer las anotaciones a nivel de paquetes que evitan que JAXB se inicialice; se puede arreglar con escaneo manual; esa fue la clave que recuerdo; (2) las clases y sus llamadas tuvieron que ser reubicadas en diferentes paquetes porque javax está restringido; (3) el resultado fue un archivo jar bastante grande que podría no funcionar para la distribución. – necromancer

Respuesta

3

Esto fue un gran ejercicio. Creo que podría ser la única persona que ha conseguido que Jersey + JAXB trabaje en Android. Una respuesta específica no será de ayuda porque después de superar esta NullPointerException obtuve otra excepción, y luego otra.

Tuve que cambiar el código fuente de Jersey y JAXB para que esto sucediera. Y también tuve que volver a empaquetar los frascos.

Lo siento, sé que esta es una respuesta de mala calidad, pero por favor coménteme si alguien realmente quiere pasar por este difícil camino en cuyo caso puedo volver sobre mis pasos y ayudar.

+0

¿Por qué no contribuyes con el código a Jersey?Mucha gente estaría muy feliz :) –

+0

Intentaré hacerlo cuando regrese a esta pista de desarrollo (tendré que volver a entender e identificar/documentar brevemente las actualizaciones correctas). Me estoy desviando de otra cosa por ahora. Gracias por la sugerencia :) – necromancer

+0

Eso es realmente un gran nigromante Estoy atrapado en el mismo punto ... ¿me puedes ayudar? con este nombre, supongo que eres dota o ventilador del trono congelado –

1

tuve mismo problema con el jersey. Cambié a Google Gson y todo salió bien.

+0

Muchas gracias por informarme sobre su solución. Estoy tratando de cumplir con la norma antes de renunciar por completo y cambiar a un no- biblioteca estándar. Me doy cuenta de que en Android puede que no haya otra manera, pero quiero estar totalmente seguro antes de cambiar. – necromancer

+0

oh, por favor devuelve la pregunta si también estarías interesado en la resolución. – necromancer

+0

¿Por qué Jersey es más estándar que Gson? – Kevin

Cuestiones relacionadas