简体   繁体   English

JAXB和Guice:如何集成和可视化?

[英]JAXB and Guice: How to integrate and visualize?

I find using JAXB together with Guice possible, but challenging: Both libraries "fight" for control over object creation, you have to be careful to avoid cyclic dependencies, and it can get messy with all the JAXB Adapters and Guice Providers and stuff. 我发现可以将JAXB与Guice一起使用,但具有挑战性:两个库都“争夺”对象创建的控制,你必须小心避免循环依赖,并且它可能会弄乱所有JAXB Adapters和Guice Providers和东西。 My questions are: 我的问题是:

  • How do you deal with this configuration? 你如何处理这种配置? What general strategies / rules of thumb can be applied? 可以应用哪些一般策略/经验法则?
  • Can you point me to a good tutorial or well written sample code? 你能指点我一个好的教程或编写良好的示例代码吗?
  • How to visualize the dependencies (including the Adapters and Providers )? 如何可视化依赖项(包括AdaptersProviders )?

For some sample code, some example work was done here: http://jersey.576304.n2.nabble.com/Injecting-JAXBContextProvider-Contextprovider-lt-JAXBContext-gt-with-Guice-td5183058.html 对于一些示例代码,这里完成了一些示例工作: http//jersey.576304.n2.nabble.com/Injecting-JAXBContextProvider-Contextprovider-lt-JAXBContext-gt-with-Guice-td5183058.html

At the line that says "Wrong?", put in the recommended line. 在“错误?”的行中,加入推荐的行。

I looks like this: 我看起来像这样:

@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); 
    } 
} 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM