通过网络推送JAX-B对象

时间:2011-09-27 17:39:43

标签: java xml rest jaxb jersey

我在文本中有一些描述RESTful网络服务器的界面描述。我还有JAX-B带注释的对象,我想从该界面推送和接收。

我不确定已经实施了多少对此类任务的支持。有一些泽西岛的事情,但仍然是最新的?

我是否必须定义目标URL,打开流,序列化xml对象(可能先将其转换为字符串?),然后将其写入流中?

或者是否有一些神奇的方法只需要一个URL和JAX-B对象,也许我想要PUT,DELETE,POST或GET它?

1 个答案:

答案 0 :(得分:5)

JAX-RS 是您在此案例中要使用的内容,而Jersey是参考实现。 JAXB是JAX-RS的默认绑定层。以下是支持PUTDELETEPOSTGET的RESTful服务示例:

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

    @PUT
    @Consumes(MediaType.APPLICATION_XML)
    public void update(Customer customer) {
        entityManager.merge(customer);
    }

    @DELETE
    @Path("{id}")
    public void delete(@PathParam("id") long id) {
        Customer customer = read(id);
        if(null != customer) {
            entityManager.remove(customer);
        }
    }

    @GET
    @Produces(MediaType.APPLICATION_XML)
    @Path("findCustomersByCity/{city}")
    public List<Customer> findCustomersByCity(@PathParam("city") String city) {
        Query query = entityManager.createNamedQuery("findCustomersByCity");
        query.setParameter("city", city);
        return query.getResultList();
    }

}

以下是完整示例的链接:

相关问题