GWT JPA - 无法反序列化响应

Posted

技术标签:

【中文标题】GWT JPA - 无法反序列化响应【英文标题】:GWT JPA - The response could not be deserialized 【发布时间】:2011-04-05 14:33:54 【问题描述】:

我使用 GWT 和 JPA 来实现持久性。我创建了一个域 JPA 魔法类、DAO 和 RPC 用于它们之间的通信。一切正常,通过 RPC 客户端将对象发送到服务器但无法获得响应。服务器无法以与客户端兼容的方式反序列化。所以我不能使用服务器回调回客户端。异常消息是这样的:

无法响应 反序列化, com.google.gwt.user.client.rpc.SerializationException

这是我的一个类的示例代码:

@Entity
@Table(name="course")
public class Course implements Serializable 
    private static final long serialVersionUID = 1L;
    private int courseId;
    private String name;
    private List<Group> groups;
    private List<Module> modules;

    public Course() 
    


    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(unique=true, nullable=false)
    public int getCourseId() 
        return this.courseId;
    

    public void setCourseId(int courseId) 
        this.courseId = courseId;
    


    @Column(nullable=false, length=100)
    public String getName() 
        return this.name;
    

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


    //bi-directional many-to-one association to Group
    @OneToMany(mappedBy="course", fetch=FetchType.LAZY)
    public List<Group> getGroups() 
        return this.groups;
    

    public void setGroups(List<Group> groups) 
        this.groups = groups;
    


    //bi-directional many-to-one association to Module
    @OneToMany(mappedBy="course", fetch=FetchType.LAZY)
    public List<Module> getModules() 
        return this.modules;
    

    public void setModules(List<Module> modules) 
        this.modules = modules;
    


如果我删除关系它工作正常。这样做是因为列表、集合等集合被转换为 GWT 客户端无法处理的休眠对象。

【问题讨论】:

注意hibernate返回什么样的List。在您的吸气剂上,您可以尝试明确说明列表的类型 - 例如返回一个ArrayList,并在方法体中返回一个new ArrayList&lt;Type&gt;(existingList); 【参考方案1】:

问题是我的班级与另一个班级有@OneToMany 关联。如果我删除关联,它就可以了。但这是不可能的,因为我使用的是规范化的关系数据库

【讨论】:

【参考方案2】:

如果您使用 GWT-RPC,请确保您尝试序列化的所有类都具有公共默认(无参数)构造函数并实现 Serializable。如果你有嵌入的类,它们也必须有一个无参数的构造函数。

【讨论】:

是的,他们实现了 Serializable 但没有结果.. 我也试过 IsSerializable 也没有结果.. 他们有明确定义的无参数构造函数吗? 是的,它们没有参数构造函数,实际上它们是从 mysql 数据库自动生成的 你有 GWT JPA 的例子吗?【参考方案3】:

曾经,我为this question 准备了gwt-jpa 样本。它只是 JPA 实体的序列化。它可能会为您提供有关您的案例出了什么问题的线索。

【讨论】:

非常感谢。不过这个链接坏了,请问你能给我一个新的示例链接吗? 非常感谢,我知道了!【参考方案4】:

我使用了Gilead,它解决了这个问题。

请查看对应帖子:GWT with JPA

【讨论】:

【参考方案5】:

让它工作......在重新部署战争之后......奇怪......不能指向一个特定的东西(因为我确实清除了浏览器缓存/eclipse类输出/重新启动eclipse) 显然解决方法似乎是在出现此问题时尝试重新部署 webapp..

【讨论】:

以上是关于GWT JPA - 无法反序列化响应的主要内容,如果未能解决你的问题,请参考以下文章

GWT:响应无法反序列化

GWT错误:无法反序列化响应

GWT 反序列化 RPC 调用中的泛型列表

什么反序列化 GWT RPC 调用客户端

使用休眠 jpa 进行 JSON 序列化和反序列化以在 JSON 响应中将父对象转换为子对象

使用 GWT 内置的 RPC 序列化/反序列化机制