通过网络推送JAX-B对象

Fra*_*fka 2 java xml rest jaxb jersey

我在文本中有一些描述RESTful webserver的接口描述.我还有JAX-B带注释的对象,我想从该界面推送和接收.

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

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

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

bdo*_*han 5

在这种情况下,您希望使用JAX-RS,而Jersey是参考实现.JAXB是JAX-RS的默认绑定层.下面是支持RESTful服务的一个例子PUT,DELETE,POST,和GET:

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

}
Run Code Online (Sandbox Code Playgroud)

以下是完整示例的链接: