2011-09-27 43 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

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