Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline bravo1  
#1 Оставлено : 6 августа 2013 г. 14:57:55(UTC)
bravo1

Статус: Новичок

Группы: Участники
Зарегистрирован: 06.08.2013(UTC)
Сообщений: 3
Российская Федерация
Откуда: Москва

Добрый день.

При выполнении кода:

Код:

...
keyStore = KeyStore.getInstance(keyStoreType);
keyStore.load(null, null);
...


в JBoss получаю следующую проблему:

Код:

14:13:52,377 ERROR [stderr] (MSC service thread 1-7) java.lang.NullPointerException
14:13:52,377 ERROR [stderr] (MSC service thread 1-7) 	at ru.CryptoPro.JCP.tools.BasicLogger.a(Unknown Source)
14:13:52,377 ERROR [stderr] (MSC service thread 1-7) 	at ru.CryptoPro.JCP.tools.BasicLogger.enter(Unknown Source)
14:13:52,377 ERROR [stderr] (MSC service thread 1-7) 	at ru.CryptoPro.JCP.tools.JCPLogger.enter(Unknown Source)
14:13:52,378 ERROR [stderr] (MSC service thread 1-7) 	at ru.CryptoPro.JCP.KeyStore.JCPKeyStore.engineLoad(Unknown Source)
14:13:52,378 ERROR [stderr] (MSC service thread 1-7) 	at java.security.KeyStore.load(KeyStore.java:1185)


В logging.properties
Код:

...
logger.ru.CryptoPro.JCP.tools.JCPLogger.level=INFO
logger.ru.CryptoPro.JCP.tools.JCPLogger.useParentHandlers=true
...
handler.CONSOLE=org.jboss.logmanager.handlers.ConsoleHandler
handler.CONSOLE.level=INFO
handler.CONSOLE.formatter=CONSOLE
handler.CONSOLE.properties=autoFlush,target,enabled
handler.CONSOLE.autoFlush=true
handler.CONSOLE.target=SYSTEM_OUT
handler.CONSOLE.enabled=true
...


В Tomcat 6 такой ошибки нет - все работает на ура.

Windows 7, java 1.6.0_33, JBoss EAP 6.1.0.GA (AS 7.2.0.Final-redhat-8), jcp.1.0.55

Что еще нужно настроить, чтобы заработало в JBoss?
Offline Евгений Афанасьев  
#2 Оставлено : 7 августа 2013 г. 11:31:18(UTC)
Евгений Афанасьев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 06.12.2008(UTC)
Сообщений: 4,001
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 712 раз в 673 постах
Здравствуйте.
Попробуйте добавить
ru.CryptoPro.JCP.tools.level=INFO
Offline bravo1  
#3 Оставлено : 7 августа 2013 г. 13:34:37(UTC)
bravo1

Статус: Новичок

Группы: Участники
Зарегистрирован: 06.08.2013(UTC)
Сообщений: 3
Российская Федерация
Откуда: Москва

Добрый день.
Попробовал. Не помогло. Результат точно такой же.
Вот текст logging.properties jboss'а:
Код:

logger.level=INFO
logger.handlers=CONSOLE,FILE


com.arjuna.level=WARN
com.arjuna.useParentHandlers=true

jacorb.level=WARN
jacorb.useParentHandlers=true

org.jboss.as.config.level=DEBUG
org.jboss.as.config.useParentHandlers=true

org.apache.tomcat.util.modeler.level=WARN
org.apache.tomcat.util.modeler.useParentHandlers=true

sun.rmi.level=WARN
sun.rmi.useParentHandlers=true

jacorb.config.level=ERROR
jacorb.config.useParentHandlers=true



ru.CryptoPro.JCP.tools.level=INFO
ru.CryptoPro.JCP.tools.handlers=java.util.logging.ConsoleHandler

ru.CryptoPro.JCP.tools.JCPLogger.level=INFO
ru.CryptoPro.JCP.tools.JCPLogger.handlers=java.util.logging.ConsoleHandler



handler.CONSOLE=org.jboss.logmanager.handlers.ConsoleHandler
handler.CONSOLE.level=INFO
handler.CONSOLE.formatter=CONSOLE
handler.CONSOLE.properties=autoFlush,target,enabled
handler.CONSOLE.autoFlush=true
handler.CONSOLE.target=SYSTEM_OUT
handler.CONSOLE.enabled=true

handler.FILE=org.jboss.logmanager.handlers.PeriodicRotatingFileHandler
handler.FILE.level=ALL
handler.FILE.formatter=FILE
handler.FILE.properties=autoFlush,append,fileName,suffix,enabled
handler.FILE.constructorProperties=fileName,append
handler.FILE.autoFlush=true
handler.FILE.append=true
handler.FILE.fileName=C\:\\jboss\\standalone\\log\\server.log
handler.FILE.suffix=.yyyy-MM-dd
handler.FILE.enabled=true

formatter.CONSOLE=org.jboss.logmanager.formatters.PatternFormatter
formatter.CONSOLE.properties=pattern
formatter.CONSOLE.pattern=%K{level}%d{HH\:mm\:ss,SSS} %-5p [%c] (%t) %s%E%n

formatter.FILE=org.jboss.logmanager.formatters.PatternFormatter
formatter.FILE.properties=pattern
formatter.FILE.constructorProperties=pattern
formatter.FILE.pattern=%d{HH\:mm\:ss,SSS} %-5p [%c] (%t) %s%E%n


Замена
Код:
ru.CryptoPro.JCP.tools.handlers=java.util.logging.ConsoleHandler
на
Код:
ru.CryptoPro.JCP.tools.useParentHandlers=true
, чтобы было как у других logger'ов, приводит к той же ошибке.

Может я что-то делаю не так?
Offline bravo1  
#4 Оставлено : 12 сентября 2013 г. 9:38:53(UTC)
bravo1

Статус: Новичок

Группы: Участники
Зарегистрирован: 06.08.2013(UTC)
Сообщений: 3
Российская Федерация
Откуда: Москва

Удалось разобраться почему так происходит в JBoss AS 6.0.0.Final. В JBoss 7 думаю что-то похожее.

Может кому пригодится.

Если посмотреть, что происходит в методе ru.CryptoPro.JCP.tools.BasicLogger.a(...)
то можно увидеть следующее:

Код:
  private static boolean a(Logger paramLogger, Level paramLevel)
  {
    if (paramLogger != null)
    {
      Level localLevel = paramLogger.getLevel();
      if (localLevel == null)
        localLevel = paramLogger.getParent().getLevel();
      if (localLevel != null)
        return (paramLevel.intValue() >= localLevel.intValue());
    }
    return false;
  }


java.lang.NullPointerException выбрасывается при выполнении

Код:
paramLogger.getParent().getLevel();


потому как у paramLogger'а, при выполнении этого кода под JBoss AS 6.0.0.Final, нет ни level'а ни parent'а.


Кто виноват?


Виноват JBoss AS 6.0.0.Final - потому что использует свой собственный LogManager, в котором переопределен ряд методов.

Виноват JCP 1.0.55 - потому что создает JCPLogger не с помощью статического метода

Код:
Logger e = Logger.getLogger(...);


а просто:

Код:
Logger e = new JCPLogger();


В конструкторе при этом выполняется метод:

Код:
LogManager.getLogManager().addLogger(this);


который в классе java.util.LogManager кроме всего прочего занимается установкой logger'у и level'а и parent'а, но в org.jboss.logmanager.LogManager этот метод переопределен на вот такой:

Код:
	public boolean addLogger(java.util.logging.Logger logger)
	{
		return false;
	}

Т.е. в конструкторе JCPLogger'а при выполнении LogManager.getLogManager().addLogger(this) ни level ни parent не устанавливаются, что в итоге и приводит к java.lang.NullPointerException.


Что делать?

Вот один из вариантов (проверено - работает)

1. Распаковать jboss6\lib\jboss-logmanager.jar
2. Декомпилировать класс org\jboss\logmanager\LogManager.class
3. Изменить метод public boolean addLogger(java.util.logging.Logger logger)
4. Скомпилировать
5. Запаковать обратно в jboss6\lib\jboss-logmanager.jar
6. Заменить jboss6\lib\jboss-logmanager.jar на только что созданный.
7. Дополнительно надо достать из jboss6\bin\run.jar файл logging.properties в котором
7.1. В строку loggers добавить через запятую
ru.CryptoPro.JCP.tools,ru.CryptoPro.JCP.tools.JCPLogger
7.2. Добавить строчки
ru.CryptoPro.JCP.tools.JCPLogger.level=INFO
ru.CryptoPro.JCP.tools.level=INFO
7.3 Запихать полученный файл обратно в jboss6\bin\run.jar или в файл jboss6\bin\run.conf.bat в JAVA_OPTS добавить еще один параметр -Dlogging.configuration=file:%DIRNAME%logging.properties


Как-то так.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.