Удалось разобраться почему так происходит в 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
Как-то так.