java - 类注释导致ClassNotFound异常

标签 java android serialization deserialization

我在服务器上使用序列化,在 Android 客户端上使用反序列化作为通信协议(protocol)。

使用的 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。

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

谢谢

最佳答案

抱歉回复晚了,尼克。

我弄清楚出了什么问题。

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

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

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

无论如何,谢谢你的帮助

关于java - 类注释导致ClassNotFound异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21364575/

相关文章:

android - 将 URL 和标题传递给 WebView

java - @ 在 HTTPPost 请求中转换为 %40

c# - System.UnauthorizedAccessException : Access is denied. Windows Phone 使用文件时

java - 如何在进行 Jackson 反序列化时将 JSON 字段名称转换为 Java 兼容的属性名称?

python - Django 反序列化存储在模型字段中的 JSON

java - 理解Java中的继承和抽象类

java - 如何从 STUN 请求获取外部 IP 地址和外部端口号?

java - 在 ExampleInstrumentedTest.java 文件中获取错误

java - Struts 1 上的操作调用之前确认对话框

java - 生成的 servlet 错误 : source value 1. 5 已过时,将在未来版本中删除使用 Jsp 错误