Android: com.sun.org.apache.xerces.internal.dom: classnotfoundexception
-
04-10-2019 - |
Вопрос
На данный момент я разрабатываю приложение для 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, я получаю это исключение.
Может кто-нибудь помочь?
Решение
Внедрение Sun JVM внедрение ORG.W3C.Document использует класс, расположенный в упаковке, который включен только в Sun JVM (в качестве имени пакета пакета пакета «com.sun.something».)
Когда Android Dalvik VM пытается определить объект в readObject
, Он находит ссылку на то, что внутреннее, Sun JVM конкретно, класс - потому что далвик В.М. не имеет ссылки на этот класс (Dalvik's org.w3c.Document
Реализация отличается), исключение брошено. (В более общем целом, сериализация / дезерриализация Java должна работать только в том случае, если как сериализатор, так и дезерриализатор разделяют одинаковую реализацию класса. Я подозреваю, что большинство ваших процедур десериализации потерпят неудачу, если ваш экземпляр Tomcat не работает на Sun JVM.
Увидев, что вы отправляете объекты org.w3c.document, и что этот класс изначально представляет документ XML, вы можете решить проблему, отправив XML-поток, а не по течению объекта.