![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Real McCoy |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 113 Регистрация: 28.6.2007 Репутация: нет Всего: 2 |
Здравствуйте все!
Странно ведёт себя апплет, и я никак не могу разобраться, в чём тут дело. Буду весьма благодарен за помощь. Есть апплет с Java 3D, у него есть класс, который грузит и парсит XML-файл, лежащий на том же сервере, что и апплет. Так вот, Java 3D апплет можно запускать в двух окружениях: 1) запустить апплет, как и любой другой, но имея на клиентской машине установленный Java 3D. 2) запустить апплет используя специально предназначенный апплет JNLPAppletLauncher, на клиентской машине, где не установлен Java 3D. Ланчер из-под себя запускает 3д-апплет, подтягивая необходимые dll-ки и либы. XML грузится и парсится самым простым способом:
Так вот, проблема в том, что когда я запускаю апплет из-под JNLPAppletLauncher - всё работает прекрасно, а если запускаю его отдельно от всего на машине с Java 3D, получаю ошибку такого типа:
т.е. выглядит таким образом, будто ошибку бросает вызов DocumentBuilderFactory.newInstance(). Почему? И почему работает из-под ланчера? ChartApplet.java - это мой апплет, XMLProcessor.java - это модуль, который парсит xml. Спасибо! |
||||
|
|||||
| Real McCoy |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 113 Регистрация: 28.6.2007 Репутация: нет Всего: 2 |
У меня тут врезультате изучения проблемы возникло лёгкое подозрение в том, где порылась собака... Но всё равно прошу помощи.
Сравнивал поведение апплета при загрузке с локального Апача (работает) и с удалённого веб-сервера (не работает). Когда в консоли Java постваил trace level = 5, то в месте, где происходит чтение и обработка XML увидел следующее: Лог с удалённого веб-сервера
Лог с локального Апача
Похоже, что в первом случае не находится модуль javax.xml.parsers.DocumentBuilderFactory. Вопрос: почему? И как это исправить? |
||||
|
|||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 9 Всего: 538 |
Почитай JavaDoc по методу DocumentBuilderFactory.newInstance(), в частности:
и проверь все указанные источники. P.S. Возможно тебе поможет опция запуска Djaxp.debug=1. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| Real McCoy |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 113 Регистрация: 28.6.2007 Репутация: нет Всего: 2 |
LSD,
Спасибо за реакцию на мою проблему! А не могли бы разъяснить неопытному... Я тут самостоятельно добрался до процитированного Вами куска, но это мне мало что дало: - пытался получить javax.xml.parsers.DocumentBuilderFactory, но получил java.security.AccessControlException: access denied (java.util.PropertyPermission javax.xml.parsers.DocumentBuilderFactory read); - в jre\lib\ у меня нет файла jaxp.properties, равно как и в остальных местах jdk; По поводу Platform default DocumentBuilderFactory instance - ведь, по идее, мой код и так должен его использовать. Разве нет? Ведь парсится же у меня xml, когда апплет грузится с локального сервера. И ещё: Эту опцию можно применить при запуске апплета с удалённого сервера? Спасибо! |
|||
|
||||
| Real McCoy |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 113 Регистрация: 28.6.2007 Репутация: нет Всего: 2 |
По поводу Djaxp.debug=1 понял: запустил с ним апплет локально и получил ответ на вопрос, какой у меня используется DocumentBuilderFactory
Почитал в спецификации JAR о Service provider'ах, увидел подобное в jre\lib\rt.jar. Сделал следующее: - добавил в META-INF своего проекта каталог services, в него - файл javax.xml.parsers.DocumentBuilderFactory, состоящий из одной строки : com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl Всё заработало! Ошибка перестала возникать. Буду весьма признателен, если скажете, правильно я сделал, или существует более прямой способ? И можно ли это добавление как-то автоматизировать (работаю в NetBeans 5.5.1)? |
|||
|
||||
| powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 2 Всего: 159 |
||||
|
||||
| Real McCoy |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 113 Регистрация: 28.6.2007 Репутация: нет Всего: 2 |
powerOn,
Спасибо, огромное! Получилось в лучшем виде! Делал именно так, как Вы подсказали (как это я сам не сообразил?): создал папку META-INF в корне проекта, в ней - паку services, в ней - файл с именем javax.xml.parsers.DocumentBuilderFactory и содержимым в виде одной строки com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl. При сборке получился именно такой JAR, как нужно. Ещё раз спасибо! Увы, пока не могу Вам с LSD репутацию поднять |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 9 Всего: 538 |
Пожалуйста
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 2 Всего: 159 |
это дело поправимое. |
|||
|
||||
| Real McCoy |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 113 Регистрация: 28.6.2007 Репутация: нет Всего: 2 |
Тема получила неожиданное продолжение. Функциональность той части апплета, где у меня парсится XML не изменилась: добавился абсолютно аналогичный существующему разбор ещё одной ветки.
Так вот, версия апплета, собранная на JDK1.6 работала нормально, а собранная на 1.5 выдавала почти такую же ошибку, как я описывал в начале ветки, только теперь для полного счастья не ватало другого парсера:
Для лечения предпринял тот же шаг, что и описан выше: создал в папке META-INF\services файл с именем javax.xml.parsers.SAXParserFactory и содержимым в виде com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl. Всё заработало нормально во всех версиях. |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Апплеты | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |