2014-01-26 6 views
1

Я использую сериализацию на сервере и де-сериализацию на сервере android в качестве протокола связи.Класс аннотации вызывает исключение ClassNotFound

POJO используется определяется как

@EntityTag(uri = "/t.do", layout_id = "teacher") 
public class Teacher extends UIEntity{ 
    private static final long serialVersionUID = (long)0x000010; 
    public Teacher() throws UIEntityFormatException {super();} 

    @ViewTag(view_id = "t_name") 
    private String name; 
    @ViewTag(view_id = "t_sur_name") 
    private String surName; 

    public String getName() { 
    return name; 
    } 

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

    public String getSurName() { 
    return surName; 
    } 

    public void setSurName(String surName) { 
    this.surName = surName; 
    } 
} 

EntityTag и ViewTag определяются отдельно.

Код, используемый для записи объекта в Сервер

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     try { 
     final Teacher t = new Teacher(); 
     t.setName("jacob"); 
     t.setSurName("bush"); 
     final ObjectOutputStream oos = new ObjectOutputStream(response.getOutputStream()); 
     oos.writeObject(t); 
     oos.flush(); 
     } catch (UIEntityFormatException e) { 
     e.printStackTrace(); 
     } 
    } 

и код используется на клиенте для получения этого

 final ObjectInputStream objectInputStream = new ObjectInputStream(response.getEntity().getContent()); 
     ret = (Result) objectInputStream.readObject(); 
     objectInputStream.close(); 

используется AndroidHttpClient. и класс ClassNotFound для EntityTag.class запускается при запуске клиента.

Учитель, UIEntity и аннотации помещаются в модуль, называемый модулем протокола, а модули клиентского сервера зависят от этого (я использую Intellij IDEA 13). Я не могу понять, что вызвало исключение.

Thanks

ответ

0

Извините за поздний ответ, Ник.

Я выясняю, что пошло не так.

Java Serialization - это старый механизм, создающий десятилетие перед аннотацией. Полагаю, именно поэтому сериализация по умолчанию/десериализация сериализации неправильно обрабатывает проблему.

Когда я использую байт [] читаю с сервера и помещаю его в обычный текстовый файл, я вижу, что аннотация была определена в значительной степени как класс. Полагаю, именно поэтому JVM пытается загрузить эту аннотацию (которая может быть полностью проигнорирована, так как она является резидентом как на стороне сервера, так и на стороне клиента). Поэтому я попытался написать метод readObject и writeObject классов Serialaizable. не было представлено больше классов аннотаций и решена проблема.

Это не проблема конфигурации. но мы должны быть осторожны, когда имеем дело с комбинацией старых и новых методов.

Спасибо за вашу помощь в любом случае

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