Ведение журнала оси Apache — ClassCastException при использовании его внутри плагина Jira

Мой плагин Jira 5.0 не работает со следующим исключением:

java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        ...
Caused by: java.lang.ExceptionInInitializerError
    at org.apache.axis.description.OperationDesc.<clinit>(OperationDesc.java:65)
    at com.xyz.germander.AddTestTrackLinkDialogAction.doConfirm(AddTestTrackLinkDialogAction.java:23)
    ... 148 more
Caused by: java.lang.ClassCastException: org.apache.commons.logging.impl.SLF4JLogFactory cannot be cast to org.apache.commons.logging.LogFactory
    at org.apache.axis.components.logger.LogFactory.getLogFactory(LogFactory.java:41)
    at org.apache.axis.components.logger.LogFactory.<clinit>(LogFactory.java:33)
    ... 150 more

Для справки, это метод, вызывающий ClassCastException:

private static final org.apache.commons.logging.LogFactory getLogFactory() {
    return (org.apache.commons.logging.LogFactory)
        AccessController.doPrivileged(
            new PrivilegedAction() {
                public Object run() {
                    return DiscoverSingleton.find(org.apache.commons.logging.LogFactory.class,
                                   org.apache.commons.logging.LogFactory.FACTORY_PROPERTIES,
                                   org.apache.commons.logging.LogFactory.FACTORY_DEFAULT);
                }
            });
}

... для дальнейшего справки, org.apache.commons.logging.LogFactory.FACTORY_DEFAULT — это «org.apache.commons.logging.impl.LogFactoryImpl», а FACTORY_PROPERTIES должно быть именем файла свойств для поиска, который в моей банке org.apache.commons.logging есть «commons-logging.properties».

Я попытался создать файл commons-logging.properties в каталоге ресурсов плагина; этот файл содержит это:

priority=1
org.apache.commons.logging.Log=org.apache.commons.logging.impl.LogFactoryImpl

... но, похоже, его игнорируют, поскольку getLogFactory() по-прежнему получает SLF4JLogFactory и не может его выполнить. Так это выглядит так:

  • Этот файл commons-logging.properties должен быть где-то еще.
  • Мне нужно установить класс ведения журнала как нечто другое
  • В противном случае проект неправильно сконфигурирован, может быть, на уровне Jira или, может быть, на уровне плагина, или, может быть, Maven или... Я даже не знаю

Я довольно тупик, и был бы признателен за любое руководство.

Аналогичный вопрос здесь , за исключением того, что плакат получал такое же исключение в getLogFactory при инициализации org.apache.axis.attachments.AttachmentsImpl вместо org.apache.axis.description.OperationDesc. (Тоже плагин Confluence, а не Jira.) Однако там никто не ответил.


person Turnsole    schedule 30.07.2012    source источник
comment
Удалось ли вам правильно реализовать ведение журнала в вашем плагине Jira? У меня есть аналогичный вопрос здесь answers.atlassian.com/questions/74097/   -  person sorin    schedule 21.11.2012
comment
У меня это сработало, когда я включил ось, как описано в принятом ответе здесь.   -  person Turnsole    schedule 22.11.2012
comment
Не могли бы вы привести простой пример кода ведения журнала, который работает с вашим плагином? Нечто подобное с answers.atlassian.com/questions/74097/? (что я пытаюсь решить)   -  person sorin    schedule 22.11.2012
comment
Конечно вещь. Я сейчас в отпуске, так что у меня его нет под рукой, но я сделал пометку, чтобы вернуться и опубликовать это. (Я также опубликую на Atlassian Answers, так как многие люди, кажется, сталкиваются с проблемами с ним.)   -  person Turnsole    schedule 26.11.2012


Ответы (2)


Включая только результаты axis-1.3-atlassian-1

java.lang.ClassNotFoundException: org.apache.axis.transport.http.AdminServlet

Из-за того, что моему приложению требуется AdminServlet, который включен в библиотеку оси appache. Наконец, когда я включил оба, он отлично работает со мной.

    <dependency>
        <groupId>org.apache.axis</groupId>
        <artifactId>axis</artifactId>
        <version>1.4</version>
    </dependency>
    <dependency>
        <groupId>axis</groupId>
        <artifactId>axis</artifactId>
        <version>1.3-atlassian-1</version>
        <scope>provided</scope>
    </dependency>
person amrjamil    schedule 20.09.2012
comment
Это интересно. Интересно, почему atlassian исключил AdminServlet? - person Turnsole; 20.09.2012

Открытия: Atlassian разветвил библиотеку осей, и Jira теперь использует axis-1.3-atlassian-1, а не последнюю ось-1.4 от Apache; axis-1.3-atlassian-1 использует версию Commons-Logging 1.0.4, а не 1.1.1, как у оси-1.4.

Изменение зависимости плагина от оси-1.4 до оси-1.3-atlassian-1 решило проблему. Я подозреваю, что SLF4JLogFactory может привести к org.apache.commons.logging.LogFactory в 1.0.4, но не в 1.1.1, но я не проверял это.

Если в Jira, обязательно укажите область зависимости как «предоставленную», иначе вы столкнетесь с проблемами из-за того, что материал загружается дважды. Вот фрагмент помпона:

    <dependency>
        <groupId>axis</groupId>
        <artifactId>axis</artifactId>
        <version>1.3-atlassian-1</version>
        <scope>provided</scope>
    </dependency>
person Turnsole    schedule 30.07.2012