【问题标题】:Java webservice tool that uses xml instead of jaxb annotations?使用 xml 而不是 jaxb 注释的 Java Web 服务工具?
【发布时间】:2012-03-29 00:06:07
【问题描述】:

我有一个服务层,我想将其转换为 Web 服务。但是我讨厌使用注解,因为它们严重限制了我的通用基类中的代码可重用性。一些 web 服务使用对象的子集,我不希望为一个服务公开的东西为另一个服务公开。

我在使用 hibernate 时遇到了同样的问题,但是 hbm xml 映射允许我共享相同的域对象并为不同的服务提供不同的映射,效果很好。是否有任何一种用于 java 的 rest webservice 框架,可以让我用 xml 描述我的 api 和方案对象,并且仍然可以获得将这些对象转换为 json/xml 等的好处?

【问题讨论】:

    标签: java xml web-services rest


    【解决方案1】:

    注意:我是EclipseLink JAXB (MOXy) 领导,也是JAXB 2 (JSR-222) 专家组的成员。

    EclipseLink JAXB (MOXy) 有一个扩展,允许您将元数据表示为 XML 文件。您可以使用 ContextResolver 在 JAX-RS 环境中利用此元数据:

    package blog.bindingfile.jaxrs;
    
    import java.io.*;
    import java.util.*;
    
    import javax.ws.rs.Produces;
    import javax.ws.rs.ext.*;
    import javax.xml.bind.*;
    
    import org.eclipse.persistence.jaxb.JAXBContextFactory;
    
    import blog.bindingfile.Customer;
    
    @Provider
    @Produces({"application/xml", "application/json"})
    public class CustomerContextResolver implements ContextResolver<JAXBContext> {
    
        private JAXBContext jc;
    
        public CustomerContextResolver() {
            Map<String, Object> props = new HashMap<String, Object>(1);
            props.put(JAXBContextFactory.ECLIPSELINK_OXM_XML_KEY, "blog/bindingfile/binding.xml");
            jc = JAXBContext.newInstance(new Class[] {Customer.class} , props);
        }
    
        public JAXBContext getContext(Class<?> clazz) {
            if(Customer.class == clazz) {
                return jc;
            }
            return null;
        }
    
    }
    

    更多信息

    相关堆栈溢出问题

    【讨论】:

    • 嗯,请原谅我的无知,但如果我不想生成额外的客户端对象,而是使用 xml 中指定的域对象的子集,这是否合适?这样我可以拥有一个域对象但 ws 客户端看不到所有字段?
    • @user842800 - 是的,这是可以利用 MOXy 的外部映射文档的常见用例。
    【解决方案2】:

    您可以在基于 XML 的 WADL 中描述您的 Web 服务,然后使用 CXF's wadl2java tool 生成您的代码。请注意,WADL 尚未被广泛采用,因此您必须确定它对您有多重要,以执行合同优先的 REST 服务。

    【讨论】:

      【解决方案3】:

      Spring Web Services 是另一个基于 XML 的无注释框架,用于 Web 服务发布。你应该试一试

      【讨论】:

        猜你喜欢
        • 2016-08-31
        • 1970-01-01
        • 1970-01-01
        • 2011-10-17
        • 1970-01-01
        • 2018-11-29
        • 1970-01-01
        • 2010-12-15
        • 1970-01-01
        相关资源
        最近更新 更多