繁体   English   中英

类注释导致ClassNotFound异常

[英]Class annotation causes ClassNotFound exception

我正在使用服务器上的序列化和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分别定义。

用于在服务器中写入对象的代码是

    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和批注放在称为协议的模块中,并且客户端服务器模块对此具有依赖性(我正在使用Intellij IDEA 13),我不知道是什么引起了异常。

谢谢

抱歉,迟到了,尼克。

我弄清楚出了什么问题。

Java序列化是一种古老的机制,创建于注释之前的十年。 我猜这就是为什么默认序列化/反序列化无法正确处理问题的原因。

当我使用从服务器读取的byte []并将其放到纯文本文件中时,我可以看到注释已被定义为一个类。 我想这就是为什么JVM尝试加载此注释的原因(由于它同时驻留在服务器和客户端,因此可以完全忽略),因此我尝试覆盖Serialaizable类的readObject和writeObject方法。 不再显示注释类并解决问题。

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

还是要谢谢你的帮助

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM