Регистрация осей 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.) Никто там не ответил.

2 ответа

Решение

Открытия: Atlassian разветвил библиотеку оси, и Jira теперь использует axis-1.3-atlassian-1, а не последнюю ось-1.4 от Apache; axis-1.3-atlassian-1 использует версию регистрации общего использования 1.0.4, а не 1.1.1, как axis-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>

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

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

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

    <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>
Другие вопросы по тегам