2012-04-11 77 views
0

我开发了几个GWT Web应用程序。最新的一个是对另一个的一点修改。除了最新版本之外,它们都运行良好。例外是:GWT错误:响应无法反序列化

The response could not be deserialized 

我在Hibernate和GWT之间使用Hibernate和数据传输对象。每个DTO实现java.io.Serializable接口。正如我之前所说的,在其他应用程序中运行良好。有人可以帮我解决这个错误吗?我不知道原因是什么。

我的休眠对象代码是:

public List<AttributeDTO> getAttributes(){ 
    String sql = "from Attribute where (select max(tDate) from Attribute)-tDate < '0 days 00:05'"; 
    List<Attribute> attributes = new ArrayList<Attribute>(DatabaseManager.createQuery(sql)); 
    List<AttributeDTO> attributeDTOs = new ArrayList<AttributeDTO>(attributes != null ? attributes.size() : 0); 
    if (attributes != null) { 
     for (Attribute attribute : attributes) { 
      String date = format.format(attribute.gettDate()); 
      attributeDTOs.add(new AttributeDTO(attribute.getiAttrId(),attribute.getsName(),attribute.getsValue(),date,attribute.getiDeviceId(),attribute.getsUnits(),new ApplicationFieldDTO())); 
     } 
    } 
    return attributeDTOs; 
} 

而且AttributeDTO是:

public class AttributeDTO implements Serializable { 
    private static final long serialVersionUID = 1L; 
    private int iAttrId; 
    private String name; 
    private String value; 
    private String date; 
    private String units; 
    private int iDeviceId; 
    private ApplicationFieldDTO appField; 

    public AttributeDTO() {} 

    public AttributeDTO(int attrId, String name, String value, String date, int deviceId, String units, ApplicationFieldDTO appField) { 
     this.iAttrId = attrId; 
     this.name = name; 
     this.value = value; 
     this.date = date; 
     this.iDeviceId = deviceId; 
     this.units = units; 
     this.appField = appField; 
    } 
} 

从GWT是返回AttributeDTO的List呼叫的getAttributes()方法。

谢谢!而不是List

+0

您应该发布DTO的代码,这会给您带来麻烦 – 2012-04-11 05:58:37

回答

1

如果只有一个类的成员不可序列化,那么错误也会出现 - 因此错误也可能出现在ApplicationFieldDTO的定义中。

顺便说一句,而不是使用数据传输对象,你也可以使用Gilead,然后,即使延迟加载工作。 (但是在现有应用程序中引入Gilead可能需要很多工作。)

+0

谢谢,它似乎很有趣。我会研究这种可能性 – 2012-04-16 07:53:19

0

使用ArrayList,并尝试在这个post再次

看。

+0

同样的例外... – 2012-04-11 06:37:38

+0

'new ApplicationFieldDTO()'也许这是它?这个类是序列化的还是有一个空的构造函数,不使用像List这样的泛型类型? – GingerHead 2012-04-11 07:06:45

+0

ApplicationDTO是另一个DTO类和代码是:公共类ApplicationFieldDTO实现Serializable {公共ApplicationFieldDTO(){}} – 2012-04-11 07:16:02

0

我有同样的麻烦。尝试使用com.google.gwt.user.client.rpc.IsSerializable而不是Serializable。它对我有用,我希望对你有所帮助:)

+0

在第一次开发中,我使用了com.google.gwt.user.client.rpc.IsSerializable,之后我通过java.io进行了更改。可串行化,因为它不起作用。我认为这不是问题,但感谢您的回复 – 2012-04-11 06:37:08

+0

@JoseHdez您可以将异常的堆栈跟踪附加到问题上吗? – cardamo 2012-04-11 06:43:05