Я реализую клиент для отдыха, использующий данные json, используя API клиента Джерси. У меня нет большого опыта работы с JAXB, особенно в сочетании с JSON. Я следовал примеру, представленному здесь, и зарегистрировал JAXBContext.
Все работает как шарм, когда я запускаю проект, используя mvn exec:java.
Я использую плагин сборки Maven для создания одного JAR. Когда я использую этот файл JAR для запуска клиента, JAXBContext, похоже, вообще не используется. Что приводит к:
"com.sun.jersey.api.client.ClientHandlerException: средство чтения тела сообщения для класса Java org.digitest.model.Account, класса типа Java org.digitest.model.Account и типа медиафайлов MIME application/json. не найдено"
Кто-нибудь знает, когда я могу поступать неправильно? Мы будем очень признательны даже за расплывчатые советы о том, как приступить к отладке!
@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;
}
}
Настройка клиента:
DefaultApacheHttpClientConfig config = new DefaultApacheHttpClientConfig();
config.getProperties().put(DefaultApacheHttpClientConfig.PROPERTY_HANDLE_COOKIES, true);
config.getClasses().add(ModelJAXBContextResolver.class);
client = ApacheHttpClient.create(config);
Счет:
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Account {
...
}