2011-09-27 42 views
2

我在描述RESTful Web服务器的文本中有一些接口描述。我也有JAX-B注释的对象,我想要从该接口推送和接收。通过网络推送JAX-B对象

我不确定这个任务已经实现了多少支持。泽西岛周围有些东西,但仍然是最新的?我是否必须定义一个目标URL,打开一个流,序列化xml对象(可能先将它转换为一个字符串?),然后将它写入流?

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

回答

5

JAX-RS是你想要在这种情况下使用的,Jersey是参考实现。 JAXB是JAX-RS的默认绑定层。下面是支持PUTDELETEPOST RESTful服务的一个例子,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(); 
    } 

} 

下面是链接到完整的例子:

+1

很好的答案,打我吧:) –