1
resposta

Serializacao de objetos aninhados

Ola amigos, o cenário é o seguinte, estou fazendo um crud com jax-rs usando o Grizzly2 e tenho um objeto mapeado com jax-b que possui um atributo de seu proprio tipo em uma relaçao product e product parent além de uma lista de outro atributo chamado imagem.

Agora vem o problema, sempre que eu tento adicionar o produto com um produto parent dentro acontece que o parent sempre é adicionado com os atributos vazios e o mesmo acontece com as imagens.

abaixo seguem meus objetos e tambem o metodo de inserçao:

Objeto produto

@Entity
@XmlRootElement(name="product")
@XmlAccessorType(XmlAccessType.FIELD)
public class Product {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private Double price;

    @XmlElement(name="product", type=Product.class)
    @ManyToOne(cascade = { CascadeType.PERSIST, CascadeType.MERGE })
    private Product parent;

    @XmlElement(name="image", type=Image.class)
    @OneToMany(fetch = FetchType.EAGER, mappedBy="product", cascade = CascadeType.ALL)
    private List<Image> images = new ArrayList<Image>();

    public Product() {
        this.name = "";
        this.price = 0.0;
    }

    public Double getPrice() {
        return price;
    }

    public void setDouble(Double price) {
        this.price = price;
    }

    public Product getParent() {
        return parent;
    }

    public void setParent(Product parent) {
        this.parent = parent;
    }

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public List<Image> getImages(){
        return images;
    }

    public void setImages(List<Image> images){
        this.images = images;
    }

}

Metodo de adicionar

    @Path("add")
    @POST
    @Consumes(MediaType.APPLICATION_XML)
    public Response addProduct(String productString){

        try {
            Product product = (Product) new XStream().fromXML(productString);
            product = new ProductDAO().addProduct(product);
            URI uri = URI.create("/carrinhos/" + product.getId());
            return Response.created(uri).build();
        } catch (Exception e) {
            e.printStackTrace();
            return Response.serverError().build();
        }
    }

Desde ja muito obrigada :)

1 resposta

Oi Tatiane, mesma coisa do outro posto. Não da para saber porque o parent ta vazio se não soubermos o conteúdo da string que representa ele.