0

現在、Android アプリケーションを開発していますが、解決方法がわからない問題に直面しています。

私のアプリケーションは Tomcat サーバーと通信し、サーブレットからアプリケーションにオブジェクトを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のSunJVM実装は、Sun JVMにのみ含まれているパッケージにあるクラスを使用します(「com.sun.something」パッケージ名のヒントとして)。

Android Dalvik VMがでオブジェクトを逆シリアル化しようとすると、readObjectその内部のSun JVM固有のクラスへの参照が見つかります-DalvikVMにはそのクラスへの参照がないため(Dalvikのorg.w3c.Document実装は異なります)、例外がスローされます。(より一般的には、Javaオブジェクトのシリアル化/逆シリアル化は、シリアライザーとデシリアライザーの両方が同じクラス実装を共有する場合にのみ機能するはずです。TomcatのインスタンスがSun JVMで実行されていない場合、ほとんどの逆シリアル化ルーチンが失敗する可能性があります。)

org.w3c.Documentオブジェクトを送信していること、およびこのクラスがXMLドキュメントをネイティブに表していることを確認すると、オブジェクトストリームではなくXMLストリームを送信することで問題を解決できます。

于 2010-09-20T09:27:30.937 に答える