J'implémente un client de repos consommant des données json en utilisant l'API Jersey Client. Je n'ai pas vraiment beaucoup d'expérience avec JAXB, et surtout pas en combinaison avec JSON. J'ai suivi l'exemple fourni here et enregistré un JAXBContext.Client Jersey, JAXBContext utilisé lorsque l'application est exécutée avec Maven, mais pas avec java -jar
Tout fonctionne comme un charme quand j'exécute le projet en utilisant mvn exec:java
. J'utilise le plugin d'assemblage Maven pour créer un fichier JAR unique. Lorsque j'utilise ce fichier JAR pour exécuter le client le JAXBContext ne semble pas être utilisé du tout. Quels sont les résultats dans:
« com.sun.jersey.api.client.ClientHandlerException: Un lecteur de corps de message pour la classe Java org.digitest.model.Account et la classe Java de type org.digitest.model.Account, et MIME type de support application/json n'a pas été trouvé "
Est-ce que quelqu'un a une idée de ce que je fais de mal? Même des conseils vagues sur la façon de procéder au débogage seront grandement appréciés!
@Provider
public final class ModelJAXBContextResolver implements ContextResolver<JAXBContext> {
private final JAXBContext context;
private final Set<Class> types;
private final Class[] cTypes = {
Account.class, ...
};
public ModelJAXBContextResolver() throws Exception {
this.types = new HashSet(Arrays.asList(cTypes));
this.context = new JSONJAXBContext(JSONConfiguration.natural().build(), cTypes);
throw new Exception("Json context is loaded");
}
@Override
public JAXBContext getContext(Class<?> objectType) {
return (types.contains(objectType)) ? context : null;
}
}
installation du client:
DefaultApacheHttpClientConfig config = new DefaultApacheHttpClientConfig();
config.getProperties().put(DefaultApacheHttpClientConfig.PROPERTY_HANDLE_COOKIES, true);
config.getClasses().add(ModelJAXBContextResolver.class);
client = ApacheHttpClient.create(config);
compte:
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Account {
...
}