JAXB和Guice:如何集成和可视化?
我发现将 JAXB 与 Guice 一起使用是可能的,但具有挑战性:两个库都“争夺”对对象创建的控制权,你必须小心避免循环依赖关系,并且它可能会弄乱所有的 JAXB 和 Guice 以及其他东西。我的问题是:Adapters
Providers
- 如何处理此配置?可以应用哪些一般策略/经验法则?
- 你能给我指出一个好的教程或写得很好的示例代码吗?
- 如何可视化依赖关系(包括和)?
Adapters
Providers
我发现将 JAXB 与 Guice 一起使用是可能的,但具有挑战性:两个库都“争夺”对对象创建的控制权,你必须小心避免循环依赖关系,并且它可能会弄乱所有的 JAXB 和 Guice 以及其他东西。我的问题是:Adapters
Providers
Adapters
Providers
对于一些示例代码,此处已完成一些示例工作:http://jersey.576304.n2.nabble.com/Injecting-JAXBContextProvider-Contextprovider-lt-JAXBContext-gt-with-Guice-td5183058.html
在显示“错误?”的行处,放入推荐行。
我看起来像这样:
@Provider
public class JAXBContextResolver implements ContextResolver<JAXBContext> {
private JAXBContext context;
private Class[] types = { UserBasic.class, UserBasicInformation.class };
public JAXBContextResolver() throws Exception {
this.context =
new JSONJAXBContext(
JSONConfiguration.natural().build(), types);
}
public JAXBContext getContext(Class<?> objectType) {
/*
for (Class type : types) {
if (type == objectType) {
return context;
}
} // There should be some kind of exception for the wrong type.
*/
return context;
}
}
//My resource method:
@GET
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public JAXBElement<UserBasic> get(@QueryParam("userName") String userName) {
ObjectFactory ob = new ObjectFactory();
UserDTO dto = getUserService().getByUsername(userName);
if(dto==null) throw new NotFoundException();
UserBasic ub = new UserBasic();
ub.setId(dto.getId());
ub.setEmailAddress(dto.getEmailAddress());
ub.setName(dto.getName());
ub.setPhoneNumber(dto.getPhoneNumber());
return ob.createUserBasic(ub);
}
//My Guice configuration module:
public class MyServletModule extends ServletModule {
public static Module[] getRequiredModules() {
return new Module[] {
new MyServletModule(),
new ServiceModule(),
new CaptchaModule()
};
}
@Override
protected void configureServlets() {
bind(UserHttpResource.class);
bind(JAXBContextResolver.class);
serve("/*").with(GuiceContainer.class);
}
}