Jersey客户端,JAXBContext在使用Maven执行应用程序时使用,但不使用java -jar

时间:2010-08-02 11:42:03

标签: java json jaxb jersey

我正在使用Jersey Client API实现一个使用json数据的rest客户端。我对JAXB没有多少经验,特别是没有与JSON结合使用。我已经按照here提供的示例并注册了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 {
    ...
}

1 个答案:

答案 0 :(得分:3)

最后!这可能是我今年必须应付的最烦人的事情!

添加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>