Добрый день дорогие друзья! Сегодня будем рассматривать проблему с программой АРМ ФСС, а именно «ошибка: набор ключей не определен». С данной ошибкой Вы скорее всего столкнетесь, при загрузке ЭЛН. Будем справлять! Поехали!
АРМ ФСС ошибка: набор ключей не определен
Если у Вас не получается самостоятельно решить данную проблему, то Вы можете перейти в раздел ПОМОЩЬ и Вам помогут наши специалисты.
С данной проблемой я столкнулся, как раз при загрузке электронного больничного. Для начала обновим АРМ ФСС. Как обновить АРМ ФСС прочитайте вот тут.
Теперь перейдем в раздел меню «Учетная работа» и выберем «АРМ подписания и шифрования».
Теперь будем внимательными! Нам необходимо проставить правильные ключи. То есть, правильно выбрать наши сертификаты.
Какие сертификаты ставить при загрузке больничного в АРМ ФСС
Переходим в раздел «Личный сертификат ЭЛН. Страхователь». Это сертификат нашей организации! Выбираем его, нажав на кнопку с открытой папкой.
Переходим в раздел личные, и выбираем наш сертификат.
СТОП! Ни одного сертификата? Это уже странно!
В АРМ ФСС не отображаются сертификаты, что делать?
С 2019 года, мы переходим на новый ГОСТ по электронной подписи. Называется он ГОСТ 2012. До 2019 года мы использовали сертификаты выпущенные под ГОСТ 2001. Получается, что 2019 год переходный между двумя ГОСТ. Сейчас разрешено использовать сертификат и 2001 ГОСТа и 2012. Если Вы перевыпускали или выпускали новый сертификат в 2019 году, то с вероятностью 99% у Вас уже новый ГОСТ 2012. Если Вы выпускали сертификат в 2018, то скорее всего еще 2001. В этом вся проблема. Теперь найдем наши сертификаты!
Обратите внимание, что в новых версиях появился переключатель на разные ГОСТ.
Переключая данный режим, Вы увидите Ваши сертификаты. Попробуйте сначала поставить ГОСТ 2001, если сертификаты не отобразились, поставьте ГОСТ 2012. Я уверен, Вы найдете свой сертификат.
Все, мы нашли наш спрятанный сертификат, теперь идем дальше!
Устанавливаем сертификаты руководителя
Личный сертификат ЭЛН. Руководитель. Выставляете сертификат директора, как правило, он совпадает с сертификатом организации.
А вот дальше не торопитесь!
Устанавливаем правильного криптопровайдера
Теперь нам нужно определиться с криптопровайдером. Звучит страшно и сложно, но сейчас все будет понятно!
Поднимаемся выше и смотрим, сертификат какого ГОСТа мы выбирали. Если у Вас сертификат ГОСТ 2001, то в строке «Криптопровайдер» выбираете пункт «Crypto-Pro GOST R 34.10-2001 Cryptographic Service Provider». Если Ваш сертификат 2012 ГОСТа, то выбираете «Crypto-Pro GOST R 34.10-2012 Cryptographic Service Provider».
Устанавливаем сертификаты ФСС
Тут все очень просто. Во-первых по данной теме у меня уже есть статья, там подробно все описано, поэтому писать еще раз не буду. Прочитать ее можно вот тут.
Просто скажу, что для успешной установки Вам нужно нажать 2 кнопки: «Установить сертификат уполномоченного лица ФСС ЭЛН» и «Установить сертификат уполномоченного лица ФСС».
Далее снова выбираем «Личный сертификат», это сертификат нашей фирмы. В итоге, правильная таблица выглядит так.
Нет заветной кнопки «сохранить». Вот сейчас закрою окно и все пропадёт! Вас тоже это постоянного напрягает? И меня! Но нет, смело закрываем, настройки не собьются!
РЕШЕНО! АРМ ФСС ошибка: набор ключей не определен
Друзья! Если вдруг ошибка у Вас не пропала, экспериментируйте с сертификатами и ГОСТами, со строчкой Криптопровайдер. Вся ошибка кроется именно в этом! Если же у Вас все-таки не получается самостоятельно настроить, то переходите в раздел «ПОМОЩЬ», и я Вам помогу!
Если Вам нужна помощь профессионального системного администратора, для решения данного или какого-либо другого вопроса, перейдите в раздел ПОМОЩЬ, и Вам помогут наши сотрудники.
На этом все! Теперь Вы знаете, что делать, если у Вас ошибка в программе АРМ ФСС ошибка: набор ключей не определен.
Если у Вас появятся вопросы задавайте их в комментариях! Всем удачи и добра!
Присоединяйтесь к нам в социальных сетях, чтобы самыми первыми получать все новости с нашего сайта!
1. Ошибка вызова сервиса передачи/получения данных.
Сообщение не соответствует формату XML Encryption.
Обратитесь к разработчику программного обеспечения, на котором осуществлялось шифрование данных.
Сообщите следующую информацию: Отсутствует элемент EncryptedData class ru.ibs.cryptopro.jcp.crypt.CryptoException
Причины:
-
Неправильные настройки АРМ ЛПУ в части подписания;
-
Неправильные настройки криптопровайдера;
-
Истечение срока действия сертификата, закрытого ключа или лицензии КриптоПро CSP.
Что делать:
1. Выполните настройку АРМ ЛПУ
В меню Администрирование – Настройка подписей для сервисов установите флаг «Шифровать сообщение». После этого Вам необходимо указать Имя сертификата ФСС и Тип контейнера.
Данный сертификат можно скачать на сайте https://lk.fss.ru/cert.html (если Вы настраиваете сервисы для тестирования, то Вам необходимо скачать ТЕСТОВЫЙ сертификат ФСС).
После скачивания установите его на компьютер.
Обратите внимание, Сертификаты МО (должен иметь закрытый ключ) и ФСС должны быть установлены в хранилище «Личное», соответственно тип контейнера выбран «Личные». Вся цепочка вышестоящих сертификатов в папку «Доверенные корневые центры сертификации». Все сертификаты должны быть актуальными и не отозванными.
2. Проверьте настройки криптопровайдера
При использовании криптопровайдера Vipnet CSP рабочей версией является 4.4 и выше.
При использовании криптопровайдера КриптоПро CSP рабочей версией является 4.0 и выше.
Через «Панель управления» в КриптоПро CSP зайдите на вкладку «Сервис», нажмите кнопку «Удалить запомненные пароли…». В окне «Удаление запомненных паролей» выбрать «Удалить все запомненные пароли закрытых ключей: Пользователя».
Проверьте настройки на вкладке «Алгоритмы». В выпадающем списке «Выберите тип CSP» выберите GOST R 34.10-2012. Должны быть установлены следующие параметры:
-
«Параметры алгоритма шифрования» — ГОСТ 28147-89, параметры алгоритма шифрования TK26 Z
-
«Параметры алгоритма подписи» — ГОСТ 34.10-2001, параметры по умолчанию
-
«Параметры алгоритма Диффи-Хеллмана» — ГОСТ 34.10-2001, параметры обмена по умолчанию
Ниже приведен образец настроек в КриптоПро CSP 5.0
Если вы не можете изменить параметры на вкладке «Алгоритмы» (даже запустив КриптоПро CSP от лица администратора), необходимо сделать следующее:
В реестре Windows открыть ключ HKEY_LOCAL_MACHINESOFTWAREWOW6432NodeCrypto ProCryptographyCurrentVersionParameters и изменть значение EnableOIDModify на 1. После чего необходимо перезагрузиться.
После изменения настроек криптопровайдера необходимо перезапустить АРМ ЛПУ.
3. Проверьте сертификаты и лицензии
С помощью системной утилиты certmgr.msc (кнопка Пуск — Выполнить (Найти программы и файлы)) откройте ваш сертификат. Срок действия сертификата не должен быть просрочен.
Запустите КриптоПро CSP. На вкладке «Общие» проверьте срок действия лицензии криптопровайдера.
Откройте вкладку «Сервис» и нажмите кнопку «Протестировать». Выберите контейнер закрытого ключа вашего сертификата. В открывшемся окне тестирования не должно быть ошибок, сообщений об истечении срока действия ключа итп.
2. ORA-20015: Не удалось определить состояние ЭЛН:
Для перехода в статус ‘Продлен’ необходимо добавить период нетрудоспособности;
Для перехода в статус ‘Закрыт’ необходимо заполнить поля: ‘Приступить к работе с: дата’ или ‘Иное: код’;
Для перехода в статус ‘Направление на МСЭ’ необходимо заполнить поле ‘Дата направления в бюро МСЭ’
Причина:
1. В системе существует ЭЛН с таким же номером и такими же данными, которые Вы присылаете (дублирование данных);
2. Присылаемые данные в ЭЛН не соответствуют этапу оформления (заполнения) ЭЛН:
- недостаточно данных для определения состояния ЭЛН;
- внесенные данные относятся к разным этапам оформления (заполнения) ЭЛН.
Что делать:
1. Запросите актуальное состояние ЭЛН из системы, тем самым Вы исключите повторную отправку тех же данных;
2. Выполните необходимую дальнейшую операцию с ЭЛН:
- продление (добавить новый период нетрудоспособности);
- закрытие (добавить информацию о закрытии);
- направление на МСЭ (добавить информацию о направлении на МСЭ).
3. ORA-20013: Не удалось обновить данные. Обновляемая запись потеряла актуальность
Причина:
Вы пытаетесь изменить ЭЛН, который ранее уже был кем-то изменен.
Что делать:
1. Запросите актуальное состояние ЭЛН из системы, тем самым Вы исключите повторную отправку тех же данных;
2. Выполните необходимую дальнейшую операцию с ЭЛН в соответствии с порядком 624н:
- продление (добавить новый период нетрудоспособности);
- закрытие (добавить информацию о закрытии);
- направление на МСЭ (добавить информацию о направлении на МСЭ).
4. ORA-20001: Доступ к ЭЛН с №_________, СНИЛС_________, статусом _________ — ограничен
Причина:
Вы пытаетесь получить данные ЭЛН, который находится в статусе, ограничивающем Ваш доступ. Например, страхователь пытается получить данные ЭЛН, который еще не закрыт медицинской организацией. Согласно процессной модели, страхователь может получить данные ЭЛН для редактированиня только на статусе 030 — Закрыт. Другой пример — бюро МСЭ не может получить данные ЭЛН, который не направлен в бюро МСЭ (статус 040 — Направление на МСЭ)
Что делать:
1. Удостоверьтесь, что номер ЭЛН, данные которого вы хотите получить, введен верно.
2. Дождитесь перехода ЭЛН на статус, который позволит Вам получить данные ЭЛН.
5. Ошибка вызова сервиса передачи / получения данных. Не удалось расшифровать сообщение.
Возможно сообщение было зашифровано на ключе, отличном от ключа уполномоченного лица ФСС.
Проверьте правильность и актуальность ключа уполномоченного лица ФСС.
Причины:
-
В настройках подписания и шифрования в используемом пользователем ПО, в поле «Сертификат уполномоченного лица ФСС» указан неверный сертификат;
-
Используется криптопровайдер Vipnet CSP определенной сборки.
-
При обновлении АРМ ЛПУ на новую версию с поддержкой ЭЛН 2.0 не обновилась библиотека криптографии
Что делать:
Укажите верный сертификат уполномоченного лица ФСС:
- Определите направление отправки запросов — тестовое или продуктивное;
- Скачайте сертификат уполномоченного лица ФСС в разделе ЭЛН на сайте Фонда;
Сертификат для тестовой отправки опубликован на сайте https://lk-test.fss.ru/cert.html
Сертификат для продуктива опубликован на сайте https://lk.fss.ru/cert.html; - Закройте используемое ПО. Удалите из хранилища «Личное» установленные сертификаты ФСС с помощью системной утилиты certmgr.msc (кнопка Пуск — Выполнить (Найти программы и файлы)). Установите скачанный сертификат на компьютер в хранилище «Личное» для текущего пользователя;
- Укажите данный сертификат в соответствующих настройках используемого ПО.
При использовании криптопровайдера Vipnet CSP — рабочей версией является 4.4 и выше.
Удалите АРМ ЛПУ. Удалите каталог C:FssTools. Переустановите АРМ ЛПУ с поддержкой ЭЛН 2.0 заново.
6. Ошибка вызова сервиса передачи/получения данных.
Ошибка шифрования сообщения для получателя. Client received SOAP Fault from server: Fault occurred while processing. Please see the log to find more detail regarding exact cause of the failure.null
Причина:
Вы указали неверный сертификат для шифрования сообщения в поле «Имя сертификата МО»: указанный сертификат может быть использован только для подписания, но не шифрования.
Что делать:
Закажите и установите сертификат, который поддерживает не только операцию подписания, но и операцию шифрования.
7. Ошибка при установке АРМ ЛПУ: Unable to build entity manager factory.
Возникла ошибка при попытке загрузки данных из базы данных. Сообщите администратору следующую информацию:
Unable to build entity manager factory.
Причина:
- Приложение было установлено некорректно (некорректно установлена БД);
- База данных приложения установлена, но не доступна.
Что делать:
1. Запустите установку с правами администратора;
2. Выполните установку программы по шагам инструкции (путь, где лежит инструкция: http://lk.fss.ru/eln.html).
Если установка приложения выполнена в соответствии с инструкцией, но ошибка повторяется, необходимо проверить:
- На компьютере отключена служба postgresql-9.5. Правой кнопкой на значке «Мой компьютер» — Управление — Службы и приложения — Службы, postgresql-9.5 должна быть запущена, запуск — автоматически. Для настройки запуска и работы службы Windows обратитесь к вашему системному администратору;
- В настройках подключения к базе данных указан неправильный пароль для пользователя fss. Проверьте, что в БД этот пароль не менялся, пароль по умолчанию — fss;
- Проверьте каталог установки БД PostgreSQL, по умолчанию — C:postgresql;
- Подключение к БД PostgreSQL осуществляется по умолчанию по порту 5432. Этот порт должен быть открыт и доступен. Для проверки обратитесь к вашему системному администратору;
- Приложение на клиентской машине не может связаться с сервером т.к. установлено какое либо сетевое ограничение. Проверьте, настройки антивирусов, файерволов, прочего сетевого ПО, для клиентской машины должны быть прописаны разрешения подключения к серверу по порту 5432.
8. Ошибка при попытке загрузки данных из базы данных.
Возникла ошибка при попытке загрузки данных из базы данных.
Сообщите следующую информацию: org.hibernate.exception.SQLGrammarException: could not extract ResultSet.
Причина:
Приложение АРМ ЛПУ не может получить данные из базы данных PostgreSQL. Эта ошибка возникает чаще всего после установки обновления, когда приложение обновлено, а база данных PostgreSQL по какой либо причине не обновлена.
Что делать:
- Если приложение установлено на компьютере пользователя, а база данных PostgreSQL — на сервере. Необходимо запустить обновление приложение не только на клиенте, но и на серверной машине;
- Если и приложение, и база данных PostgreSQL установлены на одной машине. Проверьте каталог установки приложения. По умолчанию, приложение АРМ ЛПУ ставится в каталог C:FssTools, а база данных PostgreSQL в каталог C:postgresql. Если при первичной установке была выбрана другая директория для установки приложения — то при обновлении вы должны указать именно эту директорию.
9. Ошибка при попытке зайти в настройки подписи в ПО АРМ ЛПУ.
При попытке зайти в настройки подписи в ПО АРМ ЛПУ выходит ошибка «Internal error. Reason: java.lang.ExceptionInInitializerError» или
«Internal Error. Reason: java.lang.NoClassDefFoundError: Could not initialize class ru.ibs.fss.common.security.signature.COMCryptoAPIClient»
Причина:
Приложение было установлено некорректно (не зарегистрирована библиотека GostCryptography.dll).
Что делать:
1. Необходимо убедиться, что разрядность ОС совпадает с разрядностью установщика приложения.
2. Проверить, установлены ли в системе компоненты Microsoft.Net Framework версии 4 и выше (по умолчанию данные компоненты устанавливаются в C:WindowsMicrosoft.NETFramework или C:WindowsMicrosoft.NETFramework64). Данные компоненты можно скачать с сайта microsoft.com.
3. Проверить, что в папке, куда установлено приложение, имеется файл GostCryptography.dll (по умолчанию данный файл устанавливается в C:FssTools). Если данного файла нет, попробуйте переустановить приложение.
4. Если все верно, в командной строке выполнить:
cd C:FssTools — переходим в папку, в которой находится файл GostCryptography.dll
Для 32-х разрядных ОС C:WindowsMicrosoft.NETFrameworkv4.0.30319RegAsm.exe /registered GostCryptography.dll
Для 64-х разрядных ОС C:WindowsMicrosoft.NETFramework64v4.0.30319RegAsm.exe /registered GostCryptography.dll — с указанием вашего адреса установки компонентов Microsoft.NET.
5. Перезапустить приложение.
10. Ошибка вызова сервиса передачи/получения данных. Invalid element in ru.ibs.fss.eln.ws.FileOperationsLn_wsdl.ROW — SERV1_DT1.
Ошибка: «Ошибка вызова сервиса передачи/получения данных. Invalid element in ru.ibs.fss.eln.ws.FileOperationsLn_wsdl.ROW — SERV1_DT1»
Причина:
Поле «SERV1_DT1» было исключено в новой спецификации 1.1 (14 версия и выше АРМ ЛПУ), изменена строка соединения.
Что делать:
Поменять строку соединения в настройках.
В меню Администрирование – Настройки сервисов ФСС – Строка соединения, укажите следующий адрес сервиса:
- Для работы https://docs.fss.ru/WSLnCryptoV11/FileOperationsLnPort?WSDL
- Для тестирования:
С шифрованием https://docs-test.fss.ru/WSLnCryptoV11/FileOperationsLnPort?WSDL
Без шифрования https://docs-test.fss.ru/WSLnV11/FileOperationsLnPort?WSDL (Обратите внимание, при отправке на сервис без шифрования в настройках электронной подписи должен быть снят флаг «Шифровать сообщение»)
11. Ошибка при старте АРМ ЛПУ «В базе данных АРМ ЛПУ имеется некорректная запись» (Transaction already active)
Причина:
Данная ошибка возникает в случае, когда в какой либо таблице БД приложения сохранены некорректные записи (например, пустое или некорректное значение номера ЭЛН, пустые обязательные поля, строки с одинаковым значением номера ЭЛН, в т.ч. записи-дубли). Если в БД АРМ ЛПУ имеются такие записи, то возможны следующие ошибки:
- Отправка и получение ЭЛН может происходить некорректно, зависать окно статусной строки;
- Невозможно запросить номер ЭЛН из формы ЭЛН.
Что делать:
Для исправления нужно удалить из БД приложения неверную строку (такие записи можно удалить только вручную).
Необходимо подключиться к серверу базы данных PostgreSQL, найти и удалить из базы ошибочную строку. При установке АРМ ЛПУ, вместе с БД и компонентами PostgreSQL устанавливается клиент для подключения к БД. По умолчанию находится здесь: C:postgresqlbinpgAdmin3.exe
В интерфейсе клиента открывается сервер PostgreSQL 9.5. Затем открывается схема fss (пользователь fss, пароль fss) – Схемы – public – Таблицы.
Данные в АРМ ЛПУ хранятся в таблицах:
- fc_eln_data_history — данные листков нетрудоспособнсти;
- fc_eln_periods — сведения о периодах нетрудоспособности;
- ref_ln_numbers — список запрошенных номеров ЭЛН.
Для просмотра таблицы необходимо выделить ее в дереве таблиц и нажать на значок «Просмотр данных в выбранном объекте»
Выделяете и удаляете (delete) строку, которая содержит пустое значение номера ЭЛН или другие ошибки.
Как вариант, для поиска и удаления ошибочных записей возможно использование SQL запроса типа:
select id from fc_eln_data_history where ln_code is null;
delete from fc_eln_data_history where id = ваш id;
Для открытия окна SQL запросов необходимо в главном меню нажать на значок «SQL».
Обратите внимание! При удалении строки ЭЛН, если в этом ЭЛН были созданы периоды нетрудоспособности, сначала необходимо удалить их. Периоды нетрудоспособности хранятся в отдельной таблице fc_eln_periods и связаны с fc_eln_data_history по номеру ЭЛН. Просмотр и удаление периодов аналогично, описанному выше.
12. Установка нового сертификата ФСС.
Установка нового сертификата ФСС описана в инструкции, которую можно скачать по ссылке
https://cabinets.fss.ru/Установка нового сертификата ФСС.docx
13. АРМ Подготовки расчетов для ФСС, ошибка «Набор ключей не определен»
Причина:
ГОСТ сертификата ФСС не соответствует выбранному в настройках криптопровайдеру, либо криптопровайдер не может получить закрытый ключ из контейнера закрытого ключа для выбранного сертификата.
Что делать:
- В настройках АРМ Подписания и шифрования проверить, что указанный криптопровайдер соответствует реально установленному у пользователя;
- В настройках АРМ Подписания и шифрования проверить, что ГОСТы сертификата подписания и сертификата ФСС одинаковы и соответствуют выбранному криптопровайдеру;
- Если используется сертификат ЭП по ГОСТ 2012, откройте сертификат, вкладка «Состав», параметр «Средство электронной подписи».
Необходимо проверить, что средство ЭП соответствует криптопровайдеру, установленному у пользователя; - Если используется сертификат ЭП по ГОСТ 2012 и криптопровайдер КриптоПро, проверьте настройки на вкладке «Алгоритмы». В выпадающем списке «Выберите тип CSP» выберите GOST R 34.10-2012 (256). Должны быть установлены следующие параметры:
-
«Параметры алгоритма шифрования» — ГОСТ 28147-89, параметры алгоритма шифрования TK26 Z
-
«Параметры алгоритма подписи» — ГОСТ 34.10-2001, параметры по умолчанию
-
«Параметры алгоритма Диффи-Хеллмана» — ГОСТ 34.10-2001, параметры обмена по умолчанию
-
- В сертификате отсутствует закрытый ключ. С помощью системной утилиты certmgr.msc откройте сертификат, на вкладке «Общие» должно быть написано «Есть закрытый ключ для этого сертификата»;
- Криптопровайдер не видит контейнер закрытого ключа для этого сертификата. В криптопровайдере КриптоПро CSP перейдите на вкладку «Сервис» и нажмите «Удалить запомненные пароли» — для пользователя;
- Возможно, контейнер поврежден сторонним ПО. Переустановите сертификат заново, с обязательным указанием контейнера;
- Переустановите криптопровайдер.
Я потратил довольно много времени, чтобы выяснить как исправить ошибку java.lang.NoClassDefFoundError в Java.
В этой инструкции я покажу как исправить эти ошибки, раскрою некоторые секреты NoClassDefFoundError и поделюсь своим опытом в этой области.
NoClassDefFoundError – это самая распространенная ошибка в разработке Java. В любом случае, давайте посмотрим, почему это происходит и что нужно сделать для разрешения проблемы.
NoClassDefFoundError в Java возникает, когда виртуальная машина Java не может найти определенный класс во время выполнения, который был доступен во время компиляции.
Например, если у нас есть вызов метода из класса или доступ к любому статическому члену класса, и этот класс недоступен во время выполнения, JVM сгенерирует NoClassDefFoundError.
Важно понимать, что это отличается от ClassNotFoundException, который появляется при попытке загрузить класс только во время выполнения, а имя было предоставлено во время выполнения, а не во время компиляции. Многие Java-разработчики смешивают эти две ошибки и запутываются.
NoClassDefFoundError возникнет, если класс присутствовал во время компиляции, но не был доступен в java classpath во время выполнения. Обычно появляется такая ошибка:
Exception in thread "main" java.lang.NoClassDefFoundError
Разница между java.lang.NoClassDefFoundError и ClassNotFoundException в Java
[ads-pc-3]
java.lang.ClassNotFoundException и java.lang.NoClassDefFoundError оба связаны с Java Classpath, и они полностью отличаются друг от друга.
ClassNotFoundException возникает, когда JVM пытается загрузить класс во время выполнения, т.е. вы даете имя класса во время выполнения, а затем JVM пытается загрузить его, и если этот класс не найден, он генерирует исключение java.lang.ClassNotFoundException.
Тогда как в случае NoClassDefFoundError проблемный класс присутствовал во время компиляции, и поэтому программа успешно скомпилирована, но не доступна во время выполнения по любой причине.
Приступим к решению ошибки java.lang.NoClassDefFoundError.
Нам нужно добавить NoClassDefFoundError в Classpath или проверить, почему он не доступен в Classpath. Там может быть несколько причин, таких как:
- Класс недоступен в Java Classpath.
- Возможно, вы запускаете вашу программу с помощью jar, а класс не определен в атрибуте ClassPath.
- Любой сценарий запуска переопределяет переменную среды Classpath.
Поскольку NoClassDefFoundError является подклассом java.lang.LinkageError, он также может появиться, если библиотека может быть недоступна. - Проверьте наличие java.lang.ExceptionInInitializerError в файле журнала. NoClassDefFoundError из-за сбоя инициализации встречается довольно часто.
- Если вы работаете в среде J2EE, то видимость Class среди нескольких Classloader также может вызвать java.lang.NoClassDefFoundError.
Примеры
- Простой пример NoClassDefFoundError – класс принадлежит отсутствующему файлу JAR, или JAR не был добавлен в путь к классам, или имя jar было изменено кем-то.
- Класс не находится в Classpath, нет способа узнать это, но вы можете просто посмотреть в System.getproperty (“java.classpath”), и он напечатает classpath оттуда, где можно получить представление о фактическом пути к классам во время выполнения.
- Просто попробуйте запустить явно -classpath с тем классом, который, по вашему мнению, будет работать, и если он работает, это верный признак того – что-то переопределяет java classpath.
NoClassDefFoundError в Java из-за исключения в блоке инициализатора
Это еще одна распространенная причина java.lang.NoClassDefFoundError, когда ваш класс выполняет некоторую инициализацию в статическом блоке и если статический блок генерирует исключение, класс, который ссылается на этот класс, получит NoclassDefFoundError.
Смотрите в журнале java.lang.ExceptionInInitializerError, потому что это может вызвать java.lang.NoClassDefFoundError: Could not initialize class.
Как и в следующем примере кода, во время загрузки и инициализации класса, пользовательский класс генерирует Exception из статического блока инициализатора, который вызывает ExceptionInInitializerError при первой загрузке пользовательского класса в ответ на новый вызов User ().
[ads-pc-3]
/** * Java program to demonstrate how failure of static initialization subsequently cause * java.lang.NoClassDefFoundError in Java. * @author Javin Paul */ public class NoClassDefFoundErrorDueToStaticInitFailure { public static void main(String args[]){ List users = new ArrayList(2); for(int i=0; i<2; i++){ try{ users.add(new User(String.valueOf(i))); }catch(Throwable t){ t.printStackTrace(); } } } } class User{ private static String USER_ID = getUserId(); public User(String id){ this.USER_ID = id; } private static String getUserId() { throw new RuntimeException("UserId Not found"); } } Output java.lang.ExceptionInInitializerError at testing.NoClassDefFoundErrorDueToStaticInitFailure.main(NoClassDefFoundErrorDueToStaticInitFailure.java:23) Caused by: java.lang.RuntimeException: UserId Not found at testing.User.getUserId(NoClassDefFoundErrorDueToStaticInitFailure.java:41) at testing.User.(NoClassDefFoundErrorDueToStaticInitFailure.java:35) ... 1 more java.lang.NoClassDefFoundError: Could not initialize class testing.User at testing.NoClassDefFoundErrorDueToStaticInitFailure.main(NoClassDefFoundErrorDueToStaticInitFailure.java:23)
- Поскольку NoClassDefFoundError также является LinkageError, который возникает из-за зависимости от какого-либо другого класса, вы также можете получить java.lang.NoClassDefFoundError, если ваша программа зависит от собственной библиотеки, а соответствующая DLL отсутствует. Помните, что это может также вызвать java.lang.UnsatisfiedLinkError: no dll in java.library.path. Чтобы решить эту проблему, держите dll вместе с JAR.
- Если вы используете файл ANT, создайте JAR, стоит отметить отладку до этого уровня, чтобы убедиться, что скрипт компоновки ANT получает правильное значение classpath и добавляет его в файл manifest.mf.
- Проблема с правами доступа к файлу JAR. Если вы работаете с Java-программой в многопользовательской операционной системе, такой как Linux, вам следует использовать идентификатор пользователя приложения для всех ресурсов приложения, таких как файлы JAR, библиотеки и конфигурации. Если вы используете разделяемую библиотеку, которая используется несколькими приложениями, работающими под разными пользователями, вы можете столкнуться с проблемой прав доступа, например, файл JAR принадлежит другому пользователю и недоступен для вашего приложения.
- Опечатка в конфигурации XML также может вызвать NoClassDefFoundError в Java. Как и большинство Java-фреймворков, таких как Spring, Struts все они используют конфигурацию XML для определения bean-компонентов. В любом случае, если вы неправильно указали имя компонента, он может вызвать ошибку при загрузке другого класса. Это довольно часто встречается в среде Spring MVC и в Apache Struts, где вы получаете множество исключений при развертывании файла WAR или EAR.
- Когда ваш скомпилированный класс, который определен в пакете, не присутствует в том же пакете во время загрузки, как в случае с JApplet.
- Еще одна причина- это нескольких загрузчиков классов в средах J2EE. Поскольку J2EE не использует стандартную структуру загрузчика классов, а зависит от Tomcat, WebLogic, WebSphere и т.д., от того, как они загружают различные компоненты J2EE, такие как WAR-файл или EJB-JAR-файл. Кроме того, если класс присутствует в обоих файлах JAR и вы вызовете метод equals для сравнения этих двух объектов, это приведет к исключению ClassCastException, поскольку объект, загруженный двумя различными загрузчиками классов, не может быть равным.
- Очень редко может происходить Exception in thread “main” java.lang.NoClassDefFoundError: com/sun/tools/javac/Main. Эта ошибка означает, что либо ваш Classpath, PATH или JAVA_HOME не настроен должным образом, либо JDK установка не правильная. Попробуйте переустановить JDK. Замечено, что проблема возникала после установки jdk1.6.0_33 и последующей переустановки JDK1.6.0_25.
Обновлено: 24.05.2023
С середины октября у многих организаций, в том числе медицинских учреждений возникли проблемы в работе с сервисом электронных больничных при подключении к нему из АРМ ЛПУ, медицинских информационных систем, из 1С.
Данная ошибка связана с заменой техслужбой ФСС 17 октября 2021 г. части интернет-адреса сервисов ЭЛН с *docs* на *eln*.
2. В АРМ ЛПУ необходимо открыть «Администрирование» — «Настройки сервисов ФСС» и заменить в строке соединения с сервисом ФСС url-адрес на верный.
1. Ошибка вызова сервиса передачи/получения данных.
Обратитесь к разработчику программного обеспечения, на котором осуществлялось шифрование данных.
Сообщите следующую информацию: Отсутствует элемент EncryptedData class ru.ibs.cryptopro.jcp.crypt.CryptoException
Причины:
Неправильные настройки криптопровайдера.
Что делать:
1. Выполните настройку АРМ ЛПУ
1.1.В меню Администрирование – Настройки сервисов ФСС – Строка соединения, укажите следующий адрес сервиса:
2. Если АРМ ЛПУ уже настроен, проверьте правильность сертификата ФСС, указанного в настройках подписей (Администрирование – Настройка подписей для сервисов): для тестирования указывается ТЕСТОВЫЙ сертификат уполномоченного лица ФСС, для работы – обычный.
«Параметры алгоритма шифрования» – ГОСТ 28147-89, параметры алгоритма шифрования TK26 Z
«Параметры алгоритма подписи» – ГОСТ 34.10-2001, параметры по умолчанию
«Параметры алгоритма Диффи-Хеллмана» – ГОСТ 34.10-2001, параметры обмена по умолчанию
Ниже приведен образец настроек в КриптоПро CSP 5.0
2. ORA-20015: Не удалось определить состояние ЭЛН:
Для перехода в статус ‘Продлен’ необходимо добавить период нетрудоспособности;
Для перехода в статус ‘Закрыт’ необходимо заполнить поля: ‘Приступить к работе с: дата’ или ‘Иное: код’;
Для перехода в статус ‘Направление на МСЭ’ необходимо заполнить поле ‘Дата направления в бюро МСЭ’
Причина:
1. В системе существует ЭЛН с таким же номером и такими же данными, которые Вы присылаете (дублирование данных);
2. Присылаемые данные в ЭЛН не соответствуют этапу оформления (заполнения) ЭЛН:
- недостаточно данных для определения состояния ЭЛН;
- внесенные данные относятся к разным этапам оформления (заполнения) ЭЛН.
Что делать:
1. Запросите актуальное состояние ЭЛН из системы, тем самым Вы исключите повторную отправку тех же данных;
2. Выполните необходимую дальнейшую операцию с ЭЛН в соответствии с порядком 624н:
- продление (добавить новый период нетрудоспособности);
- закрытие (добавить информацию о закрытии);
- направление на МСЭ (добавить информацию о направлении на МСЭ).
3. ORA-20013: Не удалось обновить данные. Обновляемая запись потеряла актуальность
Причина:
Вы пытаетесь изменить ЭЛН, который ранее уже был кем-то изменен.
Что делать:
1. Запросите актуальное состояние ЭЛН из системы, тем самым Вы исключите повторную отправку тех же данных;
2. Выполните необходимую дальнейшую операцию с ЭЛН в соответствии с порядком 624н:
- продление (добавить новый период нетрудоспособности);
- закрытие (добавить информацию о закрытии);
- направление на МСЭ (добавить информацию о направлении на МСЭ).
4. ORA-20001: Доступ к ЭЛН с №_________, СНИЛС_________, статусом _________ – ограничен
Причина:
Вы пытаетесь получить данные ЭЛН, который находится в статусе, ограничивающем Ваш доступ. Например, страхователь пытается получить данные ЭЛН, который еще не закрыт медицинской организацией. Согласно процессной модели, страхователь может получить данные ЭЛН для редактированиня только на статусе 030 – Закрыт. Другой пример – бюро МСЭ не может получить данные ЭЛН, который не направлен в бюро МСЭ (статус 040 – Направление на МСЭ)
Что делать:
1. Удостоверьтесь, что номер ЭЛН, данные которого вы хотите получить, введен верно.
2. Дождитесь перехода ЭЛН на статус, который позволит Вам получить данные ЭЛН.
Проверьте правильность и актуальность ключа уполномоченного лица ФСС.
Причина:
Что делать:
Укажите верный сертификат уполномоченного лица ФСС:
Рекомендуется выполнить следующие действия:
6. Ошибка вызова сервиса передачи/получения данных.
Причина:
Что делать:
Закажите и установите сертификат, который поддерживает не только операцию подписания, но и операцию шифрования.
7. Ошибка при установке АРМ ЛПУ: Unable to build entity manager factory.
Возникла ошибка при попытке загрузки данных из базы данных. Сообщите администратору следующую информацию:
Unable to build entity manager factory.
Причина:
- Приложение было установлено некорректно (некорректно установлена БД);
- База данных приложения установлена, но не доступна.
Что делать:
1. Запустите установку с правами администратора;
Если установка приложения выполнена в соответствии с инструкцией, но ошибка повторяется, необходимо проверить:
- На компьютере отключена служба postgresql-9.5. Правой кнопкой на значке «Мой компьютер» – Управление – Службы и приложения – Службы, postgresql-9.5 должна быть запущена, запуск – автоматически. Для настройки запуска и работы службы Windows обратитесь к вашему системному администратору;
- В настройках подключения к базе данных указан неправильный пароль для пользователя fss. Проверьте, что в БД этот пароль не менялся, пароль по умолчанию – fss;
- Проверьте каталог установки БД PostgreSQL, по умолчанию – C:postgresql;
- Подключение к БД PostgreSQL осуществляется по умолчанию по порту 5432. Этот порт должен быть открыт и доступен. Для проверки обратитесь к вашему системному администратору;
- Приложение на клиентской машине не может связаться с сервером т.к. установлено какое либо сетевое ограничение. Проверьте, настройки антивирусов, файерволов, прочего сетевого ПО, для клиентской машины должны быть прописаны разрешения подключения к серверу по порту 5432.
8. Ошибка при попытке загрузки данных из базы данных.
Возникла ошибка при попытке загрузки данных из базы данных.
Сообщите следующую информацию: org.hibernate.exception.SQLGrammarException: could not extract ResultSet.
Причина:
Приложение АРМ ЛПУ не может получить данные из базы данных PostgreSQL. Эта ошибка возникает чаще всего после установки обновления, когда приложение обновлено, а база данных PostgreSQL по какой либо причине не обновлена.
Что делать:
- Если приложение установлено на компьютере пользователя, а база данных PostgreSQL – на сервере. Необходимо запустить обновление приложение не только на клиенте, но и на серверной машине;
- Если и приложение, и база данных PostgreSQL установлены на одной машине. Проверьте каталог установки приложения. По умолчанию, приложение АРМ ЛПУ ставится в каталог C:FssTools, а база данных PostgreSQL в каталог C:postgresql. Если при первичной установке была выбрана другая директория для установки приложения – то при обновлении вы должны указать именно эту директорию.
9. Ошибка при попытке зайти в настройки подписи в ПО АРМ ЛПУ.
При попытке зайти в настройки подписи в ПО АРМ ЛПУ выходит ошибка «Internal error. Reason: java.lang.ExceptionInInitializerError» или
«Internal Error. Reason: java.lang.NoClassDefFoundError: Could not initialize class ru.ibs.fss.common.security.signature.COMCryptoAPIClient»
Причина:
Что делать:
1. Необходимо убедиться, что разрядность ОС совпадает с разрядностью установщика приложения.
3. Проверить, что в папке, куда установлено приложение, имеется файл GostCryptography.dll (по умолчанию данный файл устанавливается в C:FssTools). Если данного файла нет, попробуйте переустановить приложение.
4. Если все верно, в командной строке выполнить:
cd C:FssTools — переходим в папку, в которой находится файл GostCryptography.dll
5. Перезапустить приложение.
10. Ошибка вызова сервиса передачи/получения данных. Invalid element in ru.ibs.fss.eln.ws.FileOperationsLn_wsdl.ROW – SERV1_DT1.
Ошибка: «Ошибка вызова сервиса передачи/получения данных. Invalid element in ru.ibs.fss.eln.ws.FileOperationsLn_wsdl.ROW – SERV1_DT1»
Причина:
Поле «SERV1_DT1» было исключено в новой спецификации 1.1 (14 версия и выше АРМ ЛПУ), изменена строка соединения.
Что делать:
Поменять строку соединения в настройках.
В меню Администрирование – Настройки сервисов ФСС – Строка соединения, укажите следующий адрес сервиса:
11. Ошибка при старте АРМ ЛПУ «В базе данных АРМ ЛПУ имеется некорректная запись» (Transaction already active)
Причина:
Данная ошибка возникает в случае, когда в какой либо таблице БД приложения сохранены некорректные записи (например, пустое или некорректное значение номера ЭЛН, пустые обязательные поля, строки с одинаковым значением номера ЭЛН, в т.ч. записи-дубли). Если в БД АРМ ЛПУ имеются такие записи, то возможны следующие ошибки:
- Отправка и получение ЭЛН может происходить некорректно, зависать окно статусной строки;
- Невозможно запросить номер ЭЛН из формы ЭЛН.
Что делать:
Для исправления нужно удалить из БД приложения неверную строку (такие записи можно удалить только вручную).
Необходимо подключиться к серверу базы данных PostgreSQL, найти и удалить из базы ошибочную строку. При установке АРМ ЛПУ, вместе с БД и компонентами PostgreSQL устанавливается клиент для подключения к БД. По умолчанию находится здесь: C:postgresqlinpgAdmin3.exe
В интерфейсе клиента открывается сервер PostgreSQL 9.5. Затем открывается схема fss (пользователь fss, пароль fss) – Схемы – public – Таблицы.
Данные в АРМ ЛПУ хранятся в таблицах:
- fc_eln_data_history – данные листков нетрудоспособнсти;
- fc_eln_periods – сведения о периодах нетрудоспособности;
- ref_ln_numbers – список запрошенных номеров ЭЛН.
Обратите внимание! При удалении строки ЭЛН, если в этом ЭЛН были созданы периоды нетрудоспособности, сначала необходимо удалить их. Периоды нетрудоспособности хранятся в отдельной таблице fc_eln_periods и связаны с fc_eln_data_history по номеру ЭЛН. Просмотр и удаление периодов аналогично, описанному выше.
12. Установка нового сертификата ФСС.
Причина:
ГОСТ сертификата ФСС не соответствует выбранному в настройках криптопровайдеру, либо криптопровайдер не может получить закрытый ключ из контейнера закрытого ключа для выбранного сертификата.
Ответ
ФСС отвечает мне:
.
–
–
–
GETLNINS_4210000443_2018_11_30_00001
0
ORA-20001: Отсутствует подпись головной организации
Может ФСС не нравится мой ключ которым я подписал блок текста внутри body.
Поделитесь кто где брал ключи.
Меню пользователя @ saisai
30.11.2018, 10:37
Нужно на Spring написать сервис логирования запросов Hibernate сучностей
Добрый день, Нужно на Spring написать сервис логирования запросов Hibernate сучностей.
Информация обновлена: 13.11.2018
При запросе больничного в кабинете страхователя ФСС столкнулись с такой ошибкой:
Добрый день. При заполнении больничного выдает ошибку (УПП: 1.3.173.1)
Временные проблемы в ФСС или кардинально поменяли принцип работы с больничными?
Похоже проблема на стороне ФСС . из 10 попыток, может 1 раз заполнить.
Интересно, что ошибки разные выдает ..
(4) по этому поводу рекомендую схемы у себя локально положить — что бы меньше не нужных обращений в ФСС было
http://www.w3.org/2001/XMLSchema»
xmlns:wsdl http://schemas.xmlsoap.org/wsdl/»» target=»_blank»>http://schemas.xmlsoap.org/wsdl/»
xmlns:soap http://schemas.xmlsoap.org/wsdl/soap/»» target=»_blank»>http://schemas.xmlsoap.org/wsdl/soap/»
xmlns:ins http://www.fss.ru/integration/types/eln/ins/v01″» target=»_blank»>http://www.fss.ru/integration/types/eln/ins/v01″
xmlns:fs http://www.fss.ru/integration/ws/fault/v01″» target=»_blank»>http://www.fss.ru/integration/ws/fault/v01″
xmlns http://www.fss.ru/integration/ws/eln/ins/v01″» target=»_blank»>http://www.fss.ru/integration/ws/eln/ins/v01″
name=»FileOperationsLnService»
targetNamespace http://www.fss.ru/integration/ws/eln/ins/v01″>» target=»_blank»>http://www.fss.ru/integration/ws/eln/ins/v01″>
http://dkb/LnService/Faults.wsdl»
namespace http://www.fss.ru/integration/ws/fault/v01″>» target=»_blank»>http://www.fss.ru/integration/ws/fault/v01″>
Вечером проверял более менее работает, а днем вообще никак .. расчетчики воют
(5) Не могу понять, как схемы можно локально выложить, они же в запросе указаны ?
1С первую и вторую схему вроде как адаптировали под локальное использование — то что в общем макете, но вот остальные оставили снаружи
ох, бида-бида. Поанализировал фиддлером запросы на получение данных больничного по номеру и увидел, что 1С дергает WSDL и XSD в количестве 11 штук аж 4 раза подряд одни и те же. Это ж в несколько раз увеличивает вероятность сбоя. И если так делает весь 1Совский софт по всей России. так ведь что угодно положить можно.
(11) не, тут дело не в ФСС. Вот мы по номеру выкачиваем больничный в УПП. Там дергается 9 штук XSD-схем и 2 WSDL-я.
Я бы понял если бы это произошло один раз. Но это делается четыре раза с одними и теми же схемами — вместо того чтобы один раз все вытащить, построить интерфейс и дальше просто обращаться к соответствующей точке (или точкам) входа. Понятно, что любое кэширование схем очень сильно поможет от косяков в таком случае.
И сбои происходят каждый раз в разных местах. Если бы вытаскивалось это все один раз — работа бы шла в четыре раза стабильнее.
(13) Три файлика с самыми длинными именами вы по каким ссылкам качали? Фиддлер мне их не показал.
Остальные схемки получилось вытянуть.
(18) и я так понимаю, в схемках после выкачки вы правили секции import, чтобы рекурсивно тоже качалось с локального сервера.
Я соорудил вот такой батник
и все получилось очень даже неплохо. wget и nhrt надо поставить, понятное дело.
(20) нужен веб-сервер. Я использовал IIS от Windows 2008 R2. Можно и апач, это кому как удобнее.
Выглядит это примерно вот так
http://www.fss.ru/integration/types/dic/fault/v01″ schemaLocation https://eln.fss.ru/ws-insurer-crypto-v20/FileOperationsLnService?xsd=../../xsd/v01/dic/FaultCode.xsd»/>» target=»_blank»>https://eln.fss.ru/ws-insurer-crypto-v20/FileOperationsLnService?xsd=../../xsd/v01/dic/FaultCode.xsd»/>
А дальнейшее зависит от вашей конфигурации 1С. В УПП необходимые ссылки находятся в общем макете ОбменДаннымиФССЭЛНОписаниеВебСервиса. Его нужно снять с замка и в секциях import поменять ссылки так, чтобы они ссылались на ваш локальные схемы. У меня это выглядит примерно так
http://www.fss.ru/integration/types/organization/v01″ schemaLocation http://srv-02/LnService/Organization.xsd»/>» target=»_blank»>http://srv-02/LnService/Organization.xsd»/>
Не работает с пятницы, так же разные ошибки при запросе заполнить БЛ. Сертификат поставили новый от 15.12.2021
У кого как?
(23) норм. Сегодня проверял со своими изменениями от (19)-(21) — супер, шустренько. Серты свежие с лк.фсс.ру, второй от 17, нижний от 15.12.2021.
И да, RomaH, спасибо за плодотворную идею. По-хорошему, это можно было бы оформить как публикациб на ИС.
соответственно после добавления «наших» данных в больничный, подписания и отправки ФСС ругается — что наш ЭЛН не соответствует тому что у них.
так что — это еще одна мина замедленного действия от 1С
(26) Ну не сказать чтоб не ограничена — 300 символов.
В ЗУП не знаю. В УПП встречается в доке НачислениеПоБольничномуЛисту, ТЧ ОсвобождениеОтРаботыВЛисткеНетрудоспособности, атр ДолжностьВрача — там 300. Затем: РеестрСведенийВФССОПособияхПоНетрудоспособности, ТЧ РаботникиОрганизации. Там аж 6 атрибутов с должностями врачей. Все по 300 символов. Речь про последнюю УПП 173.2.
(30) Не облегчайте жизнь ФСС, то бишь — делаем запрос ФСС — ошибка, тогда лезем у себе )))
Если ошибки нет, заменяем у себя все файлы новыми (а может и такими же, не сравнивать же их ей богу) полученными от фсс
(31) >> делаем запрос ФСС — ошибка, тогда лезем у себе
это очень долго, даже с шустрым инетом. Я как сделал локальные схемы — офигел насколько шустро этот запрос больничных стал летать. Небо и земля. Ну его нафиг этот ФСС, чем меньше туда лазишь тем лучше
(30) «Теперь вот нужно придумывать костыли по предварительной проверке этих файлов перед загрузкой больничного на предмет изменения.»
зачем? — насколько я понимаю это . «правила» создания и чтения xml — если «правила» поменяются, то .
(35) она от релиза не зависит. Отлуп выдают серверы ФСС, скорее всего, по чрезмерному количеству запросов. А может еще по какой причине.
Рабочий способ решения описан в этой ветке. Ну или ждать изменений API или улучшения ФССом своих серваков.
я бы на это сильно не рассчитывал, ребят. Обмен ЭДО с ФСС в 173.3 не поменялся по сравнению со 173.2, во всяком случае мой измененный модуль так и остался измененным. А серверы ФСС и раньше иногда работали стабильно (см. (22)), а иногда начинали вести себя странно. Скорее всего, сейчас опять период стабильной работы. Дай Бог, чтобы он продлился долго.
(40) в УПП173.3 полностью переработали Макет со правилами обмена с ФСС — убрали из него импорт. И теперь он совсем не работает. При попытке загрузить схему обмена выдает ошибку «Неверный формат». Пришлось на макет из 173.2 откатывать (с модификациями конечно). Другого решения пока нет.
(41) ну если они пихнули все схемы в один макет — то это наоборот хорошо. Значит, колхозинг из (19) больше не нужен
Действительно, в 173.3 1С запихнула все схемы локально в один макет. Я изначально проверил только модуль ОбменСведениямиОПособияхСФСС, который не изменился, но не посмотрел в сам загружаемый макет — а зря, потому что изменился как раз он. Ну что имею сказать. это ж очень хорошо, наши мучения с ФСС в существенной мере закончились.
(43) а что с «неверным форматом» из (41)
ну как? сегодня смотрю вообще затык — ФСС даже честно признался. что у них внутрення ошибка сервера
(44) вчера гонял — все норм было, во всяком случае, больнюковые данные по номеру получало. Да и до этого — 173.3 у меня с конца января, и если бы были косяки, то пожаловались бы. По-видимому, работало все.
попробовал прямо сейчас, в 15:38 по Москве — тягает данные больничного со штатным макетом и кодом 173.3.
(46) А у меня не тянет. Вываливается в ошибку и хоть ты тресни. Может в платформе дело? У меня 8.3.18.1433
Вот текст ошибки:
по причине:
Неверный формат.
по причине:
Причина появления ошибки ФСС
Решение проблемы
Начать решение нужно с настройки АРМ ЛПУ. Для этого стоит сделать:
- Запустить меню Администрирование и запустить Настройку сервисов ФСС. После этого находим Строка соединения и туда нужно вписать некоторые данные.
Строка соединения в настройке сервисов ФСС
Заполняем тип контейнера и имя сертификата
Если же вы хотите использовать его для работы, то в имени ФСС укажите обычное и тогда всё будет работать.
Читайте также:
- Сообщение это последовательность сигналов оболочка для информации
- Отцы и дети советы старшеклассникам обж 10 класс сообщение
- Как закончить сообщение в деловой переписке
- Печать одежды на 3d принтере сообщение
- Краткое сообщение о замке малахайд
I’ve tried both the examples in Oracle’s Java Tutorials. They both compile fine, but at run time, both come up with this error:
Exception in thread "main" java.lang.NoClassDefFoundError: graphics/shapes/Square
at Main.main(Main.java:7)
Caused by: java.lang.ClassNotFoundException: graphics.shapes.Square
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 1 more
I think I might have the Main.java
file in the wrong folder.
Here is the directory hierarchy:
graphics
├ Main.java
├ shapes
| ├ Square.java
| ├ Triangle.java
├ linepoint
| ├ Line.java
| ├ Point.java
├ spaceobjects
| ├ Cube.java
| ├ RectPrism.java
And here is Main.java
:
import graphics.shapes.*;
import graphics.linepoint.*
import graphics.spaceobjects.*;
public class Main {
public static void main(String args[]) {
Square s = new Square(2, 3, 15);
Line l = new Line(1, 5, 2, 3);
Cube c = new Cube(13, 32, 22);
}
}
What am I doing wrong here?
UPDATE
After I put put the Main
class into the graphics
package (I added package graphics;
to it), set the classpath to «_test» (folder containing graphics), compiled it, and ran it using java graphics.Main
(from the command line), it worked.
Really late UPDATE #2
I wasn’t using Eclipse (just Notepad++ and the JDK), and the above update solved my problem. However, it seems that many of these answers are for Eclipse and IntelliJ IDEA, but they have similar concepts.
asked Jul 31, 2013 at 15:00
Jonathan LamJonathan Lam
16.7k16 gold badges67 silver badges93 bronze badges
11
After you compile your code, you end up with .class
files for each class in your program. These binary files are the bytecode that Java interprets to execute your program. The NoClassDefFoundError
indicates that the classloader (in this case java.net.URLClassLoader
), which is responsible for dynamically loading classes, cannot find the .class
file for the class that you’re trying to use.
Your code wouldn’t compile if the required classes weren’t present (unless classes are loaded with reflection), so usually this exception means that your classpath doesn’t include the required classes. Remember that the classloader (specifically java.net.URLClassLoader
) will look for classes in package a.b.c in folder a/b/c/ in each entry in your classpath. NoClassDefFoundError
can also indicate that you’re missing a transitive dependency of a .jar file that you’ve compiled against and you’re trying to use.
For example, if you had a class com.example.Foo
, after compiling you would have a class file Foo.class
. Say for example your working directory is .../project/
. That class file must be placed in .../project/com/example
, and you would set your classpath to .../project/
.
Side note: I would recommend taking advantage of the amazing tooling that exists for Java and JVM languages. Modern IDEs like Eclipse and IntelliJ IDEA and build management tools like Maven or Gradle will help you not have to worry about classpaths (as much) and focus on the code! That said, this link explains how to set the classpath when you execute on the command line.
answered Jul 31, 2013 at 15:05
2
I’d like to correct the perspective of others on NoClassDefFoundError
.
NoClassDefFoundError
can occur for multiple reasons like:
- ClassNotFoundException — .class not found for that referenced class irrespective of whether it is available at compile time or not(i.e base/child class).
- Class file located, but Exception raised while initializing static variables
- Class file located, Exception raised while initializing static blocks
In the original question, it was the first case which can be corrected by setting CLASSPATH to the referenced classes JAR file or to its package folder.
What does it mean by saying «available in compile time»?
- The referenced class is used in the code.
E.g.: Two classes, A and B (extends A). If B is referenced directly in the code, it is available at compile time, i.e.,A a = new B();
What does it mean by saying «not available at compile time»?
- The compile time class and runtime class are different, i.e., for example base class is loaded using classname of child class for example
Class.forName(«classname»)
E.g.: Two classes, A and B (extends A). Code has
A a = Class.forName("B").newInstance();
answered Jan 23, 2014 at 9:09
p1nkrockp1nkrock
1,7761 gold badge10 silver badges6 bronze badges
7
If you got one of these errors while compiling and running:
-
NoClassDefFoundError
-
Error: Could not find or load main class hello
-
Exception in thread «main» java.lang.NoClassDefFoundError:javaTest/test/hello
(wrong name: test/hello)at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(Unknown Source) at java.security.SecureClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.access$100(Unknown Source) at java.net.URLClassLoader$1.run(Unknown Source) at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)
————————— Solution ————————
The problem is mostly in packages organization. You should arrange your classes in folders properly regarding to the package classifications in your source code.
On compiling process, use this command:
javac -d . [FileName.java]
To run the class, please use this command:
java [Package].[ClassName]
answered Oct 7, 2014 at 11:23
samisami
3591 gold badge4 silver badges5 bronze badges
2
One possible reason for this NoClassDefFoundError
might be that the class is present in the classpath at Compile time
, but it doesn’t exist in the classpath at Runtime
.
If you’re using Eclipse, make sure you have the shapes
, linepoints
and the spaceobjects
as entries in the .classpath
file.
answered Jul 31, 2013 at 15:02
Konstantin YovkovKonstantin Yovkov
61.9k8 gold badges100 silver badges147 bronze badges
2
java.lang.NoClassDefFoundError
indicates that something was found at compile time, but not at run time. Maybe you just have to add it to the classpath.
answered Jul 31, 2013 at 15:03
sschrasssschrass
6,9646 gold badges43 silver badges62 bronze badges
1
NoClassDefFoundError in Java:
Definition:
NoClassDefFoundError will come if a class was present during compile time but not available in java classpath during runtime. Normally you will see below line in log when you get NoClassDefFoundError:
Exception in thread «main» java.lang.NoClassDefFoundError
Possible Causes:
-
The class is not available in Java Classpath.
-
You might be running your program using jar command and class was not defined in manifest file’s ClassPath attribute.
-
Any start-up script is overriding Classpath environment variable.
-
Because NoClassDefFoundError is a subclass of java.lang.LinkageError it can also come if one of it dependency like native library may not available.
-
Check for java.lang.ExceptionInInitializerError in your log file. NoClassDefFoundError due to the failure of static initialization is quite common.
-
If you are working in J2EE environment than the visibility of Class among multiple Classloader can also cause java.lang.NoClassDefFoundError, see examples and scenario section for detailed discussion.
Possible Resolutions:
-
Verify that all required Java classes are included in the application’s classpath. The most common mistake is not to include all the necessary classes, before starting to execute a Java application that has dependencies on some external libraries.
-
The classpath of the application is correct, but the Classpath environment variable is overridden before the application’s execution.
-
Verify that the aforementioned ExceptionInInitializerError does not appear in the stack trace of your application.
Resources:
3 ways to solve java.lang.NoClassDefFoundError in Java J2EE
java.lang.NoClassDefFoundError – How to solve No Class Def Found Error
answered Aug 8, 2016 at 8:19
AftabAftab
2,85330 silver badges40 bronze badges
The no class definition exception occurs when the intended class is not found in the class path.
At compile time class: Class was generated from the Java compiler, but somehow at run time the dependent class is not found.
Let’s go through one simple example:
public class ClassA{
public static void main(String args[]){
// Some gibberish code...
String text = ClassB.getString();
System.out.println("Text is: " + text);
}
}
public class ClassB{
public static String getString(){
return "Testing some exception";
}
}
Now let’s assume that the above two Java source code are placed in some folder, let’s say «NoClassDefinationFoundExceptionDemo»
Now open a shell (assuming Java is already being set up correctly)
-
Go to folder «NoClassDefinationFoundExceptionDemo»
-
Compile Java source files
javac ClassB
javac ClassA -
Both files are compiled successfully and generated class files in the same folder as ClassA.class and ClassB.class
-
Now since we are overriding ClassPath to the current working director, we execute the following command
java -cp . ClassA
and it worked successfully and you will see the output on the screen -
Now let’s say, you removed ClassB.class file from the present directory.
And now you execute the command again.
java -cp . ClassA Now it will greet you with NoClassDefFoundException. As ClassB which is a dependency for ClassA is not found in the classpath (i.e., the present working directory).
answered Mar 22, 2015 at 16:28
bharatjbharatj
2,2671 gold badge24 silver badges25 bronze badges
If your project is in a package like com.blahcode
and your class is called Main
, the compiled files may be output in a directory structure like ./out/com/blahcode/Main.class
. This is especially true for IntelliJ IDEA.
When trying to run from a shell or cmd, you need to cd
to that which contains com
as a sub-directory.
cd out
java -classpath . com.blahcode.Main
answered Sep 27, 2014 at 23:32
HypershadsyHypershadsy
3884 silver badges13 bronze badges
If you are «starting» a class from a JAR file, make sure to start with the JAR full path. For example, (if your «main class» is not specified in Manifest):
java -classpath "./dialer.jar" com.company.dialer.DialerServer
And if there are any dependencies, such dependencies to other JAR files, you can solve such a dependency
- either by adding such JAR files (full path to each JAR file) to the class path. For example,
java -classpath "./libs/phone.jar;./libs/anotherlib.jar;./dialer.jar" com.company.dialer.DialerServer
- or by editing the JAR manifest by adding «dependency JAR filess» to the manifest. Such a manifest file might look like:
Manifest-Version: 1.0
Class-Path: phone.jar anotherlib.jar
Build-Jdk-Spec: 1.8
Main-Class: com.company.dialer.DialerServer
- or (if you are a developer having source code) you can use Maven to prepare a manifest for you by adding to the *.pom file:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>com.company.dialer.DialerServer</mainClass>
<!-- Workaround for Maven bug #MJAR-156 (https://jira.codehaus.org/browse/MJAR-156) -->
<useUniqueVersions>false</useUniqueVersions>
</manifest>
</archive>
</configuration>
</plugin>
Please note that the above example uses ;
as a delimiter in classpath (it is valid for the Windows platform). On Linux, replace ;
by :
.
For example,
java -classpath ./libs/phone.jar:./libs/anotherlib.jar:./dialer.jar
com.company.dialer.DialerServer
answered May 28, 2021 at 8:21
walter33walter33
6965 silver badges11 bronze badges
I have faced with the problem today. I have an Android project and after enabling multidex
the project wouldn’t start anymore.
The reason was that I had forgotten to call the specific multidex method that should be added to the Application class
and invoked before everything else.
MultiDex.install(this);
Follow this tutorial to enable multidex correctly. https://developer.android.com/studio/build/multidex.html
You should add these lines to your Application class
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
answered Nov 24, 2017 at 14:50
CROSPCROSP
4,4794 gold badges38 silver badges89 bronze badges
After working on a NetBeans project for many months, I suddenly got the NoClassDefFoundError message shortly after getting a «Low Memory» alert. Doing a Clean rebuild didn’t help, but closing NetBeans altogether and reopening the project there were no error reports.
answered Apr 14, 2016 at 13:51
Ed SEd S
2294 silver badges20 bronze badges
This answer is specific to a java.lang.NoClassDefFoundError happening in a service:
My team recently saw this error after upgrading an rpm that supplied a service. The rpm and the software inside of it had been built with Maven, so it seemed that we had a compile time dependency that had just not gotten included in the rpm.
However, when investigating, the class that was not found was in the same module as several of the classes in the stack trace. Furthermore, this was not a module that had only been recently added to the build. These facts indicated it might not be a Maven dependency issue.
The eventual solution: Restart the service!
It appears that the rpm upgrade invalidated the service’s file handle on the underlying JAR file. The service then saw a class that had not been loaded into memory, searched for it among its list of jar file handles, and failed to find it because the file handle that it could load the class from had been invalidated. Restarting the service forced it to reload all of its file handles, which then allowed it to load that class that had not been found in memory right after the rpm upgrade.
answered Dec 2, 2016 at 16:33
2
For my project, what solved the issue was that Chrome browser and chromedriver were not compatibles. I had a very old version of the driver that could not even open the browser. I just downloaded the latest version of both and problem solved.
How did I discover the issue? Because I ran my project using the Selenium native Firefox driver with an old version of FF included with my application. I realized the problem was incompatibility between browser and driver.
Hope this can help anyone with a similar issue as mine, that generated this same Error Message.
answered Jan 4, 2019 at 19:37
Kyon PerezKyon Perez
1241 silver badge13 bronze badges
I’m developing an Eclipse based application also known as RCP (Rich Client Platform).
And I have been facing this problem after refactoring (moving one class from an plugIn to a new one).
Cleaning the project and Maven update didn’t help.
The problem was caused by the Bundle-Activator which haven’t been updated automatically. Manual update of the Bundle-Activator under MANIFEST.MF in the new PlugIn has fixed my problem.
answered Apr 6, 2018 at 8:41
If you are using more than one module, you should have
dexOptions {
preDexLibraries = false
}
in your build file.
Pang
9,480146 gold badges81 silver badges122 bronze badges
answered Apr 20, 2017 at 8:47
I had the same issue with my Android development using Android studio. Solutions provided are general and did not help me (at least for me).
After hours of research, I found the following solution and it may help to Android developers who are doing development using Android Studio.
Modify the setting as below:
Preferences → Build, Execution, Deployment → Instant Run → *uncheck the first option.
With this change I am up and running.
answered Apr 28, 2016 at 17:29
maskmask
6,1323 gold badges24 silver badges23 bronze badges
My two cents in this chain:
Ensure that the classpath contains full paths (/home/user/lib/some_lib.jar
instead of ~/lib/some_lib.jar
) otherwise you can still face NoClassDefFoundError
error.
answered Jun 17, 2015 at 15:02
khkarenskhkarens
1,2951 gold badge11 silver badges15 bronze badges
1
Don’t use test classes outside the module
I do not have a solution, just another flavour of the «present at compilation, absent at run time» case.
I was trying to use a very convenient method from a JUnit test class from another test class which resides in a different module. That’s a no-no, since test code is not part of the packaged jar, but I didn’t realize because it appears visible for the user class from within Eclipse.
My solution was to place the method in a existing utilities class that is part of the production code.
answered Dec 5, 2019 at 16:01
manuelvigarciamanuelvigarcia
1,5461 gold badge20 silver badges32 bronze badges
I get NoClassFoundError when classes loaded by the runtime class loader cannot access classes already loaded by the Java rootloader. Because the different class loaders are in different security domains (according to Java) the JVM won’t allow classes already loaded by the rootloader to be resolved in the runtime loader address space.
Run your program with ‘java -javaagent:tracer.jar [YOUR ‘java’ ARGUMENTS]’
It produces output showing the loaded class, and the loader environment that loaded the class. It’s very helpful tracing why a class cannot be resolved.
// ClassLoaderTracer.java
// From: https://blogs.oracle.com/sundararajan/entry/tracing_class_loading_1_5
import java.lang.instrument.*;
import java.security.*;
// manifest.mf
// Premain-Class: ClassLoadTracer
// jar -cvfm tracer.jar manifest.mf ClassLoaderTracer.class
// java -javaagent:tracer.jar [...]
public class ClassLoadTracer
{
public static void premain(String agentArgs, Instrumentation inst)
{
final java.io.PrintStream out = System.out;
inst.addTransformer(new ClassFileTransformer() {
public byte[] transform(ClassLoader loader, String className, Class classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer) throws IllegalClassFormatException {
String pd = (null == protectionDomain) ? "null" : protectionDomain.getCodeSource().toString();
out.println(className + " loaded by " + loader + " at " + new java.util.Date() + " in " + pd);
// dump stack trace of the thread loading class
Thread.dumpStack();
// we just want the original .class bytes to be loaded!
// we are not instrumenting it...
return null;
}
});
}
}
answered Sep 9, 2015 at 11:56
codeDrcodeDr
1,52517 silver badges20 bronze badges
It happened to me in Android Studio.
The solution that worked for me: just restart Android Studio.
answered Apr 13, 2016 at 11:21
yanishyanish
2572 silver badges15 bronze badges
Check that if you have a static handler in your class. If so, please be careful, cause static handler only could be initiated in thread which has a looper, the crash could be triggered in this way:
-
Firstly, create the instance of class in a simple thread and catch the crash.
-
Then call the field method of Class in main thread, you will get the NoClassDefFoundError.
Here is the test code:
public class MyClass{
private static Handler mHandler = new Handler();
public static int num = 0;
}
In your onCreate method of the Main activity, add the test code part:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//test code start
new Thread(new Runnable() {
@Override
public void run() {
try {
MyClass myClass = new MyClass();
} catch (Throwable e) {
e.printStackTrace();
}
}
}).start();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
MyClass.num = 3;
// end of test code
}
There is a simple way to fix it using a handlerThread to the init handler:
private static Handler mHandler;
private static HandlerThread handlerThread = new HandlerThread("newthread");
static {
handlerThread.start();
mHandler = new Handler(handlerThread.getLooper(), mHandlerCB);
}
answered Jan 16, 2017 at 3:51
MichaelMichael
6466 silver badges16 bronze badges
0
One source of error for this exception could stem from inconsistent definitions for Proguard, e.g. a missing
-libraryJars «path.to.a.missing.jar.library».
This explains why compilation and running works fine, given that the JAR file is there, while clean and build fails. Remember to define the newly added JAR libraries in the ProGuard setup!
Note that error messages from ProGuard are really not up to standard, as they are easily confused with similar Ant messages arriving when the JAR file is not there at all. Only at the very bottom will there be a small hint of ProGuard in trouble. Hence, it is quite logical to start searching for traditional classpath errors, etc., but this will be in vain.
Evidently, the NoClassDefFound exception will be the results when running, e.g., the resulting executable JAR file built and based on a lack of ProGuard consistency. Some call it ProGuard «Hell».
answered Nov 2, 2017 at 20:04
carlcarl
5033 silver badges10 bronze badges
I use the FileSync plugin for Eclipse, so I can live debug on Tomcat. I received NoClassFoundError
, because I had added a sync entry for the bin
directory in the Eclipse workspace => classes
in the metadata
for Tomcat, but I hadn’t also added a folder sync for the extlib
directory in Eclipse =>
C:UsersStuarteclipse-workspace.metadata.pluginsorg.eclipse.wst.server.coretmp0webappsmyAppWEB-INFlib
answered Dec 6, 2017 at 10:56
If you recently added multidex support in Android Studio like this:
// To support MultiDex
implementation 'com.android.support:multidex:1.0.1'
So your solution is just extend from MultiDexApplication instead of Application:
public class MyApp extends MultiDexApplication {
answered Apr 30, 2018 at 6:36
Hamid ZandiHamid Zandi
2,65623 silver badges32 bronze badges
In my environment, I encountered this issue in a unit test. After appending one library dependency to *.pom, that’s fixed.
Example:
Error message:
java.lang.NoClassDefFoundError: com/abc/def/foo/xyz/Iottt
POM content:
<dependency>
<groupId>com.abc.def</groupId>
<artifactId>foo</artifactId>
<scope>test</scope>
</dependency>
answered Apr 8, 2020 at 6:59
Mystic LinMystic Lin
3654 silver badges15 bronze badges
I got this error after a Git branch change. For the specific case of Eclipse, there were missed lines in the .settings directory for the org.eclipse.wst.common.component file. As you can see below.
Restoring the project dependencies with Maven install would help.
answered May 20, 2020 at 1:54
LeonardoLeonardo
1,4312 gold badges9 silver badges6 bronze badges
If you are using gradlew
, go to ./gradle/wrapper/gradle-wrapper.properties
and change distributionUrl
to the correct version of Gradle.
If you are using JDK14, try:
distributionUrl=https://services.gradle.org/distributions/gradle-6.3-bin.zip
answered Jun 28, 2020 at 12:25
ehacinomehacinom
7,8307 gold badges40 silver badges64 bronze badges
For Meteor or Cordova users,
It can be caused by the Java version you use. For Meteor and Cordova, stick with version 8 for now.
-
Check available Java versions
/usr/libexec/java_home -V
and look for the path name for Java version 8 -
Set the path for Java version 8
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home
-
Check if it is done
echo $JAVA_HOME
Go on and continue coding.
answered Jan 18, 2021 at 7:50
mcnkmcnk
1,5893 gold badges18 silver badges29 bronze badges
The Java 11 + Eclipse solution:
This solution is for you if you are not using module-info.java
in your Eclipse project, and you added the JAR files manually instead of using Maven/Gradle.
- Right click project → Build path → Configure build path → libraries tab
- Remove the problematic JAR file from the modulepath
- Add the JAR file to the classpath
More information is in
In Eclipse, what is the difference between modulepath and classpath?.
answered Apr 22, 2021 at 22:02
Mister SmithMister Smith
27.2k20 gold badges108 silver badges192 bronze badges
I deleted the folder «buid» and «out», and the IDE rebuild again this folders with updated content files.
answered Apr 7, 2022 at 13:25
The NoClassDefFoundError
is a runtime error in Java that occurs if the Java Virtual Machine (JVM) or a ClassLoader
instance attempts to load the definition of a class that could not be found. The class definition exists at compile-time but is not available at runtime.
What Causes NoClassDefFoundError
The NoClassDefFoundError
occurs in Java when the JVM is unable to find a particular class at runtime which was available at compile-time.
The definition of the class is attempted to be loaded as part of a normal method call or creating an instance of the class using the new
expression and no definition of the class could be found. Therefore, it can occur during the linking or loading of the unavailable class.
Common causes of the class definition being unavailable at runtime are:
- Missing JAR file
- Permission issues
- Incorrect classpath at runtime
NoClassDefFoundError Example
Here’s an example of a NoClassDefFoundError
thrown when a class is attempted to be loaded that is available at compile-time but not at runtime:
class Vehicle {
private String make;
public String getMake() {
return make;
}
public void setMake(String make) {
this.make = make;
}
}
public class NoClassDefFoundErrorExample {
public static void main(String args[]) {
Vehicle vehicle = new Vehicle();
vehicle.setMake("Audi");
System.out.println("Make = " + vehicle.getMake());
}
}
In the above example, an instance of the Vehicle
class is created in the NoClassDefFoundErrorExample.main()
method and one of its methods is called. When the NoClassDefFoundErrorExample
class is compiled and executed using the command line, it works fine and produces the correct output as expected:
$ ls
NoClassDefFoundErrorExample.class Vehicle.class
NoClassDefFoundErrorExample.java
$ javac NoClassDefFoundErrorExample.java
$ java NoClassDefFoundErrorExample
Make = Audi
Now, if the Vehicle.class
file is renamed and the NoClassDefFoundErrorExample
class is executed again without recompiling, the NoClassDefFoundError
is thrown:
$ mv Vehicle.class Vehicle2.class
$ ls
NoClassDefFoundErrorExample.class Vehicle2.class
NoClassDefFoundErrorExample.java
$ java NoClassDefFoundErrorExample
Exception in thread "main" java.lang.NoClassDefFoundError: Vehicle
at NoClassDefFoundErrorExample.main(NoClassDefFoundErrorExample.java:15)
Caused by: java.lang.ClassNotFoundException: Vehicle
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:602)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
... 1 more
How to Resolve NoClassDefFoundError
The following steps should be followed to resolve a NoClassDefFoundError
in Java:
- The most common reason for the
NoClassDefFoundError
is that a particular class is not available in the application classpath. Find out which JAR file contains the problematic class and check whether this JAR is present in the application classpath. If not, the JAR should be added to the classpath and the application should be recompiled and executed again. - If that JAR is already present in the classpath, make sure the classpath is not overridden (e.g. by a start-up script). After finding out the exact classpath used by the application, the JAR file should be added to it.
- Check the manifest file to see if the unavailable class is not defined in the Class-Path attribute. If so, it should be defined.
- The
NoClassDefFoundError
can also occur due to the failure of static initialization. Check for thejava.lang.ExceptionInInitializerError
in the application logs.
Track, Analyze and Manage Errors With Rollbar
Managing errors and exceptions in your code is challenging. It can make deploying production code an unnerving experience. Being able to track, analyze, and manage errors in real-time can help you to proceed with more confidence. Rollbar automates error monitoring and triaging, making fixing Java errors easier than ever. Sign Up Today!