我正在使用Jersey客户机API实现一个使用JSON数据的REST客户机。我对JAXB没有太多的经验,尤其是没有结合JSON。我已经遵循了提供的示例
here
注册了一个JAXBContext。
当我使用
mvn exec:java
.
我使用maven程序集插件创建一个jar。当我使用这个JAR文件运行客户机时,JAXBContext似乎根本没有被使用。结果是:
“COM.Sun.JeSy.ApI.clit.clithANDLReExtExc:Java类Or.Digest.Mult.Actudio和Java类Or.Digest.Mult.Actudio和MIME媒体类型应用程序/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 {
...
}