我正在使用Jersey Client API實現使用JSON數據的其餘客戶端。我對JAXB並沒有太多的經驗,特別是與JSON的結合。我按照提供的示例here註冊了JAXBContext。Jersey客戶端,使用Maven執行應用程序時使用的JAXBContext,但不使用java -jar
當我使用mvn exec:java
執行項目時,一切都很有魅力。
我使用Maven assembly插件創建單個JAR。當我使用這個JAR文件運行客戶端時,JAXBContext看起來並沒有被使用。這會導致:
「com.sun.jersey.api.client.ClientHandlerException:消息正文閱讀器的Java類org.digitest.model.Account和Java類型的類org.digitest.model.Account,和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 {
...
}