Ho un semplice servizio web di restituzione che restituisce un elenco di domande. Questo codice funziona come previsto quando il numero di domande restituite è maggiore di zero. Ma se il server restituisce un array json vuoto come [], JAXB crea un elenco con un'istanza di domanda in cui tutti i campi sono impostati su null!Jersey/JAXB: Unmarshalling di array json vuoto restituisce un elenco con un elemento in cui tutti i campi sono impostati su null
Sono nuovo sia per Jersey che per JAXB, quindi non so se non l'ho configurato correttamente o se si tratta di un problema noto. Qualche consiglio?
configurazione del client:
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;
}
}
Codice cliente:
public List<Question> getQuestionsByGroupId(int id) {
return digiRest.path("https://stackoverflow.com/questions/byGroupId/" + id).get(new GenericType<List<Question>>() {});
}
La classe questione è solo un semplice POJO.
problema simile qui. Risolto (ma hacky): http://stackoverflow.com/questions/4197817 –