1

我的 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 jar 中是“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。)但是没有人在那里回应。

4

2 回答 2

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>
于 2012-09-20T09:57:34.523 回答
1

发现:Atlassian 分叉了轴库,Jira 现在使用的是 axis-1.3-atlassian-1,而不是 Apache 最新的 axis-1.4;axis-1.3-atlassian-1 使用 1.0.4 版本的 commons-logging,而不是像 axis-1.4 那样的 1.1.1。

将插件的依赖关系从axis-1.4更改为axis-1.3-atlassian-1解决了这个问题。我怀疑 SLF4JLogFactory 可以在 1.0.4 中转换为 org.apache.commons.logging.LogFactory 而不是 1.1.1,但我还没有测试过。

如果在 Jira 中,请务必将依赖项的范围指定为“已提供”,否则您会因为内容被加载两次而遇到问题。这是一个 pom 片段:

    <dependency>
        <groupId>axis</groupId>
        <artifactId>axis</artifactId>
        <version>1.3-atlassian-1</version>
        <scope>provided</scope>
    </dependency>
于 2012-07-30T21:20:39.723 回答