[Android] Problemas no recebimento de obj serializados obtidos via hibernate

1 resposta
V

Olá, esse é meu primeiro post aqui, desculpe se o titulo ficou um pouco confuso.

Para melhorar vou explicar melhor do que se trata meu projeto:

Ele é dividido em 3 partes:
Um cliente android
Um servidor que fornece os objetos salvos em banco para o cliente android(hibernate+MySql)
Um projeto Web em JSF que acessa o mesmo banco (hibernate+MySql)

O android e o servidor se cominicam via socket, a comunicação é sempre feita por um objeto chamado Pacote (código abaixo), que tem "cabecalho" e "conteudo"(o que realmente é enviado)
O objeto requerido é posto no atributo "conteudo" da classe "Pacote" com um "cabecalho" para identificá-lo

O problema está na hora do android converter os objetos de dentro do atributo "conteudo" para sua tipagem de origem.
Quando eu mando os objetos sem recuperá-los do banco com o hibernate, tudo funciona certinho. Porem na hora de enviar os mesmos objetos, mas vindos do banco, eu tenho problemas com as dependências do hibernate.
Cheguei a adicionar ao android os jar do hibernate para ver se resolvia o problema, porem gerou outro:

11-07 22:01:17.555: W/System.err(322): java.io.InvalidClassException: org.hibernate.collection.PersistentBag; Incompatible class (SUID): org.hibernate.collection.PersistentBag: static final long serialVersionUID =2819117614876030537L; but expected org.hibernate.collection.PersistentBag: static final long serialVersionUID =-6715929845403737778L;

(Servidor)o metodo de envio
private void BuscaListaSabor() {
        List<Sabor> listaSabor = new ArrayList<Sabor>();
        SaborHandler saborHandler = new SaborHandler();
        
        listaSabor = saborHandler.getListaSabor();
        Sabor teste = listaSabor.get(0);
        
        System.out.println("enviando: "+teste);
        
        pacoteEnviado = new Pacote(Constantes.SOCKET_DELIVERY_SABOR_LIST, teste);
        
        
    }
(Android)recebimento do pacote), o local do erro:
Log.i("SOCKET", "Lendo resposta...");
			pacoteRecebido = (Pacote) in.readObject();
			
			Sabor teste = (Sabor) pacoteRecebido.getConteudo(); //aqui da erro!
			Log.i("SOCKET", teste.getNome());
o objeto pacote
package socket.entidade;

import java.io.Serializable;

public class Pacote implements Serializable{
	private static final long serialVersionUID = 1L;
	
	private final int cabecalho;
	private final Object conteudo;
	
	public Pacote(int cabecalho, Object conteudo) {
		super();
		this.cabecalho = cabecalho;
		this.conteudo = conteudo;
	}
	
	public int getCabecalho() {
		return cabecalho;
	}

	public Object getConteudo() {
		return conteudo;
	}
	
}
o objeto enviado dentro do pacote(servidor, com annotation)
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package modelo.entidade;

import java.io.Serializable;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.Table;
import javax.xml.bind.annotation.XmlTransient;

/**
 *
 * @author renanmarcel
 */
@Entity
@Table(name = "sabor")
public class Sabor implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "id_sabor")
    private Integer idSabor;
    @Column(name = "nome")
    private String nome;
    @ManyToMany(mappedBy = "saborList")
    private List<Pizza> pizzaList;

    public Sabor() {
    }

    public Sabor(Integer idSabor) {
        this.idSabor = idSabor;
    }

    public Integer getIdSabor() {
        return idSabor;
    }

    public void setIdSabor(Integer idSabor) {
        this.idSabor = idSabor;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    @XmlTransient
    public List<Pizza> getPizzaList() {
        return pizzaList;
    }

    public void setPizzaList(List<Pizza> pizzaList) {
        this.pizzaList = pizzaList;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (idSabor != null ? idSabor.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Sabor)) {
            return false;
        }
        Sabor other = (Sabor) object;
        if ((this.idSabor == null && other.idSabor != null) || (this.idSabor != null && !this.idSabor.equals(other.idSabor))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "modelo.entidade.Sabor[ idSabor=" + idSabor + " ]";
    }
    
}

Obrigado pela ajuda!

1 Resposta

V

Desculpe pela bagunça, mas acho que isso é mais um problema de Socket do que de Android
Seria possível algum moderador mover o tópico para a área de “Java Avançado”?

Obrigado

Criado 7 de novembro de 2011
Ultima resposta 8 de nov. de 2011
Respostas 1
Participantes 1