使用xml而不是jaxb注释的Java webservice工具?

时间:2012-03-12 15:11:09

标签: java xml web-services rest

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

我遇到了与hibernate相同的问题,但是hbm xml映射允许我共享相同的域对象并为不同的服务提供不同的映射,这非常有用。是否有任何类型的Java web服务框架允许我用xml描述我的api和scheme对象,并且还能获得将这些对象转换为json / xml等的好处?

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

注意:我是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;
    }

}

了解更多信息

相关的Stack Overflow问题