Получение странного ClassNotDefFoundException во время выполнения с GWT - PullRequest
3 голосов
/ 26 ноября 2010

Я развертываю веб-приложение на основе GWT. Когда я компилирую, я не получаю никаких ошибок, но во время выполнения я получаю это (не полная трассировка стека):

java.lang.NoClassDefFoundError: org/xmlpull/v1/XmlPullParserException
at org.gvsig.remoteClient.sos.SOSClient.<init>(SOSClient.java:47)
at com.uji.project.server.ConnectServiceImpl.makeConnection(ConnectServiceImpl.java:18)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

Причина:

Caused by: java.lang.ClassNotFoundException: org.xmlpull.v1.XmlPullParserException
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)

Я читал на этом сайте, что это, вероятно, вызвано тем, что один или несколько классов недоступны во время выполнения, но, как видно, ошибка вызвана некоторой проблемой с синтаксическим анализатором XML, но у меня есть синтаксический анализатор XML, включенный в моя папка lib. Более подробно, в папке lib проекта можно найти 3 файла JAR: gwt-maps.jar , gwt-servlet.jar и kxml2.jar * .

Если я открою файл "kxml2.jar", я увижу папку org , в которой есть папка xmlpull , в которой есть папка v1 и наконец XmlPullParserException.class .

Итак ... почему во время выполнения этот класс не доступен, если он включен в папку lib?

Ответы [ 4 ]

1 голос
/ 03 декабря 2010

Наконец коллега сказал мне решение этой ошибки во время выполнения! : D

При развертывании приложения GWT многие файлы копируются в небольшой файловой структуре (ожидающей от), которая содержит все классы, библиотеки и другие файлы, необходимые во время выполнения.

По какой-то причине, если вы специально не указали Eclipse скопировать (во время компиляции / развертывания) определенную библиотеку в этот PATH, приложение не найдет во время выполнения эту библиотеку и выдаст ошибку.

Решение (для меня) было таким же простым, как ручное копирование этой библиотеки в эту папку: в моем случае копирование "kxml2.jar" в "C: \ gwt-2.1.0 \ SOSProject \ война \ WEB-INF \ Lib ". Я перезапустил приложение и просто работал. : D

Надеюсь, этот патч / решение поможет другим решить эту надоедливую проблему в рамках GWT!

1 голос
/ 26 ноября 2010

В классах appengine могут получить доступ только к классам JRE, которые находятся в этом белом списке . Если этот jar использует другой класс JRE, он не будет включен во время выполнения.

Здесь вы можете прочитать, что «API обработки XML, включая DOM, SAX и XSLT» совместимы с appengine. Может быть, xmlpullparser не совместим, но я не уверен.

0 голосов
/ 28 ноября 2010

В конце я снова начал с самого начала: в одном и том же рабочем пространстве у меня были разные проекты, и, может быть, между ними были, скажем, помехи.

Итак, я снова разархивировал GWT SDK, запустил новый проект, скопировал исходный код в новый проект, развернул его и во время выполнения, теперь я не получаю эту странную ошибку ClassNotDefFound. Теперь я получаю еще один, но это другая проблема! Спасибо всем.

0 голосов
/ 28 ноября 2010

Попробуйте это Окно-> Настройки-> Путь сборки Java-> Добавить банки Перейдите к вашему проекту / lib, выберите kxml2.jar Нажмите OK.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...