【问题标题】:Class annotation causes ClassNotFound exception类注解导致 ClassNotFound 异常
【发布时间】:2014-02-17 07:55:40
【问题描述】:

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

使用的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 是分开定义的。

在Server中用来写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。

Teacher、UIEntity 和注释都放在一个名为协议的模块中,客户端服务器模块依赖于它(我使用的是 Intellij IDEA 13)我无法弄清楚是什么导致了异常。

谢谢

【问题讨论】:

    标签: java android serialization deserialization


    【解决方案1】:

    抱歉,尼克回复晚了。

    我知道出了什么问题。

    Java 序列化是在注解前十年创建的旧机制。我想这就是为什么默认序列化/反序列化不能正确处理问题的原因。

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

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

    谢谢你的帮助

    【讨论】:

      猜你喜欢
      • 2018-11-26
      • 2012-11-27
      • 2012-06-30
      • 1970-01-01
      • 1970-01-01
      • 2012-10-13
      • 2016-08-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多