Клиент Джерси, JAXBContext используется, когда приложение выполняется с Maven, но не с java -jar

Я реализую клиент для отдыха, использующий данные 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 {
    ...
}

person Kimble    schedule 02.08.2010    source источник


Ответы (1)


Ну наконец то! Это, наверное, самая раздражающая вещь, с которой мне приходилось сталкиваться в этом году!

Добавление версии 1.4-SNAPSHOT зависимостей трикотажа решило эту проблему.

    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-bundle</artifactId>
        <version>1.4-SNAPSHOT</version>
    </dependency>
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-json</artifactId>
        <version>1.4-SNAPSHOT</version>
    </dependency>
    <dependency>
        <groupId>com.sun.jersey.contribs</groupId>
        <artifactId>jersey-apache-client</artifactId>
        <version>1.4-SNAPSHOT</version>
    </dependency>
    <dependency>
        <groupId>com.sun.xml.bind</groupId>
        <artifactId>jaxb-impl</artifactId>
        <version>2.2.2-SNAPSHOT</version>
    </dependency>
person Kimble    schedule 02.08.2010