JAX卢比的自动编组



我已经与Jax WS合作,并使用了WSGEN和WSIMPORT自动编码自定义类型。我也可以将WSGEN与JAXR一起使用吗?如果是这样,我应该在哪里放置WSGEN生成的文件以及如何引用它们?我只希望自己自己使用jaxb并使用WSGEN作为快捷方式。

默认情况下,JAX-RS实现将使用JAXB将域对象转换为application/xml媒体类型的XML/从XML转换。在下面的示例中,JAXBContext将在Customer类中创建,因为它以参数为参数和/或返回类型。

package org.example;
import java.util.List;
import javax.ejb.*;
import javax.persistence.*;
import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
@Stateless
@LocalBean
@Path("/customers")
public class CustomerService {
    @PersistenceContext(unitName="CustomerService",
                        type=PersistenceContextType.TRANSACTION)
    EntityManager entityManager;
    @POST
    @Consumes(MediaType.APPLICATION_XML)
    public void create(Customer customer) {
        entityManager.persist(customer);
    }
    @GET
    @Produces(MediaType.APPLICATION_XML)
    @Path("{id}")
    public Customer read(@PathParam("id") long id) {
        return entityManager.find(Customer.class, id);
    }
}

在单个类上创建的JAXBContext还将为所有传统参考类创建元数据,但这可能不会带来您XML架构生成的所有内容。您需要利用JAX-RS上下文解析机构。

package org.example;
import java.util.*;
import javax.ws.rs.Produces;
import javax.ws.rs.ext.*;
import javax.xml.bind.*;
import org.eclipse.persistence.jaxb.JAXBContextFactory;
@Provider
@Produces("application/xml")
public class CustomerContextResolver implements ContextResolver<JAXBContext> {
    private JAXBContext jc;
    public CustomerContextResolver() {
        try {
            jc = JAXBContext.newInstance("com.example.customer" , Customer.class.getClassLoader());
        } catch(JAXBException e) {
            throw new RuntimeException(e);
        }
    }
    public JAXBContext getContext(Class<?> clazz) {
        if(Customer.class == clazz) {
            return jc;
        }
        return null;
    }
}

相关内容

  • 没有找到相关文章