Tengo un servicio web de descanso realmente simple que devuelve una lista de preguntas. Este código funciona como se espera cuando la cantidad de preguntas devueltas es mayor que cero. Pero si el servidor devuelve una matriz json vacía como [], JAXB crea una lista con una instancia de pregunta donde todos los campos están configurados como nulos.Jersey/JAXB: Desasignación de la matriz json vacía da como resultado una lista con un elemento donde todos los campos están definidos como nulos
Soy nuevo en Jersey y JAXB, así que no sé si no lo he configurado correctamente o si este es un problema conocido. ¿Algun consejo?
configuración del cliente:
DefaultApacheHttpClientConfig config = new DefaultApacheHttpClientConfig();
config.getProperties().put(DefaultApacheHttpClientConfig.PROPERTY_HANDLE_COOKIES, true);
config.getClasses().add(JAXBContextResolver.class);
//config.getClasses().add(JacksonJsonProvider.class); // <- Jackson causes other problems
client = ApacheHttpClient.create(config);
JAXBContextResolver:
@Provider
public final class JAXBContextResolver implements ContextResolver<JAXBContext> {
private final JAXBContext context;
private final Set<Class> types;
private final Class[] cTypes = { Question.class };
public JAXBContextResolver() throws Exception {
this.types = new HashSet(Arrays.asList(cTypes));
this.context = new JSONJAXBContext(JSONConfiguration.natural().build(), cTypes);
}
@Override
public JAXBContext getContext(Class<?> objectType) {
return (types.contains(objectType)) ? context : null;
}
}
El código de cliente:
public List<Question> getQuestionsByGroupId(int id) {
return digiRest.path("https://stackoverflow.com/questions/byGroupId/" + id).get(new GenericType<List<Question>>() {});
}
La clase de pregunta es sólo un POJO simple.
problema similar aquí. Resuelto (pero hacky): http://stackoverflow.com/questions/4197817 –