Перемещение объекта JAX-B по сети - PullRequest
2 голосов
/ 27 сентября 2011

У меня есть некоторое описание интерфейса в тексте, описывающее веб-сервер RESTful.У меня также есть аннотированные объекты JAX-B, которые я хочу передать и получить от этого интерфейса.

Я не уверен, насколько уже реализована поддержка такой задачи.Вокруг Джерси есть что-то, но все еще актуально?

Нужно ли мне определять целевой URL, открывать поток, сериализовать объект xml (возможно, сначала превратив его в строку?), Изатем записать его в поток?

Или есть какой-то магический метод, который ожидает только URL-адрес и объект JAX-B, и, возможно, если я захочу PUT, DELETE, POST или GET, это?

1 Ответ

5 голосов
/ 27 сентября 2011

JAX-RS - это то, что вы хотите использовать в этом случае, а Джерси - эталонная реализация. 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();
    }

}

Ниже приведены ссылки на полный пример:

...