0

我目前正在开发一个 Android 应用程序,但我遇到了一个我不知道如何解决的问题。

我的应用程序与 Tomcat 服务器通信,并且我正在使用从我的 servlet 向我的应用程序ObjectOutputStream发送一个对象。Document

因此,我在我的项目中导入了 org.w3c.dom。我面临的问题是我无法在我的 android 设备上读取Document对象。ObjectInputStream

我收到以下异常。

com.sun.org.apache.xerces.internal.dom: ClassNotFoundException 

线上:

ObjectInputStream ois = new ObjectInputStream(conn.getInputStream());
Document doc = (Document) ois.readObject();     
ois.close();

我可以毫无问题地发送和接收我想要的任何对象,但是当我尝试发送一个引用 com.w3c.dom 包的对象时,我得到了这个异常。

有人可以帮忙吗?

4

1 回答 1

1

org.w3c.Document 的 Sun JVM 实现使用位于仅包含在 Sun JVM 中的包中的类(如“com.sun.something”包名称提示。)

当 Android Dalvik VM 尝试反序列化 Object in 时readObject,它会找到对该内部、Sun JVM 特定的类的引用 - 因为 Dalvik VM 没有对该类的引用(Dalvik 的org.w3c.Document实现不同),所以会引发异常。(更一般地说,Java 对象序列化/反序列化应该仅在序列化程序和反序列化程序共享相同的类实现时才起作用。我怀疑如果您的 Tomcat 实例未在 Sun JVM 上运行,您的大多数反序列化例程都会失败。)

看到您正在发送 org.w3c.Document 对象,并且该类本身表示 XML 文档,您可以通过发送 XML 流而不是 Object 流来解决问题。

于 2010-09-20T09:27:30.937 回答