我有一个装有DTO模型的罐子。
我希望这些类(标记为@XmlRootElement)可用于Jersey 1 HTTP客户端。我的初始化代码是:

ClientConfig cc = new DefaultClientConfig(MyContextResolver.class);
Client client = Client.create(cc);


MyContextResolver(实现ContextResolver<JAXBContext>)中,我尝试过:

jaxbContext = JAXBContext.newInstance(Class1.class, Class2.class);


它可以工作,但不是动态的(我必须手动添加类,一个接一个)。

I also used Spring and it worked,但是我想要一个Spring免费的解决方案。

有更好的解决方案吗?一种会自动扫描jar中的所有类并将其添加到上下文中的类吗?谢谢。

最佳答案

您是否有一个原因想要拥有一个可以同时处理所有类的上下文?如果名称冲突,您将冒着例外的危险。

为什么不简单地拥有一个像以下内容的ContextResolver:

Map<Class,JAXBContect> cache = new ConcurrentHashMap<>();
getContext(Class<?> type) {
 JAXBContect  context = cache.get(type);
 if (context ==  null) }
    context = JAXBContext.newInstance(type);
    cache.put(type,context);
 }
 return context;
}


JAXB将解决必要的类依赖关系(唯一的问题是子类,但是应该在父类中将其标记为@XMLSeeAlso)。

唯一的潜在问题是,您将在运行时而不是启动期间发现任何JAXB问题。但是同时,任何错误都将只影响依赖于错误注释类的客户端,其余的将起作用。

07-26 02:21