2012-04-11 3 views
0

Я разработал несколько веб-приложений GWT. Последний - небольшая модификация другой. Все они хорошо работают, за исключением последнего. Исключение составляют:Ошибка GWT: ответ не может быть десериализован

The response could not be deserialized 

Я использую Hibernate и передачи объектов данных между Hibernate и GWT. Каждый DTO реализует интерфейс java.io.Serializable. Как я уже говорил, в других приложениях работает хорошо. Может ли кто-нибудь помочь мне с этой ошибкой? Я не знаю, в чем причина.

Мой Hibernate объектный код:

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 является метод GetAttributes вызова(), который возвращает список AttributeDTO.

Спасибо !!!

+0

Вы должны опубликовать код DTO, который вас беспокоит –

ответ

1

Ошибка также появляется, если только один член вашего класса не сериализуем - таким образом, ошибка также может быть в определении ApplicationFieldDTO.

Кстати, вместо использования объектов передачи данных вы также можете использовать Gilead, тогда работает даже ленивая загрузка. (Но в случае вашего существующего приложения введение Gilead может быть очень большой работой.)

+0

Спасибо, это кажется интересным. Я изучу эту возможность –

0

использование ArrayList вместо списка и попробуйте еще раз

Посмотрите на эту post.

+0

То же исключение ... –

+0

'new ApplicationFieldDTO()' может быть, это все? Является ли этот класс сериализованным или имеет пустой конструктор, не использует такие общие типы, как List ??? – GingerHead

+0

ApplicationDTO другой класс DTO и код: общественный класс ApplicationFieldDTO реализует Serializable {общественного ApplicationFieldDTO() {}} –

0

У меня была такая же проблема. Попробуйте использовать com.google.gwt.user.client.rpc.IsSerializable вместо Serializable. Это сработало для меня, и я надеюсь, что это поможет вам :)

+0

На первой стадии разработки у меня был com.google.gwt.user.client.rpc.IsSerializable, а затем я изменил на java.io. Сериализуем, потому что он не работает. Я думаю, что это не проблема, но спасибо за ваш ответ. –

+0

@JoseHdez. Не могли бы вы связать трассировку стека с вопросом? – cardamo

Смежные вопросы