Android: com.sun.org.apache.xerces.internal.dom: ClassNotFoundException - PullRequest
0 голосов
/ 20 сентября 2010

В данный момент я занимаюсь разработкой приложения для Android и столкнулся с проблемой, которую не знаю, как решить.

Мое приложение взаимодействует с сервером Tomcat, и я использую ObjectOutputStream для отправки объекта Document в мое приложение из моего сервлета.

Поэтому я импортирую org.w3c.dom в моем проекте.Проблема, с которой я сталкиваюсь, заключается в том, что я не могу прочитать объект Document с ObjectInputStream на моем устройстве Android.

Я получаю следующее исключение.

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

в строках:

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

Я могу отправлять и получать любые объекты без проблем, нокогда я пытаюсь отправить объект, указанный в пакете com.w3c.dom, я получаю это исключение.

Кто-нибудь может помочь?

1 Ответ

1 голос
/ 20 сентября 2010

В реализации Sun JVM org.w3c.Document используется класс, находящийся в пакете, который включен только в Sun JVM (как подсказывает имя пакета com.sun.something).

Когдавиртуальная машина Android Dalvik пытается десериализовать объект в readObject, она находит ссылку на этот внутренний, специфичный для Sun JVM, класс - поскольку виртуальная машина Dalvik не имеет ссылки на этот класс (реализация Dalvik org.w3c.Document отличается),исключение брошено.(В более общем случае, сериализация / десериализация Java Object должна работать только в том случае, если и сериализатор, и десериализатор используют одну и ту же реализацию класса. Я подозреваю, что большинство ваших процедур десериализации потерпит неудачу, если ваш экземпляр Tomcat не будет работать на Sun JVM.)

Видя, что вы отправляете объекты org.w3c.Document и этот класс изначально представляет документ XML, вы можете решить эту проблему, отправив поток XML, а не поток объектов.

...