类注释会导致ClassNotFoundexception

时间:2014-01-26 14:26:49

标签: java android serialization deserialization

我在服务器上使用Serialization,在android客户端使用反序列化作为通信协议。

使用的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是单独定义的。

用于在服务器中编写Object的代码是

    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。并且在运行客户端时抛出EntityTag.class的ClassNotFound。

教师,UIEntity和注释被放在一个名为protocol的模块中,而Client Server模块依赖于它(我正在使用Intellij IDEA 13)我无法弄清楚导致异常的原因。

由于

1 个答案:

答案 0 :(得分:0)

对不起,迟到的回复,尼克。

我弄清楚出了什么问题。

Java Serialization是一个在注释之前创建十年的旧机制。我想这就是默认序列化/反序列化无法正确处理问题的原因。

当我使用从服务器读取的byte []并将其放入纯文本文件时,我可以看到注释几乎被定义为一个类。我想这就是为什么JVM试图加载这个注释(因为它在服务器端和客户端都可以完全忽略),所以我试着重写了Serialaizable类的readObject和writeObject方法。没有更多的注释类表示和解决问题。

这不是配置问题。但是在处理新旧技术时我们应该小心。

感谢您的帮助